Service Mesh 在华为公有云的实践

向作者提问
8年软件行业经验,曾就职于三星,2012年进入云计算领域,对PaaS,DevOps,APM有深入的研究和实践经验。方案支撑近千台VM中应用部署管理监控 2016年加入华为担任架构师,负责微服务的Go语言开发框架及Service Mesh设计和落地,Go语言微服务框架被华为5G核心网络采用,Service Mesh服务商用上线公有云
查看本场Chat

我们在构建微服务而构建微服务是困难的

微服务是一个很大的概念,从团队组织到最佳实践似乎都有实施微服务的一些指导。我们这里只提构建微服务的架构模式,也就是关乎到你用什么样的方式来构建你以微服务架构来组织的应用系统。

近些年随着微服务的火热,越来越多的团队开始进行实践,将微服务纷纷落地,也许你是从0开始,一步步地完成了单体应用向微服务的转型,让我们来看看,你解决了多少问题。

enter image description here

我相信最难的部分之一就是调用你的服务。

微服务将原本内存中函数的调用转换为网络中的调用后,就牵扯到这些问题,而任何一个分支展开,都会涉及一系列的问题。业务开发者也许真的有精力去学习架构相关的复杂问题,然而对于公司来说,真正有价值的是业务本身,让业务开发者解决这些问题需要花费浪费大量的时间精力,导致业务上线受到影响。那我们来看看是否有便捷的方式来解决业务开发者的痛点。

Chassis模式

一句话来概括:一种语言开发框架来作为微服务开发的底座,封装掉复杂性,帮助你解决跨网络带来的问题,让用户聚焦在上层业务逻辑的开发。通常情况下会实现以下功能:

  • 日志、Metrics、分布式追踪数据上报

  • 健康检查

  • 对接统一的配置中心实现动态配置

  • 对接注册中心

  • 实现负载均衡、熔断降级、容错、限流等保证高可靠运行的功能

现在我们来看看业界有哪些可用的Chassis框架:

  • Spring Cloud

  • ServiceComb

  • Dubbo

  • Go-Micro

  • Go-Kit

先不细去纠结微服务的严格定义,也先暂且搁置诸如“某些老旧框架是否是真的微服务框架”这类争议,从实现方式来看,上述服务化框架都是将分布式系统开发的复杂性进行了一定程度的封装然后提供了简便的开发接口供使用者调用。但是,用这种方式构建微服务还有一些问题:

  • 多语言SDK支持:微服务提倡不同组件使用最适合它的语言开发,但是这需要每种语言都有开发框架,不断实现相同的功能。上面可以看到只有go语言和Java语言出现了微服务开发框架,其他语言呢?

  • 不论代码侵入程度,都需要开发者思考如何与SDK结合,并从代码层面做出改变,对于大部分开发者来说都是一个高曲线的学习过程。

  • 绑定了特定技术栈,不容易改造。

  • 老旧单体应用由于无人维护,耦合程度高等问题无法进行改造,在进行微服务拆分的过程中重用遗留代码变得无比困难。而且微服务的拆分难以分步进行,需要一个相对较长的周期将系统整体拆分后才能上线。

我们知道技术演进来自于在实践中不断地将功能抽象,解耦,封装,服务化。

  • 云计算技术出现前是数据中心虚拟化,不断地实践使技术发展形成理论和新的实践。IaaS是一种封装,如今开发者与大部分技术团队不需要再学习虚拟化等技术以及如何维护数据中心。

  • 没有TCP/IP的时代,开发人员需要自己考虑网络间数据包的传输,以及网络传输代码与业务代码完全耦合的问题,如今,开发者已经不需要关心,操作系统和开发语言已经封装好网络传输过程。

是否也可以把语言框架提供的能力抽象,成为服务?很多问题是开放性的解法,上学时大家体会很深一道难题会有很多解法。

郑唯
作为刚开始接触微服务的小白而言,目前还是把文章当做扫盲来看了,可能一段时间后再看,会有不一样的体会。
付小松
使用过daocloud的devops,有实现同样功能的开源产品吗?或者说用哪些开源产品可以搭建一套同样功能devops系统?谢谢
Fine
用go写mesher的时候,遇到过哪些坑?
إ并向你招手إ祥子
在我目前的理解中,我看到的华为云的微服务和AWS的Lambda很相似,那么它们之间有什么不同?华为云的微服务具体能适用哪些实际场景,或者有没有一些实际使用案例可以分享的?
大耳朵
作者您好,非常感谢您的文章,超级用心。非常谢谢。 我有几个小问题,可能比较基础希望您别介意。 1:微服务边界问题该怎么划分?有些什么参考的维度? 2:在您文章中CSE mesher中为啥既用了consul,又用了eureka,这两者都是服务注册,有什么区别了?还是你们的框架有特殊处理? 3:另外一个,微服务中最关注的就是服务之间的调用,用什么做补偿?怎样做到重试? 4:service mesh 它是指平台基础层的建设么?业务开发可以不用去关心,只需要去调用它暴露的接口或者服务就可以了么? 非常谢谢。可能某些问题比较浅显,如果您觉得不方便答的也可以跳过。再次感谢。
微信扫描登录