简述
行业主流(o :开放源) :thrift(o )、Avro-RPC(O ) o )、Hessian(O ) o、gRPC(O ) o )、Dubbo(O )、HSF、HSF
分布式服务框架包括: RPC组件、配置服务发布、基于服务注册中心的订阅和发布以及服务治理
RPC组件:通信框架、编码和协议栈
相关技术3360套接字通信、多线程、协议栈- Netty
关键字:长连接、NIO (复用) )。
epoll没有最大连接句柄1024/2048的限制。 这意味着只有一个线程负责轮询Selector,才能访问成千上万个客户端
可靠性设计实现了: TCP级别的心跳检测(Keep-Alive )、协议级别的心跳检测、APP应用层的心跳检测
实际上可以使用链路空闲检测机制来实现Netty的心跳检测,缺省情况下是读写空闲(没有接收或发送消息链路持续时间t )
默认情况下,Netty的EventLoopGroup线程组创建CPU Core * 2线程。 使用时请务必评估线程数的指定。 建议不要使用默认值,或者创建数组,根据散列复用EventLoopGroup
服务组件:路由
基于: Zookeeper等服务注册中心的订阅发布机制,消费者可以通过主动查询和被动通知获取服务提供者的地址,消费者在本地也可以缓存和注册服务地址列表
消费者访问服务的负载均衡器:随机、循环、服务呼叫延迟(计算权重以使消费者缓存服务呼叫延迟并接收具有更少延迟的服务的消息)、一致性散列
本地根首选策略: injvm (本地JVM中)、innative (本地) )相同的物理计算机或虚拟机) )。
一致性散列:希望在添加和删除节点(集群)时尽可能少地禁用数据。 元素:每个实节点的n个虚拟节点尽可能随机地分布在整数循环中,并且在添加cache节点时,尽可能保证移动到新的cache节点的密钥来自不同的cache节点,因此可以实现负载平衡,即haache节点
群集容错
需要容错的场景是:通信链路故障、服务端超时和服务端呼叫异常失败
容错策略:失败自动切换(故障恢复)、失败通知(故障恢复)、失败缓存(故障缓存)、快速失败(故障快速) ) ) )。
适用于各种业务服务的各种容错策略。 容错接口是开放的,服务提供商可以根据需要配置自己的策略
HSF采用了默认情况下自动切换失败的容错
服务呼叫:同步、异步、泛化
当用户启动远程服务调用时,分层业务逻辑处理、消息编码和最终序列化的消息将进入通信框架的消息队列
异步实际上返回Future对象,调用方可以阻止get获取结果,也可以在Future-Listener中回调
如果泛化调用:客户端没有API接口和数据模型,则泛化引用用Map表示参数和返回值的所有POJO; 如果服务端没有API接口和数据模型,泛化实现将参数和返回值的所有POJO表示为Map; 常用于共通考试