开源代码TarsGo-v1.0.0源码分析之server

栏目: Go · 发布时间: 5年前

内容简介:在上一篇文章,已经介绍了底层的transport本篇文章讲解server。

在上一篇文章,已经介绍了底层的transport

开源代码TarsGo-v1.0.0源码分析之transport

本篇文章讲解server。

Tars是腾讯开源的一款微服务框架。在去年9月, 腾讯宣布正式开源 Tars 的 Golang 版本TarsGo。

当TarGo开源的时候,就想对此开源代码进行学习。近期刚好有空,就看了看。说实话,本人并未使用Tars框架,本文只是对TarsGo源码进行分析。

Tars整体框架介绍,可以参考https://github.com/TarsCloud/Tars/blob/master/Introduction.md

还有文章:

腾讯 Tars 开源 Go 版本 Tars-Go,并发性能比 gRPC 高 5 倍

https://my.oschina.net/editorial-story/blog/2054185

关于TarsGo的介绍还有:

https://github.com/TarsCloud/TarsGo/blob/master/README.zh.md

源码地址:

https://github.com/TarsCloud/TarsGo

按照本人习惯,从低版本进行研究,此次源码分析定位v1.0.0版本

开源代码TarsGo-v1.0.0源码分析之server

源码目录:

开源代码TarsGo-v1.0.0源码分析之server

在Tarsgo中,有两个模块client和server

开源代码TarsGo-v1.0.0源码分析之server

此图来源https://github.com/TarsCloud/Tars/blob/master/Introduction.md

https://github.com/TarsCloud/Tars/blob/master/Introduction.md

server服务运行后,会定期上报心跳到node,node然后把服务心跳信息上报到registry服务,由registry进行统一管理。 Client访问Server流程:client可以通过server的对象名Obj间接访问server,Client会从registry上拉取server的路由信息(如ip、port信息),然后根据具体的业务特性(同步或者异步,tcp或者udp方式)访问server(当然client也可以通过ip/port直接访问server)。

https://github.com/TarsCloud/Tars/blob/master/Introduction.md

在github.com/TarsCloud/TarsGo/tars/tools/Demo中有构建client和server,这将是源码开始的第一步。

开源代码TarsGo-v1.0.0源码分析之server

看源码

github.com/TarsCloud/TarsGo/tars/tools/Demo/Server.go

开源代码TarsGo-v1.0.0源码分析之server

imp,app这两个东西很重要。是用来构建TarsProtocol的部件。

13:AddServant,添加服务(参数是imp,还有一个需要生成的代码)

14:Run

github.com/TarsCloud/TarsGo/tars/tools/Demo/ServantImp.go

开源代码TarsGo-v1.0.0源码分析之server

github.com/TarsCloud/TarsGo/tars/tools/Demo/Servant.tars

开源代码TarsGo-v1.0.0源码分析之server

github.com/TarsCloud/TarsGo/tars/tools/Demo/Server.conf

开源代码TarsGo-v1.0.0源码分析之server

这只是个例子,知道就可以了。

那么从AddServant入手

github.com/TarsCloud/TarsGo/tars/servanthandle.go

开源代码TarsGo-v1.0.0源码分析之server

19:构建了TarsProtocol,传入的参数是v和f,都是AddServant传入的。

在github.com/TarsCloud/TarsGo/tars/tools/Demo/Server.go main函数中已经有讲到imp和一个需要生成的obj

20:到了transport的代码,这个在文章 开源代码TarsGo-v1.0.0源码分析之transport 有讲解到

21:很重要,所有的服务都添加到了goSvrs中

TarsProtocol

github.com/TarsCloud/TarsGo/tars/tarsprotocol.go

开源代码TarsGo-v1.0.0源码分析之server

构建tarsProtocol的接口

开源代码TarsGo-v1.0.0源码分析之server

TarsProtocol,需要两个参数,dispatcher接口,serverImp。

21:初始化的时候,传入的参数。对应AddServant代码

对于transport中的接口

github.com/TarsCloud/TarsGo/tars/transport/tarsserver.go

开源代码TarsGo-v1.0.0源码分析之server

那么构建的话

github.com/TarsCloud/TarsGo/tars/tarsprotocol.go

开源代码TarsGo-v1.0.0源码分析之server

Invoke,数据处理部分

30:多了一层编码处理

42:则是dispatcher的Dispatch处理,传入的参数有serverImp。这种用法更多的是c++中的,指针传递。在golang中我个人认为是不推荐的。

