Tars:
Tars 是由腾讯出品的强大高性能RPC开发框架,配套一体化的运营管理,通过伸缩调度,实现运维半托管服务,目前支持C++,JAVA,PHP,Nodejs,Golang等语言。Tars最强大的地方在于在分布式的环境中的优势,以及多语言的支持,现在很多的RPC框架并不支持PHP语言,Tars很好的支持了PHP的RPC框架。腾讯内部也一直都在使用,主要使用的是C++的框架,新推出的是基于GOlang的RPC框架。本人尝试去搭建Tars基于GOlang的RPC服务,首先编写客户端和服务的的代码是很容易的,安装官方的语法规定写出相应的代码框架,然后使用tars2go工具转换成go语言。Tars的基础服务都是用C++写的。官方的搭建文档非常的简单,没有实用性,网上很多热心的爱好者给了更详细的搭建方法,这里推荐博客:https://blog.csdn.net/m0_37973394/article/details/86591838。搭建过程是艰难的,进行了测试之后发现这个后端的网页管理做的不是很完善,存在一些bug。我在测试的时候服务经常起不来,也是不知道为什么。但是相信强大的腾讯团队后面会做的越来越好。
code地址:https://github.com/weibocom/motan-go.git,按照官方的描述如下:
Motan是一套高性能、易于使用的分布式远程服务调用(RPC)框架。 Motan-go是motan的golang语言实现。
功能
- 提供golang client、server以及agent与其他语言通过motan2协议进行通信。
- 支持集成consul、zookeeper等配置服务组件,提供集群环境的服务发现及治理能力。
- 支持动态自定义负载均衡、跨机房流量调整等高级服务调度能力。
- 基于高并发、高负载场景进行优化,保障生产环境下RPC服务高可用。
- agent支持双向代理,通过agent可以使其他解释型语言(例如PHP)快速提供、访问motan服务。
- agent支持强大的扩展机制,能够提供完整服务治理功能
motan-go支持集群调用,使用的是zookeeper分布式应用程序协调服务。目前不支持consul,使用agent实现和其他语言的互通,和go之间不需要代理。 在github上的例子和现在的代码是不匹配的,我在使用的时候是有问题的,但是在其源码的main目录下有想要的server和client的例子可以直接运行成功。
motan-go支持服务器的发现和卸载,注册中心和服务间使用心跳来包活。
夸语言使用simple序列号方式。
motan-go和腾讯的Tars进行对比优缺点如下:
github地址:https://github.com/smallnest/rpcx
从某种程度上说这个和motan是相似的,但是rpcx没有代理,同样使用zookeeper,etcd,consul等作为注册中心,目前motan只支持zookeeper其他不支持,rpcx支持的比较多,rpcx还有一套服务的UI系统,这个功能和Tars是差不多,但是比Tars的简单。rpcx同样具有高性能,实现分布式管理,负载均衡的功能。但是从代码的完善程度上来说,rpcx更加的成熟和完善,文档也是相当的完善,例子也是非常的多,个人感觉是一个跨语言的不错选择,支持php, python, c/c++, node.js, c#等,数据的传输格式也支持的比较多:raw slice of bytes, JSON, Protobuf and MessagePack。