1. go 项目源码
  2. 约329个Go服务, 历史约170人左右贡献过Go代码. 代码和目录规范性比较好, 代码生成工具建设比较好, 大家可以借鉴一下.
    对于一个Golang开发者来说, 入职B站, 我觉得大概2-3天就可以copy&&paste开始贡献业务代码了. 其他语言开发者,
    3-4天吧, 因为学习Golang花一天. B站Go不依赖CGO, 业务代码可以在windows编译通过! 启动!
    组件基本是基于开源组件封装. RPC基于grpc封装, 协议编码为proto, 没有我们通常那样的包头.
    服务注册与发现已经包装在RPC中. 注册使用自研的discovery, 基于类似url的方式去注册和寻址.
    数据存储多使用memcache, redis和DB. hbase也使用比较多. 用于鉴权, 用户数据存储. 对于一些kv数据,
    外部没有支持冷热分离的kv存储, hbase是一个非常好的选择: 基于HDFS, 热数据加载到内存, 列式存储, 强一致,
    可配置副本数. 消息队列为使用基于kakfa, 实现了redis协议的databus. 小文件存储: B站自己实现的bfs
    监控上报使用的是prometheus, 对于中小公司, 没法建设自己的监控组件, prometheus是很不错的选择. 简单浏览了下,
    这份代码在SQL上没有注入风险. 生产环境的配置并没有在这份代码中. 一个合格的开发者, 即使所有源码流出去,
    也不会对系统造成任何危害. 不过B站的代码似乎打点监控做的不是很多(可能没有太多的去强调?)

cmd: 放main.go和配置文件, 作为启动入口
conf: 放配置文件对应的golang struct, 使用的是toml
model: 放结构体, 比如Http参数转换用的struct, DB存储对应的struct, 各层之间传递用的struct
dao: data access object, 数据库访问方法, redis, memcache访问方法, 还有一些RPC调用也放在这里面
http: 提供http服务, 主要是提供协议转换, 聚合. 逻辑还是再service层做.
service: 对于后端服务来说, 该目录提供服务的实现, 对于http服务, 该目录提供http服务的实现.

所有的服务均遵守该目录结构. model层放VO, DO等, dao层用于数据层封装, 隔离本服务的领域逻辑与外部数据. http层提供协议转换. service实现具体逻辑.
比较像Java开发的模式, 可能在公司很多人不是很喜欢这样复杂的目录, 喜欢什么都放在一个目录下.
不过这样的分目录是一种比较好的实践. 各层分的清清楚楚, 一个服务从1个接口到10个接口, 都比较清晰. 对于服务改动来说,也比较好聚焦于某一层.

