上篇介绍了一个简单的UDP服务框架,但是面对海量的请求,同步框架显然有点力不从心。于是在我接手好友系统的接口服务的时候,就采用了一个强大的异步框架——MCP框架。

MCP框架是一个多进程异步框架,支持UDP、TCP和http,结构很灵活,可以根据需要将各组件像搭积木一样组装。下面是MCP最基础的进程结构。分为3种进程:CCD、MCD和DCC。

CCD是面向客户端的进程,是服务的入口,负责处理前端的请求,维护连接,收发数据,并向MCD转发。其内部使用线程池实现对TCP请求的listen和accept。服务器内部进程之间使用flow(实际上是一个数字)来表示连接,因此CCD负责维护前端请求句柄和flow之间的映射关系。CCD一般根据端口和协议设置多个。

DCC是面向后端的进程,负责向其他服务发出请求。使用跟CCD类似实现方法,只是面向的是服务器。在经过协程改造的MCP框架中,DCC被去掉了,因为MCD通过协程就可以实现与后端的交互了。DCC跟后端的连接一般采用长连接,避免频繁创建和释放连接导致大量TIME_WAIT的情况。

MCD是服务器的核心进程,负责处理业务逻辑,通过epoll和回调函数实现异步。

进程之间通过MQ进行通信,MQ采用共享内存队列传输数据,而通过管道传输读写信号。如下图所示,进程首先把数据写入队列,当队列中的数据达到一定长度(避免每个请求都读取数据)时,MQ会通过管道传输一个字符。MQ的使用者只要通过epoll监听管道句柄,就可以及时地获得读写信号。

了解了MCP的基本原理,就可以根据业务的需要进程个性化的定制。例如因为MCD单进程可能有性能瓶颈,我们对其进行了扩展,改造成多MCD进程版本。如图所示,MCD后端派生出多个SUBMCD进程,SUBMCD进程负责处理真正的业务逻辑;而MCD进程退化成一个业务分发的程序,同时负责一些公共的业务逻辑,例如负责管理全局哈希表数据的超时清理(定期扫描超时节点,表太大的情况可以分次扫描,只要保持好扫描位置信息即可)。

SUBMCD直接跟CCD和DCC通信(图中省略了SUBMCD和CCD之间的MQ),通过配置文件设置,在服务初始化的时候就在各个需要通信的进程间创建好共享内存MQ。这样可以避免MCD成为通信瓶颈。

另外还派生出一个MONITOR进程,负责日志的收集和输出,还可以做其他一些耗时的操作,避免业务进程阻塞。

MCP框架兼有功能强大和性能卓越的优点。具体压测数据不太记得,在一个数据包转发服务中,QPS也在30W+。在使用上,有一定的学习成本,但是适用面非常广,可以说一个框架走天下。

后台服务器框架中的瑞士军刀——MCP的更多相关文章

  1. 后台开发小白必学服务器框架——UDPServer

    毕业后加入了一家大型的互联网公司的音视频产品部门做后台开发,其实我本身是学习自动化的,研究生的方向嵌入式系统,对互联网可是一知半解,因此能进入这样一个大公司还是很幸运的. 刚开始工作的半年应该是在上份 ...

  2. ASP.NET MVC搭建项目后台UI框架—8、将View中选择的数据行中的部分数据传入到Controller中

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  3. springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据

    springboot框架中集成thymeleaf引擎,使用form表单提交数据,debug结果后台获取不到数据 表单html: <form class="form-horizontal ...

  4. PHP使用frameset制作后台界面时,怎样实现通过操作左边框架,使右边框架中的页面跳转?

    左框架的链接,不仅要指定链接的文件名,还需要通过 target 属性指定要打开的目标框架名(即楼主要求的右框架名). 例:假设右框架为 <frame scr="lx1.htm" ...

  5. 跟着拉大锯大神学Android——网络编程中运行后台服务器端口占用问题

    拉大锯网页地址:https://www.sunofbeach.net/u/1153952789488054272 跟着拉大锯大神学Android,在学到网络编程时,使用了大神搭建的用于学习的后台服务器 ...

  6. ASP.NET MVC搭建项目后台UI框架—5、Demo演示Controller和View的交互

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  7. ASP.NET MVC搭建项目后台UI框架—6、客户管理(添加、修改、查询、分页)

    目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NE ...

  8. ASP.NET MVC搭建项目后台UI框架—7、统计报表

    ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET M ...

  9. Web API应用架构在Winform混合框架中的应用(1)

    在<Web API应用架构设计分析(1)>和<Web API应用架构设计分析(2)>中对WebAPI的架构进行了一定的剖析,在当今移动优先的口号下,传统平台都纷纷开发了属于自己 ...

随机推荐

  1. SQL注入靶场sqli-labs 1-65关全部通关教程

    以前说好复习一遍 结果复习到10关就没继续了 真是废物 一点简单的事做不好 继续把以前有头没尾的事做完 以下为Sqli-lab的靶场全部通关答案 目录: less1-less10 less10-les ...

  2. PowUp渗透脚本基本模块

    PowUp脚本也位于PowerSploit下Privesc模块下 通常,在 Windows 下面我们可以通过内核漏洞来提升权限,但是,我们常常会碰到所处服务器通过内核漏洞提权是行不通的,这个时候,我们 ...

  3. JS实现生成一个周对应日期数组

    /* 获取日期和周 */ getDateWeek() {/* 得到当前日期的时间戳 */ const timestamp = Date.now() // const timestamp = new D ...

  4. 2. Rsync-远程同步(上)

    课程大纲: 1.什么是备份? 就是给源文件 增加 一个 副本. U盘 D --> E 2.为什么要做备份? 1.数据重要? 2.防止误操作 3.能够快速恢复 3.能不能不做备份? 可以, 不重要 ...

  5. 音视频入门-12-手动生成一张PNG图片

    * 音视频入门文章目录 * 预热 上一篇 [PNG文件格式详解]详细介绍了 PNG 文件的格式. PNG 图像格式文件由一个 8 字节的 PNG 文件署名域和 3 个以上的后续数据块(IHDR.IDA ...

  6. 课堂练习 Word count

    1. 团队介绍 团队成员:席梦寒,胡琦 2. 项目计划 我们选第一.二个功能点进行编程. 具体计划: (1).首先爬取网站内容及网页长度: (2).对爬取的文件内容进行word count操作: 3. ...

  7. Ubuntu 14.04 kylin 安装 OpenCV 2.4.9|3.0.0

    首先安装依赖 sudo apt-get -y install libopencv-dev sudo apt-get -y install build-essential checkinstall cm ...

  8. python的GIL锁

    进程:系统运行的一个程序,是系统分配资源的基本单位. 线程:是进程中执行运算的最小单位,是处理机调度的基本单位. 处理机:是计算机中存储程序和数据,并按照程序规定的步骤执行指令的部件.包括中央处理器. ...

  9. 【阿里云IoT+YF3300】8.物联网设备用户脚本开发

    除了我们必须熟悉的网页脚本,比如JavaScript.其实在工业自动化中,组态软件是必备脚本的,只是有的脚本语言风格类似C或类似Basic而已.比如昆仑通泰的组态屏中的组态软件.通过安装组态软件可以简 ...

  10. 汇编语言——物理地址=段地址x16+偏移地址,检测点2.2

    一.为什么 物理地址=段地址x16+偏移地址? 刚开始学时,我都笨到不明白为什么是2的N次方,咱把物理地址就当数字,计算机中数字是由很多位0或1自由组合的, 而每一位上要么是0要么是1,只有这两种情况 ...