Twitter下架部分微服务,是微服务错了?

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: Twitter下架部分微服务,是微服务错了?


就在Twitter的部分微服务被新任CEO马斯克勒令下架之际,部分用户很快报告称自己无法正常登录软件。此前,马斯克曾将这些被关闭的微服务称为“膨胀软件”,但粗暴剔除使得一些用户的双因素身份验证出了问题。Twitter最终解决了问题,可微服务在IT架构中的作用因此受到了质疑。

在此次Twitter事件中,砍掉部分微服务就像是用力抽出缠结线团中的一个线头,意外解开了几个重要的结。但借此机会,其他组织也想思考自己能不能不用微服务,还是说微服务架构已经与自身运营体系紧密绑定、一损俱损。

Pulumi公司CEO Joe Duffy就微服务融入IT架构的态势、带来的助益,以及如何在IT管理者的疏忽下成为新的遗留技术债务发表了观点。

微服务在IT架构中处于什么位置?

在我的脑海里有这样一道光谱,两端分别是单体式架构和完全分布式架构。微服务就处于这道光谱中更偏向完全分布式架构的位置。云计算的普及让我们能够以全新方式思考事物。想想真正的分布式应用程序架构,我们就是从“双虚拟机加单数据库”的时代步步前行,通过托管服务、容器再到无服务器架构最终来到了完全分布式的彼岸。而微服务无疑在其中扮演了重要角色。

现代云确实加速了向这些架构的转变,但不同架构其实各有利弊,绝不是越新越好。微服务虽然活动组件更多、复杂性更高,但也提供了一种将服务置于API边界,借此将复杂度控制在合理范围内的办法。

亚马逊在这方面的早期探索最为典型,因为Bezos要求各团队必须通过API进行通信。这就产生了一种观念,即各个团队分别运行不同的服务,而服务间由软件连通——靠的是API,而不再是人。这有助于不同团队分别独立行动,但又能协同达成约定的功能。不过可以想见,这样的体系也往往会过度膨胀,而且底层的复杂性只是被掩盖住了、并没被真正消除。

一旦把这些麻烦藏在API背后,人们就很容易往那一丢、再也不管。现实情况就是,很多企业实际可能只需要5项微服务,但实际微服务数量却成千上万。这就是所谓过度膨胀,但我认为还算是发展历程中的正常阶段。

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

微服务跟清晰分层、井井有条的传统IT架构来比较,孰优孰劣?

微服务当然有自己的优势,它能大大降低系统运行的门槛。它提供API,所以一次API调用就能获得所需功能。其实把功能抽象成微服务是件好事,意味着我们不再需要频繁思考怎么操作这些功能。只需要启动、运行、调用,就这么简单。

微服务也可能成为遗留系统、成为不再增值的系统,但这同样不是坏事——毕竟任何人的脑容量都是有限的,如果把这些已经固化的部分都塞进庞大的单一系统,那就根本没法管理了。借助微服务,我们可以对平台的不同功能做明确划分,然后分别放在API和微服务后面。当然,这种遗产或者说债务也确实会随时间推移而不断累积。

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

那有没有人呼吁简化微服务,尝试解决这方面的难题?

其实跟任何事物一样,微服务也有自己的Gartner炒作周期——先是期望过高的峰值,然后走向幻想破灭的低谷。微服务的低谷期应该已经过了,但整个发展历程仍然值得一说。坦率地讲,很多人其实是在不适合的场景中使用微服务,甚至是为了微服务而微服务。

Kubernetes那边也有类似的状况:每个人都想用一把Kubernetes,却没有考虑到自己的需求规模到底有没有必要。微服务在炒作周期中比Kubernetes中走得更远,所以使用方式也更合理一点了。

要解答这个问题,我们可能需要退回一步,想想自己到底要让这套系统实现什么功能。比如说当我们手头有上千项微服务,那就很容易迷失方向,搞不清当初到底想用它们实现什么功能、系统构建的最优方法是什么。另外,微服务在正常使用下也会保持有机增长。刚开始,我们创建服务、发布服务、部署API;接下来就是调用API,再据此构建新的服务。这就创造出了一个相互依存、彼此关联的微服务网络。

如果单体式架构能够满足需求,那不妨优先采用。但随着团队规模的扩大,单体式架构往往开始成为瓶颈。所以正确的答案在于权衡,不存在银弹式的终极真理。

是否存在最适合的微服务应用场景?与之对应,有没有明确不适用微服务架构的场景?

亚马逊云科技就是典型的微服务应用案例。看看他们的产品组合,400多种不同且彼此独立的服务堆叠起来,而且每项服务都有自己的API。因此亚马逊拥有独特的内部组织方式,各团队就是自己产品和服务的所有者。这种架构跟业务组织是高度统一的,如果不选择这种运营方式,我很难想象他们能够建立起如何庞大的云服务平台。

