1. 手写一个最小 RPC 框架,注册中心、序列化、网络传输、负载均衡如何分层?
请手写一个最小 RPC 框架,说明注册中心、序列化、网络传输、负载均衡如何分层?
- RPC 分层架构
- 注册中心与服务发现
- 序列化与网络传输
最小 RPC 框架分层:1)注册中心:服务提供者启动时注册服务地址,消费者从注册中心获取服务提供者列表;2)序列化:把请求参数/响应结果序列化(JSON/Protobuf/序列化)以便网络传输;3)网络传输:基于 Netty/Socket 的长连接,发送请求、接收响应;4)负载均衡:消费者从提供者列表中选择一个实例(随机/轮询/一致性哈希);5)代理层:JDK 动态代理把接口调用转成远程调用。各层职责清晰:注册中心管"服务发现",序列化管"数据表示",传输管"通信",负载均衡管"选实例"。分层让各层可独立替换。
RPC 的"分层"是职责分离:注册中心、序列化、传输、负载均衡、代理各司其职。消费者通过代理发起调用,动态代理生成网络请求,经负载均衡选实例,序列化后传输,服务端反序列化执行并返回。
// 分层:registry(注册中心) -> loadBalance(负载均衡) -> serializer(序列化) -> transport(网络)
public interface Registry { void register(String name, String addr); List<String> discover(String name); }
public interface LoadBalancer { String select(List<String> addrs); }
public interface Serializer { byte[] serialize(Object o); Object deserialize(byte[] b, Class<?> c); }
public interface Transport { RpcResponse call(String addr, RpcRequest req); }