跟我学代码架构设计模式之--服务高并发高吞吐架构设计基本原理

首先我说的设计是指的最大限度提高单机单节点的服务吞吐和并发。

我们设计一个服务器程序,自用户层->业务实现层->操作系统层,我们要明确的前提或限制有如下:

1 服务程序要保证高吞吐量!服务程序要为用户服务,应该尽可能多的接收和处理用户的业务处理请求

2 对于每个业务处理,业务层面的等待和阻塞不可以避免!(因为业务上获取任何资源数据都是需要时间的,比如数据库访问)

3 在操作系统层面阻塞线程和多开线程的开销很大!(占用内存资源和调度切换计算资源)

通过上面的前提,我们可以得到结论:

服务和业务层面的高吞吐、高并发不能通过直接使用操作系统层面的线程来保证!

但是我们的业务实现根本上还是必须要使用操作系统线程来实现的,我们只有在设计服务业务实现代码的时候,避免阻塞操作系统线程即可!这就是我们的本质思路和解决方案!

具体解决方案分析:

对于上面我说的前提条件1,即业务层面的业务阻塞不可避免,那么我们只要在设计服务的时候做一个“中间抽象层”阻断业务阻塞操作系统线程阻塞的直接关联就可以了!

如何实现这个中间层?

方案1:最直观的方案,业务代码中设计一套子调度中间层,这个中间层

1 对操作系统层,只用有限个线程,而且绝对不会阻塞操作系统线程

2 对业务层,提供可以被业务阻塞的执行单位封装

3 实现对业务层可阻塞执行单位到操作系统线程的对接和调度,至少应实现遇到执行单位阻塞的时候切换到其他执行单位的功能!

方案2:业务异步和事件化

1 对操作系统层,也是只用有限个线程,而且绝对不会阻塞操作系统线程

2 对业务层,进行业务拆分:大业务拆分成一个个完全非阻塞的业务片段,业务片段之间的执行时间差就是业务的阻塞时间,我们通过额外的线程轮询监听和产生事件,事件用来耦合一个大业务的多个非阻塞小业务片段,这样就实现了业务层面的阻塞和操作系统线程层面的非阻塞!

(完)

发布了63 篇原创文章 · 获赞 25 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/w1857518575/article/details/86654566
今日推荐