花6个月写的付费专栏,免费送|仿开源框架从零到一完整实现高性能、可扩展的RPC框架 (2)

对线程池的读写保证线程安全

最后,网络模块要实现的是等待服务端返回的结果。由于网络模块同一时间会接收大量客户端网络请求,所以,我们可以创建一个单独的线程,每隔一定时间轮询是否有服务端的返回。

服务端

对于服务端来说,我们最关心的是性能问题。因为大量的客户端请求最终都会汇总到服务端一个节点来处理。所以最原始的单线程+while循环的方式肯定满足不了性能要求。所以比较最容易想到的改进点是多线程,虽然在一定程度上能解决第一种方式带来的问题,但这种方式也有很大的缺点:频繁创建线程成本比较大,并且线程之间的切换也需要一定的开销,当线程数过多时显然会降低服务端的性能。目前比较常用的解决方案是Reactor模式Reactor模式也分为单线程Reactor、多线程Reactor和多Reactor。这几种的区别在书里都有具体说明,这里我就不再介绍了。Reactor模式的优势按照我自己的理解就四个字——各司其职。Manis 中使用的是多Reactor模式,设计图如下:

花6个月写的付费专栏,免费送|仿开源框架从零到一完整实现高性能、可扩展的RPC框架

简单介绍一下图中几个线程的功能

Listener: 接收客户端的连接请求,也可以叫做 Acceptor,封装连接请求

Readr: 多线程并行地读取客户端请求,进行反序列化和解析操作

Handler: 多线程并行地读取调用请求,解析调用方法并执行调用

Responder: 读取响应结果,发送给客户端

够各司其职吧。那它们之间怎么联系呢?从图上可以看到是消息队列,消息队列可以很好地实现组件间的解耦。

虽然服务端的职责也比较明确、清晰,但涉及的内容一点不少,包括注册不同的序列化方式,解析并调用相应的请求。最关键的是服务端线程是最多的,并且需要线程之间需要高度协调的,所以对并发编程的要求也更高,这块书中也有重点讲解。

最后我们看看Manis中核心组件的时序图

avatar

avatar

由于 Manis 在设计上是足够优秀的,所以开发的时候这三个模块可以并行进行。有点像近几年web开发比较火的前后端分离架构,只要各个模块把协议定义好了后,开发就可以并行进行而不需要依赖彼此。至此,Manis 的核心技术就介绍完了,当然这只是冰山一角,毕竟 4600 行代码。

如何获得本书

关注公众号 渡码 回复关键字 manis,可获取电子书+源码+读者交流群。

目录

花6个月写的付费专栏,免费送|仿开源框架从零到一完整实现高性能、可扩展的RPC框架

代码结构

花6个月写的付费专栏,免费送|仿开源框架从零到一完整实现高性能、可扩展的RPC框架

本书特色

在讲解相册内容同时,大部分章节都加入了课外拓展,针对每一节涉及的基础知识,如:设计模式、序列化/反序列化基础、单例测试、源码分析、并发编程以及Hadoop源码分析等内容都有拓展讲解。力求让零基础的朋友也能跟上本书节奏,从0到1独立完成一个项目。

希望你学完本书后不只学会了某项技术,而是提高了设计实现整个系统的能力。

适宜人群

Java工程师

想独立做一个完整项目的朋友

Hadoop 初学者

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwggjz.html