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;
            ...
    
    }
    

      

  • 相关阅读:
    chkconfig: command not found
    MySQL之存储过程和函数
    MySQL之级联删除、级联更新、级联置空
    MySQL 视图
    解决创客学院小黄书的错
    C语言的一小步—————— 一些小项目及解析
    C基础的练习集及测试答案(提高题)
    C基础的练习集及测试答案(40-50)
    C基础的练习集及测试答案(31-39)
    C基础的练习集及测试答案(16-30)
  • 原文地址:https://www.cnblogs.com/dempe/p/6224134.html
Copyright © 2011-2022 走看看