• 周六. 7 月 27th, 2024

    Go语言微服务开发框架实践-go chassis(中篇)

    root

    11 月 29, 2019 #go-chassis

    本篇将主要介绍go chassis的重要功能,生态对接 

    注册中心

    在Eureka宣布停止维护之前,其实已经能够看到平台发现会代替客户端注册成为主流的运行模式这样的趋势,类似Kubernetes这样的平台在部署后会帮你自动维护生命周期,而不再是类似Eureka这样的需要微服务使用开发框架自行注册,并不断维护微服务心跳。

    Go chassis将过去的Registry接口拆分,重新设计为2个组件Registrator与ServiceDiscovery

    ServiceDiscovery为必选组件,当离开平台时可以通过启用Registrator来或者自注册和上报心跳的能力(目前仅支持ServiceComb service center)

    服务发现积极拥抱了不同生态对接了Istio0.8 和kubernetes。

    而在这之上维护了统一的缓存模型,以使路由管理能够通用于不同的注册中心。

    这样设计无论是容器平台还是VM等基础设施都可以适应,加强了go chassis的通用性。

    路由管理

    Go chassis抽象了router管理接口,可以对接不同生态系统,将这些配置转换为统一的标准路由定义模型

    目前有2个实现:

    – 对于非istio环境,可以使用携程开源的apollo进行路由管理,学习go chassis的配置语法即可

    – 支持Istio控制面,如果你已经有Istio了,那么你可以用原生的Istio流量管理来管理go chassis的路由定义。

    过程如下:

    1.  请求具有特征,其中最重要的就是Service Name,即要访问的服务,根据请求特征进入路由定义进行匹配,得到他访问的具体服务是什么样的,服务具有怎么样的metadata。

    2. 根据Service Name即metadata确定一批服务实例

    3. 传到负载均衡进行实例选取

    比如

    •系统中稳定运行着A服务,版本是1.0,最近新上线了1.1版本,你希望只让一部分用户进行体验,那么你可以定义Header带有device-os=android就将95%流量转移版本为1.0的实例中,5%转移到1.1版本。

    •请求者的元数据中带有env=production,那么要将路由到元数据中带有env=production的实例中

    基于元数据的路由管理十分灵活。

    多协议支持

    在运行态go chassis将协议转为统一的模型Invocation来处理协议,以此让所欲接入的协议都能复用负载均衡,路由,限流,分布式追踪等能力。在网络传输时在转会标准协议请求发出。

    配置中心

    go chassis使用了go-archaius作为开发库,可以支持本地文件及远程配置中心中的配置管理。

    以此来实现配置(熔断,限流,负载均衡,容错)变更0宕机时间。可以通过Apollo前台来进行配置下发。https://go-chassis.readthedocs.io/en/latest/user-guides/apollo-chassis.html

    同时archaius的API也完全面向开发者,允许业务代码使用进行配置管理。

    分布式配置管理是个比较大的话题,关于go archaius我将在另一篇章中介绍。

    总结

    本章节剖析了go chassis内部组件设计的细节,在下一篇章中,将分享性能调优的一些知识

    go chassis项目地址:https://github.com/go-chassis/go-chassis

    go archaius项目地址: https://github.com/go-chassis/go-archaius
    作者:二手雄狮
    链接:https://juejin.im/post/5ba460556fb9a05d2469bb81
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    root

    发表回复