你的位置:首页 > 软件开发 > Java > 高可用的池化 Thrift Client 实现(源码分享)

高可用的池化 Thrift Client 实现(源码分享)

发布时间:2017-01-16 12:00:15
本文将分享一个高可用的池化 Thrift Client 及其源码实现,欢迎阅读源码(Github)并使用,同时欢迎提出宝贵的意见和建议,本人将持续完善。本文的主要目标读者是对 Thrift 有一定了解并使用的童鞋,如对 Thrift 的基础知识了解不多或者想重温一下基础知识,推荐 ...

高可用的池化 Thrift Client 实现(源码分享)

高可用的池化 Thrift Client 实现(源码分享)

本文将分享一个高可用的池化 Thrift Client 及其源码实现,欢迎阅读源码(Github)并使用,同时欢迎提出宝贵的意见和建议,本人将持续完善。

本文的主要目标读者是对 Thrift 有一定了解并使用的童鞋,如对 Thrift 的基础知识了解不多或者想重温一下基础知识,推荐先阅读本站文章《和 Thrift 的一场美丽邂逅》。

下面进入正题。

为什么我们需要这么一个组件?

我们知道,Thrift 是一个 RPC 框架体系,可以非常方便的进行跨语言 RPC 服务的开发和调用。然而,它并没有提供针对多个 Server 的 Smart Client【1】。比如,你有一个服务 service,分别部署在 116.31.1.1 和 116.31.1.2 两台服务器上,当你需要从 Client 端调用该 service 的某个远程方法的时候,你只能在代码中显式指定使用 116.31.1.1 或者 116.31.1.2 其中的一个。这种情况下,你调用的时候无法预知所指定 IP 对应的服务是否可用,并且当该服务不可用时,无法隐式自动切换到调用另外一个 IP 对应的服务。也就是说,服务的状态对你并不是透明的,并且无法做到服务的负载均衡和高可用。

此外,当你调用远程方法时,每次你都得新建一个连接,当请求量很大时,不断的创建、删除连接所耗费的服务资源是巨大的。

因此,我们需要这么一个组件,使服务状态透明化并底层实现负载均衡和高可用,让你可以专注于业务逻辑的实现,提升工作效率和服务的质量。下面我们就对该组件(ThrifJ)进行详细的剖析。

它到底能做些什么?

特性

  • 链式调用API,简洁直观
  • 完善的默认配置,无需担心调用时配置不全导致抛错
  • 池化连接对象,高效管理连接的生命周期
  • 异常服务自动隔离与恢复
  • 多种可配置的负载均衡策略,支持随机、轮询、权重和哈希
  • 多种可配置的服务级别,并自动根据服务级别进行服务降级

如何使用它?

目前最新版本为1.0.1(点此关注最新版本的更新),首先在项目中引入 thriftj-1.0.1.jar,或在 Maven 依赖中加入:

<dependency>  <groupId>com.github.cyfonly</groupId>  <artifactId>thriftj</artifactId>  <version>1.0.1</version></dependency>

原标题:高可用的池化 Thrift Client 实现(源码分享)

关键词:ie

ie
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。