微服务:
更快地交付可扩展软件

分享

什么是微服务?

微服务是指独立的团队用来为交付单一用途服务排定优先级的架构方法。微服务模型与传统一体化软件不同。传统一体化软件由紧密集成的模块组成,这些模块不常交付,并且必须作为一个单元进行扩展。尽管一体化方法仍然适合一些企业和应用,但微服务正越来越受到注重敏捷性和可扩展性的公司的青睐。


Microservices Cartoon


为什么微服务很重要?

可以更好地响应客户需求

采用微服务架构的公司可以在客户需要时快速交付功能,而不必受困于固定的发布计划。

提高软件团队的生产能力

微服务基于敏捷和 DevOps 的原则构建,在帮助软件团队并行运行的同时快速迭代离散功能。

改善系统可扩展性和可靠性

成功的微服务架构会不断发展。它很大程度上依赖于可重复的自动化,支持细粒度的服务扩展,采用旨在确保系统即使在独立组件发生故障时也能运行的模式。




微服务和 Pivotal

在 Pivotal,我们帮助您设计高性能的微服务架构,并提供世界一流的环境来运行您的微服务。

与我们的 Pivotal Labs 团队合作,首先指定需要功能迭代和极端可扩展性的目标应用,然后了解如何建立专注于交付的团队。

借助我们的云原生平台 Pivotal Cloud Foundry 部署和管理微服务,缩短价值实现时间。

Empower your developers with patterns from Spring Cloud Services that overcome key challenges and operational overheads when building distributed systems with microservices



正在考虑采用微服务架构?
需要注意的事项

并不是所有企业或应用都适合采用微服务,如果实施不当,可能会导致更高的成本。在开始使用之前,请了解以下几点:

您的企业准备好了吗?

向微服务过渡,既需要企业上的过渡,也需要技术上的过渡。团队必须做好准备,采用以自动化为中心的持续交付方法来构建软件。您的公司是否准备好消除职能壁垒,并拥有可构建和运行服务的自给自足团队?您的变更管理流程是否能够接受无人工介入的部署管道?

您有热情十足开发人员吗?

并非所有应用都适合采用微服务。如果匆忙“将一切微服务化”,开发人员可能会在从业务角度看没有必要做出更改的现有应用上投入大量编码时间。变化缓慢的应用或不提供关键任务功能的应用保留一体化的状态可能会更好。微服务虽然增加了敏捷性,但也增加了复杂性。请确保您能承受由于敏捷性增加而带来的复杂性!

您的服务协调吗?

微服务互相松散耦合且不断变化。您如何查找服务的当前 URL,或将流量路由到数量不断变化的服务实例?服务如何交换数据?在许多情况下,您现在用来处理服务发现、负载均衡和消息传递的技术对于微服务所导致的动态环境来说是远远不够的。

您如何执行复杂环境的后续管理?

随着待管理事务数量的增加,运营风险也在增加。如果您不采取新方法,那么在数百或数千台服务器上创建成百上千个微服务肯定会导致棘手的管理问题。如何修补或升级底层计算机?您可以跟踪依赖关系并确定处于风险中的应用吗?如何使用最新的应用配置,让几十个微服务实例保持最新?您用于构建微服务平台的组件,以及您选择用来运行这些组件和服务的位置,将在未来几年对企业的敏捷性产生巨大影响。



主要区别:微服务与传统架构
微服务架构
传统架构
只有一个焦点。 它只做一件事,并且做得很好!微服务的目标是特定问题领域,并包含解决问题所需的一切。微服务中的“微”指的是范围,而不是大小。
焦点宽泛。 解决方案试图用一个紧密集成的软件包立即解决许多业务挑战。
松散耦合。 微服务架构要求服务尽可能自给自足,避免对其他服务进行硬编码引用。
紧密耦合。 系统通常是由相互依赖的组件组成的复杂网络。如果不精心安排步骤顺序,则无法部署这些组件。
持续交付。 微服务非常适合应用需求会持续变化的团队。为了尽快实现市场价值,会通过自动化定期将微服务投入生产。
依赖于按计划交付。 应用的开发和更新都要按计划进行,通常是按季度或年度执行。
拥有服务生命周期的独立团队。 微服务转型需要团队结构转型,也需要技术转型。微服务由独立团队进行构建、交付和运行。并非所有服务都需要这样做,但这是适用于业务关键型服务的强大模型。
很多拥有服务生命周期的团队。 项目团队负责构建第一代软件,然后团队解散去执行下一个任务。软件移交给运营团队进行维护。
采用强调大规模分布式系统的设计模式和技术。 团队在构建和运行微服务时,不能使用生产一体化软件所用的方法和工具。微服务架构依赖于一系列功能,包括服务发现、消息传递、网络路由、故障检测、日志记录、存储、身份管理等。
采用将流程放在第一位的设计模式和技术。 使用注重关键开发阶段、QA 和投产上线的孤立工具和流程来生产一体化软件。