基于Thrift的高可用RPC开源项目

1 篇文章 0 订阅
1 篇文章 0 订阅

@博乐
摘要:随着公司业务的不断发展,组件服务化是个必然趋势,那么服务之间如何高效通信?如何对其进行统一管理呢?使用统一的RPC框架是个不错的选择。虽然业内已经存在多套开源的RPC方案,但各有优劣,百分点科技结合自身的需求,也开发了一套RPC框架——HARPC,目前已经开源。

1. HARPC是什么

HARPC(High Availability RPC)是基于Thrift的跨语言、高可用的RPC框架。具备高性能、高可用、轻量级等特点,在百分点科技内部服务中广泛使用。
开源地址:https://github.com/baifendian/harpc
QQ交流群:398091913

2. 要解决的问题

2.1. 不同语言之间的通信问题

实际场景中服务端和客户端往往使用不同的编程语言,比如:客户端是java程序,服务端是C++程序,那么如何高效的通信?

2.2. 负载均衡和容灾处理

当服务并发越来越大,我们希望可以实现服务的水平扩展,那么新增的服务节点如何被自动发现?请求多个服务时,如何进行有效否的负载均衡?某个机器Down机或服务挂掉时,请求方如何快速发现?

2.3. 服务维护成本高

当服务越来越多时,原本简单的问题,也会变得越来越复杂,比如:你想知道某服务在哪台机器上?某服务正在被哪些服务调用?服务请求量和性能怎么样?
这些问题不仅仅是使维护成本大大的提高,更糟糕的情况是,出现问题或故障时,排查十分困难。

3. 业内方案

结合公司内部服务的需求,我们调研了业内主流的几个RPC解决方案,对比如下:
这里写图片描述
如上表所示,每种RPC方案都有各自的优缺点,都难以完全满足我们的需求。于是,我们研发了自己的RPC框架,即HARPC。

4. 设计思路

HARPC的核心思想是高可用,那么在保证高可用的基础上,还需要具备跨语言、高性能、可视化及轻量级等特性。于是,我们在设计之初就选择了基于thrift开发的方案,底层通信使用thrift来保证高性能和跨语言,然后HARPC来保证高可用和可视化,并且尽量保持简单,来达到轻量级的需求。

4.1. 整体结构

这里写图片描述
说明:
(1)四个部分:client(客户端)、server(服务端)、registry(注册中心,目前为zookeeper集群)、admin(服务管理系统)
(2)client和server又包括: your code(用户代码)、harpc(核心框架,包含Java、Python、C++三个版本)、thrift gen(thrift生成的源码文件,用于底层通信)

针对不同的使用场景,我们提供了两种方式,用户只需要通过配置来区分:

4.2. 注册中心方式(推荐)

这是推荐的方式,支持服务端自动注册、客户端服务自动发现的功能。
这里写图片描述

4.3. 直连方式

适用于第三方的thrift服务或没有集成HARPC的服务。
注意:该方式不支持自动发现新的服务节点。
这里写图片描述

5. 如何使用

HARPC目前支持使用Java、Python和C++三种开发语言,其他语言暂不支持。针对这三种语言,需要使用不同的集成方法,都非常简单,具体参考开源地址。

6. 可视化管理

6.1. 服务信息查看

  • 展示出所有server和client
  • 查找服务地址以及端口信息

6.2. 服务请求状态跟踪

  • 查看服务请求量
  • 查看服务性能

7. 测试结论

HARPC的Java、Python、C++版本的性能略有差别,由高到低为:C++版本 ≈ Java版本 > Python版本,下面仅给出Java版本的测试数据和结论。

7.1. Java版本容错性测试

这里写图片描述
从上述的测试结果来看,HARPC Java版本服务在各种异常情况下均能正常使用或恢复,具备高可用的特性。

7.2. Java版本性能测试情况

这里写图片描述
备注:服务端和客户端分别部署在两台内网服务器上。
从上述的测试数据来看,性能较高。

8. 总结

HARPC的开发是基于开源的Thrift,我们将HARPC开源也正是为了回馈开源社区。我们的下一步规划是进一步完善自身,在性能和扩展性上进一步提升。另外,我们将积极解决来自用户反馈的问题,欢迎大家使用!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值