go chassis 微服务框架

本文详细介绍了Go-Chassis,一个由华为云开发的Go语言微服务框架,涵盖了路由管理、注册发现、负载均衡等功能,并展示了如何与Istio集成。还介绍了ServiceCenter服务注册中心的安装和配置,以及与之配合的用户模块示例。

go-chassis 华为云CSE开源微服务框架

go-chassis本身也是go语言开发的,集成了很多的功能,提供了一站式服务,能够让用户在一个方案中,
获得路由管理,注册发现,负载均衡,限流,指标监控,分布式追踪等大量功能。

go chassis是一个协议中立的开发框架,它不仅支持http,也支持rpc协议,甚至可以集成mysql等中间件的协议。

go chasis支持Istio控制面板,也就是说你可以将它与envoy进行混合使用,只需要使用istio即可,
它支持原生的istio配置管理。以此使服务吞吐提升,CPU占用降低。

go chassis是插件化设计,支持用户开发定制模块,并接入到框架中

github.com/go-chassis/go-chassis
github.com/go-chassis/go-chassis-protocol/client/grpc
github.com/astaxie/beego

微服务注册中心:

https://github.com/apache/servicecomb-service-center

service-center 是服务注册中心
服务提供者(provider)可以将自身的实例信息注册到中心,
以供服务消费者(consumer)从 中心发现并使用它

下载linux版本包

$ wget http://archive.apache.org/dist/incubator/servicecomb/incubator-servicecomb-service-center/1.0.0/apache-servicecomb-incubating-service-center-1.0.0-linux-amd64.tar.gz

解压tar包

$ tar -zxvf apache-servicecomb-incubating-service-center-1.0.0-linux-amd64.tar.gz

启动servicecenter服务

$ cd apache-servicecomb-incubating-service-center-1.0.0-linux-amd64/
$ ./start-service-center.sh
$ ps -ef | grep service-center
root     27048     1  2 14:38 pts/2    00:00:00 ./service-center
root     27164 22742  0 14:38 pts/2    00:00:00 grep --color=auto service-center

查看监听配置

$ cat conf/app.conf | grep "sever options" -A 16

#sever options
##################################################################
#if you want to listen at ipv6 address, then set the httpaddr value like:
#httpaddr = 2400:A480:AAAA:200::159        (global scope)
#httpaddr = fe80::f816:3eff:fe17:c38b%eth0 (link-local scope)
httpaddr = 127.0.0.1
#运行端口
httpport = 30100

read_header_timeout = 60s
read_timeout = 60s
idle_timeout = 60s
write_timeout = 60s
max_header_bytes = 32768 # 32K
max_body_bytes = 2097152 # 2M

enable_pprof = 0

查看端口监听

$ netstat -apn | grep :30100
tcp        0      0 127.0.0.1:30100         0.0.0.0:*               LISTEN      27048/service-cente

$ curl http://127.0.0.1:30100

{"_links":{"pb:latest-pact-versions":{"href":"http://127.0.0.1:30100/pacts/latest","title":"Latest pact versions"},"pb:latest-provider-pacts":{"href":"http://127.0.0.1:30100/pacts/provider/{provider}/latest","title":"Latest pacts by provider","templated":true},"pb:latest-provider-pacts-with-tag":{"href":"http://127.0.0.1:30100/pacts/provider/{provider}/latest/{tag}","title":"Latest pacts by provider with a specified tag","templated":true},"pb:pacticipants":{"href":"http://127.0.0.1:30100/participants","title":"Pacticipants"},"pb:publish-pact":{"href":"http://127.0.0.1:30100/pacts/provider/{provider}/consumer/{consumer}/version/{consumerApplicationVersion}","title":"Publish a pact","templated":true},"pb:webhooks":{"href":"http://127.0.0.1:30100/webhooks","title":"Webhooks"},"self":{"href":"http://127.0.0.1:30100/","title":"Index"}},"curies":[{"href":"http://127.0.0.1:30100/doc/{rel}","name":"pb"}]}

至此,service-center服务已成功启动,其监听地址为: 127.0.0.1:30100

代码实例:

jk-gateway 网关
func main() {

	if err := chassis.Init(); err != nil {
		lager.Logger.Error("Init failed." + err.Error())
		return
	}
	
	reply := &pb.UserResp{}
	req := &pb.UserReq{}
	
	//C端名称,Rpc,调用函数名,请求参数,返回参数
	util.Call_GRPC("jk-user", "rpc_pb.User", "List", req, reply)

	beego.Debug(beego.VERSION)
	beego.Run()
}
jk-user 用户模块

func main() {

	user := rpc.Rpc_user{}
	//注册到服务中心
	chassis.RegisterSchema("grpc", &user,
		server.RegisterOption(func(o *server.RegisterOptions) {
			o.RPCSvcDesc = rpc_pb.RegisterUserServer
		}),
	)
	
	if err := chassis.Init(); err != nil {
		lager.Logger.Error("Init failed.")
		return
	}
	model.Init()
	chassis.Run()
}
server-center 注册中心
`官方文档`:
1.https://go-chassis.readthedocs.io/en/latest/getstarted/install.html?from_wecom=1
2. Install server-center
3. ServiceComb Website 
4. Service-Center 的Download 下载对应的版本
linux/ Darwin 是mac版本
按照文档可以生成看到具体的链接模块
执行脚本运行可视化服务

