TAF /tars必修课(一):整体架构理解

2023-11-01 13:21

本文主要是介绍TAF /tars必修课(一):整体架构理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

来自零点智能社区

一、前言

TAF,一个后台逻辑层的高性能RPC框架,目前支持C++,Java, node 三种语言, 往后可能会考虑提供更多主流语言的支持如 go等,自定义协议JCE,同时也支持HTTP。 它集可扩展协议编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。

当前已开源,易名为“TARS”,赶紧上github去star一下吧。

此系列文章选用Java语言进行描述,先对TAF部署开发环境、相关概念和整体架构做介绍,后面分taf-server、taf-client两部分展开,相关文档不多,主要从代码上进行理解。

二、部署开发环境

1. 部署

TAF的部署有管理平台的支持,如果是147或213测试环境,申请服务节点和部署都不需要管理人员的审批,已经接入docker环境,按需申请,上线成功后支持动态扩容,非常方便,使用完关闭下线即可。

2. 开发

需要使用maven进行项目管理,引入如下依赖:

<dependencies><dependency><groupId>qq-central</groupId><artifactId>taf-server</artifactId><version>3.0.0-SNAPSHOT</version></dependency><dependency><groupId>qq-central</groupId><artifactId>taf-proxy</artifactId><version>3.0.0-SNAPSHOT</version></dependency>
</dependencies>

然后需要在code平台上创建一个svn代码仓库,将创建好对应的位置填写到管理平台的编译选项中,这样平台就可以直接从你填写的位置去拉取代码到编译机上进行编译了。注意:代码仓库需要添加一个用户svn_taf 的读权限;当然也可以采用其他的编译方式,如申请编译机和开发机,可km上查找并理解区分一下taf 测试机,编译机,开发机。

最后需要有一个mnet 跳板机,这个需要leader审批,申请之后安装go工具用来远程登录taf节点看日志,这样准备工作就基本完成了。

在开发中只需要关注业务逻辑实现即可,但如果想进一步了解清楚框架底层的机制和实现,后面的文章将进行相关探讨。

部署开发过程如下图所示:

 

三、整体交互流程

官方文档的这张图再清晰不过了

其中registry为主控服务,提供路由查询; 另外这里的patch为发布服务请求,传达到patch服务后由node服务在各个节点上拉起;

petsvr服务会定期上报心跳到node服务,由node服务统一将心跳上报registry,我觉得这样是要比单独一个个上报更加高效的,同时可以向petsvn发送管理admin命令;

下面的各个服务节点就是TAF提供的运营支持,定期上报统计信息到stat,打印远程日志到log,定期上报属性信息到property、上报异常信息到notify、从config拉取服务配置信息 ;

最后需要注意,Java部分代码没有主控的实现,仅包括Server和Client端,但在使用上只要将registry,node和各个运营服务部署运行成功,服务之间都是可以通过走JCE协议进行交互的。

四、配置管理

TAF有配置管理服务,此外管理平台上也有许多配置项,代码中有很多地方都会从配置文件中读取配置项的,容易搞混,这里先简单做个介绍。

服务上线后,跳板机登录进入到目录 /usr/local/app/taf,展开目录结构如下:

├── app_log -> /dockerdata
└── app.service├── bin   ├── apps   ├── conf   ├── lib   └── log├── conf   └── app.service.config.conf└── data└── tafnodes.dat

其中:app.service为你上线服务对应的应用名和服务名;

apps目录下的ROOT即为项目代码资源所在位置;

管理平台的服务配置项上添加的配置文件,可push或拉取到本地 bin/conf 目录;

另外,有三个重要的默认目录提一下,

应用根目录:basepath=/user/local/app/taf/app.service/bin日志目录:logpath=/user/local/app/taf/app_log数据目录:datapath=/user/local/app/taf/app.service/data

当然以上这些配置你也在配置文件中看到,管理平台上的操作为:

服务管理页中,点击私有模版可对模版进行更改;

点击Servant管理页可对单个服务的最大连接数,线程数,线程池大小,是否灰度等选项进行更改,如下图:

具体的这些配置项,在之后会逐一提到。

五、RPC

RPC(Remote Procedure Call),即远程过程调用,可理解为一种通信协议,该协议允许运行于一台计算机的程序调用另一台计算机的子程序。使用RPC框架的好处就是不需要额外编写网络交互这部分代码了,这部分代码编写上也极容易出错,因此框架相当于在Socket层之上做了一层可靠的应用层封装。另外,远程调用涉及数据包的编解码,框架通常会定义接口描述语言(Interface Description Language,IDL),方便跨平台的远程过程调用。

TAF框架正是提供了以上问题的完整方案,服务端采用异步NIO通信模式,客户端可支持同步或异步调用; 数据编码提供了JCE协议支持,同时支持编写IDL运行脚本实现代码自动生成。从某种意义来说,我觉得可以简化跨语言混合编程,

在服务端处理客户端的并发请求中,TAF实现上采用了Reactor多线程模式,这里贴两张网上看到觉得比较好的NIO时序图,有利于理解。

