微服务部署的正确策略

在过去的几年中,微服务体系结构提供了高级软件可伸缩性,因此非常流行。尽管组织接受这种架构模式,但是许多组织仍在努力制定能够克服一些主要挑战的策略,例如将其分解为基于微服务的应用程序。

在本文中,优锐课将分享一些最受欢迎的微服务部署策略,并研究组织如何利用它来获得更高的敏捷性,效率,灵活性和可扩展性。


微服务部署挑战

整体应用程序的部署意味着您将运行一个通常较大的应用程序的多个相同副本。这主要是通过配置N台物理或虚拟服务器,并在每台服务器上运行应用程序的M个实例来完成的。尽管看起来很简单,但通常不是。但是,这比部署微服务应用程序容易得多。


如果你打算部署微服务应用程序,那么你必须熟悉编写这些服务的各种框架和语言。这也是最大的挑战之一,因为这些服务中的每一项都有其特定的部署,资源要求, 扩展和监视需求。此外,部署服务必须快速,可靠且具有成本效益!

好消息是,可以轻松扩展几种微服务部署模式,以处理来自各种集成组件的大量请求。阅读此博客,找出最适合你的并进行部署。


微服务部署策略

1.每个主机(物理或VM)有多个服务实例

部署应用程序的最传统方法也许是“每主机多个服务实例”模式。在这种模式下,软件开发人员可以提供单个或多个物理或虚拟主机,并在每个主机上运行多个服务实例。此模式几乎没有变体,包括每个服务实例作为一个流程或在同一流程中运行多个服务实例的变体。

image.png

好处

由于多个服务实例使用同一服务器及其操作系统,因此资源使用效率相对较高。


服务实例的部署也相对较快,因为你只需要将服务复制到主机上并运行它即可。


例如,如果该服务是用Java编写的,则只需复制JARWAR文件,或者如果它是用Node.jsRuby编写的,则复制源代码。

由于没有开销,因此以这种模式启动服务也很快。 如果服务具有其进程,则可以将其启动,也可以将其动态部署到容器中,或者如果该服务是在同一容器进程或进程组中运行的许多实例之一,则可以重新启动它。

挑战性

  • 对服务实例的控制很少或完全缺乏控制,除非每个实例都是一个单独的进程。你无法限制每个实例使用的资源。这会大大消耗主机的内存。

  • 如果多个服务实例在同一进程中运行,则缺乏隔离。这通常会导致一个行为异常的服务中断同一进程中的其他服务。

  • 部署过程中出现错误的风险更高,因为部署它的运营团队需要知道服务的详细信息。因此,开发团队和运营之间的信息交换是消除所有复杂性的必要条件。

2. 每个主机的服务实例(物理或VM

每个主机模式的服务实例是部署微服务的另一种方法。这使你可以在其主机上分别运行每个实例。这有两个专长:每个虚拟机的服务实例和每个容器的服务实例。


每个虚拟机模式的服务实例使你可以将每个服务打包为虚拟机(VM)映像,例如Amazon EC2 AMI。每个实例都是使用该VM映像运行的VM。使用这种模式的流行应用之一是Netflix的视频流服务。要构建自己的VM,你可以配置Jenkins等连续集成服务器或使用packer.io

image.png

好处

每个虚拟机模式使用服务实例的最大好处之一是,它使用有限的内存,并且由于是独立运行的,因此无法从其他服务中窃取资源。

它允许你利用成熟的云基础架构(例如AWS)来利用负载平衡和自动扩展功能。

由于该服务一旦打包为虚拟机,便成为黑匣子,因此可以密封你服务的实施技术。它使部署变得更加简单和可靠。

挑战性

  • 由于虚拟机通常在典型的公共IaaS中具有固定的大小,因此有可能无法完全利用它。效率较低的资源利用率最终也会导致更高的部署成本,因为IaaS提供程序通常会向VM收费,而不管它们是空闲还是繁忙。

  • 最新版本的部署通常很慢。这是因为VM映像由于其大小而导致创建和实例化速度很慢。通常可以通过使用轻量级VM来克服此缺陷。

  • 除非你不使用工具来构建和管理VM,否则每个虚拟机模式的服务实例对于你和你的团队而言通常很耗时。这通常是一个繁琐的过程,但是好消息是可以通过使用各种解决方案(例如Box保险丝)解决该问题。

3. 每个容器的服务实例

在这种模式下,每个服务实例都在其各自的容器中运行,这是操作系统级别的虚拟化机制。一些流行的容器技术是DockerSolaris Zones


为了使用此模式,你需要将服务打包为一个文件系统映像,其中包含执行该服务所需的应用程序和库,通常被称为容器映像。将服务打包为容器映像后,你需要启动一个或多个容器,并可以在物理或虚拟主机上运行多个容器。为了管理多个容器,许多开发人员喜欢使用集群管理器,例如KubernetesMarathon

好处

就像每个虚拟机的服务实例一样,该模式也可以独立工作。它使你可以跟踪每个容器正在使用多少资源。与VM相比,最大的优势之一是容器重量轻且构建速度非常快。由于没有操作系统启动机制,因此容器可以快速启动。

image.png

挑战性

尽管基础架构日趋成熟,但每个容器模式的服务实例仍落后于VM基础架构,并且不如VM安全,因为它们共享主机OS的内核。

VM一样,你要承担所有管理容器映像的繁重工作。如果你没有另外的容器解决方案(例如Amazon EC2容器服务(ECS)),则还必须管理容器基础结构,可能还需要管理VM基础结构。

此外,由于大多数容器都部署在按VM定价的基础架构上,因此会导致额外的部署成本和VM的超额配置,以应对意外的负载高峰。

4. 无服务器部署

无服务器部署技术是微服务部署的另一种策略,它支持JavaNode.jsPython服务。AWS Lambda是全球开发人员使用的一种流行技术。在这种模式下,你需要将该服务打包为一个ZIP文件并将其上传到Lambda函数(这是一个无状态服务)。


你也可以提供元数据,该元数据具有处理请求时要调用的函数的名称。Lambda函数自动运行足够的微服务实例来处理请求。你只需根据花费的时间和消耗的内存为每个请求付费。

image.png

好处

无服务器部署的最大优势是定价,因为你将仅根据服务器执行的工作向你收费。

它使你从IT基础架构的任何方面(例如VM,容器等)中解放出来,从而使你有更多时间专注于应用程序的开发。

挑战性

无服务器部署的最大挑战是它不能用于长期运行的服务。所有请求必须在300秒内完成。

此外,你的服务必须是无状态的,因为Lambda函数可能会为每个请求运行不同的实例。

服务必须使用一种受支持的语言,并且必须快速启动,否则服务可能会超时并终止。


总结

如果没有正确的策略,部署微服务应用程序可能会非常困难。由于这些服务是用多种框架和语言编写的,因此每种服务都有其部署,扩展和管理要求。因此,有必要知道哪种模式最适合你的组织。

 


猜你喜欢

转载自blog.51cto.com/14631216/2460536