拆完中台再拆微服务

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: 这些年中台、微服务都是技术浪潮中的弄潮儿。两者的命运似乎是所有技术新词的缩影:先谈,再建,后拆,最后平静。如中台,开始时聊什么都得带上中台,战略层喜欢谈,执行层也喜欢谈,再后面跟随一线大厂纷纷搭建自己的中台,然后就是反思,拆除中台,最后平静看待中台。中台可以说已经经历完整的生命周期,而微服务周期也差不多,但对于“拆掉”,两者的声势与目标却不太相同。

这些年中台、微服务都是技术浪潮中的弄潮儿。两者的命运似乎是所有技术新词的缩影:先谈,再建,后拆,最后平静。

如中台,开始时聊什么都得带上中台,战略层喜欢谈,执行层也喜欢谈,再后面跟随一线大厂纷纷搭建自己的中台,然后就是反思,拆除中台,最后平静看待中台。

中台可以说已经经历完整的生命周期,而微服务周期也差不多,但对于“拆掉”,两者的声势与目标却不太相同。在《中台是什么》[1]中提出,“效能下限”与“创新上限”就像翘翘板,产生了哑铃效应,而中台则是追求效能的极致,同时却也降低了创新上限

建中台是为了效能,拆中台是为了创新。

以阿里为代表的大厂对拆中台真是高举高打,但看看微服务,可没哪个大厂高喊要拆掉微服务,可见他们俩还是有本质差别的。

更神奇的是,不管是拆分微服务还是拆掉微服务,本质需求却是一致的:提升效能

为什么都是提升效能,从两种行为分别阐述一下

为什么拆分微服务

首先一起回顾一下,为什么要拆分微服务?对于这个问题不得不再向前回退,回到单体架构时代

在微服务架构出现之前,单体架构是永恒,天经地义的。以致于“单体架构”一词都没人提出。

项目起初,单体架构无疑是最佳选择,不仅易于开发、易于测试、易于部署,且由于系统中各个功能、模块、方法的调用都是进程通信,性能是最高的。

甚至在项目从小型发展为中型时,也没有那么不堪。虽然是单体架构,但内部结构并非“铁板一块”,在业务量级可承载范围内,也有一定程度的扩展性。

从两个视角观察扩展性

在纵向角度,绝没有一个项目完全是个“大泥球”形态,至少都会以分层架构风格对代码进行纵向层次划分。

在横向角度,单体架构也支持以功能、技术等维度划分,拆分成各个模块,以便代码重用和管理,甚至提取出各种形体组件,如jar

那拆微服务解决了哪些效能问题?

第一程序效能

在于应用程序的某个方面给基础设施带来了过重负担,这反过来又很可能会导致糟糕的用户体验。

如,图像处理需要大量CPU,如果CPU负载变得非常高,这将会导致应用其他处理资源的饿死现象。影响系统延迟,甚至影响系统可用性。

也就是说应用程序中局部缺陷会造成全局问题。局部间没有隔离能力,一旦出现内存泄漏、线程爆炸、阻塞、死循环等问题,将影响整个程序。不仅导致单个功能不可用,甚至整个程序的效能都降至为零。

从程序维护性来说,所有代码都在同一进程,无法做到单独停止、更新、升级某一部分代码。只能制定专门停机更新计划,整体做灰度发布,A/B测试。

第二团队效能

与应用的关系不大,但关系到如何组织团队。在应用程序的特定部分,投入工作的人越多,开发和部署就会越慢,而且越容易出错。

如,抢占持续部署同一服务,出现排队现象,意味着本可以交付产品的工程师只能坐等轮到他们进行部署。出事“紧急事件”时,多个团队代码都需要回滚。

综上所述,简单总结一下,单体架构并不是一无是处,某些场景依然是最佳选择;

当对应用程序性能要求超过单机能力,以及软件的开发人员规模明显超过了“2 Pizza Team”时, 不管是程序效能还是团队效能都已经达到瓶颈,此时可以通过微服务架构来解决这些问题。

微服务怎么解决效能问题?

对于程序效能,在单体架构时代,想要整体系统的可靠性,我们只能努力让每一个模块,每一行代码都可靠,以达到整体系统的最终可靠性。

然而常常事与愿违,战术层面再优秀,也难以弥补战略层面的缺陷。在构建大规模系统时,人们的观念也从“尽量不出错”向正视“出错是必然”转变,在此前提下,历史悠久的单体架构终被挑战。

微服务把独立的单体架构内部依赖组件,由“编译时期”推迟到了“运行时期”,对时间维度的解耦,带来了运行时动态扩展、服务间技术异构、服务独立交付等好处。

也就解决了上面所述的局部间没有隔离能力造成的全局性故障,导致整体程序效能降至为零的情况。也实现了局部维护的能力,提升系统整体可维护性,保障系统整体可靠性与可用性。

对于团队效能,系统不再是一块整体,团队更加独立地工作,独立地部署,从而发布更多产品。

尤其在康威定律[2]的指导下,划分组织边界以及服务职责范围,让组织之间更高效默契的沟通以及相互配合提升整体效益。

为什么拆掉微服务

微服务的确带来了很大的收益,不管在系统扩展性,还是在组织扩展性,都促使商业最大限度的规模化。

然业务不是永远增长的,随着业务增长乏力,收益萎缩,需要探索新商业机会,原先高成长的业务团队规模也慢慢收缩,之前的服务系统也慢慢沦为遗留系统。

