Tars高性能服务开发核心技术与源码剖析

978-7-115-67040-3
作者: vivo互联网消息推送平台团队
译者:
编辑: 胡俊英

图书目录:

详情

RPC框架是服务端开发者的常用框架,本书基于Linux基金会旗下的Tars框架编写,旨在帮助读者掌握高性能RPC框架Tars。 本书共6章。第1章介绍Tars框架知识与多语言交互实战项目;第 2 章讲述Tars框架的使用,例如用 docker-compose 部署Tars服务框架,以及不同语言(以Java和Go为例)服务的构建和调用;第 3 章介绍Tars框架的高级特性,涉及按set调用、无损发布、自定义 Filter、使用Tars命令、使用Protocol Buffers 协议等内容;第 4 章剖析Tars框架核心原理,包括Tars RPC原理剖析及Tars NIO网络编程和Tars Netty网络编程;第 5 章进行Tars-Java源码解析,涵盖Tars客户端源码分析、Tars服务端源码分析等;第6章进行Tars-Cpp源码解析,涉及Tars-Cpp整体架构、Tars-Cpp网络分析等。书中还有丰富的案例和代码演示,读者可借助配套资源进行实践以进一步巩固所学知识。 本书适合有一定服务端开发基础,想要掌握高性能 RPC 框架 Tars 的读者阅读。通过阅读本书,读者能够更好地掌握Tars相关特性,并将其运用到开发实践中。

图书摘要

版权信息

书名:Tars高性能服务开发——核心技术与源码剖析

ISBN:978-7-115-67040-3

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。


版  权

著    vivo互联网消息推送平台团队

责任编辑 胡俊英

人民邮电出版社出版发行  北京市丰台区成寿寺路11号

邮编 100164  电子邮件 315@ptpress.com.cn

网址 http://www.ptpress.com.cn

读者服务热线:(010)81055410

反盗版热线:(010)81055315

内 容 提 要

RPC框架是服务端开发者的常用框架,本书基于Linux基金会旗下的Tars框架编写,旨在帮助读者掌握高性能RPC框架Tars。

本书共6章。第1章介绍Tars框架知识与多语言交互实战项目;第2章讲述Tars框架的使用,例如用docker-compose部署Tars服务框架,以及不同语言(以Java和Go为例)服务的构建和调用;第3章介绍Tars框架的高级特性,涉及按set调用、无损发布、自定义Filter、使用Tars管理命令、使用Protocol Buffers协议等内容;第4章剖析Tars框架核心原理,包括Tars RPC原理及Tars NIO网络编程和Tars Netty网络编程;第5章进行Tars-Java源码解析,涵盖Tars客户端源码分析、Tars服务端源码分析等;第6章进行Tars-Cpp源码解析,涉及Tars-Cpp整体架构、Tars-Cpp网络层实现分析等。书中还有丰富的案例和代码演示,读者可借助配套资源进行实践以进一步巩固所学知识。

本书适合有一定服务端开发基础,想要掌握高性能RPC框架Tars的读者阅读。通过阅读本书,读者能够更好地掌握Tars相关特性,并将其运用到开发实践中。

作 者 简 介

vivo互联网消息推送平台团队肩负着vivo公司消息推送平台的研发与支持重任。团队汇聚了一批资深服务器研发工程师与专家,他们自2018年起便投身于Tars框架的研究与实践,并将其深度应用于vivo消息推送平台的研发,积累了丰富的真实场景经验。

如今,该团队所打造的消息推送平台表现卓越,能够稳定支撑vivo消息推送平台每日百亿级消息的推送任务,同时保障全球数亿台手机终端设备的长连接稳定在线。此外,团队还持续关注新技术在消息推送等领域的应用探索,并通过积极撰写技术文章、组织技术演讲、贡献代码等多种形式,将自身经验与成果在行业内广泛分享。

本书创作团队的分工情况及人员名单如下。

统稿人员:金开。

编写人员:金开、李青鑫、叶丰、李磊、於权、柯声开、鲁小波、曾洛镔、林都。

审定人员:金开、叶丰。

序  一

