正确实现的微服务较单体应用有很多优势。许多组织都希望将他们的单体应用程序代码换成微服务代码。但事实证明,迁移到微服务并非易事。你应该问的第一个问题是,你真的需要微服务吗?单体存在的许多问题都可以使用模块化的单体架构轻松解决。一旦你确定自己真的需要微服务,就必须制定一套将单体应用转换为微服务的计划。本文介绍了一些模式,可以帮助你创建所需的计划。
在我们具体讨论这些拆分单体的模式之前,我们先来谈谈不应该做的一些事情。
大爆炸重写(Big Bang Rewrite),顾名思义,是说我们必须在许多微服务中重写整个单体应用的代码,并一次性将它们都部署到生产环境中。Martin Fowler 说过的一句话非常正确:
大爆炸重写唯一能保证的就是大爆炸!
大爆炸重写都是很危险的。大爆炸重写需要漫长的开发时间,因为你必须对单体应用程序中的所有内容重新编码。此外,在微服务架构的开发过程中,你必须冻结单体应用中新的开发工作,因为单体应用中所做的所有更改都必须复制到微服务中。对于大多数公司来说,冻结应用程序开发工作可能存在风险,因为他们必须根据业务环境的变化随时调整软件。
对于一个组织来说,从单体逐渐转向微服务的路径一定是更好的选项。下面列举的一些可用设计模式可以帮助你逐步从单体架构转向微服务架构。
扼杀者是 Martin Fowler 设计的一种模式。它的灵感来自于自然界的无花果。无花果是从自己寄生的树冠分枝开始生长的,其根向地面慢慢延伸。它的根会逐渐到达地面并继续生长,甚至在这一过程中会杀死寄主树。同样,在软件世界中,我们可以根据这种模式围绕单个单体应用程序来构建微服务。我们会在系统中逐步添加更多微服务,最终有一天会替换掉整个单体系统。
在扼杀者模式中,我们围绕现有单体架构的边缘创建新服务。单体的边缘是什么意思?我们通过具体的例子来深入理解。
图 1:单体应用
在图 1 中,你可以看到我们有一个单体应用程序。在上图中,产品库存、订单管理和计费管理模块位于应用程序的边缘。通知管理有多个来自应用程序内的入站调用。因此,我们无法将所有入站调用从外部应用程序重定向到通知管理。我们有另一种模式来将通知管理迁移到微服务,将在稍后讨论。
假设我们想将订单管理迁移到微服务。我们可以使用以下步骤。
所有步骤如图 2 所示。
当你需要提取其他模块所依赖的一个模块时,抽象分支的模式可能会很有用。假设在前面的示例中,我们想将通知管理转换为微服务。在这种情况下,我们就会使用抽象分支。我们需要执行以下步骤来提取模块。
为了更好地理解整个过程,请参考图 3。
图 3:抽象分支
抽象分支模式可以用在很多地方。我们建议尽可能使用 Strangler Fig 而不是抽象分支。如果你确定你不能用 Stranger Fig 来将单体应用的某些部分替换为微服务,那么你就应该考虑抽象分支。
无论你做了多少测试,出现错误的可能性仍然会存在。当你迁移一个关键系统时,你一点都不能指望运气。在这种情况下,并行运行模式可能会有所帮助。在这种模式中,我们会在生产环境部署我们新开发的微服务和旧的单体应用。我们会让数据流经两个系统。单体系统一开始会是唯一事实来源。我们将新开发的微服务的结果与单体结果做对比。如果我们发现存在任何不匹配情况,就要在微服务应用程序中修复它。一段时间后,当我们对新的微服务系统有足够的信心时,就可以停用单体应用的对应功能,并让微服务成为唯一事实来源。
在前面的例子中,假设我们想将计费管理从单体迁移到微服务。在这个模式下,我们将开发一个微服务并将相同的流量发送到我们新的微服务。每天结束时,我们可以用一个批处理作业来对比旧系统和新系统生成的账单是否相同。一旦我们有了足够的信心,就可以从单体应用中停用计费管理功能。我们还有一些开源库(比如 Github 的 scientist 库),可以帮助你更好地实现这种模式。
图 4:并行运行模式
当你的功能已经存在于单体应用中时,上面介绍的这种模式会很有用。假设你需要添加新的功能,比如你想在每次成功交易后通过电子邮件向用户发送下一次交易的折扣券。很简单,你只需在单体应用的订单模块中添加新代码即可调用新创建的折扣微服务。但是如果你没有代码呢?假设你正在使用其他供应商的解决方案,或正在使用某些 SAAS,你也依旧可以实现它。接下来的两种模式就是针对这种情况量身定制的。
这种模式的灵感来自我们熟悉和喜爱的一种模式——装饰者模式。在这种模式下,就像扼杀者模式一样,我们必须引入一个代理。我们让调用通过代理传递到单体应用,然后根据单体应用的响应,代理将调用我们新创建的微服务。
图 5:装饰协作者
图 5 展示了装饰协作者模式的机制。仅当微服务所需的所有数据都已存在于请求或响应中时,我们才应该使用这种模式。如果数据不存在,那么我们新创建的微服务就必须连接到单体数据库上。也就是说我们新的微服务需要与单体数据库耦合,这绝不是一个好主意。
在这种模式中,我们将对数据库中发生的更改做出反应。比方说,我们想为系统中创建的每个客户创建一张会员卡。在这种模式下,我们可以监听客户表中的更改。一旦我们检测到有新客户创建了客户表,我们就可以调用 Loyalty 微服务。然后这个微服务可以向客户发放会员卡,并向他们发送包含详细信息的电子邮件。你可以使用多种方法来监听数据库中的更改。你可以使用触发器,也可以使用数据库的事务日志。还可以编写一个每隔几分钟触发并检查数据库中发生的更改的流程。
正确实现的微服务具有许多优势。将你的单体应用程序转换为微服务并不是朝夕就能完成的工作。你还应该记住,转换为微服务不是一场竞赛,而是一场漫长的马拉松。它需要足够的耐心,并且必须做出良好的架构决策才行。
在本文中,我们讨论了一些你可以使用的模式。大多数情况下,你需要应用多种模式才能将单体应用程序完全转换为微服务。最后,我只是建议,在迁移到微服务之前花点时间弄清楚你准备使用的策略,这种准备工作迟早会获得回报的。
参考资料:
https://martinfowler.com/bliki/StranglerFigApplication.html
https://martinfowler.com/bliki/BranchByAbstraction.html
本文由哈喽比特于3年以前收录,如有侵权请联系我们。
文章来源:https://mp.weixin.qq.com/s/5f2_wTpmycZTvEmOB84KWg
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。