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作为消息队列服务场景应用案例
一.消息队列场景简介 “消息”是在两台计算机间传送的数据单位.消息可以非常简单,例如只包含文本字符串:也可以更复杂,可能包含嵌入对象.消息被发送到队列中,“消息队列”是在消息的传输过程中保存消息的容器 ...
随机推荐
- Leetcode Week1 Regular Expression Matching
Question Given an input string (s) and a pattern (p), implement regular expression matching with sup ...
- java面试记录三:hashmap、hashtable、concurrentHashmap、ArrayList、linkedList、linkedHashmap、Object类的12个成员方法、消息队列MQ的种类
口述题 1.HashMap的原理?(数组+单向链表.put.get.size方法) 非线程安全:(1)hash冲突:多线程某一时刻同时操作hashmap并执行put操作时,可能会产两个key的hash ...
- AcWing 10. 有依赖的背包问题
#include <cstring> #include <iostream> #include <algorithm> using namespace std; ; ...
- vue.js 的cdn 链接的引用地址
引用地址有两种一种完整版,一种压缩版效果是一样的 https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js https://cdn.bootcss.com ...
- PP: Neural ordinary differential equations
Instead of specifying a discrete sequence of hidden layers, we parameterize the derivative of the hi ...
- springboot中使用kaptcha验证码
maven依赖 <dependency> <groupId>com.github.penggle</groupId> <artifactId>kaptc ...
- OpenCV中imread失败cvLoadImage成功
MYLAF 环境说明 编程环境:Windows 10(64bit), VS2013, OpenCV 2.4.12; 编程语言:C/C++: MYLAF 现象 在代码中,调用imread读取图片失败,但 ...
- BUUCTF [SUCTF 2019]EasySQL
首先打开网址 发现有三种显示方法 还有一个没有输出 可以堆叠注入 1;show databases; 1;show tables; 可以看到有一个Flag表 测试发现from flag都被过滤不能直接 ...
- ICPC2019 亚洲区域赛 南京站
蒟蒻终于打完了人生的第一场ICPC了. 终榜去星后rank36,AG,和AU差几十罚时了. 虽有遗憾但总体也是正常发挥了. 不愿再去对比赛做什么回顾,甚至很不愿去想.很多题已经在能力之外,即便是平常熟 ...
- tomcat集群搭建集成nginx负载均衡
软件基础+版本: 1.3台centos7系统,其中都已经配置完成了jdk环境,jdk的版本为 [root@node03 bin]# java -version java version "1 ...