购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.7 我应该采用微服务吗

尽管某些方面的优势推动着微服务架构成为软件的默认架构方法,但我觉得考虑到已经讲过的许多挑战,在采用微服务之前我们仍然需要仔细斟酌。在确定微服务是否适合之前,需要评估自己的问题空间、技能和技术环境,并明确想要实现的目标。微服务只是架构方法之一,而 不是唯一 。你所处的背景环境应该在决定是否走这条路时发挥重要作用。

下面,我会描述一些通常会让我远离微服务或倾向于选择微服务的情况。

1.7.1 不适用情况

考虑到定义稳定的服务边界的重要性,我觉得微服务架构对于全新的产品或初创公司来说往往是一个糟糕的选择。在任何一种情况下,当你迭代试图构建的基础功能时,所处的领域通常正在经历重大变化。领域模型的转变反过来会导致服务边界的更多变更,而跨服务边界的变更协调是一项成本很高的工作。一般来说,我觉得等到足够多的领域模型稳定下来之后再明确定义服务边界更加合适。

我确实看到了直接采用微服务对初创公司的诱惑,原因是:“如果我们真的成功了,我们肯定需要扩张!”可问题在于,你不能确定是否一定会有人想使用你的新产品。即使你确实成功到需要一个高度可扩展的架构,可那时你最终交付给用户的东西可能与你最初构建的东西大不相同。比如优步最初专注于豪华轿车;Flickr 最初试图创建一款多人在线游戏,但后来两者的产品都发生了变化。寻找产品和市场是否契合的过程意味着你最终可能会得到一种与初始构想截然不同的产品。

初创公司通常也没有太多人手来构建系统,这给采用微服务带来了更多挑战。微服务带来了大量的新工作和复杂性,这可能会占用宝贵的资源。团队规模越小,这种成本的影响就越明显。出于这个原因,当与只有少量开发人员的小型团队合作时,我不建议使用微服务。

对于初创公司而言,微服务的挑战还在于,最大的限制因素往往是人。对于一个小团队来说,微服务架构可能很难被证明其必要性,因为对微服务本身的部署和管理是要消耗工作量的。有人将其描述为“微服务税”。当这种投入让很多人受益时,就更容易证明其必要性。但是,如果你的5人团队中有一个人将所有时间花在这些问题上,那么就意味着很多宝贵的时间没有被用在构建产品上。在你了解什么是架构中的制约因素和痛点之后,再迁移到微服务会容易得多;你可以集中精力,只在最合理的地方使用微服务。

最后,如果你提供的软件是需要客户自己部署和管理的,那么在采用微服务时或许会遇到一些困难。正如我们讨论过的,微服务架构可能会将大量复杂性推向部署和运维领域。如果你自己运行软件,你可以通过采用新技术、开发新技能和改变工作实践来“抵消”这种新的复杂性。但是,你无法指望你的客户也能这样做。如果客户习惯了通过 Windows 安装程序来安装软件,那么当你发布新版本并对客户说“只需要将这20个 pod 放在你的 Kubernetes 集群上”时,他们可能会很吃惊,因为他们可能对 pod、Kubernetes 或集群一无所知。

1.7.2 适用情况

根据我的经验,组织采用微服务的最大原因可能是允许更多的开发人员在同一个系统上工作但不会互相妨碍。通过正确设置架构和组织边界,你可以让更多人彼此独立工作,从而减少交付争用。一家5人规模的初创公司可能会觉得微服务架构是一种拖累,而一家快速增长的100人规模的企业可能会发现,与其产品开发协调一致的微服务架构更适应它的增长。

软件即服务 (software as a service,SaaS)类型的应用系统通常也非常适合微服务架构。这类系统通常需要全天候运行,这意味着在系统做出变更时会面临挑战。微服务架构的可独立发布性是解决这一困境的一大福音。此外,微服务可以根据需要扩容或缩容。这意味着,当设立了满足系统负载特性的合理基线后,你就可以更加灵活地控制资源容量,以确保能以最具成本效益的方式伸缩系统。

微服务的技术无关性可以让你充分利用云平台。公有云供应商可以为代码提供各种服务和部署机制。你可以更加轻松地将特定服务的要求与最能帮助你实现它们的云服务相匹配。例如,你可能决定将一个服务以一组函数的方式部署,将另一个服务以托管虚拟机的方式部署,然后将另一个服务直接部署在托管的 平台即服务 (platform as a service,PaaS)平台上。

值得注意的是,广泛采用多种技术往往会带来问题,但能够轻松尝试新技术是快速找到有利于增效的好办法。 函数即服务 (function as a service,FaaS)平台的日益普及就是一个例子。对于合适的工作负载,FaaS 平台可以大幅减少运维开销,但目前这种部署机制并不适用于所有情况。

如果你的组织希望通过各种新渠道为客户提供服务,那么微服务能够为此带来显著的益处。许多数字化转型工作似乎都涉及解锁隐藏在现有系统中的功能,其目的是创造新的客户体验,通过最合理的交互机制来满足用户的需求。

总之,微服务架构可以为系统的持续发展提供很大的灵活性。当然,这种灵活性是有代价的。不过,如果想在未来做出改变时保留选择余地,这是值得付出的代价。 ZCsEspFi9momA2qxBSIXLb1OHkZasRMyioA2CgkvVc1Lh6/+JZDVA8Wwmr3F9TFx

点击中间区域
呼出菜单
上一章
目录
下一章
×