本书不仅是Tars技术沉淀的集大成者,更是中国微服务开源生态发展的里程碑式著作。

我认为这本书的内容兼具技术深度与实战价值,其主要亮点集中在以下方面。

全链路技术解析:系统讲解Tars分层架构设计、高性能通信协议、服务注册与治理全链路实现,涵盖从理论到落地的完整技术图谱。

引领效率革命:Tars通过协议统一、组件解耦等创新架构,将微服务开发效率提升5倍以上,本书所展示的源码级剖析为分布式系统设计提供了可复用的工程范式。

企业级实践验证:本书介绍的技术体系能支撑互联网头部企业的核心业务,其设计思想可直接应用于高并发、低延迟的分布式系统开发。

值得一提的是,Tars堪称中国开源的里程碑。作为中国首个入选 Linux 基金会的微服务开源项目,Tars通过“腾讯内部实践→开源孵化→全球共建”的路径,成为全球开发者共同构建的分布式技术底座。

此外,Tars也是生态化发展的典范。自2018年开源以来,Tars吸引了超300家企业参与贡献,代码贡献量超20万行,形成了“产学研用”一体化的开源社区。

本书的出版对开源生态的建设和发展具有标杆意义!

作为Tars开源生态的推动者,我亲身经历了Tars从企业开发框架到国际开源项目的蜕变。本书不仅是架构师的分布式系统设计指南、开发工程师的实战手册,更是对中国开源力量崛起的有力见证。

在此,我诚邀大家加入Tars开源生态,共同书写属于中国的分布式技术未来,让世界看到源自中国的开源智慧!

单致豪

腾讯开源联盟主席、TARS[1]基金会董事主席

[1] 特别说明:应TARS基金会的要求,在提及“TARS基金会”时,TARS应为全大写形式。

序  二

作为TARS基金会技术委员会主席和Tars的核心开发者,以及腾讯早期的T4技术专家,我非常荣幸能为vivo公司的新书撰写序言。Tars框架诞生于2008年,历经近20年的发展与沉淀,它不仅是腾讯海量服务架构设计思想的结晶,更是微服务领域技术创新的重要代表。当时,我们面临的是腾讯海量业务场景下的分布式系统挑战,而Tars框架正是为了解决这些问题而诞生。最初,我们实现了C++和Java两个语言版本,后来在相关团队的共同努力下,逐步扩展了对JavaScript、Go、PHP等语言的支持,最终形成了一个功能强大、多语言兼容的微服务框架。Tars框架融入了大量腾讯“海量之道”的设计思想,如全异步架构、过载保护、柔性可用、全网调度、全面监控等,这些思想不仅支撑了腾讯内部众多核心业务的高效运行,开源后也为众多开发者提供了构建高性能、高可用分布式系统的强大工具。我们通过多语言支持、服务治理、高性能RPC等特性,让开发者能够专注于业务逻辑,而非底层技术细节。对于后台开发工程师而言,深入理解Tars框架的设计思想,不仅能够提升技术能力,更能从腾讯的海量服务实践中汲取宝贵的经验。如果能够通读Tars源码,便能更清晰地看到这些思想在Tars框架中的运用,这对于每一位开发者而言,都是一次难得的学习机会。

自开源以来,Tars框架已被国内众多企业广泛使用,覆盖了电商、游戏、证券、医疗等众多行业。相较于其他框架,Tars从开发到运维更加完整,对团队的技术投入要求更低,既适合中小型团队快速开发应用,也适合涉及不同语言和技术方向的大型团队在合作中使用。它不仅能够显著提升企业的研发效率和质量,还能帮助企业在有限的资源下实现技术能力的快速提升。这种轻量化且高效的特点,使Tars成为许多企业在微服务架构落地时的首选方案。

值得一提的是,Tars框架在面向全球的同时,重点支持国产软硬件生态,目前已经适配众多国产操作系统和软硬件环境,成为许多追求国产化企业的技术选择。在当今全球技术竞争日益激烈的背景下,Tars框架不仅为国内企业提供了安全可靠的技术支撑,也为推动国产化技术生态的发展贡献了力量。

