第一张: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)回包逻辑

  1. 轮询shm。同样是在 CDefaultProxy 中的realrun方法中,it->second->poll(true)监听回包共享内存;
  2. 监听到有回包。CShmCommupoll方法,如果有mem_queue_pop_nm出来
  3. sendto回客户端。ctor_recvdata中CTSockCommu中的CTSockCommu

第三张: worker是如何处理业务请求的?

如果理解了proxy的处理逻辑,那么再来看worker的逻辑就稍微简单了:
1. 从shm读取请求数据。
2. 调用执行业务代码。
3. 回写shm。
4. proxy从shm读取数据,响应给客户端。

三张图-帮助理解腾讯开源毫秒服务引擎msec源码相关推荐

  1. 首个腾讯开源毫秒服务引擎msec的Hello World程序

    前言 第一时间看到腾讯开源了毫秒服务引擎msec,就迫不及待想体验尝试一番,经过两天的折腾,总算是初步搭建好了,并成功输出了第一个hello word程序,搭建过程中遇到了各种编译问题,配置文件问题, ...

  2. 三张图助您掌握OTN分层结构

    OTN(Optical Transport Network,光传送网)是一个层次化网络,业务信号在不同层次之间进行传输. 根据ITU-T国际电信联盟规定,OTN分为7层结构: 客户信号层:指OTN网络 ...

  3. 我画了近百张图来理解红黑树

    文章已同步发表于微信公众号JasonGaoH,我画了近百张图来理解红黑树,文章略有修改. 之前在公司组内分享了红黑树的工作原理,今天把它整理下发出来,希望能对大家有所帮助,对自己也算是一个知识点的总结 ...

  4. 【笔记】三张图读懂机器学习:基本概念、五大流派与九种常见算法

    文章目录 [笔记]三张图读懂机器学习:基本概念.五大流派与九种常见算法 Chapter 1: A look at Machine learning 1.What is it? 2.How does m ...

  5. c语言k1什么意思啊,一张图告诉你斐讯路由器K1S、K2,K2C的区别-路由器交流

    目前斐讯免费0元购的路由器,已经出了4款,按上市时间分别是K1,K2,K1S,K2C.不知以后会不会再出多3款,这样凑全7款,估计能够呼唤出强大的神龙. K2C跟K1S,我没找出差异.除了少一个LAN ...

  6. 三张图看微软业务:Office是最大收入来源

    作为上市公司,除了应该披露的信息以外微软(32.79, -0.85, -2.52%)并不喜欢透露太多其他信息.但今天微软似乎比较慷慨地贡献了下面三张图: 第一图反映的是客户分布情况.从图中可见,微软5 ...

  7. 解释次贷危机的三张图

    最近学校的@b服务用完了,用@a怎么着都登不上csdn,郁闷,这三张图很早就想发的,蛮有意思的.

  8. 腾讯QQ团队开源分布式后台毫秒服务引擎全解析:引擎架构、RPC、灰度……

    腾讯QQ团队将于12月4日开源一个服务开发运营框架,叫做毫秒服务引擎(Mass Service Engine in Cluster,MSEC),它集RPC.名字发现服务.负载均衡.业务监控.灰度发布. ...

  9. Java开源生鲜电商平台-深刻理解电商的库存架构与解决方案(源码可下载)

    https://www.cnblogs.com/jurendage/p/9227283.html 说明:一般电商的库存都是跟SKU相关联的,那么怎么样才能进行SKU的库存管理呢?有以下几种方式与方法: ...

最新文章

  1. android 编程klinon,android - 您尚未接受以下SDK组件的许可协议
  2. (六)java多线程之ReadWriteLock
  3. Shell命令-搜索文件或目录之whereis、locate
  4. 用计算机弹剪刀刺客,刺客伍六七:阿七使用过的四种武器,剪刀最常用,这个需要臂力!...
  5. 初识react中高阶组件
  6. mogodbshell中数组对象查询修改方法
  7. 计算机学院志愿公益活动,计算机学院开展学雷锋主题公益活动
  8. 【一起学OpenFOAM】04 OpenFOAM的学习资源
  9. Selenium WebDriver的工作原理
  10. 使用WinAPI替代System.IO.Directory
  11. javascript在IE和Firefox下的不同之处
  12. 《设计心理学》读书笔记
  13. 批量提取PDF和图片发票信息 2.2
  14. 理科生学酒店管理好一点还是计算机,酒店管理专业是文科还是理科
  15. 使用TensorFlow搭建智能开发系统,自动生成App UI代码
  16. 非阻塞模式下 SEND 和 RECV 函数的返回值总结
  17. SecureCRT 设置黑底白字和编码
  18. 参加过知了堂成都Java培训后,需要多久能达到年薪十万?
  19. 影响服务器高性能的四大杀手
  20. Yuan先生博客-Django基础

热门文章

  1. fpga时序逻辑(三段式状态机模板、rom实现、边沿检测)
  2. 使用scp命令上传文件到linux服务器
  3. RK3326 RESET按键进入loader
  4. CMDB建设(一)对CMDB的一些看法
  5. 计算机理论学习之计算机简史
  6. 管理系统页面布局 html,二十五个精美的后台管理界面模板和布局
  7. vue项目中 axios 请求成功 却进入catch中
  8. html移动端最小字体大小,踩坑之移动端显示字体大小问题
  9. linux snap exe,在Linux系统上安装官方Snap Store应用程序
  10. 淘宝/Tmall商品详情页视频数据接口(视频数据,销量数据,sku属性数据,页面上有的数据均可以拿到,支持高并发)