Go 开源说第九期:go chassis——微服务开发框架

GoCN

共 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 大会

还没报名的童鞋们赶快抓住最后的机会!!!


点击这里阅读原文,即刻报名~


浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报