Pigeon中的负载均衡
来源:互联网 发布:遇见这软件靠谱吗 编辑:程序博客网 时间:2024/06/16 09:12
一.核心类
LoadBalanceManager 负载均衡的管理器
LoadBalance 负载均衡的抽象
Client 负载均衡调度的对象
二.核心类讲解
2.1 LoadBalanceManager类
核心对象,存储着service&group的组合键 和 负载均衡器的 kv对象
private static Map<String, LoadBalance> loadBalanceMap = new ConcurrentHashMap<String, LoadBalance>();
初始化流程
初始化过程中起了两个线程,用来监控Client的调度参数,这个和Pigeon的调度策略有关。在负载均衡过程中有两个重要的参数weight , capcity
weight是一个相对值,代表者不同机器处理能力的,这个值在服务注册时指定
capcity代表了能处理的请求数量,在之前的请求处理过程中也有描述
因为RPC服务通常处于一个或者多个分布式集群中,需要开启两个线程分别监听这两个参数的改动,从而影响负载均衡的结果
2.2 LoadBalance
负载均衡的接口定义
public Client doSelect(List<Client> clients, InvokerConfig<?> invokerConfig, InvocationRequest request,int[] weights);
简单的说就是按照负载均衡的策略从一个Client列表中选择一个Client作为访问对象RandomLoadBalance 实现
代码比较简单,依赖random和weight的一个简单的负载均衡器的实现。个人感觉这里的代码执行效率比较低,改为map的映射来实现更加高效
2.3 Client
Client<C extends Channel> { InvocationResponse write(InvocationRequest request) ; void processResponse(InvocationResponse response);}
Client对象通过持有Channel的实例具有了读写能力,主要接口就是发起请求,处理结果2.4 执行流程
LoadBalance loadBalance = loadBalanceManager.getLB(serviceKey);Client client = loadBalance.select(clients,config,request,weightArray);Response response = client.write(requset);client.processResponse(response);
真正的执行流程是责任链模式,因此这里仅仅是简化了一个执行流程,将负载均衡的过程梳理清楚
三.补充
负载均衡本质上是一种保证各个服务器提供者之间消费公平的一中路由策略. 避免部分机器过饱和或者部分机器过于饥饿。
所有的代码在Pigeon的route包内
Region也是路由包中的一个重要的组成部分,Region是机房的抽象。RPC的请求耗时组成中网络传输耗时是一个重要的组成部分
public List<Client> getPreferRegionClients(List<Client> clientList, InvocationRequest request);
就是一种优先获取同机房Client的实现。 0 0
- Pigeon中的负载均衡
- Pigeon中的Netty应用
- Pigeon中的流量限制
- 负载均衡中的LVS
- Nginx中的负载均衡
- Nginx中的负载均衡
- Nginx中的负载均衡
- LVS中的IP负载均衡
- 负载均衡中的session共享
- 负载均衡中的四层负载和七层负载
- Windows服务器中的负载均衡技术简介
- LVS集群中的IP负载均衡技术
- LVS集群中的IP负载均衡技术
- HADOOP中的负载均衡和垃圾回收
- LVS集群中的IP负载均衡技术
- linux中的IP负载均衡实现原理
- LVS集群中的IP负载均衡技术
- 关于ASP.NET中的负载均衡
- Strategy 策略模式
- mysql数据库,数据迁移a表到b表
- Apache Tomcat 信息泄露漏洞存在于所有版本
- java访问zabbix api中文提示json格式错误
- 对《深入理解Android虚拟机》一书的知识点总结
- Pigeon中的负载均衡
- 单链表逆序输出C++ (stack方法、双向链表方法以及vector方法)
- Nodejs express 获取url参数,post参数的三种方式
- centos7下python连接 hive2
- ButterKnife注入时出错
- Java扩展知识点
- 一份非常内行的Linux LVM HOWTO
- 几个博弈小题总结 脑子是个好玩意,我也想有一个。
- spark sql