|
|
|
|
移动端
创建专栏

如何避免新代码变包袱?阿里通用方法来了!

本文来源:http://www.133845.com/www_chinanews_com/

申博官网下载直营网,  泡泡网拥有先进、独到的以产品为核心的营销模式,成为在国内首家提出“精深营销”理念的IT媒体公司。迪兰R9390酷能4G有着非公版的设计,GPU频率不错,同时显存大,更是达到512Bit,支持大数据量的并发传输,缓解卡顿现象,有助于提升游戏的体验度。随着乐视全球化进程的推进,乐视视频的分龄分众策略将持续带动内容的交互传播,不断吸引新的用户,使自身逐渐走到挖掘核心价值和用户定位的制高点上。同时,由于苹果赶在感恩节前上市了全新的MacbookPro,今年的Macbook也首次成为圣诞礼物排行榜的亚军。

另一种则是ROM,用于长期存储数据,即便关机,数据也不会丢失。  怎么到活动现场  ■地铁:乘地铁到“会展中心”站,选择C出口出站,步行至曲江会展中心B1馆;  ■公交:乘公交19路44路161路162路166路212路215路215路区间217路229路239路270路323路408路504路526路527路600路603路616路616路区间631路905路917路923路环山旅游1号线环山旅游2号线游9/320路至“国展中心”站下车即到。目前,戴尔灵越155000出彩版购买链接:灵越155000出彩版而无论您是在混音、传输音频流或者聊天,WavesMaxxAudioPro均可以实现更低沉的低音、更清亮的高音和出色的音频性能。期间家里哥哥又买了一台09款的宝马730(这台车现在都还在用),所以我对宝马车的质量、性能等各方面应该比较有发言权。

  购机时提及PConline太平洋电脑网将会获取更好的服务或优惠。”  当晚,陈乔恩发微博回应发布会现场失控落泪。为了弘扬社会正气,发动社会人人参与禁毒的积极性,按照有奖举报的相关规定,由深圳市、龙岗区、布吉街道三级禁毒委和公安机关,对两名举报市民给予共15万元人民币的奖励。  【媒体】您刚刚开始说“车,希望它是消费电子用品”,但是它与手机比、与数码相机比还是相差比较多的,比如像奇点它跟同类的品牌,现在也很火,你们之间有什么不同?或者说如果用户选择电动车为什么选择奇点?  【沈海寅】在性价比上面,我们可以做得非常好,大家可以期待我们的量产车。

什么是设计?什么是架构?从零开始建立一个新的系统,新写的每行代码都可能成为明天的历史包袱?如何能有效的在遗留代码上工作?今天,阿里资深技术专家辉子为我们带来NBF框架下软件工程架构设计通用方法论,值得细细品读。

作者:阿里技术|2019-09-30 10:46

什么是设计?什么是架构?从零开始建立一个新的系统,新写的每行代码都可能成为明天的历史包袱?如何能有效的在遗留代码上工作?今天,阿里资深技术专家辉子为我们带来NBF框架下软件工程架构设计通用方法论,值得细细品读。

Note:本文讨论的是基于服务化前提下的通用软件工程架构方法论,并未涉及到微观设计或架构的具体细节。

前言

即使代码多年的人都会对这两个问题有点蒙圈:什么是设计?什么是架构?

从单词上看:设计是Software Design,架构是Software Architecture;分别对应的作者是:Designer和Architect:

  • Architect都是Designer,但Designer未必是Architect。正如所有的架构设计都是设计,但设计未必是架构设计;
  • Design关注微观代码(inside component),Architecture关注宏观软件结构(between components);
  • Architect应该都是从Designer成长起来的。毕业了用code编写软件;成长了用ppt设计软件;
  • 只会用ppt设计,但代码写得不好的Architect都是假的Architect;
  • Architecture里听到比较多的词语:Serverless、FAAS、Microservice、multi-layer、Event driven、OSGI、NBF......
  • Design里听到比较多的词语:SOLID、 DDD、正交设计、Design Pattern;
  • 搞不清SOLID,也不可能把软件的层次分好,也无法理解什么是OSGI的价值;
  • 好的Designer是通往好的Architect的必经之路。

服务化架构的基本原则

New System

从零开始建立一个新的系统,有几个特征:

  • 历史包袱小
  • 上下文简单
  • 设计的约束小
  • 新写的每行代码都可能成为明天的历史包袱

由于调用方还没有,新系统可以比较完美的执行我们预想的架构设计,但是切记,最后那行才是最重要的那行:不要让今天的代码成为明天的历史包袱,新的每行代码都在书写历史。

上图的1,2,3,4代表新建系统的顺序:

  1. 由“相”抽象出“心”:先思考,那么多的业务场景下“相”,共同的特征“心”是什么。并反向用更多的相去验证心。
  2. 将“心”具象成领域模型:关注领域模型(Domain Model),解耦数据模型(Persistence Model):将TUNNEL SPI化。
  3. 将领域模型中的依赖SPI化:解耦对外部系统的依赖,反转依赖控制权。
  4. Mock所有spi实现,确保“心”领域模型包裹的单元测试完全通过
  5. 实现TUNNEL BUNDLE:设计数据模型(Persistence Model),关注“存”,“取”不关注领域模型。
  6. 实现依赖SPI适配BUNDLE:连接真实依赖服务。
  7. 包装domain service:模型相关,业务无关。
  8. 根据业务需求组合/编排domain service成为scenario bundle或者业务SOP。

Working on legacy

对于一个软件工程师来讲,写代码最痛苦的事情莫过于coding on legacy,但同时又给了我们各种说辞:

  • 这些代码太烂了,改起来太费劲【需要更多人】
  • 这事做不到,因为以前系统架构问题导致的【责任不在我】
  • 经过我的修改,现在已经好很多了,工单数量大批下降【我功劳显著】
  • 知不知道:接手你代码的人其实也在重复说上述3件事情

如何能有效的在遗留代码上工作,业内有本非常不错的书,叫"Working Effectively with Legacy Code",值得精读:

图片来源:书籍《Working Effectively with Legacy Code》

所以我这里的标题可能不准确,我要讨论的更多是"遗留代码的重构",什么时候我们开始讨论需要把现有系统重构:

  • 代码确实腐化到无法正常维护,或者新加一个需求代价很大;
  • 目前代码的技术架构满足不了下一步业务的发展;
  • 很多特性已经下线作废,却跟有用的代码藕断丝连;
  • 业务逻辑随着发展分散到不同的应用里,界限不清;
  • 专家级的未雨绸缪,着眼未来的规划和新技术的应用;
  • 换老大了,需要立新的flag。

架构的基本原则依然是上面那幅图。但上下文的不同,我们的发力点和优先级有明显的区别。阿里整个体系里的依赖关系错综复杂,要对阿里环境下的系统做重构是件绝对谨小慎微的事情。为了完成在这么复杂体系下的架构及代码重构,我们必须有条不紊的分离关注点以及一如既往的坚持软件卓越。

聚焦与收敛上游调用

解耦下游依赖

以服务为单位切换

老系统下线

经过一步一步的分解,legacy系统已经完全被重构,并且具备随时切换的准备。这里我给几个建议:

  1. 先把老实现作为API的默认实现,新的实现作为老的实现的降级实现,并使用策略分流一部分流量(具体比例跟团队信心相关);
  2. 对于有业务需求变更的部分应尽快实现在新的实现里,并将新实现作为API的默认实现,老实现作为新实现的降级实现,策略应该是即时降级,也就是新实现出现问题立刻降级到老实现;
  3. 运行一段时间没有问题后,讲所有默认实现切换为新实现,并将老实现作为新实现的降级实现;
  4. 其实这时就算所有切换完毕:老实现可以永远作为新实现的降级实现,也就是只要我升级一次服务,上一次成功版本就可以作为这次的降级实现,这样,线上问题回滚就是秒级的。

总结

本文基于借助NBF提供的远程多态,服务编排等能力下基础资料,商品,组网等系统新建,重构的经验及方法论总结。仅供遇到架构重构,解耦等问题困扰的技术团队参考。

【编辑推荐】

  1. 申博官网下载直营网开源社区的技术债:写代码的“码农”VS 删代码的“清道夫”,谁更该被嘉奖?
  2. 申博官网下载直营网同样是高并发,QQ/微博/12306的架构难度一样吗?
  3. 申博官网下载直营网每秒100W请求,12306秒杀业务,架构如何优化?
  4. 为什么它有典型FaaS能力,却是非典型FaaS架构?
  5. 漏洞少、成本低……极简代码的终极优势!
【责任编辑:武晓燕 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢
申博电子游戏开户登入 www.860msc.com 申博代理开户登入 申博在线开户登入 菲律宾申博娱乐直营网 百家乐微信支付充值
申博游戏下载 188申博直属现金网登入 申博真人娱乐官网直营 菲律宾申博开户登入 申博登录不了 太阳城亚洲官方网址登入
申博138登入 js7799.com 申博代理直营网 www.288msc.com 老虎机支付宝充值 申博太阳城游戏