全球数据弹性领域领导者 #1
Veeam 为受 CrowdStrike 内容更新影响的客户提供指导

什么是微服务?

微服务是一种开发应用程序的架构方法,它将项目分解为更小、更独立的服务,这些服务通过 API 相互通信。使用微服务可以通过降低项目每个部分的复杂性来加快应用程序开发。单个微服务可以在多个项目中重用。

了解 Veeam Data Platform 如何帮助在云端、混合或内部环境中保障数据安全。

单体架构与微服务架构

过去,在线应用程序使用的是单体架构。通过这种软件开发方法,项目中的所有流程都紧密耦合在一起。单个 SaaS 项目可能包含多个组件,包括:

  • Web 服务器和负载平衡器
  • 用户注册与管理
  • 支付系统
  • 用于创建和显示内容的 CRUD 系统
  • 供外部使用的 API 端点

单体架构的问题在于,如果 Web 应用程序看到需求激增,则整个系统必须扩展。此外,随着代码库的增长,对其进行更改变得更加困难。从长远来看,这可能会产生技术债务。如果代码库的一部分依赖于旧的或过时的库,或者您想迁移到新框架来实现某些功能,那么代码库其他部分的问题可能会阻碍您。

对于微服务,每个组件都是一个独立的服务。用户服务独立于支付系统,支付系统独立于内容系统,依此类推。这些服务彼此之间不共享任何代码。相反,它们通过 API 相互通信。

由于每个组件都是独立的,因此如果需要,可以用完全不同的语言编写它们。此外,如果一个组件发生故障,也不一定会导致整个应用程序瘫痪。应用程序中不依赖于该组件的其他方面仍可正常运行。

面向服务的架构(SOA)与微服务架构

在面向服务的架构中,应用程序被分解为多个模块。这些模块具有明确定义的角色,并且比单体应用程序小,这使得 SOA 类似于微服务方法。SOA 和微服务架构之间的主要区别在于架构的范围。

为 SOA 构建的模块在企业范围内共享和重用。相比之下,微服务依赖于设计为独立运行的模块。这并不是说为微服务架构编写的组件不能重用,但方法不同。例如,为 SOA 应用程序构建的模块可能共享相同的存储层,并使用相同的企业存储总线(ESB)进行通信。在微服务环境中,每个服务都有一个单独的 API,并且可以使用自己的存储。

微服务的优势

微服务有几个优点,特别是当应用程序从头开始设计为使用此模型时。

  • 易于开发:由于微服务是小型的独立应用程序,因此每个微服务都可以由单独的团队开发。每个微服务都有明确定义的用途,因此可以轻松地为它们编写测试。对微服务进行故障排除通常比对单体应用程序进行故障排除更容易。此外,可以重用现有的微服务,随着项目的发展进一步加快开发速度。
  • 灵活性:单体应用程序的开发人员经常发现自己被某些技术或做事方式所束缚,因为很难对现有代码库进行更改。使用微服务,可以更轻松地进行更改、尝试新技术和动态重构代码,因为在使用独立服务时,意外后果的风险较小。
  • 可扩展性:扩展单体应用程序可能很困难。简单地过度配置硬件是不划算的,而且这种扩展方法对于应对突然的、意想不到的需求高峰是不可行的。微服务为扩展应用程序提供了更多选项,可以帮助开发人员在需要时增加容量,然后在需求减少时关闭额外的服务。
  • 韧性:如果单体应用程序发生故障,则整个应用程序都会崩溃。对于微服务,问题仅限于失败的特定应用程序。例如,如果游戏的登录服务器出现故障,则可能会阻止新用户进行身份验证,但任何已连接到该应用的用户都可以继续正常使用它。照片库的问题可能仅限于该小型服务,不会干扰网站的其他区域。
  • 提高资源利用率:与使用单体架构相比,将应用程序分解为小的、明确定义的服务可以提高效率。企业可以使用无头微服务 CMS 和轻量级自定义前端来显示其内容,而不是运行资源需求量大的大型 CMS 来管理网站内容。

微服务的挑战

微服务的强大功能和灵活性使其成为大型复杂应用程序的热门选择。但是,部署它们存在一些挑战。

  • 复杂性:虽然微服务架构应用程序的每个组件都很简单,但应用程序本身可能会变得非常复杂,因为需要考虑许多不同的组件。将应用程序分解为多个组件可能会引入可能出错的额外区域。它还可能产生一些性能开销。
  • 数据一致性:使用微服务架构时,可能会出现数据一致性和争用条件方面的问题。如果一个微服务正在从数据库读取数据,而另一个微服务正在尝试更新数据库,那么处理这种情况可能很有挑战性。
  • 通信和服务发现:确保所有微服务都能有效地相互通信并且知道哪些服务可用以及在哪里可用可能是一项挑战。这是应该在设计阶段早期解决的问题。
  • 测试/调试:在某些方面,测试微服务更容易,因为每个组件都可以独立测试。但是,在连接组件时,测试和调试它们可能是一个挑战。您获得的意外输出是否是由于您当前正在使用的组件中出错而导致,或者从其他服务提供给它的数据不是您所期望的数据?
  • 监控和服务管理:微服务架构的好处之一是能够按需创建和销毁微服务实例,而不会影响程序的其他领域。管理这一点可能需要其他工具,例如用于管理容器部署的软件。

