从0开始手撸一个高性能rpc框架
相信社区上现在还有不少人对前后端交互或者远程系统间调用的理解还是停留在 http 调用的层面。以 http 协议的形式发起的调用,其实就是一种 rpc 调用。在分布式/微服务环境中,前端/客户端发起的一个调用,可能会经过后端数十个服务,所以每个服务之间的通信效率就显得非常重要。http1.x 是文本协议,文本协议的传输效率比较低下,这必然会导致整个链路的耗时成本增加。所以如何解决分布式/微服务环境中的服务间的通信问题,是我们通向一个资深工程师的必经之路。这就是 rpc 框架设计的初衷。
一提到 rpc ,大家可能就条件反射地想到 java 的 dubbo 和 google 的 grpc。但是假如把对 dubbo 和 grpc 了解能到 50% 以上的人筛选一遍,可能就十不足一。为什么呢?
因为绝大多数开发者仅仅是框架的使用者,很少会去看框架的源码。就算去看源码,可能也会非常吃力、云里雾里。原因有二:
我们的 gorpc 框架就 提供给了大家一个各项功能完整的,刚实现从 0 到 1这个过程的框架。并且一步步给大家解析了每个功能的具体实现思路和实现过程,这是非常难得的 。
本课程主要从一个开发者的角度,从技术选型到编码实现,从 0 到 1去实现一款高性能 rpc 框架,主要技术点包括 client 和 server 通讯、超时机制实现、协议的制定、传输层 transport 实现、编解码、序列化、连接池、服务发现、负载均衡、拦截器、分布式链路追踪、认证鉴权、组件化、插件体系、框架性能优化等。
课程特色
框架特色
我们知道,其实世面上有非常多的 rpc 框架了。java 有阿里的 dubbo、微博的 motan 等,go 有 grpc、rpcx、go-micro 等。那 gorpc 框架跟这些框架有什么优势呢?个人进行总结一下,
所以如果我们自己去实现一款框架,我们希望这款框架的核心特点是: 简单易用、高性能、可插拔
框架架构如下:
具体特性如下:
章节预览思维导图如下:
为什么使用 go 实现
相比于 java 和 c++ 的厚重性和一些 历史 包袱而言,go 更加简洁、优雅。并且 go 天然支持高并发。这些特点使得 go 目前得到越来越广泛的关注和使用。我们使用 go 实现是因为 go 的这些语言特性,同时也因为 go 实现的框架源码的非常易读,有助于学习和成长。