开源代码TarsGo-v1.0.0源码分析之server

ParsePackage:包解析,这个不解释了,TarSRequest代码很简单。

InvokeTimeout:超时处理,也不解释了,代码比较简单。

小结:最底层是transport,再之上是构建tarsProtocol。那么这里讲解的是tarsProtocol的封装。又将协议部分封装成了

开源代码TarsGo-v1.0.0源码分析之server

server提供两个功能:

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

https://github.com/TarsCloud/Tars/blob/master/Introduction.md

提供与node的心跳

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

https://github.com/TarsCloud/Tars/blob/master/Introduction.md

提供client访问的服务

继续

github.com/TarsCloud/TarsGo/tars/application.go

开源代码TarsGo-v1.0.0源码分析之server

159:是cfg读取和初始化

161-163:添加了默认的admin servant

178-190:遍历所有的servant,开启servant服务。在AddServant中的21行中服务添加到了goSvrs中。

186:开启了transport中的tarsServer的Server(此代码可以回过头去看文章 开源代码TarsGo-v1.0.0源码分析之transport

初始化

开源代码TarsGo-v1.0.0源码分析之server

中间代码略

开源代码TarsGo-v1.0.0源码分析之server

111:构建了adapter的配置。这里很重要

开源代码TarsGo-v1.0.0源码分析之server

153:构建了AdminAdapter

开源代码TarsGo-v1.0.0源码分析之server

在mainloop中

215:遍历所有的adapters

216-224:对adapters进行keepalive。

server的两个功能,从此打通了。

1、对node提供keepalive

2、对client提供服务。

总体架构的分层为(从底层开始):

1、transport之TarsServer

开源代码TarsGo-v1.0.0源码分析之server

这里的接口并非真正对外的接口

2、tarsProtocol层

开源代码TarsGo-v1.0.0源码分析之server

这里提供两个接口,用于真正协议的接口。

这里的名字会很误导,transport中的名字也叫TarsProtocol。这里要注意就是了。

3、AddServant层

开源代码TarsGo-v1.0.0源码分析之server

将所有的TarsServer存放在goSvrs中进行管理

那么以amin为例子,讲解写Protocol

github.com/TarsCloud/TarsGo/tars/application.go

开源代码TarsGo-v1.0.0源码分析之server

adf,ad为TarsProtocol的两个模块

在tars中提供了很多的Protocol

开源代码TarsGo-v1.0.0源码分析之server

刚好以admin为例讲解

github.com/TarsCloud/TarsGo/tars/protocol/res/adminf/AdminF_IF.go

开源代码TarsGo-v1.0.0源码分析之server

开源代码TarsGo-v1.0.0源码分析之server

Dispatch为TarsProtocol的接口

97:则为传入的imp参数,对于admin有新的接口要求

开源代码TarsGo-v1.0.0源码分析之server

99:Dispatch中的要处理的msg,shutdown

100:调用了imp的shutdown

104:Dispatch中的要处理的msg,notify

110:调用了imp的Notify

github.com/TarsCloud/TarsGo/tars/admin.go

这里为admin中的imp

开源代码TarsGo-v1.0.0源码分析之server

这里的代码很简单。

总结:

server提供的功能是很简单的。代码分层也是比较清晰的。但代码有些负责,只要分清楚,这里的功能以及分层。整个流程还是很好把握的。

龚浩华

月牙寂道长

qq:29185807

2019年05月28日

如果你觉得本文对你有帮助,可以转到你的朋友圈,让更多人一起学习。

第一时间获取文章,可以关注本人公众号:月牙寂道长,也可以扫码关注

开源代码TarsGo-v1.0.0源码分析之server


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

iOS面试之道

iOS面试之道

故胤道长、唐巧 / 电子工业出版社 / 2018-7 / 59.00元

《iOS面试之道》是作者将多年的工作经验和积累,结合具体面试内容总结而成的。 《iOS面试之道》共分为3部分。第1部分为面试准备,详细介绍求职中遇到的基本问题,作者根据其多年的经验,在面试流程、简历投递、复习准备方面给出了完善的参考意见和建议。第2部分为算法知识。算法几乎是各种水平的程序员都要面对的考查内容。该部分采用Swift语言重新审视了多种数据结构和算法原理,可以说是为iOS开发者量身......一起来看看 《iOS面试之道》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

html转js在线工具
html转js在线工具

html转js在线工具