而相对比较复杂的是那种“灰色”区域,比如说Stripe。Stripe也属于服务集合和产品集合。我敢肯定,其中的身份验证服务跟信用卡计费和其他计量服务肯定彼此独立,而报告跟分析服务又是额外的部分。作为一家物流配送企业,Stripe关注的是产品运输中的实施细节,所以我估计他们肯定是找到了单体跟分布之间的理想平衡。

总之,产品越简单、本质越单一,就越没必要把它拆分成多个彼此独立的服务。

但如果一家企业深度拥抱微服务,但突然被迫放弃这条路,结果会怎么样?

其实这类架构决策不存在“突然被迫放弃”这种情况,它们反映的可是非常深刻的问题。微服务的优势在于不同事物之间在物理上相互独立,甚至各自运行在不同服务器上并由API连通。这些API肯定会影响性能。

所以要想放弃这样的架构设计,肯定需要审慎考量,比如“既然我们不需要这些服务,能不能直接关掉?”但这并不是微服务特有的问题,只是在微服务架构中容易被忽略的问题。只要运行软件,这样的问题就总会存在。为什么你会有那么多根本不需要的服务?要想保留并整合这么多服务,本身就是会是个重大的架构变化,微不微服务都一样。



相关文章
|
Java 中间件 知识图谱
GitHub强制下架!阿里“藏经阁”的全彩微服务治理笔记泄露了
软件技术的发展,从单体的应用,逐渐演进到分布式应用, 特别是微服务理念的兴起,让大规模、高并发、低延迟的分布式应用成为可能。但是微服务架构不是银弹, 其维护的复杂度,以及管理、治理的难度超过以往的任何系统架构。
|
19天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
73 6
|
19天前
|
设计模式 Java API
微服务架构演变与架构设计深度解析
【11月更文挑战第14天】在当今的IT行业中,微服务架构已经成为构建大型、复杂系统的重要范式。本文将从微服务架构的背景、业务场景、功能点、底层原理、实战、设计模式等多个方面进行深度解析,并结合京东电商的案例,探讨微服务架构在实际应用中的实施与效果。
30 1
|
3月前
|
安全 应用服务中间件 API
微服务分布式系统架构之zookeeper与dubbo-2
微服务分布式系统架构之zookeeper与dubbo-2
|
3月前
|
负载均衡 Java 应用服务中间件
微服务分布式系统架构之zookeeper与dubbor-1
微服务分布式系统架构之zookeeper与dubbor-1
|
4月前
|
Kubernetes Cloud Native Docker
云原生之旅:从容器到微服务的架构演变
【8月更文挑战第29天】在数字化时代的浪潮下,云原生技术以其灵活性、可扩展性和弹性管理成为企业数字化转型的关键。本文将通过浅显易懂的语言和生动的比喻,带领读者了解云原生的基本概念,探索容器化技术的奥秘,并深入微服务架构的世界。我们将一起见证代码如何转化为现实中的服务,实现快速迭代和高效部署。无论你是初学者还是有经验的开发者,这篇文章都会为你打开一扇通往云原生世界的大门。
|
4月前
|
负载均衡 应用服务中间件 持续交付
微服务架构下的Web服务器部署
【8月更文第28天】随着互联网应用的不断发展,传统的单体应用架构逐渐显露出其局限性,特别是在可扩展性和维护性方面。为了解决这些问题,微服务架构应运而生。微服务架构通过将应用程序分解成一系列小型、独立的服务来提高系统的灵活性和可维护性。本文将探讨如何在微服务架构中有效部署和管理Web服务器实例,并提供一些实际的代码示例。
123 0
|
18天前
|
消息中间件 供应链 架构师
微服务如何实现低耦合高内聚?架构师都在用的技巧!
本文介绍了微服务的拆分方法,重点讲解了“高内聚”和“低耦合”两个核心设计原则。高内聚强调每个微服务应专注于单一职责,减少代码修改范围,提高系统稳定性。低耦合则通过接口和消息队列实现服务间的解耦,确保各服务独立运作,提升系统的灵活性和可维护性。通过领域建模和事件通知机制,可以有效实现微服务的高效拆分和管理。
44 7
|
2月前
|
Kubernetes 安全 微服务
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
使用 Istio 缓解电信 5G IoT 微服务 Pod 架构的安全挑战
57 8
|
2月前
|
消息中间件 负载均衡 Cloud Native
云原生之旅:从容器到微服务的架构演变
在数字化转型的风潮中,云原生技术以其灵活性、可扩展性和弹性而备受青睐。本文将通过一个虚拟的故事,讲述一个企业如何逐步拥抱云原生,实现从传统架构向容器化和微服务架构的转变,以及这一过程中遇到的挑战和解决方案。我们将以浅显易懂的方式,探讨云原生的核心概念,并通过实际代码示例,展示如何在云平台上部署和管理微服务。