Tars框架的核心开发人员来自不同团队,有些成员已离开腾讯,但他们依然以开源合作的方式继续为Tars框架贡献力量。由于团队成员分散于不同的领域和岗位,日常工作繁忙,时间和精力有限,因此一直未能撰写一本系统的关于Tars框架源码解析和实践经验分享的图书。本书的出版填补了这一空缺,为开发者提供了深入理解Tars框架的宝贵资料。作为Tars框架的创始团队成员,我由衷地感谢vivo团队的贡献,他们不仅分享了自身在Tars框架上的实践经验,更为整个技术社区注入了新的活力。这本书不仅是对vivo团队多年实践的总结,更是对Tars框架生态的补充与完善。书中详细介绍了Tars微服务框架的设计原理和源码细节,这些内容对于正在探索或已经应用Tars框架的企业和开发者来说,无疑是极具价值的参考资料。

我相信,这本书的出版将为所有使用过或正在使用Tars框架的程序员带来新的启发与收获。同时,我也希望Tars框架能够继续为更多的企业提供支持,助力他们在数字化转型中取得更大的成功。

最后,再次感谢vivo团队为Tars框架生态做出的贡献,也感谢所有为这本书付出努力的个人和团队。愿这本书成为连接技术与实践的桥梁,为行业发展注入新的活力。

阮曙东

TARS基金会技术委员会主席及核心开发者

前  言

RPC框架是许多服务器开发者的常用框架,本书基于Linux基金会旗下的Tars框架编写,旨在通过一系列的源码剖析和实践,帮助读者掌握高性能RPC框架Tars。

本书共6章,涉及Tars框架简介、Tars框架的使用、Tars框架的高级特性、Tars框架核心原理、Tars-Java源码解析、Tars-Cpp源码解析等知识点。本书提供了丰富的案例和代码演示,力求帮助读者了解Tars框架开发场景中常见的问题及其背后的原理,解决RPC领域性能优化等业务难题。

在阅读本书时,读者还可以借助随书提供的配套代码和彩色图片,跟随书中的提示,逐步进行实践操作,进一步巩固Tars框架的相关知识,掌握运用Tars框架进行服务开发和性能优化的技能。

本书主要涵盖以下内容。

第1章主要介绍Tars框架相关知识,包括设计思想、架构拓扑、服务交互流程、Tars服务的基础概念等。此外,还介绍了一个Tars多语言交互的实战项目。

第2章主要介绍Tars框架的使用,包括使用docker-compose部署Tars服务框架、Tars-Java服务构建及调用、Tars-Go服务构建及调用等内容。

第3章主要介绍Tars框架的高级特性,包括按set调用、无损发布、自定义Filter、使用Tars管理命令、使用Protocol Buffers协议、调用链追踪的原理、Tars-Java调用链实践及源码分析、Tars分布式缓存DCache等内容。

第4章主要介绍Tars框架核心原理,包括Tars RPC原理剖析、Tars NIO网络编程、Tars Netty网络编程等内容。

第5章主要介绍Tars-Java源码解析,包括Tars客户端源码分析、Tars服务端源码分析、RPC请求异步转同步、Tars-Java染色介绍、Tars文件如何生成Java代码、Tars-Java日志介绍等内容。

第6章主要介绍Tars-Cpp源码解析,包括Tars-Cpp整体架构、Tars-Cpp网络层实现分析、Tars协程实现分析、tarsRegistry原理剖析、服务发现、tarsNode原理剖析等内容。

目标读者

本书面向具备一定服务端开发基础的读者,可作为读者学习Tars框架原理、源码并进行实战的参考书。

配套资源

本书提供了配套的源码和相关彩图,以帮助读者更好地复现书中案例,并掌握相关知识点,上述资源可以从异步社区免费下载。

致谢

感谢人民邮电出版社的工作人员,感谢在本书写作过程中给予全力支持的Tars社区的朋友——曾宇、单致豪、阮曙东、俞慧涛。

谨以此书献给一起奋斗的同事和朋友,他们是刘海燕、王博、杨振涛、王文峰、甘恒通、王子睿、张紫娟、梁素敏、罗亮、袁俊虎、黄继坤、张文,以及名单之外的更多朋友。没有你们的支持和辛苦付出,不会有本书的诞生。

