在前面剖析 IM 分层架构和 IM 服务架构等一系列文章中,我们知道 IM 后端团体可以抽象为三层,即入口层 Entry、业务逻辑层 Logic 和数据访问层 Das。
关于 Entry 和 Das 怎样举行设计,我们分别在《分层架构 IM 体系之 Entry 设计实现》和《分层架构 IM 体系之 Das 架构设计》 中举行分析息争说。本日我们剖析一下 Logic 中高效的单线程服务框架是怎样举行设计的。
对 Entry、Logic 和 Das 三层举行抽象后,三层之间的交互方式,见下图。
首先,Logic 接收 Entry 的请求包;
然后,Logic 请求 Das,并处理 Das 的返回;根据业务需求,Logic 与 Das 之间每每会存在多次交互;
末了,Logic 将效果复兴给 Entry。
上述是一个客户端发起一个请求后的根本处理流程,在这个根本流程中 Logic 的处理动作并不是连续的,而是多次等待 Das 的返回之后的分段处理动作; 那么多个客户端发起多个不同的请求后,Logic 应该怎样正确的处理呢?
最常规的处理方式是针对每一个客户端,Logic 启动一个独立的线程举行处理,在这个线程中完成上述图中(1)—(6)步完整的处理流程;这种方式是最容易理解,最容易落地,但也是性能最差的,只适合数量极少客户端(比如:低于50)的应用场景。
分析上图,很容易获得以下信息:
Logic 只与 Entry 和 Das 存在网络IO,除此之外 Logic 没有任何其他的 IO动作;