首页
下载应用
提交文章
关于我们
问卷:你怎么看自由微信?
🔥 热搜 🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
首页
下载应用
提交文章
关于我们
问卷:你怎么看自由微信?
🔥
热搜
🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
白石洲拆迁后,那些上学奔波的孩子都去哪儿了?
一个医保局长之死
给宠物做保姆的中国留学生
本以为吴京大儿子叫“吴所谓”够随意了,听到二儿子名字,真服了
法院4.2元拍卖一瓶雪碧,限自提!被执行人回应:没有更多可供执行财产
生成图片,分享到微信朋友圈
查看原文
其他
单机40万QPS,搜狗WF框架,今年最值得学习的开源代码
Original
58沈剑
架构师之路
2022-06-16
收录于合集
#开源
2 个
#高并发
6 个
#架构
75 个
职业生涯的前五年,基本上都在做
即时通讯
业务,由于业务的特殊性,吞吐量极大,时延不这么敏感,团队内部单独开发了一套纯异步omni框架。
学习omni框架内核,对职业生涯的提升极大,
协议设计与实现
,
底层网络通信
,
多线程同步与互斥
,
同步RPC
,
异步RPC
,
服务器框架
… 掌握了一套RPC内核原理与细节,基本上国内大部分公司的offer能手到擒来。
很多朋友问,如何学习RPC内核知识?
我的回答是,
直接看源码
。
代码面前,没有秘密,
看源码,写demo,单步调试
,比听任何大神吹牛,比看任何理论书籍,都来得直接。
又有朋友问,目前开源的brpc以及thrift,都太重了,有没有更轻量级的服务端框架呢?
这里,我强烈推荐,
搜狗开源的轻量级高性能服务器引擎WF
:
(1)看其代码,及其清爽易懂;
(2)demo简单,单步调试容易;
(3)doc比较全,doc与src同步更新,比起行业内一些“为了开源而开源”的KPI项目,显得有诚意多了;
个人觉得搜狗的WF框架,是目前国内开源的服务器引擎中
最适合学习的
。
画外音:文末有github地址。
这里,把自己的学习心得,以及大家可能关心的问题,简单聊一聊。
什么是WF,它是一个娱乐级框架,还是一个工业级框架?
WF,是搜狗开源的C++服务器引擎框架。
WF的设计目标是
:
轻量级,高性能
。
轻量级,是指简洁,搜狗几乎所有的C++后端服务,包含但不限于搜索,输入法,广告等都是基于这个框架,每天处理超过百亿的请求,它是一个已经
经过多年线上考验的工业级框架
。
轻量级, WF真的做到了吗?
大伙可以看下,用WF如何搭建http服务器:
这一段代码单步执行下来,IO线程,工作线程,任务队列,线程同步互斥机制,超时处理机制,异常处理机制… 对于一个服务器框架,基本就拿下七八成。
高性能,WF真的做到了吗?
大伙可以看下,WF的单机压测表现:
你没有看错,单机每秒50W的QPS,特别是高并发压测的情况下,比nginx和brpc表现都要好。
画外音:
(1)测试硬件:CPU 40 core @ 2.20GHz,内存192G,网卡25000Mb/s;
(2)并发配置:nginx auto进程数为40,brpc配置nthreads为40,WF配置16个poller线程与20个handler线程;
除了轻量级与高性能,WF还有哪些特点?
除了核心设计目标的两点,WF还有以下优势:
(1)易用性
相比go语言的简单,天下苦C++久矣,虽然C++后续也推出了各种简易用法,但并不是所有用户了解与掌握,目前WF的标准是C++11,把很多复杂性都进行了屏蔽。
用户再也不用关注连接池、线程池、文件句柄,以及各种异步通知机制,WF都进行了封装与细节屏蔽。
使用WF,
用户只需要关注两个核心概念
:
任务
(task)
与
任务流
(series)
。
(2)通信与计算一体的解决方案
大部分RPC框架着重解决通信的问题,而计算与任务调度框架需要用户自己实现,而WF框架则将二者融为一体,一并解决了。
WF把网络,CPU,磁盘IO,GPU,计时器,计数器都进行了封装,统一当成资源,使用者可以任意进行调度与组合,而不需要关注其底层的epoll,pthread,aio,cuda,timer_fd,count计数等。
(3)架构层次良好,非常方便业务逻辑的实现
WF对于业务逻辑处理进行了抽象:
第一,串行由任务组成;
第二,并行由串行组成;
第三,并行是一种任务;
任务和任务流是WF的基石,WF本身就是一套完备的、可以收敛的、容易控制的业务逻辑任务流模型。
(4)文档很全
除了轻量级,简单易用之外,其文档和demo非常齐全,对于新手及其友好。而且碰到代码中不明白的地方,可以直接联系开发小组,作者会直接和大家交流,避免二手消息。
这也是推荐WF成为大家学习上手的框架,很重要的原因。
可能有朋友会问,说框架太宏观,研究WF,具体能学到哪些技术内容呢?
简单的举几个例子:
(1)
学习错误处理
:为了提升性能,WF没有使用异常,研究WF能系统性学习错误处理,帮助我们写出极高质量的代码;
画外音:扪心自问,去掉异常,你写的代码会不会随时崩溃。
(2)
学习超时处理
:各种通信超时,任务超时,你真的理解其内核么?超时的原因与处理,WF是学习利器。
(3)
学习异步IO
:Linux支持非常高效的异步IO系统调度,如何使用这些异步IO去实现框架,去封装任务,实现业务逻辑任务流化,看看WF的玩法。
(4)
学习协议设计
:学习如何利用WF框架,实现brpc和thrift,实现自己自定义的client/server协议,实现自己的RPC系统。
(5)
学习计时器与计数器
:很有朋友timer和count用的非常多,但它底层是怎么实现的,值得深入研究。
(6)
学习服务治理
:WF有一套完整的服务治理方案,包含
服务路由,熔断与恢复,负载均衡,服务主备。可用于实现服务发现与服务网格
(service mesh)
系统。
画外音:这一部分,可以查看源码的upstream子模块。
(7)…
今年,看的最清爽的代码,最适合了解通信内核,RPC内核,调度框架内核的引擎,强烈推荐给大家。
欢迎大家Fork,欢迎大家标星。
地址
:https://github.com/sogou/workflow
Star
:1400+
画外音:WF还有很多优秀的设计,等待大家去挖掘。
阅读原文
,
直达代码
,好的代码,一起分享。
您可能也对以下帖子感兴趣
{{{title}}}
文章有问题?点此查看未经处理的缓存