微服务技术

有许多工具和技术用于管理微服务架构。下面介绍微服务环境中常见的一些关键技术。

容器化

容器是微服务架构的关键部分。它们允许以可预测和高效的方式快速部署微服务应用程序。容器化工具有多种,从传统的 LXC Linux 容器到现在几乎无处不在的 Docker。容器是即用型应用程序,包含所需的所有库和其他信息,支持在几乎任何环境中一键部署。

协调

虽然可以在小型部署中手动管理容器,但跨多个云服务运行多个 docker 部署的组织将需要一种方法来自动化此过程。Kubernetes 等解决方案支持大规模自动化。开发人员可以使用一种称为 YAML 的人类可读数据序列化语言来定义其容器。

API 网关

每个微服务都通过 REST API 与其他微服务通信。当存在少量已知服务时,让这些服务直接通信非常简单。随着环境变得越来越复杂,服务之间直接通信的效率也会降低。API 网关和管理工具使开发人员能够更轻松地集成预构建的服务。网关接收请求并将其传递给位于它们后面的系统。如果需要更改有关底层服务的任何内容,则唯一需要更新的是网关。您的其他服务可以继续照常将请求传递到网关。

服务注册表

服务注册表是跟踪可用于接收所发请求的微服务的有效方法。服务注册表是服务、其实例及其位置的数据库。在某些模型中,服务注册表可能还负责使用每个服务的 API 调用运行状况检查,以确认它们当前能够处理请求。一些容器管理系统(如 Kubernetes)具有自己的内置服务注册表,以便更轻松地进行服务发现和管理。

断路器

断路器用于监视微服务体系结构中服务的运行状况。当采用断路器时,微服务可以正常相互通信,并且断路器会对所有错误进行计数。如果在给定时间段内检测到的错误数达到某个阈值,断路器将激活。如果未达到此数字,断路器会将计数设置回零并继续监控。这有助于确保微服务可靠运行,并考虑任何可接受的超时或其他错误。

微服务用例和示例

对于面向 Web 的应用程序需要能够随着时间的推移而发展和扩展的任何环境,微服务架构都很有用。 微服务被用于从游戏和电子商务到物流和金融的方方面面。

电子商务

电子商务解决方案提供商 Bigcommerce 提倡对其一些客户使用微服务架构和无头电子商务解决方案。它将增强的敏捷性和灵活性列为该架构的一些主要优势。

医疗

微服务允许医疗保健提供商创建独立但松散耦合的应用程序,这些应用程序可以协同工作,并且只能访问他们需要的数据。与传统的 ESB 系统相比,使用微服务架构具有多项优势。没有单点故障,因此一个系统的问题不会影响其他可能更关键的系统。此外,隔离系统后,测试和安全变得更易于管理。在医疗保健环境中最大限度地提高系统和数据可用性至关重要,现代微服务方法正变得越来越流行,因为它有助于实现这些目标。

银行与金融

银行和金融行业中的许多组织都严重依赖难以更新的传统系统。许多组织并没有尝试修改单体传统代码库,而是使用连接到现有代码库的微服务来提供额外的功能。新兴的金融机构能够从头开始,设计基于微服务和单个 API 的系统。较老的机构可以保留其单体代码库,同时仍然可以改善用户体验并构建与该代码对接的新功能。通过结合使用一些系统,例如 Veeam 的金融服务数据安全和保护系统,组织可以确信他们的系统非常坚固并且保护了用户数据。

运输和物流

运输和物流部门正在引领许多技术的采用,包括物联网技术,这些技术可用于供应链跟踪。一个著名的项目 NIMBLE 采用了 微服务架构方法来联合物联网,提供可靠且可扩展的实时监控和供应链优化。

通过采用基于微服务的开发方法,组织可以快速测试新设备和技术,而不会干扰现有工作流程。鉴于现代供应链的 24 小时性质,这种灵活性是一项非常有用的功能。

Veeam 入门

无论您的数据托管在何种环境中,Veeam 都可让您轻松地管理备份和数据安全。无论您是正在使用单体内部架构,还是主要使用第三方 SaaS 提供商(例如 Salesforce)来管理客户信息或在云中托管应用程序,Veeam 都可以帮助您保护数据。

我们为 AWS、Azure、Google 和 IBM 云平台与 Kubernetes 部署提供备份和恢复解决方案,以及流行的虚拟化解决方案。我们的工具旨在尽可能无缝地融入到您现有的配置中。

我们提供许多工具的免费社区版。例如,Veeam Kasten 最多可免费使用 5 个节点。这使用户有机会在决定是否要大规模部署系统之前先测试系统。我们的企业产品也有限时试用版。

使用 Veeam Data Platform 防范贵组织发生数据泄露和丢失。