当前位置: 首页 > 科技观察

转向微服务的八个技巧

时间:2023-03-20 20:35:22 科技观察

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