贯穿微服务的核心思想是:当某些类型的应用程序被拆分为可以协同工作的、较小的、可组合的模块时,它们变得更加容易构建和维护。每个组件都是持续开发和单独维护的,这样整个应用程序就是由其它组件组合而成。这与传统的“单体”应用形成鲜明地对比,后者将所有的功能全部都融合在一个应用当中。

用一系列模块化的组件来构建应用更易于理解和测试,而且最重要的是在应用的整个生命周期中更易于维护。它使得公司或者组织能够实现更高的灵活性,并能够大大缩短开发、测试、投产等所需的时间。事实证明,这种方法更加出色,特别是对于由地理和文化多样化的开发人员团队开发的大型企业应用。

微服务还有其他一些好处:

  • __开发人员独立性__:小型团队并行工作,并且可以比大型团队更快地迭代。
  • __隔离和弹性__:如果一个组件死了,你可以旋转另一个组件,然后应用程序的其余部分继续运行。
  • __可扩展性__:较小的组件占用较少的资源,并且可以进行扩展以仅满足该组件不断增长的需求。
  • __生命周期自动化__:单个组件更易于适应连续交付管道和复杂的部署方案,而单体应用则无法实现。
  • __与业务的关系__:微服务架构在业务领域边界上分开,增加了整个组织的独立性和理解。

微服务的通用定义通常依赖于提供API端点的每个微服务,通常但不总是无状态REST API,可以通过HTTP(S)访问,就像标准网页一样。这种访问微服务的方法使开发人员可以轻松地使用它们,因为它们只需要大多数开发人员已经熟悉的开发工具和方法。

微服务是一个新概念吗?

将应用拆分成若干更小组件的思想并不新鲜了。已经有其他编程的范例使用了和微服务相同的理念,例如面向服务的架构(SOA)。然而,随着前沿科技的进步加上对集成的“数字体验”的期望越来越高,已经产生了用于满足现代商业应用需求的新型开发工具和技术。

微服务不仅取决于为支持这一概念而设立的技术,还取决于具有文化,技术诀窍和结构的组织,以便开发团队能够采用此模型。微服务是IT部门向DevOps文化转变的一部分,其中开发和运营团队紧密合作,在其生命周期内支持应用程序,并经历快速甚至连续的发布周期,而不是更传统的长周期。

为什么开源对于微服务很重要?

当您从一开始就将应用程序设计为模块化和可组合时,它允许您在许多地方使用插入式组件,在过去您可能需要一些专有的解决方案,这可能是因为组件的证书限制或特殊使用要求。许多应用程序组件都能够找到现成的开源工具,并且有无数的开源项目可以实现微服务架构的各种不同的要求,例如身份验证,服务发现,日志记录和监视,负载平衡,扩展等等。

专注于微服务可以使开发人员更加容易的为您的应用提供可选择的接口。当所有服务都是API时,应用组件之间的通信就变得标准化。所有的组件都必须通过这些标准的API来使用该应用和数据进行权限校验和通信。这样就使得组织内外部的开发人员更加容易地创造新的方式来使用应用数据和服务。

容器技术从何而来?

轻量级操作系统容器的现代化概念是在21世纪早期作为 FreeBSD 项目的一部分而被引入的。Docker 为创建和共享容器映像提供了改进的用户体验,因此从 2013 年开始被大量采用。容器非常适合微服务,符合轻量级和灵活组件的需求,同时也易于管理和动态替换。不同于虚拟机,容器被设计为运行容器所需的最小组件,而不是将多个功能打包到同一虚拟或物理机器中。Docker 和类似工具提供的易开发性有助于快速开发和测试服务。

当然,容器只是一种工具,微服务架构只是一个概念。在不使用容器的情况下,完全可以构建一个微服务应用程序,就像在容器内构建更传统的应用程序一样。也许利用容器来组织这些功能,会显得更加合理。

如何协调微服务?

为了在生产中运行微服务应用,您需要能够监控、管理和扩展不同的组成部分。到目前为止,已经有许多不同的工具可以帮助你实现这一目标。就容器而言,诸如 Kubernetes 类似的开源工具,将有可能成为你解决方案中的一部分。或者,对于应用中非容器的部分,可以使用其他工具来管理这些组件:例如,在 OpenStack 云上,你可以使用 Heat 来管理应用程序组件。

另一个选择是使用平台即服务(PaaS,Platform as a Service)工具,它允许开发人员专注于编写代码,通过抽象一些底层管理技术,并允许他们轻松地为应用程序的某些部分选择现成的开源组件。像数据库存储引擎,日志记录服务,持续集成服务器,Web 服务器或其他组件。一些 PaaS 系统(如OpenShift)直接使用 Docker 和 Kubernetes 等上游项目来管理应用程序组件,而其他一些系统则尝试自行重新实现管理工具。

现有应用程序怎么样?

虽然使用微服务可能是公司未来 IT 战略的重要组成部分,但肯定有许多应用程序不符合这种模式,也不可能在一夜之间重新构建这些应用程序以满足微服务这种新架构风格。迁移到微服务架构存在文化和技术成本,但幸运的是,微服务和传统应用程序可以在相同的环境中协同工作,前提是公司具有可靠的双模 IT 策略。

在哪里可以了解更多?

参考文档