就因为他了解Reactor模式,他的同事们都被裁员了

简介: 就因为他了解Reactor模式,他的同事们都被裁员了

640.png

Reactor模式-IO模式

大家可能都了解很多种设计模式,但是对于我们常用的组件的设计模式了解比较少,甚至有很多人不知道组件为什么还有设计模式,比如常见的Ng和Redis都采用了Reactor模式,只有了解了这种模式,你才会发现NB的服务它的精华所在,你了解的越多,你口袋里的钱越多


1. Reactor 模式



在传统的应用服务端设计当中,基本都是采用每个连接每个线程处理模式,这样请求少了都好说,可是一旦请求上来了,比如超过1w的request到达服务端,那么就会消耗1w个thread去处理请求,处理结束之后就会销毁这些线程,但是后续还有高并发请求到来,继续创建线程,而这无疑会加速耗尽服务器资源的速度,使得服务没办法处理后续的请求。


后来随着服务架构的发展和升级,就用线程池去做这个事情,每当有请求到来,立马从线程池获取线程去处理请求,直到线程池没有一个线程可用。为什么有线程池的设计呢?因为第一:线程池可以规避线程频繁的创建和销毁;第二:线程池有上限,比如1024,你最多只能处理这么多,这样可以防止无限开辟线程而导致服务资源耗尽挂掉。


但这毕竟还是有瓶颈的,因为线程池能够处理的并发有限,如何保证能用有限的资源去处理更多的请求呢?


这里就引入了Reactor模式,我们用餐厅顾客服务员举例,让大家了解下上面说的整个流程。


餐厅Reactor模式


我们用“餐厅”类比的话,就像下图:

640.png


对于每个新来的顾客,前台都需要找到一个服务员和厨师来服务这个顾客。

  1. 服务员给出菜单,并等待点菜
  2. 顾客查看菜单,并点菜
  3. 服务员把菜单交给厨师,厨师照着做菜
  4. 厨师做好菜后端到餐桌上


这就是传统的多线程服务器。每个顾客都有自己的服务团队(线程),在人少的情况下是可以良好的运作的。现在餐厅的口碑好,顾客人数不断增加,这时服务员就有点处理不过来了。

这时老板发现,每个服务员在服务完客人后,都要去休息一下,因此老板就说,“你们都别休息了,在旁边待命”。这样可能 10 个服务员也来得及服务 20 个顾客了。这也是“线程池”的方式,通过重用线程来减少线程的创建和销毁时间,从而提高性能。

但是客人又进一步增加了,仅仅靠剥削服务员的休息时间也没有办法服务这么多客人。老板仔细观察,发现其实服务员并不是一直在干活的,大部分时间他们只是站在餐桌旁边等客人点菜。


于是老板就对服务员说,客人点菜的时候你们就别傻站着了,先去服务其它客人,有客人点好的时候喊你们再过去。对应于下图:


640.png


最后,老板发现根本不需要那么多的服务员,于是裁了一波员,最终甚至可以只有一个服务员


这就是 Reactor 模式的核心思想:减少等待。当遇到需要等待 IO 时,先释放资源,而在 IO 完成时,再通过事件驱动 (event driven) 的方式,继续接下来的处理。从整体上减少了资源的消耗


强烈推荐大家看这篇文章,强烈推荐,强烈推荐 https://www.cnblogs.com/xiaolincoding/p/14706824.html

其次看下这篇文章 https://www.s0nnet.com/archives/deep-understanding-of-reactor-design-patterns


相关文章
|
4月前
|
缓存 Java 开发者
开发故事:一个 @Async 如何搞瘫整个微服务系统
大家好,我是小米,一个热爱分享技术的29岁开发者。本文讲述了一个困扰我们团队的开发环境问题,最终发现罪魁祸首竟是 `@Async` 注解。我们通过详细分析错误日志和 Spring 的 Bean 代理机制,逐步排查并解决了这一难题。文章介绍了三种解决方案:调整依赖结构、使用 `@Lazy` 延迟加载以及禁用 `@Async` 的代理功能。希望对你有所帮助!欢迎关注我的微信公众号“软件求生”,获取更多技术干货!
44 5
开发故事:一个 @Async 如何搞瘫整个微服务系统
|
8月前
|
设计模式 架构师 Java
2024到来!一到五年Java工程师想跳槽,大环境不好,怎么破?
会不会因为裁员潮,市场上工作机会比往年跳槽季更少,同时求职者因为失业或裁员潮带来的恐慌心理,很多人在找工作时更怕错过机会而不做过多思考和选择就入职。这样的形势下跳槽或者求职时,该如何判断和做出选择?
|
弹性计算 Java Unix
搭稳Netty开发的地基,用漫画帮你分清同步异步阻塞非阻塞
Netty Netty是一款非常优秀的网络编程框架,是对NIO的二次封装,本文将重点剖析Netty客户端的启动流程,深入底层了解如何使用NIO编程客户端。 Linux网络编程5种IO模型 根据UNIX网络编程对于IO模型的分类,UNIX提供了5种IO模型,分别是 阻塞IO 、 非阻塞IO、 IO复用 、 信号驱动IO 、 异步IO 。这几种IO模型在《UNIX网络编程》中有详解,这里作者只简单介绍,帮助大家回忆一下这几种模型。 对于Linux来说,所有的操作都是基于文件的,也就是我们非常熟悉的fd,在缺省的情况下,基于文件的操作都是 阻塞的 。下面就通过系统调用 recvfrom 来回顾下
117 0
|
Java 测试技术 API
美团java研发岗二面:微服务问题被虐哭了,直到看到这些知识点
微服务架构基于一个概念,其中所有服务应该能够彼此交互以构建业务功能。因此,要实现这一点,每个微服务必须具有接口。这使得 Web API 成为微服务的一个非常重要的推动者。RESTful API 基于 Web 的开放网络原则,为构建微服务架构的各个组件之间的接口提供了最合理的模型。
99 0
美团java研发岗二面:微服务问题被虐哭了,直到看到这些知识点
|
消息中间件 存储 网络协议
【Java面试八股文宝典之RabbitMQ篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day17
【Java面试八股文宝典之RabbitMQ篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day17
242 0
【Java面试八股文宝典之RabbitMQ篇】备战2023 查缺补漏 你越早准备 越早成功!!!——Day17
|
人工智能 IDE 算法
【周末闲谈】新的编程方式,程序员的未来何在?
【周末闲谈】新的编程方式,程序员的未来何在?
138 0
|
人工智能 自然语言处理 安全
网传字节跳动实习生删除所有轻量级模型,还有救吗?
网传字节跳动实习生删除所有轻量级模型,还有救吗?
158 0
|
设计模式 缓存 NoSQL
公司新来一个同事,把优惠券系统设计的炉火纯青!
公司新来一个同事,把优惠券系统设计的炉火纯青!
|
消息中间件 JavaScript 小程序
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
新来个阿里 P7,仅花 2 小时,撸出一个多线程永动任务,看完直接跪了,真牛逼!
|
缓存 Java 数据管理
新来了个技术总监,居然要我做一个 IP 属地功能。。不服就干!
新来了个技术总监,居然要我做一个 IP 属地功能。。不服就干!
295 0
新来了个技术总监,居然要我做一个 IP 属地功能。。不服就干!