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