什么是分布式通信服务框架?
概念: 一般为了满足大规模的业务,技术架构会从单体应用架构发展成分布式服务架构,分布式服务架构中的服务是分布在不同的主机不同的进程上的,它与单体应用进程内方法调用的区别就在于它需要借助网络来进行通信。
服务框架的流程图:
其中Register是服务的注册中心。调用方发起请求时首先会通过proxy代理,然后经过router路由,loadbalance负载均衡,Monitor监控等模块。在codec模块需要按照通信协议和序列化方式对请求进行编码解码。最后到达transporter模块将请求传输出去。提供方接收请求的流程大致类似,不同的是还要经过cache(服务限流),auth服务鉴权,然后才提供真正的业务服务。
一般服务框架的核心模块应该包括:
- 注册中心: 主要提供对服务的注册、下线、发现、通知变更等功能
- 网络通信:因为调用方和提供方来自不同的主机、不同的进程,所以他们之间的调用少不了网络通信,可以用Netty和Nignx等高性能网络框架实现。(详情参考:
- 服务编码:通信协议(这里说的是应用层的协议,因为要确保传输的字节数据是否是一个完整的数据请求)、序列化(序列化成字节数据)
- 服务路由: 根据算法从注册中心选取其中的某些机器进行调用。目的:
- 负载均衡:根据权重调节每台服务节点的流量,使各节点接受的请求均匀合理
- 服务鉴权:检查调用方是否是授权过得,未经授权的调用方无法调用服务。
- 可用性保障:作为服务调用方,可以通过服务降级提升可用性。作为服务提供方,可以通过服务限流、服务隔离来保证可用性 服务降级:当某个服务出现问题,不能再被调用,调用方可以准备一个本地的回调,返回一个缺省值,例如:备用接口、缓存、mock数据。(服务降级在网上的另一种说法是:为了保证重要或基本的服务能正常运行,我们可以将一些 不重要 或 不紧急 的服务或任务进行服务的 延迟使用 或 暂停使用。)
- 服务限流:限制对调用服务节点的流量,防止在某些高并发场景中服务崩溃
- 服务隔离:保证异常的方法不会对正常的方法调用产生干扰
- 服务监控(我们这边用的是CAT):服务调用等业务统计信息 Metrics(服务的调用次数、失败数等可用性和其他性能信息),分布式链路追踪 Trace(方便查看链路上各个环境的性能问题)
- 服务治理平台:对服务进行管理的平台,主要包括服务权重修改、服务下线、鉴权、降级等配置修改。
参考链接:服务框架的技术栈
什么是RPC、RPC和Netty的关系?
RPC:Remote Procedure Call 远程过程调用。比如两台服务器A和B,A服务器上部署一个应用,B服务器上部署一个应用,A服务器上的应用想调用B服务器上的应用提供的接口,由于不在一个内存空间,不能直接调用,所以需要通过网络来表达调用的语义和传达调用的数据。有了RPC,建立分布式计算就更容易。
关于Netty:

由于RPC需要高效的网络通信,所以可以用Netty作为基础,用Netty提供传输层的网络协议实现方式。
Nginx?
概念:Nginx 是俄罗斯人编写的十分轻量级的 HTTP 服务器,Nginx,它的发音为“engine X”,是一个高性能的HTTP和反向代理服务器,同时也是一个 IMAP/POP3/SMTP 代理服务器。
参考链接:Nginx入门指南