zoukankan      html  css  js  c++  java
  • 高可用thrift客户池的实现详解

    最近,公司要求将组内的thrift客户端组件推广至公司内使用。基本的要求如下:

    1.高可用

    2.集成名称服务,也就配置文件支持服务发现

    3.解耦,客户端和高可用组件解耦,简单来说就是,如果以后要切换其他的高可用组件,改动要尽可能的小;同理,如果要基于目前的高可用部分实现其他的客户端例如mysql,redis也要求能够轻松支持。

    以上为公司要求,但是在实际业务使用中,我们发现以下几点也很重要:

    1.支持对thrift业务层面的ping校验

    2.客户端隔离策略

    3.能够友好的支持任何thrift协议

    针对上述要求,我们来一步一步推理,实现一个易用高可用thrift池化客户端。

    首先,我们把项目分解成三块:

    1.cluster:高可用的逻辑层

    2.client:客户端的实现层

    3.registry:服务注册发现层

    高可用cluster组件:

    一个高可用组件应该包含一下功能:

    1.容灾策略

    2.多种负载均衡策略

    3.服务自动熔断

    所以基本的框架如下:

    ─com                └─zhizus
                        └─forest
                            ├─cluster
                            │  ├─ha
                            │  └─loadbalance
                            ├─registry
                            │  ├─confcenter
                            │  └─s2s
                            └─utils
    

      

    由于,我们是需要将高可用部分如client层解耦,所以,我们来创建一个client的描述类,LoadBalance引用的并不是真正的client,而是client的描述类,而这个描述类针对所有的客户端都是大同小异的。

    如是便有了这样一个ServerInfo对象:

    public final class ServerInfo {
    
    	private final String host;
    
    	private final int port;
    
    	private final int chance;
            ...
    
    }
    

      

  • 相关阅读:
    .net从网络接口地址获取json,然后解析成对象(一)
    .net获取本地ip地址
    .net上传文件,利用npoi读取文件信息到datatable里
    .net利用NPOI生成excel文件
    .NET获取城市信息(将三字代码转换成城市名)
    JS下拉页面时一个横幅的样式和js
    整数中1出现的次数(1~n)
    连续子数组的最大和
    最小的K个数
    数组中出现次数超过一半的数字
  • 原文地址:https://www.cnblogs.com/dempe/p/6224134.html
Copyright © 2011-2022 走看看