b站泄露的openbilibili源码,框架大致解读
2021/9/11 11:07:01
本文主要是介绍b站泄露的openbilibili源码,框架大致解读,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
b站泄露的openbilibili源码,网上到处都是,比如 https://gitee.com/guiyunweb/openbilibili
关于在Goland IDE里读这个openbilibili项目方便自动跳转到定义处以调用处,直接把这个项目放到go path下,注意要把名字openbilibili改成go-common 比如我gopath是/home/zjsxwc/go 那么项目代码目录就是 /home/zjsxwc/go/src/go-common/ 然后goland打开这个目录项目就行。
每个功能模块都会被编译成一个可执行文件,见app/main/service/<功能模块名>/cmd/main.go
这个可执行文件,会对外提供三种调用, 1. http接口 2. 内部基于tcp直接调用的b站自己写的gorpc 3. 各个语言都通用的grpc
实际业务实现在 app/main/service/<功能模块名>/service/<各个文件>.go 中,
一般都会至少提供一个叫/ping的http接口用于监控和一个 /register 的http接口提供用于服务注册发现的数据。
每个队列的job也被编译成了可执行文件,见 app/job/main/<功能模块名>/cmd/main.go 以及 app/job/main/<功能模块名>/service/service.go中,一般job的线程函数在consumeproc,
cmd/main.go还会对外提供http接口控制,一般都会至少提供一个叫/ping的http接口用于监控。
有些接口会有缓存与真实实现多个出现,真实实现以Raw开头,比如 RawUserCoin() 就是通过sql查数据库的,而不以Raw开头的UserCoin()是通过缓存或者rpc获取数据
涉及数据库事务包裹的sql方法会以Tx开头,比如TxUpdateCoins
b站代码对于高频率接口请求,会使用的队列配合cache缓存实现:
比如被点赞加币,就会
同时 --------> 不阻塞发起队列异步job -> 更新cache中的用户币数目
+++++++++++++++|
+++++++++++++++|
同时 --------> job中更新数据库的用户真实币数目
一般job下的DAO(在app/job/main/<功能模块名>/dao/<各个文件>.go)都是直接数据库操作,而service下的DAO(在 app/main/service/<功能模块名>/dao/<各个文件>.go)则会涉及rpc、缓存、队列、数据库等多种数据来源
代码中的毒屎:
队列的databus中library/queue/databus/databus.go:59 redis的命令被故意写错,把PUBLISH写错了set,把SUBSCRIBE写错了mget
_cmdPub = "SET" _cmdSub = "MGET"
redis.ByteSlices(c.Do(_cmdSub, "")) 这条被订阅subscribe的主题被故意写成空字符串。
这篇关于b站泄露的openbilibili源码,框架大致解读的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-10-05小米13T Pro系统合集:性能与摄影的极致融合,值得你升级的系统ROM
- 2024-10-01基于Python+Vue开发的医院门诊预约挂号系统
- 2024-10-01基于Python+Vue开发的旅游景区管理系统
- 2024-10-01RestfulAPI入门指南:打造简单易懂的API接口
- 2024-10-01初学者指南:了解和使用Server Action
- 2024-10-01Server Component入门指南:搭建与配置详解
- 2024-10-01React 中使用 useRequest 实现数据请求
- 2024-10-01使用 golang 将ETH账户的资产平均分散到其他账户
- 2024-10-01JWT用户校验课程:从入门到实践
- 2024-10-01Server Component课程入门指南