作者:王磊
微服务架构,虽然诞生的时间不长,但其在各种演讲、文章、书籍上所出现的频率已经让很多人意识到它对软件架构领域带来的影响。经过 2015 年的快速普及,微服务被越来越多的组织和企业所熟识。2016 年,将会有更多的企业将目光聚焦在如何实践并有效将落地这个核心问题上。在这里我来谈下微服务实施的三种策略以及落地时企业必备的三个能力。
通常,微服务的实施有如下几种策略:
1. 新产品微服务化
对于新产品构建而言,使用微服务构建存在一定优势:
不必担心同现有遗留系统的整合,在实施上能更加灵活,便于尝试业界先进的开发框架和工具 从零开始构建新产品,易于保持代码结构清晰及制定团队规范。 不过,新产品微服务化也存在一定风险。通常新产品都处于快速试错阶段,需求在不断的变化中,微服务的引入必然会增加额外的开发、运维以及交付成本。
2. 遗留系统的新功能微服务化
对于遗留系统而言,可以将新功能的上线作为微服务化实施的尝试。这类方式实施的优势在于虽然是遗留系统,但新功能部分相对独立,上下文清晰,实施时比较灵活,也便于尝试业界先进的开发框架和工具。不过,这类方式的风险在于:
同现有遗留系统的集成存在风险,尤其是数据部分的访问与共享。 需要与遗留系统共存并为用户提供价值,因此需要构建代理机制,处理不同的请求。
3. 遗留系统的旧功能微服务化
对于遗留系统而言,也可以选择将现有的功能改造成微服务。不过这类方式的风险较大,主要考虑:
如何选择合适的部分进行微服务化。这类部分通常包括但不限于功能独立的模块、频繁使用的模块以及占用特殊资源的模块等。
如何保证改造过程中不对现有的功能造成破坏。对于某些时间较长的遗留系统,通常功能交错复杂,人员更换频繁,在改造的过程中难免
需要同遗留系统共存为用户提供价值,因此需要构建代理机制,处理不同的请求。
微服务的概念看似浅显易懂,但实际上却涉及架构演进,领域建模、持续交付,虚拟化以及 DevOps 等多个维度的方法论与实践。在微服务的实践过程中,如下几点也将成为企业实施微服务架构的必备能力:
1. 持续交付是内功
十年以前,软件在一年中的交付次数屈指可数。
过去的十年间,交付的过程一直被不断地优化和改进。从早期的 RUP 模型、敏捷、持续集成,再到近几年的 DevOps,力求能更有效地降低交付过程所耗费的成本并提高效率,从而尽早实现价值。持续交付的提出,极大的优化了软件交付的流程,帮助企业更有效的验证业务想法,并通过快速迭代的方式持续为用户提供价值。
对于构建微服务而言,持续交付机制建立的顺畅与否,直接决定了微服务构架构实施的成本与效率,稳固的持续交付体系能让微服务架构的实施事半功倍。
持续交付和微服务只有组合在一起才能展现出相互的价值。
2. 演进式架构是核心
架构是 IT 领域经久不衰的话题之一。架构的本质是对业务、技术、团队以及可维护性等多重因素下做的平衡。纵览 IT 架构发展的历史长河,存在诸多行之有效的模式与方法,譬如企业架构模式、设计模式及近几年的领域驱动设计,帮助 IT 团队完成架构设计。
在如今市场激烈竞争的环境下,业务快速变化,架构也需要不断的变化。没有完美的架构,只有恰当的平衡。
对于微服务架构的实施过程,很多朋友纠结如何定义“完美的”服务划分,其实架构的演进过程中,必然会经历服务的定义、拆分、合并以及组合,微服务实施的过程也是一个架构不断动态平衡的过程,不必太纠结初期多么"完美"。业务在变,技术在变,架构也在变,拥抱变化,完善内部的微服务生态圈(开发流程、交付流程、自动化机制、部署以及监控),寻找演进式架构的动态平衡才是核心。
3. DevOps 是动力
运维能力是企业实施微服务的关键动力。相比于传统架构,微服务的落地增加了大量的运维工作。随着服务的增多,有更多的服务需要部署、监控。另外,随着服务的增多,出错的可能性大大增加,出错时如何快速恢复也是件很复杂的事。因此,在实施微服务的过程中,运维能力直接决定了实施的效率和产出。 另外,在加强运维能力本身的同时,微服务的实施还需要很强的 DevOps 文化。如果开发团队和运维团队之间无法密切协作,那实施过程将会存在很大的沟通成本。因此,运维能力和 DevOps 是企业实施微服务的关键动力。
除此之外,微服务带来的不仅仅是技术上的变革,也带来企业组织结构上的变革。传统的按照技能划分部门的方式,将越来越难以适应当今业务的激烈竞争和市场的快速变化。通过将大部门基于业务、基于服务,组织成适当的的小团队,不仅能有效提高成员的主人翁精神,也容易在实现层面给予团队充分的自由度,这也是目前硅谷诸多顶尖 IT 公司青睐的方式。
综上所示,微服务的实施注定不是一个简单的过程,是需要企业潜心积累、循序渐进的过程。企业需要根据不同的业务,不同的发展阶段,选择不同的实施策略,并在实施的过程中不断提高关键能力,并构建企业内部的微服务生态圈,才能享受到微服务架构带来的巨大价值。
目录
热点 | Hot
为了实现一致性,我们从事务方案转移到流处理方案
在微服务中保证服务的一致性
AutoMapper 及静态类之争论
Jigsaw 终于添加到 JDK 9 中了
推荐文章 | Article
Airbnb 的大数据平台架构
Twitter 的 A/B 测试实践:为什么要测试以及测试的意义
理论派 | Theory
集群调度框架的架构演进之路
观点 | Opinion
如何成为架构师?7 个关键的思考、习惯和经验
评论