正如敏捷开发可以解决工程瓶颈一样,微服务可以解决架构瓶颈。2014年出现的“微服务”概念犹如一道闪电,让技术人员意识到了这种新架构风格的意义。面向服务架构的兴衰,微服务架构与SOA有何区别?事实上,我读得越多,就越意识到微服务这个词并没有抓住这场新软件革命的本质。微服务的定义已经被许多现有的经验所定义,亚马逊、Netflix、SoundCloud和Gilt(现已被HBCDigital收购)的实际解决方案都包含在这个列表中。随着时间的推移,企业中的应用程序已经从整体分解为多个特定服务,并通过RESTfulAPI和其他网络消息传递协议相互通信。然而,这种哲学并不局限于架构模式。微服务先驱还共享具有相似组织结构和文化实践的通用软件开发方法,同时共享云基础架构和自动化功能。随着微服务的成功,许多企业开始遵循类似的方向以满足自身对速度和可扩展性的需求。AgileProcess2001年初,一群软件专家发布了AgileManifesto,即敏捷宣言,旨在通过声明改进软件开发方法。虽然基本概念并不新鲜——相当于高级编程、并发、精简等元素的组合——但这种统一的声音无疑引起了业界的关注。从那时起,微服务架构经常被定义为单体架构的对立面,宣言本身将敏捷软件开发与“文档驱动的重量级软件开发过程”区分开来。敏捷解决方案希望通过小的工作增量、频繁的迭代和原型制作与用户协作,从而摆脱大规模软件开发的成本和风险。伴随着这份宣言,敏捷方法逐渐被业界认可和接受。敏捷方法的流行也让持续集成(CI)在软件行业掀起了一股热潮,是高级编程的普遍做法。CI提倡在生命周期的早期引入软件组件,以尽量减少代码集成对用户的影响。然而,许多早期采用者发现,虽然这种方法解决了编码瓶颈,但它带来了软件发布挑战。而SaaS在部署领域的持续升温,进一步加剧了这一矛盾。为了成功实现软件的频繁发布,2006年出现了持续交付(简称CD)的概念,它继承了CI的概念,从软件外部交付的角度加以应用。CD强调将质量放在首位的“潜在产品增量”思想,将部署过程定义为尽快将变更引入产品。虚拟化和云计算技术帮助CD获得了实现这一想法的基础,新工具的不断涌现推动了CD实践的趋势。Agile和CD的结合并没有让人失望,实际上提高了生产速度和软件质量。然而,瓶颈仍然存在。敏捷思维的主要应用范围在于软件开发,CD的出现进一步将范围扩展到生产部署。在大多数企业中,开发和运维是两个独立的任务导向。2009年,JohnAllspaw和PaulHammond发表了一次影响深远的演讲,他们结合自己的经验提出了一个解决方案——从根本上改变了企业文化的DevOps运动。组织发现,将开发和运营职责结合在同一个团队中可以提高实践交付效率。其中,开发人员负责设计方案,而运维人员则用工程化的方法解决程序处理需求。这样,日常任务自动化机制将具有更好的系统稳定性和灵活性。Netflix的SimianArmy解决方案是生产系统弹性测试的典型示例。遵循“敏捷过程”指导方针的组织——涉及通过部署到组织的整个堆栈来处理软件开发——现在正在取得切实的成果。然而,随着业务复杂度和规模的不断增长,这些敏捷先驱们发现,以往将应用程序视为独立单元的做法会影响系统弹性,缺乏稳定的扩展能力。同时,也有一些企业发现,分离整体应用,确保以业务为中心的服务设计理念更符合敏捷交付和DevOps文化的实际需求。而这才是微服务架构的真正源头。也就是说,微服务是敏捷开发的一种实践体现。微服务代表敏捷开发过程的架构阶段。寻找敏捷软件架构在2013年的一篇博文中,软件架构师Simonpown谈到了敏捷软件架构的未来方向。他指出,敏捷架构并不是从敏捷开发实践中诞生的。相反,我们需要主动寻找合适的架构选项。请注意,在他的描述中,他认为敏捷软件架构适合微服务架构:查看敏捷软件架构的特征,我们发现它倾向于使用小型、松散耦合的组件/服务,以协作满足最终目标。这种架构风格可以在很多方面带来敏捷的效果。小型、松散耦合的组件/服务可以独立构建、修改和测试,甚至可以根据需求变化进行调整和替换。这种架构还非常擅长提供高度灵活和适应性强的部署模型,因为可以随时根据需要添加/删除和扩展新的组件和服务。亚马逊、Netflix、SoundCloud和Gilt在达到一定规模时也遇到了类似的架构瓶颈。按照pown的说法,这些企业最终选择了微服务作为解决方案。在敏捷开发的过程中,我们有必要从架构层面吸取经验和教训。首先,敏捷软件开发、持续交付、DevOps文化和微服务架构都围绕同一种目标存在:尽可能满足客户需求,同时保持良好的软件质量和系统可用性。每个阶段都需要在行业内有一定的时间和顺序来完成转型,不同企业需要的实现路径也不同。例如,亚马逊选择了一种专注于其组织变革的架构。相比之下,SoundCloud则不断演化自己的交付方式,并对团队结构和结构进行调整。原标题:微服务架构即敏捷软件架构【翻译、合作站点转载请注明原译者及出处为.com】
