Go 开源说第九期:go chassis——微服务开发框架
共 1818字,需浏览 4分钟
·
2021-04-28 16:43
点击蓝字
关注我们
本文由“GO开源说”第九期 《go chassis——微服务开发框架》直播内容修改整理而成,视频内容较长,本文内容有所删减和重构。
在2020年上海Gopher⼤会上,我分享了主题“华为云的Go语⾔云原⽣实践”。其中讲述了我们使⽤Go语⾔构建云服务的经验,并讲述了Go chassis的理念和设计。本次开源说,我将讲述它的设计与思考,以及我们在微服务落地中的经验和踩坑。更加具体的信息请观看直播
我将简单的回顾下⼤会的内容并讲述今天的主题
Go chassis的诞⽣背景
规划范:规范化的框架可以在微服务架构下落地通⽤能⼒
成本:云服务资源占⽤成本降低
异构服务:⼀个后台服务可能有多种具体实现
基线化需求:提供通⽤能⼒,引⼊即⽣效,⽆需编码
图中最上边的部分为⽤于管控的服务,中间是微服务框架主要处理的部分,也就是系统内部东⻄向的流量。业务流量都要经过这⾥,通过管控服务进⾏微服务的管理。最下边的部分是插件化的组件,插件接⼝规范内置在框架中,通过import⽅式显示引⼊插件。
设计上的考虑
什么是个好的微服务开发框架,应该是在最⼩化业务适配量和学习曲线为前提下,最⼤化的提升⼀个团队的⽣产效率和交付的服务质量
面向故障的注册发现设计
中⼼化的服务总是⾯临的稳定性的挑战,看似简单的注册发现,其实有着很多的设计考虑,也经过了⼤量的现⽹考验。注册中⼼实际上⾯临的是注册,⼼跳,发现3种不同的流量。随着微服务实例的增多,流量增加⾃然⾯临了很多问题。所以在做这⽅⾯设计和编写代码时,应该⾯向故障去思考。
⽐如:
使⽤避让算法进⾏重试 -- 避免调⽤⻛暴
中⼼断服不影响业务系统 -- 保证业务不断服
只拉取⾃⼰关⼼的服务 -- 减少数据量,即减少c/s两端的cpu和内存压⼒
不可变实例ID -- 避免负载均衡不均匀
本地缓存设计
通过缓存可以应对中⼼断服,另外完全中⽴的API设计,可以允许任意注册中⼼的接⼊,⽐如Consul,Eureka,Service Center。开放性的缓存API也允许你随时访问,开发定制特性
通信协议中立设计
⽆论是http还是grpc,在框架内核处理的过程中都会被标准化为Invocation统⼀模型,路由管理,调⽤链跟踪,限流等能⼒都基于该模型进⾏开发,这样当你要进⾏定制协议时,就可以复⽤同⼀份逻辑,⽽在⽹络中传输的过程中依然是原⽣的协议,所以和其他⽣态的集成也是开放性的,不存在任何私有协议在⽹络上传输。
路由管理设计
有了注册发现,统⼀缓存,协议中⽴的设计,我们就能设计统⼀的路由管理能⼒。可以基于任意微服务元数据定义路由规则来实现⾦丝雀发布,蓝绿发布等能⼒。⽽路由的配置可以来⾃不同的数据源,⽀持扩展,这部分能⼒有go-archaius提供
尽量兼容原本的编程模型
我们提到学习成本,所以要尽量复⽤已知的知识
曾经踩过熔断的坑
https://juejin.im/post/5bd4169c6fb9a05cf9087a5c
忠告所有使⽤熔断和降级功能的朋友,使⽤之前要思考清楚,充分的进⾏测试
可观察性
只需要引⼊go chassis,他就会⾃动帮你导出符合prometheus标准的数据,以便于接⼊到现有的监控系统中,以下是⼀些数据,供参考,⽐如错误数,请求数,延迟,业务处理时⻓等
微服务框架和服务网格选择困难?
服务网格是下一代微服务?
应该共同使⽤么?
⼆选⼀怎么选?
我的业务到底适合哪种⽅案?
从我的实践经验来看,其实没有真正的银弹,所以微服务框架和服务⽹格只会⻓期共存,所以我们才会⾃研mesher作为go chassis和spring cloud的补充。
这就像是单体架构还将永存⼀样,存在是有他的合理性的。详细的介绍请观看直播。
欢迎关注个⼈公众号:
— 往期回顾 —
Go 开源说第七期:Harbor助你玩转云原生
Go 开源说第五期:MOSN Go语言网络代理软件
Go 开源说第四期(下):go-zero缓存管理最佳实践
⚠️ 各位Gopher们,注意啦!
别忘了还有 Gopher China2021 大会
还没报名的童鞋们赶快抓住最后的机会!!!