三张图-帮助理解腾讯开源毫秒服务引擎msec源码
第一张:UML图
链接:https://www.processon.com/view/link/5852139ce4b05a02846e5c11
(虚线表示基类)
不是我故意画得那么复杂,而是原本就那么复杂。
核心class介绍:
两个基类:
- CFrame:框架公共类,主要包括框架日志对象、框架监控日志对象、框架统计对象;
- CServerBase:服务器程序基础类,包含运行环境初始化、日志、统计、监控对象
三个进程,都继承以上两个基类:
- controller进程:CDefaultCtrl类,主要负责controller,通过消息队列来监控proxy和worker的健康度
- proxy进程:CDefaultProxy类,负责接受用户请求,讲请求数据写入到共享内存
- worker进程: CDefaultWorker类,业务处理逻辑,从共享内存中读取请求数据,进行业务处理完成后,写回到共享内存。
其他核心class
- CTCommu(通讯类抽象接口)
- CTSockCommu(网络通信类):网络监听,接收网络请求,epoll操作
- CShmCommu(共享内存操作类):共享内存相关操作类,和
CTSockCommu
都继承于CTCommu
,也实现了poll
方法,这里的poll只是从共享内存中获取数据,和unix底层的poll
不同,比较容易误导.
- CMQCommu(消息队列通讯类):controller进程通过消息队列**监控**proxy进程和worker进程.
启动后的进程:
第二张: proxy接收客户端请求的流程是怎样的?
进程启动后,会生成有两个共享内存(shm),一个保存网络请求数据,另一个保存处理后的回包数据。
proxy进程主要的任务是两块:接收客户端请求 和 从共享内存取出处理完的数据回包给客户端:
(1)接收请求逻辑
proxy进程起来后,执行 CDefaultProxy
中的realrun
方法, CDefaultProxy
有两个核心成员变量:
CTCommu* ator_;//接受者
map
(2)回包逻辑
- 轮询shm。同样是在
CDefaultProxy
中的realrun
方法中,it->second->poll(true)
监听回包共享内存; - 监听到有回包。
CShmCommu
的poll
方法,如果有mem_queue_pop_nm
出来 - sendto回客户端。ctor_recvdata中
CTSockCommu
中的CTSockCommu
第三张: worker是如何处理业务请求的?
如果理解了proxy的处理逻辑,那么再来看worker的逻辑就稍微简单了:
1. 从shm读取请求数据。
2. 调用执行业务代码。
3. 回写shm。
4. proxy从shm读取数据,响应给客户端。
三张图-帮助理解腾讯开源毫秒服务引擎msec源码相关推荐
- 首个腾讯开源毫秒服务引擎msec的Hello World程序
前言 第一时间看到腾讯开源了毫秒服务引擎msec,就迫不及待想体验尝试一番,经过两天的折腾,总算是初步搭建好了,并成功输出了第一个hello word程序,搭建过程中遇到了各种编译问题,配置文件问题, ...
- 三张图助您掌握OTN分层结构
OTN(Optical Transport Network,光传送网)是一个层次化网络,业务信号在不同层次之间进行传输. 根据ITU-T国际电信联盟规定,OTN分为7层结构: 客户信号层:指OTN网络 ...
- 我画了近百张图来理解红黑树
文章已同步发表于微信公众号JasonGaoH,我画了近百张图来理解红黑树,文章略有修改. 之前在公司组内分享了红黑树的工作原理,今天把它整理下发出来,希望能对大家有所帮助,对自己也算是一个知识点的总结 ...
- 【笔记】三张图读懂机器学习:基本概念、五大流派与九种常见算法
文章目录 [笔记]三张图读懂机器学习:基本概念.五大流派与九种常见算法 Chapter 1: A look at Machine learning 1.What is it? 2.How does m ...
- c语言k1什么意思啊,一张图告诉你斐讯路由器K1S、K2,K2C的区别-路由器交流
目前斐讯免费0元购的路由器,已经出了4款,按上市时间分别是K1,K2,K1S,K2C.不知以后会不会再出多3款,这样凑全7款,估计能够呼唤出强大的神龙. K2C跟K1S,我没找出差异.除了少一个LAN ...
- 三张图看微软业务:Office是最大收入来源
作为上市公司,除了应该披露的信息以外微软(32.79, -0.85, -2.52%)并不喜欢透露太多其他信息.但今天微软似乎比较慷慨地贡献了下面三张图: 第一图反映的是客户分布情况.从图中可见,微软5 ...
- 解释次贷危机的三张图
最近学校的@b服务用完了,用@a怎么着都登不上csdn,郁闷,这三张图很早就想发的,蛮有意思的.
- 腾讯QQ团队开源分布式后台毫秒服务引擎全解析:引擎架构、RPC、灰度……
腾讯QQ团队将于12月4日开源一个服务开发运营框架,叫做毫秒服务引擎(Mass Service Engine in Cluster,MSEC),它集RPC.名字发现服务.负载均衡.业务监控.灰度发布. ...
- Java开源生鲜电商平台-深刻理解电商的库存架构与解决方案(源码可下载)
https://www.cnblogs.com/jurendage/p/9227283.html 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: ...
最新文章
- android 编程klinon,android - 您尚未接受以下SDK组件的许可协议
- (六)java多线程之ReadWriteLock
- Shell命令-搜索文件或目录之whereis、locate
- 用计算机弹剪刀刺客,刺客伍六七:阿七使用过的四种武器,剪刀最常用,这个需要臂力!...
- 初识react中高阶组件
- mogodbshell中数组对象查询修改方法
- 计算机学院志愿公益活动,计算机学院开展学雷锋主题公益活动
- 【一起学OpenFOAM】04 OpenFOAM的学习资源
- Selenium WebDriver的工作原理
- 使用WinAPI替代System.IO.Directory
- javascript在IE和Firefox下的不同之处
- 《设计心理学》读书笔记
- 批量提取PDF和图片发票信息 2.2
- 理科生学酒店管理好一点还是计算机,酒店管理专业是文科还是理科
- 使用TensorFlow搭建智能开发系统,自动生成App UI代码
- 非阻塞模式下 SEND 和 RECV 函数的返回值总结
- SecureCRT 设置黑底白字和编码
- 参加过知了堂成都Java培训后,需要多久能达到年薪十万?
- 影响服务器高性能的四大杀手
- Yuan先生博客-Django基础
热门文章
- fpga时序逻辑(三段式状态机模板、rom实现、边沿检测)
- 使用scp命令上传文件到linux服务器
- RK3326 RESET按键进入loader
- CMDB建设(一)对CMDB的一些看法
- 计算机理论学习之计算机简史
- 管理系统页面布局 html,二十五个精美的后台管理界面模板和布局
- vue项目中 axios 请求成功 却进入catch中
- html移动端最小字体大小,踩坑之移动端显示字体大小问题
- linux snap exe,在Linux系统上安装官方Snap Store应用程序
- 淘宝/Tmall商品详情页视频数据接口(视频数据,销量数据,sku属性数据,页面上有的数据均可以拿到,支持高并发)