「腾讯开源Tars」c++ RPC 框架 入门:介绍

「腾讯开源Tars」c++ RPC 框架 入门:介绍

「腾讯开源Tars」c++ RPC 框架 入门:介绍

Fig 1 Tars架构图(摘自GitHub tars项目)


Tars 是腾讯开源的一个RPC框架,现在RPC框架也很多,但是C++的RPC框架,是少之又少,我了解是百度的sofa-pbrpc,但是不支持多种语言,Tars是另外一个C++ RPC 框架他的优势就在于它支持多种主流的编程语言C++、java、go、php、python(内部使用中暂未开源)。

Tars的主控服务包括:tarsregistry、tarsconfig、tarsadminregistry等。这些主控服务是使用c++语言开发,一般很少变更。业务开发过程中也不需要太过于关心主控服务。专心开发自己的业务逻辑即可。另外tars支持官方的tars协议、protobuf协议、http以及用户自定义协议,可以说已经满足了各种各样的需求。我之前就基于tars框架开发了一个基于MQTT协议的服务端程序,虽然使用过程中难免会遇到很多坑,好在都是可以解决的。我开发的程序目前已经投入使用,感谢tars、感谢腾讯的开源贡献。后续我会有专题介绍使用tars过程中遇到的一些问题以及如何解决,帮助大家更加了解tars、使用Tars。

下图是tars github的star 情况:

「腾讯开源Tars」c++ RPC 框架 入门:介绍

Fig 2 Tars star 情况

下图是tars的服务交互数据流:

「腾讯开源Tars」c++ RPC 框架 入门:介绍

Fig 3

底下绿色部分都是一些辅助服务就config是必选的,其他的可以根据情况进行部署。

下图是服务的框架:

「腾讯开源Tars」c++ RPC 框架 入门:介绍

Fig 4

下面就简单介绍下tars的其他一些特性以及一些问题:

1)有丰富的工具库:比如线程池的封装、线程安全的队列、字符串操作、单例、future/promis、tup、协程(不是libco)

2)有发布管理界面、发布超级简单但是管理界面体检欠佳,比如不支持批量重启、过滤检索、批量下线、批量修改、扩容时端口号不能继承、创建模板是文件名限制、不显示节点数量、翻页支持不友好

3)有日志采集、节点间调用统计数据、配置自动加载、在线push 配置、调整日志级别、日志染色等。

4)支持鉴权模块、支持TSL

5) 容灾高可用问题:客户端侧只有内存级别的cache、心跳机制有待优化

6)bug:tars 1.5版本存在句柄泄露(大量close_wait的连接)(c++)

7)bug:当一个连接的某一个请求包出现一个包是非法包时该链路上的其他包如果已经经过了完整性校验,那么后续的这些包都必须分发到业务线程然后才能被丢掉(包在队列中超时就另当别论)这个跟框架实现的方式有关系,采用的多线程异步的方式。(c++)

8)待改善:tars协议不支持自定的一些方法,比如定义一个类,但是你不能再里面添加一些自定义的方法。

9) 待改善:tars 的include 指令,支持不完善:tars2cpp 支持使用#include 一些tars协议文件,但是java不可以,tars2java 不支持--include 选项。

有关于tars个更详细的介绍请参考github上开源项目:https://github.com/TarsCloud/Tars。

官方的介绍文档:

https://github.com/TarsCloud/Tars/blob/master/Introduction.md

c++ 入门的示例文档:https://github.com/TarsCloud/TarsCpp/blob/master/docs/tars_cpp_user_guide.md

下一期将会介绍:tars服务部署过程中遇到一些问题


分享到:


相關文章: