纠纷奇闻社交美文家庭
投稿投诉
家庭城市
爱好生活
创业男女
能力餐饮
美文职业
心理周易
母婴奇趣
两性技能
社交传统
新闻范文
工作个人
思考社会
作文职场
家居中考
兴趣安全
解密魅力
奇闻笑话
写作笔记
阅读企业
饮食时事
纠纷案例
初中历史
说说童话
乐趣治疗

微服务的痛用实际经历告诉你它有多坑(三)

9月21日 逆落雪投稿
  我们在前面已经说了微服务的六个痛点:(1)微服务的职责划分之痛;(2)微服务的粒度拆分之痛;(3)没人知道系统整体架构全貌之痛;(4)重复代码过多之痛;(5)服务器资源耗费更多之痛;(6)分布式事务之痛。你的项目真的适合微服务架构吗?微服务架构有哪些痛呢?(一)微服务的痛:用实际经历告诉你它有多坑(二)
  在这里我们继续来聊其他的痛点:一、服务之间的依赖
  在设计类时,我们往往需要遵循类与类之间不可循环依赖的原则,因此最终设计出来的类关系类似下图所示的层次分明的结构。
  如果我们把依赖关系转移到微服务,结果会怎么样呢?我们先举个例子看看。
  比如商品系统针对不同门店类型设置不同价格时需要调用门店系统中的类型,这时商品就依赖了门店;同时因门店中存在商品库存,门店也就依赖了商品系统的商品信息,从而形成了循环依赖。
  再比如最底层的财务系统,从理论上讲,它不需要依赖其他系统。而实际上刚好相反,它必须依赖订单信息,知道费用由什么订单产生,同时它还需要依赖会员信息和门店信息,知道是谁付的钱和谁收的钱。
  因此,随着需求越来越多,服务之间的依赖就变成下面这种架构了。
  通过上图,我们发现服务之间的依赖可谓是你中有我,我中有你。
  那这种地狱般的依赖一般会出现什么问题呢?场景1:
  重构2个服务后,我们就需要在测试过程中评估哪些服务会受影响?
  因为前一段时间线上环境已经出现了2次一级故障,所以CTO强烈要求我们此次务必认真评估影响面,不能再出现类似问题。
  于是一个leader提出方案:先根据重构的代码找到受影响的接口,然后根据接口找到所有调用这些接口的上游代码,再找到那些调用上游接口的接口,以此类推。
  由于该方案分析成本过高,且一旦出现任何遗漏就会前功尽弃,因此直接被CEO否决了。
  最终我们提出了一个较合理的方案:根据全链路日记系统中的服务间依赖,找到这2个服务的所有上游服务及上游的上游服务。
  通过这个方案评估后,我们发现服务重构后,大半的微服务受到了影响,于是一堆人不得不陪着通宵达旦做回归测试,那几天重构服务的Leader也都低着头走。场景2:
  有了之前的教训,后续遇到新的重构需求时,重构的人就学乖了,直接把原来的服务abcServiceV1写成新服务abcServiceV2。此时新的代码直接调用V2版本,而旧的代码还是继续调用V1版本,等有时间再下架abcServiceV1,这样就不用一堆人陪着加班了。
  后面大家纷纷照搬这个方案,使得V1、V2的形式越来越流行,服务数量出现暴涨。而且在实际开发工作中,开发人员很少在后期下架旧版服务,最终导致服务数量越来越多且新旧版本并存,维护起来更痛苦了。
  以上就是服务之间的依赖导致的问题了,而关于这类问题的解决思路我们放在后面专门来说二、联调的痛苦
  以往,我们的需求排期是这样的:需求评审时间开发完成时间测试完成时间上线时间。
  迁移到微服务后,需求排期表活生生地增加了2个环节:需求评审时间接口设计时间开发完成时间联调完成时间测试完成时间上线时间。
  在这种变化下,每次遇到比较紧急的需求时,我们都会额外问一句:接口文档好了吗?联调怎么样了?
  为什么我们这么在意联调?因为在一个软件项目中,影响项目排期的往往不是技术问题而是第三方依赖问题,一旦涉及沟通、协调等问题就会特别耗时间。
  这里,我们举一个例子简单说明下。有一次,我们正对门店系统进行小的需求改动,此时需要商品系统研发人员配合提供一个简单的接口,而商品系统的开发人员说,我们正在忙另外一个项目,周二抽空提供这个接口。
  听了商品系统开发人员的番话,我们简单评估了一下上线时间,周二拿到接口,周三进行联调,周四、周五测试2天,应该周五晚上就可以上线了。于是,我们与业务人员进行了相关反馈。
  可是等我们把门店的功能设计好后,因商品系统的开发人员开展的项目临时修改了一个紧急需求,要求周二务必通宵搞定,为此,他们无法在周二这天给到我们接口,最终门店周五上线的计划也就被延误了。
  而这种事情在实际开发过程中发生的频率比较高,并不是单个事件。
  下面,我们再举一个例子说明下。有一次,我们正在做一个涉及30个服务的大项目。周五完成所有需求评审后,我们的首要目标是对接口文档。
  因为接口文档是由各个项目组根据实际需求汇总各自需要提供的接口数,总计300多个接口,以至于这个过程我们花了整整两周时间。
  对完接口文档后,十几个项目组之间又开始对接口联调时间,这个过程又整整花了三天时间。
  不过,对完接口后,各自开发功能的速度就很快了,那次我们用了2周就把功能开发完了。
  说到这可能你想问,对完接口后,在实际开发过程中接口还会修改吗?我的答案是肯定会,而且增加、修改、删除接口都有可能。但是对完接口后,至少可以保证我们在大概一致的方向上前进,如果确实需要调整,修改的也只是一些小细节,并不会影响开发进度。
  功能设计完后,就需要进行联调了,而这个过程往往最耗时,因为我们需要耗费大量的时间在沟通上,先通过下面这段对话感受下。调用方:addXXX的接口怎么样了?
  被调用方:好了,你可以调调看。
  调用方:不行啊,你看返回了404。
  被调用方:哎呀,环境部署错了,稍等一下。
  调用方:赶紧的。
  被调用方:好的。
  被调用方:好了。
  这时,调用方在联调时发现需要增加一个字段,就说,addXXX的接口需要增加一个修改时间字段,你帮我加一下。
  可以,不过我正忙着另外一个项目,要不明天给你?
  别啊,今天必须联调完。
  那我晚上赶一赶,9点给你成不?
  好吧。
  所以,在做项目时我们最怕的就是协调时间,因为它不可控。毕竟每个开发人员的需求优先级都不一样,除非所有相关项目组的第一优先级都相同,不然协调时间会是一件很头疼的事情。
  而且这个大项目共包含300多个接口,也就是说300多个接口都需要协调,这就使得联调的时间一点不比开发功能的时间少。三、部署上的难题
  使用单体式架构时,每个开发人员都想在本地把整个系统部署完后再调试,此时部署方式非常简单。可是迁移到微服务后,每个项目动不动就涉及十几个微服务。这时,如果让开发人员将这十几个微服务在本地部署完后再联调,根本无法实现。且不说内存不够,就算内存够,任何一个开发人员都不可能熟悉十几个微服务的部署。
  为此,我们专门弄了1套测试环境给开发人员进行联调,这样开发人员就可以将本地正在开发的服务接入联调环境,类似下图所示架构:
  可是,这种架构时不时会出现下面这三种问题。1。联调环境的数据缺漏非常大
  因为联调接入的服务是本地开发过程中的服务,即数据是开发数据,所以单个服务中的数据不具备完整性。
  而且因为是开发环境,上下游服务之间还没有调通,也就是说上下游的单据也不一致、不完整,不是出现订单少了收款单的情况,就是出现准入少了审批单的情况。2。经常调用服务错误
  时不时会有人发出这样的抱怨:甲:这个接口怎么有问题啊?你看,A字段和B字段都缺失了。
  乙:怎么会呢?我明明加上去了啊?
  甲:你是不是忘记部署了?还是部署失败了?
  乙:我看看。
  甲:我去,你是不是调用了六子的服务?问一下六子。
  过了一会儿,乙过来说:还真是,他刚好在接入这个服务,我找他去。3。联调环境极度不稳定
  因为开发人员时不时需要对联调中的服务进行部署,或者将不稳定的开发服务接入联调环境,再加上前面提及单个服务中的数据不具备完整性,因此,如果想在联调环境下走完完整的流程,这根本不太可能。为此,我们只能将联调环境用作接口间的局部联调。
  这就是联调环境难以部署带来的痛点,使得我们花了太多时间在协调问题上。于是我们在想,有没有一个办法可以简单地创建一套相对独立的测试环境呢?那后面我们就根据这些痛点来对应聊聊解决方案。四、总结
  可能你想问,关于微服务的优势我们只讲了5点,而微服务的痛点足足讲了9点,我们为什么还要使用微服务?
  如果使用单体式架构的话,随着业务的复杂化,将会出现无论怎么加人都无法迭代的情况。而如果使用微服务,虽然它存在一堆问题,但是至少可以通过加人的方式保持迭代。
  对于这些痛点,如果你有更好的解决方案,欢迎留言讨论。
  感兴趣的朋友欢迎关注微信公众号:服务端技术精选
  个人博客:http:jiangyi。cool
投诉 评论 转载

熟悉的套路再次上演!美方突然放松华为许可,中芯国际这次立功了从2018年开始,老美已经对华为展开了四次的连续打压。面对重压,华为现在最现实的目标就是活下去。在华为手机业务遭受重大冲击之后,华为努力转型,汽车业务逐渐成为华为未来发展……腾讯放弃音乐版权独家授权权利腾讯发布关于放弃音乐版权独家授权权利的声明。声明称,公司放弃与上游相关版权方音乐版权独家协议中有关音乐版权独家授权的权利(与独立音乐人独家合作期限不超过三年,及新歌独家首发期不……互联网政务服务助力一流软环境建设来源:光明日报习近平总书记在全国网络安全和信息化工作会议上强调,要运用信息化手段推进政务公开、党务公开,加快推进电子政务,构建全流程一体化在线服务平台,更好解决企业和群众反映强……对比小米和iqoo手机,看了很多评论,最终还是选择荣耀mag对比了小米还有iqoo的手机,看了网上很多评论,最终还是选择荣耀的手机,除了对华为的情怀,感觉这次荣耀的手机配置上,外观上也都达到了我的需求,打算当做未来三年的主力机来用,刚好……微服务的痛用实际经历告诉你它有多坑(三)我们在前面已经说了微服务的六个痛点:(1)微服务的职责划分之痛;(2)微服务的粒度拆分之痛;(3)没人知道系统整体架构全貌之痛;(4)重复代码过多之痛;(5)服务器资源耗费更多……华为商城开卖认证二手机经查,华为商城日前上线认证二手机专区。目前开卖的型号包括P30、P30Pro、Mate30、Mate30Pro等。其中最便宜的是P306128GB和864GB版本,……Springboot集成MybatisID生成策略注解GenGeneratedValue用于注解生成策略,内有strategy方法。默认情况下,spring会自动选择一个最适合底层数据库的主键生成策略:我这里mysql对应自增长auto……斗地主老是输?一起用Python做个自动出牌器,欢乐豆蹭蹭涨版权声明:本文为博主原创文章,遵循CC4。0BYSA版权协议,转载请附上原文出处链接和本声明。本文链接:https:blog。csdn。nethhladminhhlart……阿里公布员工遭侵害事件处理决定!划重点遇性骚扰应该如何维权?近日阿里一女员工被侵害事件在网上闹得沸沸扬扬8月7日,有被认为是阿里巴巴员工的网友在社交平台发帖称,在7月27日的一次出差过程中,被其领导要求在KTV陪客户喝……英伟达RTX3090Ti公版显卡曝光有望本月上市英伟达将于北京时间2022年1月5日凌晨0点发布CES主题演讲。在本次发布会中,英伟达可能会发布RTX3090Ti等桌面显卡和RTX3080Ti等游戏本显卡。今日,Vid……深度报告充电与换电协同发展为新能源汽车续航【能源人都在看,点击右上角加关注】报告摘要碳中和背景下,新能源车迎来快速发展,配套的充换电行业的成长性不可忽视。我国新能源汽车快速发展,预计2025年渗透率将达20……宅玩必备好物分享我的桌面清单来了二次元这个曾经的小众圈子如今一跃成为年轻人自带的标签,当代人如果不识二次元似乎就已经OUT出局。而二次元给我们描绘了一个生动而又形象的虚拟空间,接受这种新潮文化的年轻人也非常具……
2020年下半年新机预测从1G到5G,波澜壮阔的通信发展史世界上最豪拖拉机,16缸发动机身价2000万,每小时耕360RedmiAirDots2开箱体验同价位我没有找到比它好的办公室电脑蓝屏代码大全合集一生只送一人ROSEONLY将奢侈品基因融入品牌焖棚消灭病菌和线虫,伪技术,原因高温只传入土壤7公分深win10使用arcgis安装报错errror1935的教程小米商城王炸,性能不输飞利浦,浦东白领比月薪过万还体面一文讲透彻网络协议与管理,概念模型设备等全部包含,快拿走突然有个想法,期待GPDMicroPC掌上电脑推出龙芯处理器测评小巧玲珑的Magnepan美屏MiniMaggie
畏难造句用畏难造句大全去海南,这10种特色美食都是当地人的心头爱,你最爱吃哪样?韦小宝的历史原型是谁?连姓氏也一样哪座房子最漂亮的优秀教案范文我推荐的这家很不错的哦马上男士桑拿spa会馆让你心神气定,悠 邢台县信息公开的内容有哪些?十年戏龄杨颖靠正剧翻身,网友评论格外清醒稍有进步就吹演技?理性消费成大趋势走过14年的双11接下来的路怎么走小米12配置曝光,屏幕有升级,不全是2k。miui12。5适大姨妈期间不能吃什么(月经多吃什么食物)人性的弱点娇躯造句用娇躯造句大全

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找美丽时装彩妆资讯历史明星乐活安卓数码常识驾车健康苹果问答网络发型电视车载室内电影游戏科学音乐整形