• 高可用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;
            ...
    
    }
    

      

  • 相关阅读:
    GC 打印日志配置
    Java查看Old代对象具体信息
    Java 进程 OOM 的排查分析(glibc 篇)
    排障 v2 堆外内存泄漏
    HotSpot VM的Native Memory Tracking
    gc日志深入解析
    排障 v1
    图和图算法js
    export与export default的区别
    leftNav
  • 原文地址:https://www.cnblogs.com/dempe/p/6224134.html
Copyright © 2020-2023  润新知