返回介绍

1.8 为什么是云和微服务

发布于 2025-04-22 21:54:04 字数 2146 浏览 0 评论 0 收藏

微服务架构的核心概念之一就是每个服务都被打包和部署为离散的独立制品。服务实例应该迅速启动,服务的每一个实例都是完全相同的。

作为编写微服务的开发人员,我们迟早要决定是否将服务部署到下列某个环境之中。

  • 物理服务器 ——虽然可以构建和部署微服务到物理机器,但由于物理服务器的局限性,很少有组织会这样做。开发人员不能快速提高物理服务器的容量,并且在多个物理服务器之间水平伸缩微服务可能会变得成本非常高。
  • 虚拟机镜像 ——微服务的主要优点之一是能够快速启动和关闭微服务实例,以响应可伸缩性和服务故障事件。虚拟机是主要云供应商的心脏和灵魂。微服务可以打包在虚拟机镜像中,然后开发人员可以在 IaaS 私有或公有云中快速部署和启动服务的多个实例。
  • 虚拟容器 ——虚拟容器是在虚拟机镜像上部署微服务的自然延伸。许多开发人员不是将服务部署到完整的虚拟机,而是将 Docker 容器(或等效的容器技术)部署到云端。虚拟容器在虚拟机内运行。使用虚拟容器,可以将单个虚拟机隔离成共享相同虚拟机镜像的一系列独立进程。

基于云的微服务的优势是以弹性的概念为中心。云服务供应商允许开发人员在几分钟内快速启动新的虚拟机和容器。如果服务容量需求下降,开发人员可以关闭虚拟服务器,而不会产生任何额外的费用。使用云供应商部署微服务可以显著地提高应用程序的水平可伸缩性(添加更多的服务器和服务实例)。服务器弹性也意味着应用程序可以更具弹性。如果其中一台微服务遇到问题并且处理能力正在不断地下降,那么启动新的服务实例可以让应用程序保持足够长的存活时间,让开发团队能够从容而优雅地解决问题。

本书会使用 Docker 容器将所有的微服务和相应的服务基础设施部署到基于 IaaS 的云供应商。下面列出的是用于微服务的常见部署拓扑结构。

  • 简化的基础设施管理 ——IaaS 云计算供应商可以让开发人员最有效地控制他们的服务。开发人员可以通过简单的 API 调用来启动和停止新服务。使用 IaaS 云解决方案,只需支付使用基础设施的费用。
  • 大规模的水平可伸缩性 ——IaaS 云服务供应商允许开发人员快速简便地启动服务的一个或多个实例。这种功能意味着可以快速扩大服务以及绕过表现不佳或出现故障的服务器。
  • 通过地理分布实现高冗余 ——IaaS 供应商必然拥有多个数据中心。通过使用 IaaS 云供应商部署微服务,可以比使用数据中心里的集群拥有更高级别的冗余。

为什么不是基于 PaaS 的微服务

本章前面讨论了 3 种云平台(基础设施即服务、平台即服务和软件即服务)。对于本书,我选择专注于使用基于 IaaS 的方法构建微服务。虽然某些云供应商可以让开发人员抽象出微服务的部署基础设施,但我选择保持独立于供应商并部署应用程序的所有部分(包括服务器)。

例如,亚马逊、Cloud Foundry 和 Heroku 可以让开发人员无需知道底层应用程序容器即可部署服务。它们提供了一个 Web 接口和 API,以允许将应用程序部署为 WAR 或 JAR 文件。设置和调优应用程序服务器和相应的 Java 容器被抽象了出来。虽然这很方便,但每个云供应商的平台与其各自的 PaaS 解决方案有着不同的特点。

IaaS 方案虽然需要更多的工作,但可跨多个云供应商进行移植,并允许开发人员通过产品覆盖更广泛的受众。就个人而言,我发现基于 PaaS 的云解决方案可以快速启动开发工作,但一旦应用程序拥有足够多的微服务,开发人员就会开始需要云服务商提供的 IaaS 风格的灵活性。

本章前面提到过新的云计算平台,如函数即服务(FaaS)和容器即服务(CaaS)。如果不小心,基于 FaaS 的平台就会将代码锁定到一个云供应商平台上,因为代码会被部署到供应商特定的运行时引擎上。使用基于 FaaS 的模型,开发人员可能会使用通用的编程语言(Java、Python、JavaScript 等)编写服务,但开发人员仍然会将自己严格束缚在底层供应商的 API 和部署函数的运行时引擎上。

本书中构建的服务都会打包为 Docker 容器。本书选择 Docker 的原因之一是,作为容器技术,Docker 可以部署到所有主要的云供应商之中。稍后在第 10 章中,本书将演示如何使用 Docker 打包微服务,然后将这些容器部署到亚马逊云平台。

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。