tars framework 源码解读(一) 总述

tars framework源码 其实分两块。

一块是tarscpp 这块的代码跟外面的tarscpp貌似是一毛一样的。这块代码实现了一个服务的基础lib

一块是framework基础服务代码实现。这些服务撑起来整个tars系统的框架功能。直接用Introduction.zh.md中的图来说明一下吧。

整体架构的拓扑图主要分为2个部分:服务节点与公共框架节点。

服务节点:

服务节点可以认为是服务所实际运行的一个具体的操作系统实例,可以是物理主机或者虚拟主机、云主机。随着服务的种类扩展和规模扩大,服务节点可能成千上万甚至数以十万计。 每台服务节点上均有一个Node服务节点和N(N>=0)个业务服务节点,Node服务节点会对业务服务节点进行统一管理,提供启停、发布、监控等功能,同时接收业务服务节点上报过来的心跳。

公共框架节点:

除了服务节点以外的服务,其他服务节点均归为一类。

公共框架节点,数量不定,为了自身的容错容灾,一般也要求在在多个机房的多个服务器上进行部署,具体的节点数量,与服务节点的规模有关,比如,如果某些服务需要打较多的日志,就需要部署更多的日志服务节点。

又可细分为如下几个部分:

Web管理系统:在Web上可以看到服务运行的各种实时数据情况,以及对服务进行发布、启停、部署等操作;

Registry(路由+管理服务):提供服务节点的地址查询、发布、启停、管理等操作,以及对服务上报心跳的管理,通过它实现服务的注册与发现;

Patch(发布管理):提供服务的发布功能;

Config(配置中心):提供服务配置文件的统一管理功能;

Log(远程日志):提供服务打日志到远程的功能;

Stat(调用统计):统计业务服务上报的各种调用信息,比如总流量、平均耗时、超时率等,以便对服务出现异常时进行告警;

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

Notify(异常信息):统计业务上报的各种异常信息,比如服务状态变更信息、访问db失败信息等,以便对服务出现异常时进行告警;

原则上要求全部的节点之间网络互通,至少每台机器的node能够与公共框架节点之间都是可以连通的。

框架服务在整个系统中运行时,服务之间的交互分:业务服务之间的交互、业务服务与框架基础服务之间的交互。

服务发布流程:在Web系统上传server的发布包到patch,上传成功后,在web上提交发布server请求,由registry服务传达到node,然后node拉取server的发布包到本地,拉起server服务。

管理命令流程:Web系统上的可以提交管理server服务命令请求,由registry服务传达到node服务,然后由node向server发送管理命令。

心跳上报流程:server服务运行后,会定期上报心跳到node,node然后把服务心跳信息上报到registry服务,由registry进行统一管理。

信息上报流程:server服务运行后,会定期上报统计信息到stat,打印远程日志到log,定期上报属性信息到property、上报异常信息到notify、从config拉取服务配置信息。

Client访问Server流程:client可以通过server的对象名Obj间接访问server,Client会从registry上拉取server的路由信息(如ip、port信息),然后根据具体的业务特性(同步或者异步,tcp或者udp方式)访问server(当然client也可以通过ip/port直接访问server)。

原文地址:https://www.cnblogs.com/yylingyao/p/11584659.html

时间: 2024-08-30 10:24:42

tars framework 源码解读(一) 总述的相关文章

tars framework 源码解读(三) servant部分章节。客户端部分。完整的tars调用流程详解

一般tars客户端使用方式: 我们用客户端进行tars rpc调用时候,一般如下面这样写: 方式一. //直连方式 TC_Endpoint ep; AdminFPrx pAdminPrx; //服务管理代理 string sAdminPrx = "[email protected]"+_serverObjectPtr->getLocalEndpoint().toString(); pAdminPrx = Application::getCommunicator()->str

tars framework 源码解读(二) libservant部分源码的简介

