RPC基本原理
rpc是基于接口的远程服务调用
RPC原理
-
本地代理存根:Stub
-
本地序列化反序列化
-
网络通信
-
远程序列化反序列化
-
远程服务存根:SKeleton
-
调用实际业务服务
-
原路返回服务结果
-
返回给本地调用方
-
注意处理异常
-
设计
共享:POJO实体类定义,接口定义
REST/PB下.真的不需要吗?另一个选择:WSDL/WADL -
代理
java使用动态代理或aop,C#使用远程代理 -
序列化
语言原生序列化:RMI,Remoting
二进制平台无关:HEssian,avro,fst
文本,json -
网络传输
tcp/ssl
http/https
RPC技术框架
如何设计一个RPC
从RPC到分布式服务化
分布式服务治理
微服务
- 多个相同的服务如何管理
- 服务的注册和发现机制
- 如何负载均衡,路由等集群功能
- 熔断,限流等治理能力
- 心跳,重试等策略
- 高可用,监控,性能等
配置/注册/元数据中心
配置中心:管理系统需要的配置参数信息
注册中心:管理系统的服务注册,提供发现和协调能力
元数据中心:管理各个节点使用的元数据信息
服务的注册和发现
服务的集群与路由
多个服务提供者提供相同的服务:
- 划分namespace
- 划分配置中心
- 按版本划分
对于相同能力的多个服务,分摊流量 - 路由
- 负载均衡
服务路由(和网关路由类似)=》过滤用。故意让流量到指定的机器上 - 基于IP段的过滤(按ip过滤)
- 服务都滴啊上tag,用tag匹配这次调用范围
服务负载均衡(让流量分散到所有机器上),多种策略,目的是尽量均匀 - random(带权重)
- RoundRobin(轮询)
- LeastActive(快的多给)
- ConsistentHashLoadBalance(同样参数请求到一个提供者)
服务的过滤与流控
为什么需要服务流控
稳定性工程:
- 系统会故障是正常现象
- 在系统出问题时,直接不服务,还是保持部分服务能力
系统容量有限
响应式编程(回弹性)
需要流控的本质是,请求大于处理的能力
流控三种方法: - 限流:内部线程数,外部调用数
- 服务降级:去掉不必要的业务逻辑,只保留核心逻辑
- 过载保护:系统短时间不提供新的业务处理服务,积压处理完后再恢复输入请求