分享到

导言

单体应用程序和微服务架构是两种最常见的应用程序架构方法。在单体应用程序中,功能由一个大型应用程序提供;而在微服务架构中,功能被拆分为相互协调的小单元。这些设计选择可能会对开发体验、部署的便捷性和运营足迹产生深远的影响。

应用程序架构影响环境的最重要方式之一是它如何影响您使用数据库的方式。应用程序结构通常会影响数据结构,还会影响数据的存储位置以及如何操作数据。在本指南中,我们将讨论单体架构和微服务之间的区别,并特别讨论这些决策如何影响您的数据库。

什么是单体架构和微服务?

在软件开发中,单体架构和微服务都描述了应用程序架构。

单体应用程序

单体应用程序是传统的应用程序开发和部署风格。在单体设计中,执行有用工作所需的大部分处理、通信和协调都在单个应用程序内部进行。应用程序与外部世界交互,以接收来自用户(通常通过 Web 服务器端点公开)的输入和命令,并与其他服务(如数据库)交互。

单体架构很受欢迎,因为它们遵循广为人知的开发模式,并拥有大量的工具套件,可以帮助进行调试和故障排除。单体应用程序的整合性质也使其在运营环境中相对简单地进行部署和管理。虽然在多个团队在同一个应用程序上工作时,必须注意协调更改,但移动部件的数量相对较少。

话虽如此,使用单个包罗万象的应用程序也可能有很多缺点。必须紧密协调应用程序开发,以确保与特定功能相关的所有代码彼此保持同步。当必须扩展整个应用程序以满足不同需求时,扩展也可能非常具有挑战性,尤其是在应用程序可能没有协调所需的接口或逻辑(如果必须运行多个副本)的情况下。

微服务

微服务是架构应用程序的另一种方法,它涉及将应用程序的功能拆分为许多离散的“服务”。这些服务各自具有明确定义的职责,并通过网络相互协调以完成有用的工作。从某种意义上说,微服务是一种开发风格,它分解应用程序并将内部通信重新实现为网络通信。

人们选择微服务而不是单体应用程序有很多原因。微服务允许您根据各个服务的性能和负载特性独立扩展服务。除了可扩展性本身的好处之外,跨各种主机运行多个小型组件的副本还可以提高应用程序的弹性,从而帮助确保硬件故障不会导致停机。

这种灵活性使您不仅可以将各个组件的扩展解耦,还可以将开发本身解耦。只要不同的服务提供其他组件可以与之通信的接口,就可以使用完全不同的语言构建不同的服务。这可能会对团队对组件的“所有权”体验产生深远的影响,并带来快速迭代甚至完全重写服务而不会影响其他领域等好处。

微服务也带来了自身的挑战。例如,部署和管理大量服务的运营复杂性可能会让人感到难以承受,特别是如果您的团队没有强大的运营背景。服务间通信的重要性增加了网络层上的需求复杂性和流量。与此同时,调试和测试变得更加困难,因为传统的工具通常不适用于分布式环境。

微服务如何影响数据库架构?

上面讨论的架构选项对开发过程的外观以及在生产环境中运行应用程序的体验产生了深远的影响。数据库是可能受到特别影响的组件之一。

单体应用程序通常与集中式数据库一起部署。应用程序可能会将读取操作传递给副本以更均匀地分配负载,但总的来说,数据都位于一个位置。在这种情况下,集中式数据库负责管理与许多不同的应用程序上下文和功能相关的信息。

然而,微服务通常与更复杂的数据环境相结合。各个微服务通常与其自己的数据库实例一起部署,这些数据库实例负责管理该特定服务的数据,仅此而已。

使用特定于服务的数据库的优点和缺点

这种模式很受欢迎,因为它允许开发人员独立迭代和部署每个微服务。开发中最大的协调点之一是修改数据库的代码,因为更改可能会影响应用程序的许多不同部分。如果一个团队更改了数据库模式,则可能会破坏为预期先前模式而编写的功能。

为每个微服务提供自己的数据库可以消除这种级联效应,从而使开发人员能够以更少的协调和更高的信心进行所需的更改。它进一步实现了将服务作为离散的、专注的组件进行管理的目标,这些组件仅通过定义明确的接口相互交互。

然而,每个微服务一个数据库的模式并非没有自身的挑战。随着微服务数量的增加,数据存储的数量也随之增加。运营要求成倍增加,因为团队现在必须为每个新服务管理数据库部署、备份、故障转移和其他问题。如果没有完善的工具和专业知识,这可能会很快变得难以管理。

开发人员还必须弄清楚如何协调可能涉及多个微服务的查询和更新。例如,如果要下订单,客户的数据、库存数据和订单信息本身可能由不同的微服务管理。

结论

微服务模式可以帮助您扩展应用程序,并可以使某些开发和部署任务在组织中更易于协调。它可以帮助您更快地迭代和发布更改,同时限制新代码对应用程序其他部分的影响。

重要的是要了解您选择的架构将如何影响开发过程、基础设施和运营要求的不同部分。就微服务而言,数据库环境通常与单体部署截然不同。重要的是要了解要预期的变化以及如何管理挑战以保持生产力。

关于作者
Justin Ellingwood

Justin Ellingwood

自 2013 年以来,Justin 一直在撰写关于数据库、Linux、基础设施和开发者工具的文章。他目前与妻子和两只兔子住在柏林。他通常不必以第三人称写作,这对所有相关方来说都是一种解脱。