微服务架构:是什么?何时用?如何用?
微服务是什么?
什么时候用它?
应该如何用它?
无法频繁并轻松的版本发布——随着单体应用的功能逐渐增长,由于各组件之间的紧耦合,很难轻松频繁的进行版本发布。版本发布计划占用了各个小组人员的大量时间,因此不建议频繁发布版本,以确保应用程序不会由于新发布的版本而中断服务。
持续交付中的问题——在小型单体应用中,我们可能不会注意到这个问题。在大型单体应用中,部署时间之慢令人沮丧。即使一个很小的代码改动,也需要重新部署整个应用,这可能成为频繁部署的障碍,从而阻碍持续交付。如果你在开发一个手机应用,用户一直在期待最新最酷的新功能,那么部署时间太慢可能成为一个严重的问题。
难以管理团队和项目——项目管理在单体应用开发中面临挑战。即使是模块化应用程序,在部署和发布方面也具有相互依赖性。规划版本发布和管理紧耦合的相互依赖的模块开发需要耗费大量时间和精力。
昂贵的可扩展性和高性能——单体应用可以进行扩展但是成本非常高。
缺乏技术多样性——当我们在为单体应用选择技术栈的时候,我们会考虑选择一个较为全的技术栈,从而能满足我们所有的需求,不会为满足特定需求而采用特定技术。
难以替换组件——在不影响整个架构的情况下,很难使用设计和性能更好的组件替换原组件。
组件独立运行并能对外提供服务。
组件根据业务功能进行划分。
整个项目都采用产品化思想。
组件使用 RESTish 协议或轻量消息队列进行通信。
没有统一规范,每个独立组件都可以使用其专有的规范进行开发和部署。
数据分散管理,在上图中观察各个组件是如何管理自己的数据存储。
自动化的基础架构管理,我们需要依靠自动化的基础架构管理来降低独立组件部署的复杂性。
应用设计时要考虑故障处理。应用由多个独立组件构成,我们需要妥善处理接收方未收到响应的情况。
一个最佳的微服务架构设计,可以在不影响其他协作者的情况下对其进行替换和升级。
团队沟通开销——微服务架构虽然能够减少团队管理的复杂性,但却无法减少团队沟通的的需求。开发团队需要确保一个团队的服务更新不会影响另一个团队的功能。在单体应用中也有这个问题。
维护文档开销——每个组件的开发人员都需要实时更新架构和接口文档,这样才能帮助正在使用该服务的其他团队。
多样的技术栈——每个组件都可能使用不同的技术栈,这样会导致应用程序设计和架构不统一的问题。从长远来看,可能会增加运维成本。
开发运维复杂度——需要一只专业 DevOps 团队来运维基于微服务的应用。由于应用程序的组件随时可能漂移,使得维护它变得复杂并且需要一定的专业技能。
资源使用增长——运行这些应用程序的初始投资很高,因为所有这些独立运行的组件都需要有更多内存和 CPU 的运行时容器。
网络通讯增长——独立运行的组件使用网络进行交互。这样的系统需要快速可靠的网络连接。
编码与解码——当一个组件需要来自另一个组件的数据时,发送方按照约定的标准对数据进行编码,而接收方在使用前按照约定的标准进行解码,与传统的应用架构相比需要更多的处理。
网络安全——服务间的通讯需要加密以避免任何安全漏洞。由于有多个活动组件,这些应用程序更容易出现安全漏洞。
测试——相较于单体应用,测试微服务架构的应用更难。
生产环境监控——监控微服务架构应用的成本更高,监控工具的不可用也需要考虑。
高昂的前期成本——与单体应用相比,微服务应用的运行成本更高。
Netflix
eBay
Amazon
其他一些大中型科技产品公司
仅限单体或单体优先
微服务优先
企业尚未准备好投资基于微服务的应用程序产生的前期成本。
企业无法遇见微服务优先带来的价值。
没有足够的人力来构建和运行基于微服务的应用程序。
软件交付时间紧迫:有时候,单体应用有助于迅速进入市场。
担心什么时候有用于支持微服务应用顺利部署的工具和技术。
对单体应用中设计良好的模块化组件进行扩展——通常,我们发现企业支持单体优先的设计,并认为如果需要的话,可以很容易将模块化设计的单体应用转换成微服务。企业选择模块化的单体应用,以减少开发微服务时可能产生的成本。但这只是一个遥远的梦想,与现实相去甚远。
对现有的单体应用使用微服务架构进行重构——通常,由于单体应用中不良的模块化设计,我们都是从零开始开发微服务应用程序的。
任何项目开始时,模块化和去中心化都是一个重要方面。
重点关注的应用程序将具有大量交易或流量。
与短期收益相比,偏向长期获益。
初期,有合适的人员来快速设计、开发和部署应用程序 — 我们观察到,与单体应用相比,启动一个基于微服务的项目的初期工作更多。
致力于使用最先进的工具和技术——微服务是非常年轻的架构方法;支持它所需的工具和技术都很新并且处于快速更新的模式。
无法从单体应用获得预期输出的极度沮丧。
开发和部署微服务应用的工具和技术的轻松使用。
基础架构即服务(IaaS)的广泛使用,例如 Amazon Web Services,Google Cloud Platform 等,为轻松的 DevOps 操作打开了大门。
大型科技公司采用微服务架构。