从原先增长期的每个系统0.5人,到维护期每个人10个系统,服务与团队与康威定律极度不匹配。

简而言之,在高增长期康威定律带来的所有收益,随着时间的推移,业务收缩,都变成了“遗留”团队的负债。

所以需要拆掉微服务,改变服务边界以匹配团队边界,平稳回归康威定律。当然也不是彻底拆掉所有微服务回归单体架构。重点是重新调整职责范围,拆分成符合团队的服务边界。

此时再回头看微服务概念时,当初纠结的“微”到底是多大的问题,已经完全不重要。微服务只是相对单体架构(Monolithic)的称呼,“微”不代表任何实际的内容。

我们需要更多的关注“合适大小”,服务经过了恰当地设计,以满足其需求:它负责“合适数量”的功能。而且,至于什么是“合适”并不是一个静态的概念,它取决于团队,即团队的技能集、组织的状态、投资回报率(return-on-investment,ROI)的计算、持有成本以及该服务运行的时间点。

简单总结一下,拆掉微服务,相对程序效能,更多的关注点在团队效能,服务边界匹配团队边界。其次,在整合团队,回归康威定律的过程中,业务流量也是在减少的,程序效能问题也再像扩张时期那么显著。

总结

一切技术都得服务于业务,而业务形态决定了技术形态。

没有完美的业务,也必然没有完美的技术,只有两者相匹配时,才能相得益彰。

不管是建,还是拆。都是适时的选择。架构只有顺应环境才能生存,最大化业务价值。

References

[1] 《中台是什么》: https://www.zhuxingsheng.com/blog/what-is-zhongtai.html

[2] 康威定律: https://www.zhuxingsheng.com/blog/conway's-law-and-inverse-conway's-law.html

[3] 拆掉微服务: https://www.infoq.cn/article/o6kcqCSGBTmeTbOP4wG1

目录
相关文章
|
11月前
|
运维 监控 Oracle
不要迷信微服务,但也不要放弃对微服务,中台的迷恋与追逐
从公司使用微服务的角度,分析微服务的优缺点
92 0
|
消息中间件 Cloud Native 架构师
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
173 0
|
消息中间件 Cloud Native 架构师
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
软件架构设计本身就是一个复杂的事情,但其实业界已有一个共识,那就是“通过组件化完成关注点的分离从而降低局部复杂度”。其实现在我们用的无论是容器、中间件、消息、数据库等,在某种意义上都是组件化的产物。这样的好处是在不同的系统里可以复用。在云原生兴起的今天,以通用的、组件化的服务形式更容易为我们所用,所以说现在如果还不享用云原生技术红利,那你就会被时代抛弃。
369 0
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
|
消息中间件 Cloud Native 架构师
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
业级应用架构是在不断的演进和迭代,但是我始终感觉企业应用架构的形成过程是在一种看起来科学的方法论下,但是又不完全科学的过程中实现的。
如何设计一个复杂的业务系统?从对领域设计、云原生、微服务、中台的理解开始
|
容灾 Java 领域建模
32份有关微服务、DDD与中台经典架构文档
32份有关微服务、DDD与中台经典架构文档
365 0
|
运维 前端开发 架构师
新书《微服务中台架构开发》
本书得到阿里CIO学院和阿里巴巴副总裁胡臣杰的倾力推介,本书系统全面地介绍基于阿里云 PaaS 平台搭建业务中台的整个过程,是一本开发微服务系统的开发和入门实战书,计划2021年元旦在各大平台上线销售
新书《微服务中台架构开发》
|
新零售 Java 应用服务中间件
架构师必须要知道的阿里的中台战略与微服务
  传统企业平台都是烟囱式的系统架构,企业内部为了迎合业务发展不停的打造各种系统,导致各系统间的重复功能建设和维护带来的重复投资。重复投资不仅消耗的是人力,财力还有时间。但打通烟囱式系统间交互的集成和协作成本高昂,各大企业不得不借助ESB产品,构建企业服务总线,打通各系统间的交互问题。
6378 0
|
3天前
|
API 持续交付 开发者
构建高效微服务架构:后端开发的新视角
【5月更文挑战第8天】 随着现代软件开发的演变,微服务架构已经成为了企业追求敏捷、可扩展和灵活部署的重要解决方案。本文将深入探讨如何构建一个高效的微服务架构,包括关键的设计原则、技术栈选择以及持续集成与部署的最佳实践。我们还将讨论微服务带来的挑战,如数据一致性、服务发现和网络延迟,并提出相应的解决策略。通过本文,后端开发者将获得构建和维护微服务系统所需的深度知识,并了解如何在不断变化的技术环境中保持系统的健壮性和可维护性。
35 8
|
1天前
|
监控 持续交付 Docker
使用Docker进行微服务架构的最佳实践
【5月更文挑战第10天】本文探讨了使用Docker实施微服务架构的最佳实践。首先,理解微服务架构是拆分小型独立服务的模式,借助Docker实现快速部署、高可移植性和环境一致性。Docker的优势在于服务扩展、容器编排、自动化构建与部署。最佳实践包括:定义清晰服务边界,使用Dockerfile和Docker Compose自动化构建,利用Docker Swarm或Kubernetes编排,实施服务发现和负载均衡,监控与日志记录,以及持续集成和持续部署。Docker虽重要,但需与其他技术结合以确保系统整体稳定性。