什么是微服务?
微服务背后的中心思想是,当某些类型的应用程序被分解成更小的、可组合的部分并协同工作时,它们会变得更容易构建和维护。
每个组件都是不断开发和单独维护的,应用程序只是其组成组件的总和。这与传统的“整体式”应用程序形成对比,后者全部是一体式开发的。
作为一组模块化组件构建的应用程序更易于理解、更易于测试,最重要的是,在应用程序的整个生命周期内更易于维护。它使组织能够实现更高的敏捷性,并能够大大缩短将研发部署到生产所需的时间。这种方法已被证明是优越的,特别是对于由不同地域和文化的开发人员团队开发的大型企业应用程序。
还有其他好处:
- 开发人员独立性:
小团队并行工作,迭代速度比大团队快。
- 隔离和弹性:
如果一个组件死了,你在启动的一段时间里,应用程序的其余部分继续运行。
- 可扩展性:
较小的组件占用较少的资源,并且可以扩展以满足该组件不断增长的需求。
- 生命周期自动化:
单个组件更容易适应持续交付管道和单体应用无法实现的复杂部署场景。
- 与业务的关系:
微服务架构沿业务领域边界划分,增加了整个组织的独立性和对业务的理解。
微服务的通用定义通常依赖于每个微服务提供一个 API 接口,通常但不总是一个无状态的 REST API,可以像标准网页一样通过 HTTP(S) 访问。这种访问微服务的方法使开发人员可以轻松使用它们,因为它们只需要开发人员使用已经熟悉的工具和方法。
这是一个新概念吗?
不是什么新鲜事。还有其他编程范式可以解决这个相同的概念,例如面向服务的体系结构 (SOA)。然而,最近的技术进步加上对集成“数字体验”的期望越来越高,催生了用于满足现代业务应用程序需求的新型开发工具和技术。
微服务不仅依赖于为支持这一概念而建立的技术,还依赖于一个拥有文化、知识和结构的组织,以便开发团队能够采用这种模型。微服务是 IT 部门向 DevOps 文化转变的一部分,在这种文化中,开发和运营团队密切合作以支持应用程序的整个生命周期,并经历快速甚至持续的发布周期,而不是更传统的长周期.
为什么开源对微服务很重要?
当您从头开始将应用程序设计为模块化和可组合的时候,它允许您在许多地方使用插入式组件,而过去您可能需要特定的解决方案,因为组件的许可或特殊要求,但是现在,许多应用程序组件可以是现成的开源工具,并且有无数的开源项目实现了微服务架构的跨领域需求,例如身份验证、服务发现、日志记录和监控、负载平衡、扩展等等。
关注微服务还可能使应用程序开发人员更容易为应用程序提供可选接口。当一切都是API时,应用程序组件之间的通信就标准化了。组件要使用您的应用程序和数据,所要做的就是能够通过这些标准api进行身份验证和通信。这允许组织内部和组织外部的人员(在适当的时候)轻松地开发利用应用程序数据和服务的新方法。
容器技术从何而来?
轻量级操作系统容器的现代概念是在21世纪初作为FreeBSD项目的一部分引入的。Docker为创建和共享容器映像提供了更好的用户体验,因此从2013年开始就得到了广泛采用。
容器非常适合微服务,满足了轻量且灵活的组件的需求,这些组件可以轻松地管理和动态替换。与虚拟机不同的是,容器被设计成能够运行容器设计要做的任何事情的最小可行部分,而不是将多个功能打包到同一个虚拟机或物理机中。Docker和类似工具提供的开发便捷性有助于快速开发和测试服务。
当然,容器只是一个工具,微服务体系结构只是一个概念。完全有可能在不使用容器的情况下按照微服务方法构建一个应用程序,就像在容器中构建一个更传统的应用程序一样,当您想要利用容器编排功能而不需要重写大型、整体的应用程序时,这可能是有意义的。
你如何编排微服务?
为了实际运行基于微服务的应用程序,您需要能够监视、管理和扩展不同的组成部分。有许多不同的工具可以帮助您完成这一任务。对于容器,像Kubernetes这样的开源工具可能是解决方案的一部分。或者,对于应用程序的非容器组件,可以使用其他工具来编排组件:例如,在OpenStack云中,您可以使用Heat来管理应用程序组件。
另一个选择是使用一个平台即服务(PaaS)工具,它可以让开发者专注于编写代码通过抽象一些潜在的编排技术和允许他们容易选择现成的开源组件应用程序的某些部分,就像一个数据库存储引擎,日志服务,持续集成服务器、web服务器或其他部分。一些PaaS系统,如OpenShift,直接使用Docker和Kubernetes等上游项目来管理应用程序组件,而另一些系统则试图自己重新实现管理工具。
现有的应用程序呢?
虽然利用微服务可能是一个组织未来IT战略的重要组成部分,但肯定有许多应用程序不满足此模型,也不太可能在一夜之间对这些应用程序进行重新架构以满足此新范式。迁移到微服务体系结构有文化和技术成本,但幸运的是,如果组织具有可靠的双模式IT战略,微服务和传统应用程序可以在相同的环境中一起工作。
根据Gartner的说法,双模式IT是一种能力,既可以交付注重稳定性和正常运行时间的传统IT应用程序,也可以通过更新的方法交付更新的、更敏捷的、但可能较少测试的应用程序,这些方法包括开发人员自我供应机器的能力和较短的开发周期。
许多(如果不是大多数)组织将需要适应在未来许多年使用这两种方法。
原文:https://opensource.com/resources/what-are-microservices