李龙-hertz分层设计
hertz是什么?
是字节内部超大规模使用的高性能Golang HTTP框架
内部支持17k+的业务服务、峰值QPS超过7000万
Hertz
Hz:Hertz对外提供的代码生成工具(脚手架)(Scaffold)(Pb)
Common:提供的通用实现类。Log:打印框架内部错误 Tracing:面对内部关键信息。
Metrics:打点监控,Test:写单元测试
应用层:server和client。
路由层:
协议层:interface 方式解耦。可以通过HTTP/1.1 /2 /3 和Websocket协议。也可以进行自定义协议
传输层:自研的类库
Hertz提供了Hz脚手架工具,可以根据接口定义自动化生成项目骨架,帮助业务聚焦核心逻辑。(查看Hertz的官方文档)
网络层拓展
1、基于连接的网络库 CloudWeGo开源的Netpoll(不支持windows)。Golang原生的网络库net(windows默认使用)
2、基于流的网络库:quic-go网络库(主要是为了Http3)
高性能benchmark
这个就是论证不同的几种内容的比较,
字节服务网络依靠CloudWeGo抗住流量洪峰!
cpu开销 4k->2.5k
Goroutine数量 6w->不到100个
火焰图:框架开销几乎消失
(!重要)答疑:
redis学习推荐:redis源码实战,《redis设计与实现》很老但是很实在。
基础会比较重要一些。
多关于一些github和一些前沿、论坛。这些内容会比较新一些,也会比较贴合实际。
锻炼代码能力:crud,看常见的项目,自己做一个类似的。要持续的迭代和去写。要把自己的代码开源出去,给更多的人去了解和学习、交流。
自己做一个业务逻辑很简单、很简陋的项目。但是自己要经常去迭代,并且经常去思考。
书籍:豆瓣看下评分,经典的书籍看一本就够了。
比起语言和框架。语言的基础更重要一些。
计算机网络,tcp三次握手。看下操作的过程。不能纯看书,要结合实际。
《计算机...卷一卷二卷三》。基础比什么都重要,crud相对来说不太重要。
我个人什么都比较喜欢看一些,这些对我用处不太大。herz对我的吸引力不太大。
我个人现在做的工作和程序员的关系不大。主要喜欢的是青训营的那种纯粹和陪伴。工作是工作,而下班以后,看看课程是个人的兴趣。或许我未来不会从事程序员相关的职业,但是我真的很希望写代码,也希望以后有机会能当一个程序员。期待以后和各位优秀的人公事!