TARS功能特性

多语言

TARS最早使用C++语言进行开发, 后续随着业务的发展, 逐步实现了C++/JAVA/PHP/NodeJS/Go的服务端和客户端功能。同时使用Python语言等作为客户端,也可以进行服务的调用。更多语言包括C#等也在逐步的开发中。

不同语言之间, 使用统一的接口定义语言tars来约定协议, 各语言的基本RPC能力均已支持, 同时也会针对不同的语言特性, 开发相对差异化的功能。性能是不同语言实现的时候, 遵循的重要准则, 使用现有语言开发的服务, 均经过大流量的线上验证, 并符合C侧业务的高并发与高可用要求。

敏捷研发

使用TARS可以快速的构建微服务, 并且由于TARS本身多语言的特性, 这对团队技术栈的差异有很高的兼容性。对于需要快速开发的逻辑层需求而言,开发者完全可以选择使用适合快速开发的PHP。而对于一些性能要求比较极致的场景, 就可以使用TARS搭建基于C++的微服务了。

除此之外, TARS在各个语言的实现中, 都配备了服务端和客户端的自动代码生成工具。通过这个工具:

  • 服务调用者可以非常方便的根据协议生成调用代码, 并像调用本地函数一样调用远程服务
  • 服务提供者可以很快的生成代码的骨架, 并在其中进行快速的需求开发

高可用

TARS本身提供了一系列的基础服务, 这些基础服务有效的保证了TARS的高可用。这可以从几个服务的维度来阐述:

  • 主控服务Tars-Registry: 主控服务, 中心化存储所有服务的可用地址, 分布式部署, db存储;
  • 节点服务Tars-Node: 负责监控机器上所有的tars服务, 并在发现异常后及时恢复服务;
  • 监控服务Tars-State: 负责收集服务本身、机器本身、调用情况等监控服务, 通过设置不同的告警策略, 让服务异常及时通知;

除此之外, 各语言为了保证高可用, 都会对服务可用列表进行一定时间的缓存。保证主控有问题的时候, 可以fallback到本地可用服务列表。而部分语言也已经实现了如果遇到某个服务ip不可用的情况, 自动标记并剔除的功能。

高效运营

TARS在发布的时候, 也提供了无损的选项。由于各语言框架不同, 实现的方式也各不相同。通过使用无损, 可以实现类似于NGINX reload的功能。服务分批无损重启, 在可用时再为对外提供服务, 已经成为了大部分高可用发布的标准选择。

同时, 由于TARS是自带管理运维后台的, 因此它天然比单纯的RPC框架更强大一些。通过这个管理后台, 使用者可以轻松完成如下内容:

  • 查看现有服务ip列表
  • 对单台机器进行服务配置变更
  • 服务发布、版本回退
  • 调用监控上报查看
  • 机器或服务本身监控上报查看
  • 单个或批量进行服务配置