这是我参与「第三届青训营 -后端场」笔记创作活动的的第3篇笔记。
在笔记服务(easy_note)中, 使用了kitex,一款字节跳动内部的 Golang 微服务 RPC 框架,具有高性能、强可扩展的特点,在字节内部已广泛使用。
我们小组选择的大作业项目是抖音项目,也打算使用kitex实现微服务和RPC. 因此,我们必须学习一下什么是RPC和微服务.
1. RPC介绍
1.1 什么是RPC
RPC 的全称是远程过程调用(Remote Procedure Call),它的调用包含了传输协议和编码(对象序列)协议等等,允许运行于一台计算机的程序调用另一台计算机的子程序,而开发人员无需额外地为这个交互作用编程,就像在进行本地函数调用一样方便。
1.2 RPC工作流程
如图所示,RPC的调用流程如下:
- User以本地调用方式调用远程服务;
- User-stub接收到调用后负责将方法、参数等进行组装;
- RPC Runtime找到服务地址,并将消息发送到服务端;
- 服务端的RPC Runtime收到消息并解码;
- Server-stub解开组装;
- Server根据解开组装的结果调用本地的服务;
- 本地服务执行并将结果返回给server stub;
- server stub将返回结果打包;
- 服务端的RPC Runtime将打包好的消息发送至User方;
- 客户端的RPC Runtim接收到消息并解码;
- User-stub将解码后的消息解开组装;
- User得到远程调用的最终结果。
1.3 RPC的优缺点
- RPC的优点是:
- 提升系统可扩展性;
- 提升系统可维护性和持续交付能力;
- 实现系统高可用;
- RPC的缺点是:
- 一个完善的RPC框架开发难度大;
- RPC框架调用成功率受限于网络状况;
- 调用远程方法对初学者来说难度大;
2. 微服务介绍
2.1 什么是微服务
微服务是分布式架构的一种,把服务做解耦和拆分.
在传统的单体架构中,我们把所有的服务写在一起. 但是随着业务逻辑逐渐复杂,代码的耦合度也会越来越高,不便于团队合作开发以及业务的升级维护。微服务的思想是, 根据业务功能模块把一个单体的应用拆分成许多个独立的项目,每个项目完成一部分的业务功能,这样就可以独立开发和部署。这些独立的项目就成为一个个微服务,进而构成一个服务集群。
比如在easy_note中, 将整个笔记服务分成了user和note两个服务.这两个服务完全可以独立开发.
2.2 微服务的优缺点
- 微服务的优点是:
- 开发效率高;
- 业务独立设计;
- 自下而上;
- 故障隔离.
- 微服务的缺点是:
- 服务治理和运维的难度较高;
- 观测的难度高;
- 安全性的实现难度高.