扫码阅读
手机扫码阅读

那些微服务转型踩过的“坑”

229 2023-08-03

现如今我们进入了一个软件业快速变化的年代。一方面,互联网带动着越来越多的传统行业向着互联网转型,使得传统行业的从业者必须得适应高并发、高吞吐量的应用场景,并且需要不断调整技术架构来应对越来越大的业务量。另一方面,随着业务的不断拓展,服务人群的不断扩大,软件系统也变得越来越复杂。也就是说,虽然互联网行业必须要应对高并发,但业务毕竟还不是太复杂。但传统行业向互联网转型,不仅要面对高并发,还要面对越来越复杂的业务。在这样的情况下,向微服务架构的转型成为越来越多软件团队的选择。

然而,让人无比惊讶的是,微服务仿佛被描绘成了那个无所不能的终极方案,似乎只要成功转型微服务,我们就踏上胜利的彼岸。于是乎,许多团队开始义无反顾地踏上了微服务之旅,而我则成为了这些团队中的一员。几年前,我的团队开始微服务转型,这个过程就好像是一段浪漫的爱情故事,远远看着非常美妙,然而你真正涉事其中才明了其中的苦涩。在微服务领域有太多的“坑”,太多的难点,与太多的不确定性,以至于很多时候让你无所适从、踌躇不前,甚至怀疑人生。不夸张地说,微服务让我的焦虑指数上升了好几个点儿。

最开初让你焦虑的是微服务架构中的那些技术框架,不确定性的技术选型过程,让你感觉自己就是坐在一场“轮盘赌”的娱乐现场。每一次的选择都是一次惊心动魄的决策,一旦失败就会让你和你的团队陷入万劫不复的窘境。选dubbo还是springcloud呢?选springcloud!好吧,那么选zookeeper还是eureka呢?还有,选zuul还是gateway呢?即使你做出了正确的选择,还有更多的难题需要攻克。即使如此,未来呢?现在看似正确的选择在不久的将来都会被推翻,是不是干脆就直接上istio?它成熟吗?也许又是下一个坑。

假设你侥幸踏过了第一道坎(你的周围已经有N多团队倒下),很快就要面对第二道坎。第二道坎其实很简单,就写着一个最简单的问题:怎么将业务进行微服务拆分?那么怎么进行微服务拆分呢?很多同学觉得很简单啊,按照业务模块拆分不就完了吗!如果你是这样想的,项目很快就会陷入进退两难的尴尬境地。微服务概念的提出者Martin Flower在定义微服务时,提出了拆分后的微服务应当做到“小而专”。何为“小而专”?“小”比较容易理解,“专”就是专注,就是单一职责。很多同学get到了“小”却忽略了“专”,就会带来微服务系统难于维护的糟糕境地,甚至得出“早知道还不如不用微服务”的一声感叹。很显然,微服务已经让这些同学怀疑人生了。

为什么忽略了“专”就会让系统难于维护呢?让我们首先从“为什么转型微服务”开始探讨。那么,为什么要转型微服务呢?因为随着系统规模越来越大,维护系统的团队规模也越来越大,维护成本就会越来越高。每一次变更都会越来越难,开发效率也越来越低,但最关键是软件如何发布。如果多个团队都在维护一套系统,最后也是统一打包,一起发布,那么经常就会出现多个团队等待某个团队的情况,使得软件发布越来越慢而跟不上快速变化的市场,这是互联网时代所不能忍受的。因此,通过微服务拆分,将一个大项目拆分为多个微服务,每个小团队维护自己微服务。这样,将大系统分而治之,让各小团队独立维护,问题就能得到解决。

这些微服务理论一切都是那么清晰,然而回到工程实践却变得不是那么回事儿。这里谈到是“让各小团队独立维护”,也就是尽量让每次的需求变更交给某个小团队独立完成,让需求变更落到某个微服务上进行变更。然而,是不是真的能让“每一个变更落到某个微服务上进行变更”呢?这就是我们的难题。如果微服务拆分不合理,就会造成一个需求变更需要更改多个微服务,多个团队都要参与,同时要发布多个微服务。如果真是这样子,那么微服务不仅不能发挥它的优势,甚至使得软件的发布变得更加困难,真的是“还不如不用微服务”。

因此,在微服务设计时应当更注重设计质量,也就是提高每个微服务的内聚度,做到“单一职责”。只有做到了“单一职责”,才使得软件在每次变更时,能够尽量做到“每一个变更落到某个微服务上进行变更”,这才是微服务的真谛。那么,什么是“单一职责”,软件应该怎样设计?怎么进行微服务拆分?

用“领域驱动设计”是业界普遍认可的解决方案,解决微服务如何拆分,以及实现微服务的高内聚与单一职责。但是,领域驱动设计应当怎样进行呢?怎样从需求分析到软件设计,用正确的方式一步一步设计微服务?

即使你正确跨过了第二道坎,紧接着的第三道坎依然能让你瞬间泪奔。第三道坎就是微服务如何云端部署,如何横向扩展,如何监控告警?搭建一套DevOps自动化运维,用kubernetes做云端部署,用Prometheus做系统监控,用EFK做日志监控。这些东西说起来容易做起来难,更多的难题正在前方。

微服务有如此多的“坑”,那么该怎么办呢?范老师喊你过来听课了!范老师会用这些年积累的实战经验,从领域驱动设计、技术中台建设、运维平台搭建、微服务技术转型等多个方面讲解微服务,从代码演示到服务端配置,一步一步讲解微服务那些踩过的“坑”以及解决方案,为你的微服务之旅保驾护航。

原文链接: http://mp.weixin.qq.com/s?__biz=Mzg5NDE1OTgyNA==&mid=2247483683&idx=1&sn=8aee33ef0f79fb9db4ae1cf31da81eef&chksm=c0229f9cf755168ab1cdb9f0e2f4a420cf05375a0879046f5bf4653a8506ff8d0429fdd514ca#rd