向微服务的转变代表着应用程序开发的巨变。以下是如何解开这种大转变的复杂性。
如今新应用程序的开发都与交付速度有关。向敏捷环境的大规模转移已经持续了数年,这促使人们有一种轻松快速地部署软件的意识。
微服务是面向服务的体系结构(SOA)的一种变体,它将应用程序构建为松散耦合服务的集合。将应用程序拆分为更小服务的好处包括:改进了模块化,使应用程序更易于开发和测试。
“微服务增强了团队授权,减少了耦合,使各个团队能更快地进行创新,减少跨团队之间的沟通,并且有权自己做出有关架构、语言和框架的决策,”Verizon媒体集团(Verizon Media Group)工程、体育及媒体制作工程副总裁坎贝尔(EJ Campbell)说道,该集团是拥有50个在线品牌的通信公司的子公司。
坎贝尔说:“我们已经看到,随着团队采用微服务,从提交到制作的周期时间显著缩短。” “许多团队每天多次部署微服务,无需任何人工干预,依靠测试、代码审查和复杂的CI/CD(持续集成/持续交付)管道来确保变更内容的安全交付。”
该公司的“Yahoo Daily Fantasy”产品含有多个微服务,包括核心游戏服务、体育数据服务、钱包服务和一些支持内部服务。“这些服务中的每一个都有自己的持续部署管道、独立的数据存储以及负责其开发和运营的各自团队,”坎贝尔说。
使用微服务时,各个组织可能会遇到许多挑战。这些挑战包括确定多个服务之间的正确边界,克服微服务环境中团队之间共享代码的困难,以及克服变更管理的复杂性,因为各团队都是独立发布代码。
转向微服务代表着一场大变革,各个组织需要做好应对这种重大转变的准备。
“向微服务的演变就像是从马到自行车,或从自行车到汽车的过程,”Solutions By Design II (SBD)公司项目副经理Jay Bercher说道,这是一家管理咨询和技术服务公司,与联邦机构合作,协助其转向基于微服务的IT工作方式。
“当我们经历演变的多个阶段时,我们会发现有更多的东西在变化,”Bercher说。“每个变化的东西都需要一定级别的维护,对这么多方面的支持和监督不仅使解决方案更加复杂,而且还增加了相关成本。因此,我们必须仔细审查我们的决定,以确保这些决定不仅是最佳的技术决策,而且还具有成本效益。”
另一个挑战是安全性。“我们必须确定是否要在整个应用程序中实施单一验证解决方案,或者我们是否要对每个微服务都设置其自己的验证流程,”Bercher说。“这是一个必须根据具体情况做出的决定,并且是每个项目团队需要自己做出的决定。”
以下是一些建议的最佳做法,以应对挑战并在微服务环境中顺利发展。
1、采用领域驱动设计
Bercher说,创建微服务是为了使服务松散耦合,并应用单一责任原则。
“尽管有各种开发方式和方法,但领域驱动设计和微服务似乎是完美组合,”Bercher说。 SBD公司的团队使用领域驱动设计,这是一种构建应用程序的主题方法,可创建一种高效的开发模式,消除大多数团队的相互依赖性。
“在我们的工作中,领域与微服务的相关性基本上是一对一的,”Bercher说。“因此,每个开发团队都负责一个领域,同时也负责开发相应的微服务。这就建立了明确的责任划分,从而限制了并行开发工作中可能出现的冗余。”
2、建立代码库指南
坎贝尔说,在微服务环境下,团队之间共享代码要困难得多。
“不像在一个整体架构中,公共代码只是一个方法调用,而微服务架构的通用性必须分解到独立的服务中,或者代码必须打包到一个共享库中,”坎贝尔说。
使用这些库通常很慢,并且进行更改需要在库所有者和多个服务之间进行协调。“因此,对于公共库和上线产品的要求,各个组织应采用一套强有力的指导方针,这非常重要,”坎贝尔说。
3、不要在微服务之间共享数据库
“在构建我们的解耦合服务时,我们允许我们的开发团队构建自己的数据库,为我们的(后端系统)提供数据,这可限制对其他开发团队的依赖性,”Bercher说。
“我们的开发团队将他们书写的内容推送到后端,供其他人使用,然后我们的数据团队会管理这些信息,”Bercher说。“这延续了即插即用的概念。如果您需要更换某一服务,只需将其取出并插入新服务即可。这就像更换灯泡,只是稍微复杂一点。”
由于微服务在设计上是模块化的,因此开发过程主要是即插即用,从而可以非常轻松地解决可能出现的任何问题。
“因为代码不会在整个平台上传播,我们可以快速将问题隔离到一个特定的源,然后在微服务中对其跟踪,”Bercher说。“通过允许对每个微服务进行零碎的更新和升级,可以轻松更新应用程序。你能想象一次升级一个系统而不进行大规模替换吗?仅这一概念就彻底改变了系统开发。”
SBD公司在美国各地设有开发团队,可以增强微服务的优势。位于南卡罗来纳州查尔斯顿的团队成员具有更高的开发独立性,因为他们正在开发自己的微服务,并可将其加入解决方案中。
4、解决安全问题
与IT相关的任何其他事情一样,微服务也有自己的安全问题。
企业应该在软件开发生命周期的早期就要频繁地查找已知的漏洞,电子商务、支付和营销服务提供商数字湖公司(Digital River)的首席信息官瑞恩•道格拉斯(Ryan Douglas)说。
道格拉斯说:“对于我们在快节奏环境中工作的任何IT团队来说,一个重要信条是识别和修复本地解决方案以及第三方软件的漏洞。”“这对维护安全至关重要。对软件生态系统采取全局方法,了解它如何协同工作以及潜在问题区域所在,这是至关重要的。”
道格拉斯说,使用微服务时,软件补丁部署更容易测试。“而且这不仅适用于自己开发的代码,”他说。“IT工程师可以在自己开发软件的同时测试第三方软件的漏洞。一旦发现漏洞,可以比以前的单一代码结构更快地部署修复程序。”
5、避免出现复杂情况
DXC Technology公司是在CSC公司和惠普企业部门合并后成立的一家IT服务提供商,该公司的应用服务首席技术官JP Morgenthal说,复杂情况在大型微服务部署中很容易发生。
“如果组织机构没有谨慎地确保某一系统架构来推动微服务的使用,甚至可能存在递归数据路径,Morgenthal说。“在使用独立的跨职能团队和服务存储库之间,可能会出现依赖关系,从而导致系统使微服务原则失效,”他说。
应该能够更改或删除单个微服务,而不会对整个系统产生重大影响。Morgenthal表示,最佳做法是使用企业架构来验证微服务设计。
6、考虑从头开始构建应用程序
房地产服务提供商Carrington Mortgage Holdings推出的直接面向消费者的抵押贷款平台Vylla.com,该平台最近将其技术架构转移到微服务。
“当我们决定迁移到微服务时,我们遇到的挑战之一是,是否要逐个拆分应用程序或进行完全重写,”Carrington Mortgage公司首席技术官约翰•尼古拉斯(John Nicholas)说。
“由于一些预先设定的业务需求,我们需要在很短的时间内提供新功能,”尼古拉斯说。 “起初,我们试图通过一些成功的结果整合到整体架构中。然而,我们也知道,将应用程序拆分会比重写我们现有的大部分功能更加困难。”
考虑到这一点,开发团队决定最好的前进方向是从头开始构建新的应用程序。“这是一项艰巨的任务,需要我们所有团队成员付出巨大努力,但自从做出这种转变后,在短时间内就证明这是值得的,”尼古拉斯说。
尼古拉斯表示,由于成功部署微服务需要大量的技术投资,因此必须有一个明确定义的商业案例,来概述新技术如何提高性能或提高运营效率,这是很重要的。
“这里的关键是找到合适的人才,”尼古拉斯说。“找到有经验的工程师能轻松完成这一工作并不容易。我们已经能够建立一个强大的工程团队,了解正确的架构,并且有一支强大的质量保证团队,围绕应用程序构建自动化测试。”
7、进行扩展时,需衡量其性能
通过添加服务器,可对整体应用程序进行全面扩展以满足需求的飙升,SpotCues公司的联合创始人Praveen Kanyadi表示,该公司利用人工智能提供生产力软件。
“对于微服务来说,模块化架构只允许对系统的某些部分进行扩展,”Kanyadi说。“然而,微服务需要一种非常不同的扩展方法,因为典型的微服务架构部署可能包含在不同服务器上运行的多个组件以及虚拟化协同工作。”
在识别哪些单个组件升级方面,这就增加了挑战。“这是衡量性能变得至关重要的地方,而像应用程序交付控制器等工具可以帮助测量和检测性能问题,”Kanyadi说。
Kanyadi表示,企业还应考虑根据业务优先级为每个微服务的性能和可靠性定义服务水平协议(SLA)。
8、专注于变革管理
企业需要更新变革管理和变更控制流程以及支持文档,以便从整体架构向微服务架构的转变中受益。
“更快的开发过程很好,但不要因为忽略变更控制和其他重要的治理流程而丢掉微服务的好处,”Avant Communications公司的首席云计算官罗恩•海曼(Ron Hayman)说道,该公司为IT渠道销售市场提供云服务。
“确保您将变更控制和审批流程与您的敏捷开发生命周期相匹配,”海曼说。