B站Golang技术栈分析
技术栈 技术选型 参考链接
RPC 基于grpc封装的warden框架, 已开源 https://github.com/bilibili/kratos
HTTP框架 基于gin封装的blade master框架, 已开源 同上
服务注册与发现 初期为zk, 后面逐步改为参考Spring Cloud体系Eureka自研的discovery 已开源 https://github.com/bilibili/discovery
存储 DB, redis, memcache, hbase存储一些用户kv信息和历史流水, 已封装好库 library/database/ client库已开源 https://github.com/bilibili/kratos
搜索 B站视频, 用户, 历史记录等使用es搜索, 客户端已封装在基础库中 library/database/elastic
小文件存储 毛剑个人研发的bfs, 已开源. https://www.toutiao.com/i6272104949560115714/ https://github.com/Terry-Mao/bfs
消息队列 基于kafka封装的databus
log 基于uber的zap封装的日志框架
配置及配置中心 支持从环境变量读取配置, 从toml中解析配置, 支持远程配置中心(自研, mysql存储, 本地落地,http协议, long poll, 客户端有更新事件, 类似于携程开源的Apollo)
监控 使用开源的prometheus, 框架和库(sql, redis, hbase等)中已预埋计数点和时间统计点, 同时也可以在业务逻辑中打点. library/stat/stat.go
trace trace似乎是基于agent的方式, 使用unix domain socket进行传送, 框架和库已预埋点. library/net/trace.go
研发流程管理 TAPD, 哈哈, 有相关的tapd struct信息
其中RPC, HTTP框架, 数据访问的一些库封装, 包括生成工具, 均以kratos项目在github开源了(https://github.com/bilibili/kratos Kratos是bilibili开源的一套Go微服务框架,包含大量微服务相关框架及工具)

B站目前使用及封装的中间件的详细介绍在Gopher China 2017 B站的分享有提到原理和使用情况.
https://mp.weixin.qq.com/s/4uA6iE7HC_SAfdIATAdrrA
bfs介绍
https://www.jianshu.com/p/923917220d23
B站运维体系发展
https://myslide.cn/slides/3840

bilibili go项目源码分析相关推荐

  1. 开源项目源码分析(Kickstarter-iOS )(一)

    开源项目源码分析(Kickstarter-iOS )(一) 1.Kickstarter开源项目简介 2. Kickstarter项目结构 2.1 Makefile 文件 2.2 Git submodu ...

  2. Phenotips 项目源码分析 [0]

    PhenoTips™ is a software tool for collecting and analyzing phenotypic information for patients with ...

  3. Unity huatuo示例项目源码分析与启发

    上一节我们安装huatuo的开发环境,然后运行示例项目,体验了huatuo做热更新,这节课我们来分析示例项目的源码,掌握huatuo做热更新的主要的步骤,让你自己的项目很好的基于huatuo来组织热更 ...

  4. frostwire项目源码分析

    Frostwire代码分析 Frostwire是一个基于其他许多优秀开源项目开发的一款文件分享软件.它的前身是LimeWire Gnutella客户端:但是已经有了很大的变动. 现在FrostWire ...

  5. 【Android Camera2】Camera2开源项目源码分析汇总

    一.简介 本篇文章为综述汇总类文章,包含后续文章即将分析的使用Camera2实现的开源项目 相关文章: Android Camera系列文章目录索引汇总 Android Camera2 综述 二.开源 ...

  6. pion ice项目源码分析

    前言 git 地址https://github.com/pion/ice ice 流程的介绍博客https://www.rongcloud.cn/blog/?p=4178 整个源码分析会直接根据ice ...

  7. 软件工程应用于实践:AJ-Report项目 源码分析(8)

    2021SC@SDUSC 本次分析的是report-ui\src\views\report\excelreport\designer处的代码 data () {return {activeName: ...

  8. python有趣小项目源码分析_推荐 10 个有趣的 Python 项目

    想成为一个优秀的开发者,没有捷径可走,势必要花费大量时间在键盘后. 而不断地进行各种小项目开发,可以为之后的大开发项目积攒经验,做好准备. 但不少人都在为开发什么项目而苦恼,因此,我为大家准备了10个 ...

  9. 软件工程应用于实践:AJ-Report项目 源码分析(7)

    2021SC@SDUSC 本次分析的是report-ui\src\views\report\bigscreen\designer\map中的代码 series: [{type: 'map',map: ...

最新文章

  1. OpenCV编程案例:使用轮廓函数检测连通区域
  2. Python 3.8 新特性全面解读
  3. IBASE read hierarchy
  4. 软件中的1、同步调用;2、回调;3、异步调用
  5. 【转】 linux的网络接口之扫盲
  6. CSS对字体单位的总结
  7. 京东健康上线“新冠病毒”核酸检测 在线预约服务
  8. oracle内连接时列的值是null,Oracle SQL - 比较空值时的JOIN性能
  9. 系统学习深度学习(三十五)--策略梯度(Policy Gradient)
  10. Confluence 6 配置备份
  11. Excel高级函数应用总结
  12. 深入了解现场服务软件的投资回报率(ROI)
  13. 原生Javascript实现拼图游戏
  14. linux字符驱动愚见
  15. 评价页面html,利用html与css制作5星好评页面
  16. 手把手教你Python+selenium爬虫百度文库源码+解析
  17. 个性化智能推荐(协同过滤算法)技术研究
  18. 成功解决ImportError: cannot import name ‘GloVe‘ from ‘torchtext.legacy.vocab‘
  19. 学习RNN-part2
  20. 二维数组malloc与free

热门文章

  1. 服务器查看网络端口,竟然有这么多命令
  2. centos7查看mysql端口号_centos7查看端口命令
  3. jp@gc - PerfMon Metrics Collector:服务器性能监测控件
  4. 怎么把自己的Android library上传到jCenter和Maven Central
  5. 上海亚商投顾早餐FM/0810
  6. 我是怎样向别人提问题的?
  7. CSDN等不及,终于开始动手自宫了
  8. iphone恢复模式_如何使用iPhone的人像模式
  9. Microsoft Office MSDT代码执行漏洞(CVE-2022-30190)复现“没”成功
  10. 电脑连接无线,出现感叹号,无法上网。