资源与支持

资源获取

本书提供如下资源:

本书源代码和配套彩图文件;

本书思维导图;

异步社区7天VIP会员。

要获得以上资源,您可以扫描右侧二维码,根据指引领取。

提交勘误信息

作者和编辑尽最大努力来确保书中内容的准确性,但难免会存在疏漏。欢迎您将发现的问题反馈给我们,帮助我们提升图书的质量。

当您发现错误时,请登录异步社区(https://www.epubit.com),按书名搜索,进入本书页面,单击“发表勘误”,输入勘误信息,单击“提交勘误”按钮即可(见下图)。本书的作者和编辑会对您提交的勘误信息进行审核,确认并接受后,您将获赠异步社区的100积分。积分可用于在异步社区兑换优惠券、样书或奖品。

与我们联系

我们的联系邮箱是contact@epubit.com.cn。

如果您对本书有任何疑问或建议,请您发邮件给我们,并请在邮件标题中注明本书书名,以便我们更高效地做出反馈。

如果您有兴趣出版图书、录制教学视频,或者参与图书翻译、技术审校等工作,可以发邮件给本书的责任编辑(hujunying@ptpress.com.cn)。

如果您所在的学校、培训机构或企业,想批量购买本书或异步社区出版的其他图书,也可以发邮件给我们。

如果您在网上发现有针对异步社区出品图书的各种形式的盗版行为,包括对图书全部或部分内容的非授权传播,请您将怀疑有侵权行为的链接通过邮件发送给我们。您的这一举动是对作译者权益的保护,也是我们持续为您提供有价值的内容的动力之源。

关于异步社区和异步图书

“异步社区”是由人民邮电出版社创办的IT专业图书社区,于2015年8月上线运营,致力于优质内容的出版和分享,为读者提供高品质的学习内容,为作译者提供专业的出版服务,实现作译者与读者在线交流互动,以及传统出版与数字出版的融合发展。

“异步图书”是异步社区策划出版的精品IT图书的品牌,依托于人民邮电出版社在计算机图书领域的发展与积淀。异步图书面向IT行业以及各行业使用IT技术的用户。

第1章 Tars——多语言高性能RPC框架

在微服务框架中,Apache Dubbo因其稳定且易上手的特性深受Java开发者青睐。而在需要C++、PHP、Go、Node.js等多语言协同的场景下,Apache Dubbo的支持却并不完善。正是为了解决此类问题,Tars框架应运而生。其早期是腾讯公司内部的孵化项目,随后由Linux基金会下的子基金会TARS基金会托管。

Tars框架名称的灵感源自电影《星际穿越》中的机器人Tars,电影中的机器人Tars拥有交互友好、高效率、值得信任的形象。而Tars框架在设计之初也被寄予了同样的愿景:追求易用性、高性能、稳定可靠。开发者只需聚焦业务实现,其他诸如运维部署、配置中心、基础监控、统一网关、日志中心乃至分布式缓存等通用能力均已被Tars封装成平台基础服务。相比Apache Dubbo的“小而美”,Tars则更倾向于“大而全”,也更加符合多语言开发团队的综合需求。

作者所在的vivo消息推送平台团队是vivo最早引入Tars框架的团队之一,主要使用的开发语言是C++和Java。vivo消息推送平台作为vivo手机上稳定可靠的消息推送通道,支持每日百亿级的消息推送。在这一切的背后,Tars框架发挥着举足轻重的作用。作者团队从学习使用Tars框架到实现线上大规模应用Tars框架,再到在实践中发现问题并解决问题,积累了丰富的经验。虽然目前Tars官方文档日益丰富,但是市面上依然缺少深入讲解Tars框架源码和原理的书籍,因此团队成员联合编写了本书,希望对将要使用或正在使用Tars框架的读者有所帮助。

【特别说明】本书面向有一定开发经验的工程师,零基础的读者学习起来可能会略显吃力。

1.1 Tars框架简介

1.1.1 设计思想

Tars框架采用经典的微服务思想进行服务治理,并且采用分层架构设计。如图1-1所示,框架底层基于统一的Tars协议,并借助接口定义语言(Interface Definition Language,IDL)使开发者只需定义协议字段,无须关注底层实现细节,即可轻松完成跨平台远程调用。中间层的公共组件包含框架源码中的公共库和 SDK 提供的组件代码,业务方可以直接调用这些代码,以提升研发效率。从通信框架来看,Tars实现了高性能、高稳定和高可用的RPC通信,并且支持多语言(如C++、Go、Java、PHP、Node.js等)混合开发,同时还具备过载保护能力。在平台能力方面,Tars提供负载均衡、容灾容错、运维管理等服务治理功能。在运维支持方面,Tars集成了开箱即用的监控中心、日志中心、配置中心等工具,显著地降低了运维成本。

图1-1

由于采用了微服务架构,平台可以通过部署微服务的方式来增添新功能,例如,可以通过部署官方提供的benchMark服务,实现Tars接口的压测功能;可以通过部署官方提供的DCache服务,实现分布式缓存功能。

可以说,Tars框架在设计之初就充分考虑了开发者的需求。对于缺乏中间件或运维团队支持的中小型企业来说,使用Tars提供的一站式研发平台,开发者能够专注于业务逻辑本身,显著降低研发成本,进一步提升研发效率。

1.1.2 架构拓扑

如图1-2所示,Tars框架本身由9个微服务构成,其中8个(tarsWeb、tarsRegistry、tarPatch、tarsConfig、tarsLog、tarsStat、tarsProperty、tarsNotify)作为“中央大脑”组成统一的治理中心;而第9个服务——tarsNode,则作为唯一必需的节点代理,被部署在每一台应用服务器上,成为连接框架与业务的桥梁。业务集群中的每台服务器均必须部署一个tarsNode守护进程,由它来统一管理本机上一个或多个用户业务服务(如appServer)的生命周期。

图1-2

tarsWeb(管理平台):对于缺少PaaS平台的中小企业来说这个服务很方便,该服务相当于一个开源的PaaS平台,其中集成了运维部署、配置管理、日志中心、监控报表、告警中心、接口调试等常用功能。

tarsRegistry(主控服务):该服务提供服务节点的地址查询、注册、启停与管理等,并管理服务心跳,是实现服务注册与发现的核心组件。

tarsPatch(发布服务):负责Tars服务的发布与部署管理。

tarsConfig(配置中心):提供对Tars服务配置文件的集中管理功能。

tarsLog(日志中心):支持将服务日志输出到本地或远程日志中心。

tarsStat(调用统计):统计业务服务上报的各种调用信息,如总流量、平均耗时、超时率等,为服务监控与告警提供数据支持。

tarsProperty(属性统计):统计业务自定义上报的属性信息,如内存使用量、队列大小、缓存命中率等,以便在服务出现异常时进行告警。

tarsNotify(异常通知):负责接收并集中管理业务服务上报的各种异常与通知信息(如服务状态变更信息、数据库访问失败等),并提供告警信息的报告与通知功能。

tarsNode(节点管理):每台业务服务器上都需要有一个tarsNode进程,该进程与主控服务tarsRegistry保持通信,负责对业务服务进行统一管理,并接收业务服务上报的心跳。

1.1.3 服务交互流程

接下来介绍上述服务之间的交互流程。Tars服务交互流程的概况如图1-3所示,我们分5个方面来详细介绍。

图1-3

服务发布流程:在tarsWeb管理平台上传应用服务的发布包到tarsPatch服务节点,上传成功后,在tarsWeb管理平台上提交发布请求。tarsRegistry服务接收到请求后将请求下发至目标服务器的tarsNode,然后tarsNode从tarsPatch拉取发布包到本地,执行服务启动脚本,从而拉起应用服务。

管理命令流程:在tarsWeb管理平台提交管理应用服务的命令请求,由tarsRegistry服务将命令请求转发至对应的tarsNode,再由tarsNode向具体的应用服务发送并执行该管理命令。

心跳上报流程:应用服务启动后,会定期向本机的tarsNode上报心跳,然后tarsNode把服务心跳信息汇总并上报到tarsRegistry服务,由tarsRegistry进行统一的节点状态管理。

信息上报流程:应用服务运行后,会定期将调用统计信息上报至tarsStat服务,将远程日志输出到tarsLog服务,将自定义属性信息上报至tarsProperty服务,将异常信息上报到tarsNotify服务,并从tarsConfig服务拉取所需的配置信息。

客户端请求服务端流程:客户端可以通过应用服务的对象名Obj间接访问应用服务,客户端会从tarsRegistry获取该服务的路由信息(如IP、端口),然后根据具体的业务特性(如同步或者异步,TCP或者UDP方式)发起请求;当然客户端也可以通过IP和端口直接访问应用服务。

1.1.4 Tars服务的基础概念

前面介绍了Tars框架的核心服务和交互流程,接下来介绍Tars服务的基础概念。

1.App

App 即应用,是一组相关服务的逻辑集合,开发者可以根据自己的业务系统自定义应用名,例如vivo消息推送平台的应用名可定义为vpush。

在Tars系统中,应用名必须全局唯一,通常对应代码中的命名空间。需要注意的是,Tars这个应用名由框架保留使用,业务服务不可占用。

2.Server

Server 即服务,是提供具体业务功能的进程。Server名称可以根据业务功能命名,并展示在 tarsWeb 管理平台左边的服务树上。一个 Server 必须归属于某个App,且在所属App下具备唯一性。一般命名为XXServer,例如 LogServer、TimerServer 等。一个Server代表一个独立的可执行程序,可部署于一个或多个IP上,实现一组特定的业务接口。

3.Servant

Servant 即服务提供者,提供一个或多个接口(interface)供客户端调用。在代码层面,Servant 对应一个继承自 Tars 协议文件中的接口的类(内含多个具体的函数),该类由业务开发者实现其接口定义的具体函数。一个 Servant 必须属于某个Server,且在所属Server下名称唯一。

Servant名称一般以Obj结尾(如HelloObj),在客户端调用时,应使用其全称App.Server. Servant(如Test.HelloServer.HelloObj),当客户端调用Server时,指定 Servant 的全称即可完成远程通信。

Tars 之所以采取App、Server、Servant构成的3层命名结构,其目的是尽可能地避免不同业务开发者开发的服务名称和Servant名称相冲突。

4.module

module是Tars协议文件中的关键字,定义了协议的命名空间。它对应了各种编程语言中的命名空间(如C++)、包名(如Java、Go)或模块(如Node.js、PHP)。

1.2 实战项目介绍

为了帮助读者更好地了解Tars项目的实战开发,本书的案例中会穿插一个实战项目,项目名称是chisha(即“吃啥”)。该项目主要解决人们一日三餐的问题——早上吃啥?中午吃啥?晚上吃啥?

如图1-4所示,该项目主要分为4个模块,其中chisha-logic用于随机生成当日菜单;chisha-user用于处理用户注册和登录;chisha-food用于管理菜单,包含新增食物、删除食物、获取食物列表3个Tars接口;chisha-web是项目的用户交互界面,为用户提供网页服务。为了更好地展现Tars框架多语言的特性,在本项目中,chisha-logic用Go语言编写,chisha-user用C++语言编写,chisha-food用Java语言编写,chisha-web用Node.js编写。

图1-4

项目主要功能如下:

用户注册和登录;

用户添加、查询或删除自己喜爱的食品;

用户单击“吃啥”按钮,系统可随机为用户生成当日推荐食品。

相关图书

DeepSeek原理与项目实战大模型部署、微调与应用开发
DeepSeek原理与项目实战大模型部署、微调与应用开发
Python编程快速上手——让烦琐工作自动化(第3版)
Python编程快速上手——让烦琐工作自动化(第3版)
精通MCP:AI智能体开发实战
精通MCP:AI智能体开发实战
C++程序设计语言(第4版)(上、下册)
C++程序设计语言(第4版)(上、下册)
软件工程3.0:大模型驱动的研发新范式
软件工程3.0:大模型驱动的研发新范式
图机器学习
图机器学习

相关文章

相关课程