tarsgo初探
参考:https://mp.weixin.qq.com/s/aO8ybUiu5htqcoGAwxwc5Q?utm_source=tuicool&utm_medium=referral 1、Go的goroutine并发机制使Go非常适合用于大规模高并发后端服务程序的开发
、tars是个开源的微服务平台,包含了一个高性能的rpc框架和服务管理平台
tarsweb:监视服务节点的运行时状态,以及发布,部署,启动或停止服务器
tarsregistry:Registry 是微服务集群的管理和控制节点,提供服务注册和发现等功能。
tarspatch:Tarspatch提供发布管理服务。Tarsweb使用它向服务器发布指定版本的服务
tarsconfig:Tarsconfig作为配置中心。它管理所有服务器的服务配置文件
tarslog:Tarslog提供远程日志服务。来自服务器的日志将发送到tarslog。Tarslog存储这些日志以供进一步使用
tarsstat:来自服务器的Tarsstat统计信息,例如工作负载,响应时间,超时请求比率。Monitor服务使用这些信息来发现异常服务器并发出警告
tartproperty:除了来自tarsstat的统计信息之外,用户还可以为服务器定义与业务相关的属性,例如内存使用情况,队列大小,缓存命中率。Monitor服务使用这些信息来发现异常服务器并发出警告
tarsnotify:从服务器Tarsnotify统计异常信息,如db failure,发现异常服务器并发出警告
Tarsnode管理服务器。它可以停止,启动,发布和监控它们。同时,它接受来自服务器的心跳
、容错(排除名称服务、客户端屏蔽)
、(过载保护)为避免因突发请求或机器故障导致系统过载,tars在框架中处理此方案。为了提高系统吞吐量,服务器使用请求队列异步处理请求。服务器监视队列的长度。如果长度超过阈值,则服务器拒绝新请求。如果请求长时间保留在队列中,服务器也会丢弃请求
5、调用方式主要以 RPC 为主,支持同步、异步和单向调用几种方式。在服务治理方面除了支持服务注册、发现等业界常说的能力之外,还提供面对海量访问的一些其它治理能力,如 Set 模型、自动区域感知、过载保护等,语言上除了此次新支持的 Golang,目前已经支持了 C++、Java、NodeJS 与 PHP
6、服务节点是 Tars 运行的原子单元,可以是一个容器也可以是一个虚机或物理机,一个业务服务通过部署多个服务节点来解决容量和容错问题。服务节点上包括一个 node 管理服务和一个或多个业务服务,node 服务对本节点的服务进行统一管理,提供启停、监控服务节点等功能,同时接收业务服务节点上报过来的心跳,上报给 Registry 作为服务发现的数据来源
7、(基础服务集群)基础服务集群是为解决微服务治理而设计的一系列服务,服务节点数量不定,为了自身的容错容灾,一般也要求在多个服务器上进行部署,具体的节点数量与业务规模有关,比如,如果业务规模大需要打较多的日志,就需要部署更多的日志服务节点。基础服务主要包括监控统计、配置中心、日志聚合、认证鉴权和分布式调用链等。Tars 具有非常完善的服务治理能力
8、(屏蔽故障)屏蔽故障节点,Client 根据调用被调服务的异常情况判断是否有故障来更快地进行故障屏蔽。具体策略是,当 Client 调用某个服务器出现调用连续超时超过设置阈值,或者调用的超时比率超过一定百分比阈值,Client 就会对此服务器节点进行屏蔽,让流量分发到正常的节点上去。对屏蔽的服务器节点,每隔一定时间进行重连,如果正常,则进行正常的流量分发
服务端启动
./HelloServer --config=config.conf
package main import (
"fmt"
"github.com/TarsCloud/TarsGo/tars"
"TestApp"
)
//tars.Communicator should only init once and be global
var comm *tars.Communicator func main() {
comm = tars.NewCommunicator()
obj := "TestApp.TestServer.HelloObj@tcp -h 127.0.0.1 -p 10015 -t 60000"
app := new(TestApp.Hello)
comm.StringToProxy(obj, app)
var req string="Hello Wold"
var res string
ret, err := app.TestHello(req, &out)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(ret, out)
} 说明:
/*
- TestApp包是由tars2go工具使用tars协议文件生成的.
- comm: Communicator用于与服务端进行通信,它应该只初始化一次并且是全局的.
- obj: 对象名称,用于指定服务端的ip和端口。通常在"@"符号之前我们只需要对象名称.
- app: 与tars文件中的接口关联的应用程序。 在本例中它是TestApp.Hello.
- StringToProxy: StringToProxy方法用于绑定对象名称和应用程序,如果不这样做,通信器将不知道谁与应用程序通信 .
- req, res: 在tars文件中定义的输入和输出参数,用于在TestHello方法中.
- app.TestHello用于调用tars文件中定义的方法,并返回ret和err.
*/
------------------------------------------------------------------------------------------------------------------------
HTTP调用,tars无关,没有用到远程rpc
1、创建工程,生成HTTP服务(没有生成http的,直接复用tars的)
2、修改makefile,去掉"CONFIG := client"
3、将GoWebServer.go简化
4、实现GoWebImp.go
5、进入$GOPATH/src/amc/GoWebServer,make生成相应的执行文件,启动
6、HTTP服务测试
------------------------------------------------------------------------------------------------------------------------
TARS原生rpc调用:
1、创建工程,生成TARS服务
sh $GORATH/src/github.com/TarsCloud/TarsGo/tars/tools/create_tars_server.sh TestApp HelloGo SayHello
2、按需编写TARS协议
3、使用tars2go进行协议识别
$GORATH/bin/tars2go SayHello.tars
4、调整SayHelloImp.go
5、调整HelloGo.go
6、make,生成可执行服务端代码
7、实现client.go代码
root@cvm-172_16_30_19:/usr/local/gopath/src/TestApp/HelloGo/client # cat client.go
package main import (
"fmt"
"github.com/TarsCloud/TarsGo/tars" "TestApp"
) //只需初始化一次,全局的
var comm *tars.Communicator
func main() {
comm = tars.NewCommunicator()
obj := "TestApp.HelloGo.SayHelloObj@tcp -h 127.0.0.1 -p 10015 -t 60000"
app := new(TestApp.SayHello)
/*
// if your service has been registered at tars registry
comm = tars.NewCommunicator()
obj := "TestApp.HelloGo.SayHelloObj"
// tarsregistry service at 192.168.1.1:17890
comm.SetProperty("locator", "tars.tarsregistry.QueryObj@tcp -h 192.168.1.1 -p 17890")
*/ comm.StringToProxy(obj, app)
reqStr := "tars"
var resp string
ret, err := app.EchoHello(reqStr, &resp)
if err != nil {
fmt.Println(err)
return
}
fmt.Println("ret: ", ret, "resp: ", resp)
}
8、启动,验证通过
tarsgo初探的更多相关文章
- 初探领域驱动设计(2)Repository在DDD中的应用
概述 上一篇我们算是粗略的介绍了一下DDD,我们提到了实体.值类型和领域服务,也稍微讲到了DDD中的分层结构.但这只能算是一个很简单的介绍,并且我们在上篇的末尾还留下了一些问题,其中大家讨论比较多的, ...
- CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探
CSharpGL(8)使用3D纹理渲染体数据 (Volume Rendering) 初探 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码 ...
- 从273二手车的M站点初探js模块化编程
前言 这几天在看273M站点时被他们的页面交互方式所吸引,他们的首页是采用三次加载+分页的方式.也就说分为大分页和小分页两种交互.大分页就是通过分页按钮来操作,小分页是通过下拉(向下滑动)时异步加载数 ...
- JavaScript学习(一) —— 环境搭建与JavaScript初探
1.开发环境搭建 本系列教程的开发工具,我们采用HBuilder. 可以去网上下载最新的版本,然后解压一下就能直接用了.学习JavaScript,环境搭建是非常简单的,或者说,只要你有一个浏览器,一个 ...
- .NET文件并发与RabbitMQ(初探RabbitMQ)
本文版权归博客园和作者吴双本人共同所有.欢迎转载,转载和爬虫请注明原文地址:http://www.cnblogs.com/tdws/p/5860668.html 想必MQ这两个字母对于各位前辈们和老司 ...
- React Native初探
前言 很久之前就想研究React Native了,但是一直没有落地的机会,我一直认为一个技术要有落地的场景才有研究的意义,刚好最近迎来了新的APP,在可控的范围内,我们可以在上面做任何想做的事情. P ...
- 【手把手教你全文检索】Apache Lucene初探
PS: 苦学一周全文检索,由原来的搜索小白,到初次涉猎,感觉每门技术都博大精深,其中精髓亦是不可一日而语.那小博猪就简单介绍一下这一周的学习历程,仅供各位程序猿们参考,这其中不涉及任何私密话题,因此也 ...
- Key/Value之王Memcached初探:三、Memcached解决Session的分布式存储场景的应用
一.高可用的Session服务器场景简介 1.1 应用服务器的无状态特性 应用层服务器(这里一般指Web服务器)处理网站应用的业务逻辑,应用的一个最显著的特点是:应用的无状态性. PS:提到无状态特性 ...
- NoSQL初探之人人都爱Redis:(3)使用Redis作为消息队列服务场景应用案例
一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...
随机推荐
- 532-数组中的K-diff数对
532-数组中的K-diff数对 给定一个整数数组和一个整数 k, 你需要在数组里找到不同的 k-diff 数对.这里将 k-diff 数对定义为一个整数对 (i, j), 其中 i 和 j 都是数组 ...
- js前后端交互
1.前后端交互模式 2.promise用法 (1)异步调用 (2)ajax回顾 (3).promise 优点:可以解决回调地狱(多层异步调用嵌套问题)(解决代码可读性低的问题) 提供简洁的api (4 ...
- IP地址分类及其相关计算问题
IP地址分类及其相关计算问题 公网IP和子网IP 公网IP: • A类:1.0.0.0 到 127.255.255.255 主要分配 给大量主机而局域网网络数量较少的大型网络 • B类:128.0.0 ...
- centos yum 安装openresty
yum 安装openresty sudo yum install yum-utils -y sudo yum-config-manager --add-repo https://openresty.o ...
- Attention machenism
from attention mechanism Attention is one component of a network’s architecture, and is in charge of ...
- Android 开发 facebook分享,登陆,获取信息
1 搭建开发环境 1.1 在Facebook官网SDK中,下载4.0.0的SDK包. 1.2 使用Eclipse导入SDK包中的Facebook工程,并添加android-supp ...
- RabbitMQ使用注意事项
用ConnectionFactory创建的TCP连接要复用,因为创建新的TCP连接比较耗时. IModel(信道)是轻量级的,可以用时创建. channel.BasicQos(0, 1, false) ...
- Java生鲜电商平台-生鲜电商订单结算系统的深入解析与反思总结
Java生鲜电商平台-生鲜电商订单结算系统的深入解析与反思总结 说明:最近疫情影响,生鲜电商这个行业被彻底的激活了,全中国人民都知道用小程序或者APP可以进行买菜了,但是可惜的是,我的生鲜电商在去年经 ...
- ping和tracert
ping命令常用于测试2台主机网络是否连通 TTL的默认值有:64(linux),128(windows),255(路由器) 此例TTL是63所以选用64来减去63等于1,这是说明经过了1个路由器,没 ...
- 移动端安卓IOS对接H5项目遇到的坑
最近做一个H5项目 退出的时候需要调用原生的弹框退出, 之前以为很简单,直接ajax调用后端退出接口即可.后来发现数据拿不到,因为状态用的是cookie存储, 后来想到ajax 传参数请求,后来还是拿 ...