还是直接用官方原图解说 服务端:可以理解成对外公开的接口 被调用时候响应流程 的底层封装 (响应端) NetThread: 收发包,连接管理,多线程(可配置),采用epoll ET触发实现,支持tcp/udp: BindAdapter: 绑定端口类,用于管理Servant对应的绑定端口的信息操作: ServantHandle:业务线程类,根据对象名分派Servant的对象和接口调用: AdminServant: 管理端口的对象: ServantImp: 继承Servant的业务处理基类(Serv

tars framework 源码解读(四) servant部分章节。客户端部分。selectAdapterProxy实现流程 选取合适的AdapterProxy

这块内容是个关键性流程. tars调用在调用层,一般只会简单的 PatchPrx proxy = Application::getCommunicator()->stringToProxy<PatchPrx>(_patchRequest.patchobj); proxy->timeout(60000); proxy只是一个ServantProxy,他只是作为一个本地与服务器组中某个服务器名的几个服务进程打交道的代表,这些具体干活的服务进程,会分别部署在几个不同的服务器物理机中,一般

tars framework 源码解读(五) servant部分章节。客户端部分。客户端部分的一些类及其配置细节

ServantProxy类 很有意思的是,服务端的实现叫Servant,对应客户端连接器的名就叫ServantProxy,顾名思义,是客户端连接的代理. selectNetThreadInfo的实现: 1获取ServantProxyThreadData pSptd; 2如果pSptd还没初始化过,先new本Servant ObjectProxyNum个ReqInfoQueue队列并赋值给pSptd->_reqQueue,这个ObjectProxyNum正好也是Servant的ObjectProx

HttpClient 4.3连接池参数配置及源码解读

目前所在公司使用HttpClient 4.3.3版本发送Rest请求,调用接口.最近出现了调用查询接口服务慢的生产问题,在排查整个调用链可能存在的问题时(从客户端发起Http请求->ESB->服务端处理请求,查询数据并返回),发现原本的HttpClient连接池中的一些参数配置可能存在问题,如defaultMaxPerRoute.一些timeout时间的设置等,虽不能确定是由于此连接池导致接口查询慢,但确实存在可优化的地方,故花时间做一些研究.本文主要涉及HttpClient连接池.请求的参数

Gson 源码解读

开源库地址:https://github.com/google/gson 解读版本:2.7 Gson是一个可以用来将Java对象转换为JSON字符串的Java库.当然,它也可以把JSON字符串转换为等价的Java对象.网上已经有了不少可将Java对象转换成JSON的开源项目.但是,大多数都要求你在Java类中加入注解,如果你无法修改源码的话就比较坑爹了,此外大多数开源库并没有对泛型提供完全的支持.于是,Gson在这两个重要的设计目标下诞生了.Gson可以作用于任意的Java对象(包括接触不到源码

seajs 源码解读

之前面试时老问一个问题seajs 是怎么加载js 文件的 在网上找一些资料,觉得这个写的不错就转载了,记录一下,也学习一下 seajs 简单介绍 seajs是前端应用模块化开发的一种很好的解决方案.对于多人协作开发的.复杂庞大的前端项目尤其有用.简单的介绍不多说,大家可以到seajs的官网seajs.org参看介绍.本文主要简单地解读一下seajs的源码和模块化原理.如果有描述不实的地方,希望大家指正和交流.注:本文的解析是基于seajs的2.2.1版本. 目录结构 解压seajs之后的src目

REST、DRF(View源码解读、APIView源码解读)

一.REST 1.什么是编程? 数据结构和算法的结合 2.什么是REST? 首先我们回顾下我们之前的图书管理系统,我们设计了这样的URL,如下: 127.0.0.1:9001/books/ 127.0.0.1:9001/get_all_books/ 访问所有的数据 127.0.0.1:9001/books/{id}/ 127.0.0.1:9001/books/{id}?method=get 访问单条数据 127.0.0.1:9001/books/add/ 127.0.0.1:9001/books

SpringAOP实现源码解读

1.Spring AOP样例 简单介绍怎么样基于Spring实现AOP编程(注解方式在目标对象方法中织入通知方法) 2.AOP关键注解@EnableAspectJAutoProxy 分析@EnableAspectJAutoProxy注解源,了解实现AOP需要给容器提供的配置信息 3.AOP实现的关键类AnnotationAwareAspectJAutoProxyCreator 静态分析Spring框架里面,创建AOP代理对象的类 4.AnnotationAwareAspectJAutoProxy