最近,公司要求将组内的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;
... }

  

高可用thrift客户池的实现详解的更多相关文章

  1. java对象池commons-pool-1.6详解(一)

    自己的项目中用到了 对象池 commons-pool: package com.sankuai.qcs.regulation.protocol.client; import com.dianping. ...

  2. Java基础-DBCP连接池(BasicDataSource类)详解

    Java基础-DBCP连接池(BasicDataSource类)详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际开发中“获得连接”或“释放资源”是非常消耗系统资源的两个过程 ...

  3. 高并发架构系列:Redis为什么是单线程、及高并发快的3大原因详解

    Redis的高并发和快速原因 1.redis是基于内存的,内存的读写速度非常快: 2.redis是单线程的,省去了很多上下文切换线程的时间: 3.redis使用多路复用技术,可以处理并发的连接.非阻塞 ...

  4. 线程池底层原理详解与源码分析(补充部分---ScheduledThreadPoolExecutor类分析)

    [1]前言 本篇幅是对 线程池底层原理详解与源码分析  的补充,默认你已经看完了上一篇对ThreadPoolExecutor类有了足够的了解. [2]ScheduledThreadPoolExecut ...

  5. Java多线程学习之线程池源码详解

    0.使用线程池的必要性 在生产环境中,如果为每个任务分配一个线程,会造成许多问题: 线程生命周期的开销非常高.线程的创建和销毁都要付出代价.比如,线程的创建需要时间,延迟处理请求.如果请求的到达率非常 ...

  6. Java:多线程,线程池,ThreadPoolExecutor详解

    1. ThreadPoolExecutor的一个常用的构造方法 ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepA ...

  7. Java自带线程池和队列详解

    Java线程池使用说明 一简介 线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后 ...

  8. [转]阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

  9. 阿里巴巴数据库连接池 druid配置详解

    一.背景 java程序很大一部分要操作数据库,为了提高性能操作数据库的时候,又不得不使用数据库连接池.数据库连接池有很多选择,c3p.dhcp.proxool等,druid作为一名后起之秀,凭借其出色 ...

随机推荐

  1. 【CodeVS 1288】埃及分数

    http://codevs.cn/problem/1288/ loli秘制面向高一的搜索,好难啊QAQ 我本来想按照分母从大到小搜,因为这样分母从小到大枚举到的第一个可行方案就是最优方案. 但貌似会T ...

  2. windows中LNK文件打开方式恢复(每日一修(1))

    相信有些用户曾试过错误地把LNK文件的打开方式更改其他文件,导致系统所有的快捷方式都失效.在vista与Windows7系统还不普遍使用的时候,相信大家会有点惊慌失措,不要紧,下面只要大家进行如下操作 ...

  3. cocoapods安装

    什么是cocoapods CocoaPods是一个用来帮助我们管理第三方依赖库的工具.它可以解决库与库之间的依赖关系,下载库的源代码,同时通过创建一个Xcode的workspace来将这些第三方库和我 ...

  4. xv6课本翻译之——附录A Pc的硬件

    Appendix A 附录A PC hardware Pc的硬件 This appendix describes personal computer (PC) hardware, the platfo ...

  5. replace U to T in mature.fa

    sed '2~2s/U/T/g' mature.fa > miRBase_mature.fa

  6. 【BZOJ-1127】KUP 悬线法 + 贪心

    1127: [POI2008]KUP Time Limit: 10 Sec  Memory Limit: 162 MBSec  Special JudgeSubmit: 317  Solved: 11 ...

  7. Jquery获取offsetHeight

    纯javascript: window.document.getElementById('MainColumn').offsetHeight jquery: $('#id').get(0).offse ...

  8. Hibernate--------八大类HQL查询集合

    Hibernate的   八大类HQL查询集合 Hibernate的八大类HQL查询集合: 一:属性查询(SimplePropertyQuery) 1,单一属性查询 *返回结果集属性列表,元素类型和实 ...

  9. PHPCMS调用点击量的方法

    具体方法: 首先:需要在show.html 模板中首先加载jquery.min.js 这个js 其次:需要在要显示点击次数的位置写入: <span>点击:<span id=" ...

  10. yum---Linux软件安装与管理

    查询: yum list #查询所有可用的软件包列表 yum search keywords #搜索服务器上所有和关键字相关的软件包 安装: yum -y install 包名 options: in ...