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

相关文章

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

MySQL 缓存机制与架构解析(最新推荐)

《MySQL缓存机制与架构解析(最新推荐)》本文详细介绍了MySQL的缓存机制和整体架构,包括一级缓存(InnoDBBufferPool)和二级缓存(QueryCache),文章还探讨了SQL... 目录一、mysql缓存机制概述二、MySQL整体架构三、SQL查询执行全流程四、MySQL 8.0为何移除查

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

mybatis的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。