在这里插入图片描述

运行效果:

在这里插入图片描述

微服务框架对比:

Go micro是一个插件化RPC分布式开发框架,开箱即用,也可以任意定制自己的RPC协议中的每个模块。他是一个eco system,现在已经有大量的插件实现,并在go-micro基础之上有了很多的新框架,Micro组织下有许多围绕go-micro建立的子项目。

Go kit是一个用来构建微服务的的工具包,每个包都是独立的,开发者自己选择需要的工具组装自己的微服务,包含了丰富的治理功能,熔断,监控,限流等,且拥有丰富的插件化协议和注册中心。

Go chassis是插件化框架,与Go micro的不同在于,go chassis提供的能力是插件化协议,你可以将http或RPC,甚至是Mysql,Redis等协议接入到框架中,并且提供一站式功能,将熔断,限流,监控等功能全部集成到框架中,开发者无需自己寻找这些方案。拥有3者中最丰富的治理功能。同样拥有开放的定制能力,但是作为一个新的框架,生态尚需完善

go实战微服务分布式系统(distributed system)是建立在网络之上的软件系统。正是因为软件的特性,所以分布式系统具有高度的内聚性和透明性。因此,网络和分布式系统之间的区别更多的在于高层软件(特别是操作系统),而不是硬件。在一个分布式系统中,一组独立的计算机展现给用户的是一个统一的整体,就好像是一个系统似的。系统拥有多种通用的物理和逻辑资源,可以动态的分配任务,分散的物理和逻辑资源通过计算机网络实现信息交换。系统中存在一个以全局的方式管理计算机资源的分布式操作系统。通常,对用户来说,分布式系统只有一个模型或范型。在操作系统之上有一层软件中间件(middleware)负责实现这个模型。一个著名的分布式系统的例子是万维网(World Wide Web),在万维网中,所有的一切看起来就好像是一个文档(Web页面)一样。 [1] 在计算机网络中,这种统一性、模型以及其中的软件都不存在。用户看到的是实际的机器,计算机网络并没有使这些机器看起来是统一的。如果这些机器有不同的硬件或者不同的操作系统,那么,这些差异对于用户来说都是完全可见的。如果一个用户希望在一台远程机器上运行一个程序,那么,他必须登陆到远程机器上,然后在那台机器上运行该程序。 [1] 分布式系统和计算机网络系统的共同点是:多数分布式系统是建立在计算机网络之上的,所以分布式系统与计算机网络在物理结构上是基本相同的。 [1] 他们的区别在于:分布式操作系统的设计思想和网络操作系统是不同的,这决定了他们在结构、工作方式和功能上也不同。网络操作系统要求网络用户在使用网络资源时首先必须了解网络资源,网络用户必须知道网络中各个计算机的功能与配置、软件资源、网络文件结构等情况,在网络中如果用户要读一个共享文件时,用户必须知道这个文件放在哪一台计算机的哪一个目录下;分布式操作系统是以全局方式管理系统资源的,它可以为用户任意调度网络资源,并且调度过程是“透明”的。当用户提交一个作业时,分布式操作系统能够根据需要在系统中选择最合适的处理器,将用户的作业提交到该处理程序,在处理器完成作业后,将结果传给用户。在这个过程中,用户并不会意识到有多个处理器的存在,这个系统就像是一个处理器一样。 [1] 内聚性是指每一个数据库分布节点高度自治,有本地的数据库管理系统。透明性是指每一个数据库分布节点对用户的应用来说都是透明的,看不出是本地还是远程。在分布式数据库系统中,用户感觉不到数据是分布的,即用户不须知道关系是否分割、有无副本、数据存于哪个站点以及事务在哪个站点上执行等。  什么是微服务?维基上对其定义为:一种软件开发技术- 面向服务的体系结构(SOA)架构样式的一种变体,将应用程序构造为一组松散耦合的服务。在微服务体系结构中,服务是细粒度的,协议是轻量级的。微服务(或微服务架构)是一种云原生架构方法,其中单个应用程序由许多松散耦合且可独立部署的较小组件或服务组成。这些服务通常● 有自己的堆栈,包括数据库和数据模型;● 通过REST API,事件流和消息代理的组合相互通信;● 和它们是按业务能力组织的,分隔服务的线通常称为有界上下文。尽管有关微服务的许多讨论都围绕体系结构定义和特征展开,但它们的价值可以通过相当简单的业务和组织收益更普遍地理解:● 可以更轻松地更新代码。● 团队可以为不同的组件使用不同的堆栈。● 组件可以彼此独立地进行缩放,从而减少了因必须缩放整个应用程序而产生的浪费和成本,因为单个功能可能面临过多的负载。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值