服务端:

客户端:

下节单独对TAF线程模型做介绍。

感谢阅读,有错误之处还请不吝赐教。

上周答辩结束,终于有时间把之前整理的整理一下

这段时间的实习还是收获良多,除了技术上的,还有思维逻辑和方法论上的吧,有许多的致谢,留待以后慢慢言谢吧

0827 update:

不知不觉已完成了预期的总结,该系列文章汇总如下,欢迎阅读指教,交流学习:

TAF-必修课(一):整体架构理解

TAF-必修课(二):Reactor多线程模型

TAF-必修课(三):Server启动全过程

TAF-必修课(四):过载保护

TAF-必修课(五):Client端调用

TAF-必修课(六):容错

TAF-必修课(七):负载均衡

当然,TAF相关的内容远不止这些,比如这里暂时没有具体探讨的还有:协议、IDC分组、Set部署、就近接入、日志相关、消息染色、配置中心、运营监控服务等;

计划往后继续深入学习慢慢补充,或许还可以搞成一个系列,再升级到选修课 …..(先给自己定个小目标,比如 * * *是吧)

由于水平有限,文章难免有错误或纰漏之处,请各位看官不吝赐教

转载于:https://www.cnblogs.com/mtcnn/p/9410015.html

这篇关于TAF /tars必修课(一):整体架构理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/323290

相关文章

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

回调的简单理解

之前一直不太明白回调的用法,现在简单的理解下 就按这张slidingmenu来说,主界面为Activity界面,而旁边的菜单为fragment界面。1.现在通过主界面的slidingmenu按钮来点开旁边的菜单功能并且选中”区县“选项(到这里就可以理解为A类调用B类里面的c方法)。2.通过触发“区县”的选项使得主界面跳转到“区县”相关的新闻列表界面中(到这里就可以理解为B类调用A类中的d方法

如何理解redis是单线程的

写在文章开头 在面试时我们经常会问到这样一道题 你刚刚说redis是单线程的,那你能不能告诉我它是如何基于单个线程完成指令接收与连接接入的? 这时候我们经常会得到沉默,所以对于这道题,笔者会直接通过3.0.0源码分析的角度来剖析一下redis单线程的设计与实现。 Hi,我是 sharkChili ,是个不断在硬核技术上作死的 java coder ,是 CSDN的博客专家 ,也是开源

MySQL理解-下载-安装

MySQL理解: mysql:是一种关系型数据库管理系统。 下载: 进入官网MySQLhttps://www.mysql.com/  找到download 滑动到最下方:有一个开源社区版的链接地址: 然后就下载完成了 安装: 双击: 一直next 一直next这一步: 一直next到这里: 等待加载完成: 一直下一步到这里

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

响应式架构

介绍 响应式架构(Reactive Architecture)是一种面向服务和事件的系统设计方法,旨在提高系统的可扩展性、弹性和容错能力。它适用于构建分布式系统,特别是在云环境和微服务架构中。响应式架构的核心理念是通过事件驱动和数据流来实现各个组件之间的解耦,从而提高整个系统的响应能力和可靠性。 响应式架构的主要特点包括: 响应性:系统能够快速响应外部事件和内部变化,确保在各种负载和故障情

isa指针的理解

D3实例isa指向D3类对象。D3类的话isa指向D3元类对象。D3元类保存类中的方法调度列表,包括类方法和对象方法

大型网站架构演化(六)——使用反向代理和CDN加速网站响应

随着网站业务不断发展,用户规模越来越大,由于中国复杂的网络环境,不同地区的用户访问网站时,速度差别也极大。有研究表明,网站访问延迟和用户流失率正相关,网站访问越慢,用户越容易失去耐心而离开。为了提供更好的用户体验,留住用户,网站需要加速网站访问速度。      主要手段:使用CDN和反向代理。如图。     使用CDN和反向代理的目的都是尽早返回数据给用户,一方面加快用户访问速

大型网站架构演化(五)——数据库读写分离

网站在使用缓存后,使绝大部分数据读操作访问都可以不通过数据库就能完成,但是仍有一部分读操作(缓存访问不命中、缓存过期)和全部的写操作需要访问数据库,在网站的用户达到一定规模后,数据库因为负载压力过大而成为网站的瓶颈。      目前豆粉的主流数据库都提供主从热备功能,通过配置两台数据库主从关系,可以将一台数据库服务器的数据更新同步到另一台服务器上。网站利用数据库的这一功能,

大型网站架构演化(四)——使用应用服务器集群改善网站的并发能力

使用集群是网站解决高并发、海量数据问题的常用手段。当一台服务器的处理能力、存储空间不足时,不要企图去更换更强大的服务器,对大型服务器而言,不管多么强大的服务器,都满足不了网站持续增长的业务需求。这种情况下,更恰当的做法是增加一台服务器分担原有服务器的访问及存储压力。 对网站架构而言,只要能通过增加一台服务器的方式改善负载压力,就可以以同样的方式持续增加服务器不断改善系统性能,从而实现系统