一行代码激发的惧怕

[原创文章:www.ii77.com]

[好文分享:www.ii77.com]

作者 | 大飞

本文经授权转自傲飞码字



我工作的前5年,都是从事根蒂系统研发相关的工作。做事后台的接入层,后台的存储系统,RPC框架。说来不怕你见笑,谁人时期里面,我对代码一向有一种惧怕感。这种惧怕是怎么来的呢?且让我慢慢说来。

我们所构建的根蒂系统,都是使用在亿级甚至十亿级用户产物的买卖系统之上的。从客户端(前端)到后台买卖逻辑层,再到根蒂架构层,所写的代码是跑在整个挪用链路的最后端的。

你能够认为,几乎每个用户的每个恳求都邑跑到我们写得那部门的代码。

这个对系统带来的影响是: 一,代码出问题后,影响的用户局限会很大;二,在这亿级甚至十亿级用户量的情形下,天天所带来的恳求或者是千亿级,万亿级的,在如斯宏大恳求量的情形下,几乎各类奇葩的非常,你都邑碰到,代码要极其的坚固,一个小非常没处理好就会带来大麻烦。

这让我想起来,我们故障时候的景遇。

几年前,我们每做完一次版本调换,晚上根基都邑睡欠好,担心调换的代码有问题。敌手机的报警短信稀奇敏感,一有风吹草动,立马就会打开电脑vpn看看,即使是在深夜凌晨的时候。

我本身有个习惯,每次调换完,都要距离几个小时去看看监控曲线和日志,看看有没有非常的苗头,一旦发现有纰谬劲处所,就会立刻着手排查,直到确保没有问题为止。

不外即使如斯,照样弗成避免的会显现问题。

三更两三点的时候,你的手机倏忽响起,报警语音机械人跟你说,你有一个主要的监控曲线显现非常,请查察。然后你的血压立马升高,心跳加快,你从床上,一跃而起,打开电脑,连上公司的VPN,立马着手排查起来。

几分钟后,QA(质量工程师)德律过来,示知你,这个故障今朝已经上报到部门故障系统,今朝影响的用户有XXX的数量,请你加速处理的速度,然后你的心跳再次加快。

半小时后,终于有了端倪,这时,你的leader, 德律过来,扣问你是怎么回事,也许还需要多长的时间,才能处理完毕。待你语焉不详地复原完你的leader, 你又起头专一,一行行的排查故障。

一个小时后,你终于,将问题定位出来,执行了故障处理方案,例如回滚新的代码,或许屏障某些机械等。你才终于有了喘息的时间。

(ps: 这里准确的流程是,出问题后,立马回滚代码,但存储系统因为数据的关系,在没有确定原因前不太敢回滚,怕对数据有影响)

你赶紧爬上床去,睡上2-3个小时,因为第二天还要夙兴,赶到公司,行止理故障的后遗症,数据损坏和数据错乱。



谁人时期,我们写代码都是稀奇小心的,调换,更是极端的郑重。所以使得本身对代码调换有了一种焦虑和惧怕的心理。至少在那时候,写代码不是一件轻松的事情。

这个事情,我如今回过甚来看。你能够认为有一部门是人的原因,但细心的想想,写代码不出bug ,几乎也是极难做到,所以这里在研发流程上,其实也是出缺失的。

前期因为买卖成长太快,团队的整体人力跟不上,所以,一起头好多流程,都是很原始的,那时候,是想做但客观前提不许可。

后来,买卖不乱了,流程就规范了不少。好比引入了coverity的代码搜检,也履行过测试用例笼盖,持续集成等。

但最终,并不是所有的流程都陆续了下去。好比,代码测试用例笼盖,有的团队到后背就抛却了,需求转变太快,测试用例成本太高。

coverity却是主动化水平高,没啥人力投入,执行了下来。

但我相信不是所有的公司,所有的团队,都邑有这种规范的流程。一个是研发流程成熟度扶植的问题,但除此,还有成本,买卖迭代速度。在互联网,产物高速迭代的时候,产物都还没有存活下来,成熟流程就更不太或者有了。

综合来看,一种规范,但相对较重的研发流程的竖立,应该也是凭据具体情形而定的。需要考虑产物的形态,产物迭代的速度,团队的人力预算成本,产物的生命周期等等。当然,无论怎么说,横竖这不是小我能够决意的事情,若是你地点的团队有完美的研发流程,那是最好的事情,但若是没有那么完美,本身又可以做些什么呢?

我的经验来看,以下的一些办法,对于小我而言也有不错的结果。


测试驱动的斥地(TDD)


有段时间,因为买卖高速成长,对机能的要求络续提高,存储模型也追随着络续迭代改善,所以那段时间的代码点窜是对照多的,谁人时间的焦虑感也稀奇重。

我记得是在 《重构:改善既有代码的设计》中认识到TDD的。

简洁来说, 就是先构建测试用例,再起头写你的功能代码。在设计测试用例之前,你需要先界说好模块对外的接口,包罗接口的种类,参数,返回值等。

然后,你针对界说好的接口,编写测试用例。这过程中,你或者会发现接口设计错误理的处所,也需要跟着点窜。待你测试用例写完,根基你的接口也被点窜的对照好了,所以TDD还能改善你的接口设计。

后续再为每个接话柄现特定的代码逻辑。

我其时将这种方式运用到了一个磁盘存储引擎中,发现相当不错。我特意花了一周摆布的时间写测试用例。后背,天天实现部门的功能后,都立马跑测试用例,每次跑完经由,你的心里都有稳的一B的感受。有种妈妈再也不担心我写的代码有bug,被被老板叼,导致扣工资了。

因为有了完美的测试用例,并且跟着你测试用例络续的增加和笼盖,你的决心会越来越足,焦虑天然削减了好多。

不外这种体式,对照适合底层的系统和焦点不乱的系统。对于需求多变的系统,构建测试用例的人力支付太大,并且需求一变,已有的测试用例或者失效,导致投入产出比不敷高。


灰度发布


简洁来说,就是一个特征要上线的时候,不是一下就开放给所有的用户使用。有点像产物上的内测,只不外是用在手艺上。

好比我新增加了一个产物需求,例如就微信里面的 “看一看”进口,不是一起头就对所有效户开放的。

首先会上线一个新的客户端版本,代码逻辑已经预埋,但设计了一个开关,对所有效户都是封闭的。前期,或者会找个千分之一,甚至万分之一的用户(随机或许特定的用户群体),让他们使用。

这过程中,收集各类log ,监控,用户的反馈。来确认和fix 系统存在的各类问题。一样经由两三周后,若是没有大问题,就会进一步的摊开使用的用户。好比酿成百分之一,十分之一,一向迭代,直至笼盖悉数用户。

灰度这个思惟,在互联网是稀奇常用的。客户端,前端,后台都能够使用。好比后台,上线一个新点窜后,也不是一下就开放给所有效户。而是按照某种划定,例如以QQ用户为例,或者是这种划定

较量Hash值(QQ号) % 1000 <= 灰度用户的比例(取0 --- 1000)

放量的最小力度就是千分之一,被灰度到的用户,看到新功能,没灰度到的用户不受影响。

这招用在新功能,用在系统优化,代码重构上都很不错。

支付的额外成本不大,有的公司有自研的灰度系统,那最好。没有的话,在重大且没有把握的功能上,本身加上几行灰度掌握代码也不难。


监控和log


监控和log不是什么新颖的器材。

工作第一年,我们的手艺总监在一次会议上跟我们说:你写完的代码是死的,只有在线上跑的代码是活的。监控和log(稀奇是监控),就像是你代码的体征信息,随时回响着你代码在实际情况中的运行情形,要高度的正视。

这段话,在后背,我深有感想。经由完美设计的监控和log,预先发现了好多的问题,也避免了好多,或代码bug,或系统设计缺陷导致重大故障。

后背,监控和log的设计,也成了我们方案设计的一部门。一样都邑在方案最后,加上必需的监控的点和lo..,例如恳求数,成功数,失败数,各类非常数,极端逻辑执行次数等等。

你应该要意识到监控和log的主要性,并且应该要花时间稀奇地设计。

经由精巧设计的监控和log,能施展的价格,是那种凭感受随便加的监控log弗成对比的。


双写,双读验证


这招,新买卖代码用的不多。更多用于根蒂系统或许焦点系统的优化和重构上面。并且有前置前提,需要一个把持能够反复执行(例如只读把持和幂等的数据把持)。

简洁来说,就是将新旧代码,划分为两个流程(两个接口),上线到实际情况,然后在同个模块里面挪用。

一个恳求进来后,两个流程离别执行一次,逐字节做对比(例如 memcmp)新旧流程的究竟。新流程的究竟只用于对比,返回得依旧是旧流程的究竟,所以不影响线上买卖。

若是对比失败,就或者存在非常,要查找并解决,在实际情况跑了几天后,都没问题,就能够采用灰度的体式,进一步放量。不外,一样买卖不常使用,在根蒂系统上使用对照多,这里就不睁开了。


其他


此外,对于客户端,还有热补丁机制,客户端log收集系统等。不外这种需要的斥地量对照大,一小我纷歧定能够搞定,或者需要有个小团队来完成。


最后


软件工程是个宏大的话题,我也没能力论说这么大的话题。这里给人人讲了个以前的故事,而且分享了我常用的一些低成本,但能够提高线上代码质量的方式,给人人参考参考。人人有好的做法,也迎接在留言里分享出来。

【End】

 热 文 推 荐 

☞华为暂停一样性社招;嘀嗒出行系统溃逃;美团和摩拜账号互通 | 极客头条

☞漫画:若何给女同伙注释为什么200M宽带,打王者荣耀照样会有460的延迟?

最萌算法进修来啦,看不懂才怪!

@法式员,你会教本身的孩子进修编程吗?

☞代码重构!你敢吗?!

30位90后霸榜! 福布斯: 比你年青年头、比你有颜、比你有才调, 就是他们了!

Facebook开源图嵌入“神器”:无需GPU,高效处理数十亿级实体图形 | 极客头条

OpenStack已死?生怕你想多了 | 手艺头条

☞刺激!我31岁敲代码10年,来日退休!

System.out.println("点个在看吧!");
console.log("点个在看吧!");
print("点个在看吧!");
printf("点个在看吧!\n");
cout << "点个在看吧!" << endl;
Console.WriteLine("点个在看吧!");
Response.Write("点个在看吧!");
alert("点个在看吧!")
echo "点个在看吧!"

点击阅读原文,输入要害词,即可搜刮您想要的 CSDN 文章。

你点的每个“在看”,我都卖力当成了喜欢
标签:恐惧 引发 代码
自媒体 微信号:ii77 扫描二维码关注公众号
爱八卦,爱爆料。

小编推荐

  1. 1 快讯 | 鸿利智汇1Q19净利或达1.1亿;Imec获250万欧元拨款

    1 鸿利智汇1Q19业绩预告出炉,净利预增0%-20% 日前,鸿利智汇发布通知流露了2019年第一季度业绩预告,净利预增0%-20%。 通知显露,鸿利智汇估计1Q19实现净利润9,257.54万元–11,109.05万元,

  2. 2 5G已来!联通5G手机速度有多快?

    从本年3月起头 中国联通结合华为、中兴、爱立信、诺基亚 以及多家终端厂家 在多地开展了5G终端外场测试 联通5G手机速度有多快? 5G终端外场测试 基于3GPP最新尺度 ,采用非自力组网

  3. 3 【前沿】首款5G手机今日开卖 资费300起 | 华为住手社招

    2月20日,三星发布了S10系列,个中 S10 5G版今日首度开卖 , 在韩国上市,售价150万韩元(约合人民币8893元) ,需要注重的是, 三星S10 5G韩国版搭载的是三星自家的5G芯片,而在其他国

  4. 4 【协会要闻】重庆市安防协会成功主办2019年安防展会

    4月1日上午9:30,为期3天的“2019中国(重庆)聪明城市、民众平安暨智能建筑、警用装备产物手艺博览会”在陈家坪重庆展览中心谨严揭幕。重庆市民众平安手艺提防协会敬涌理事长致揭幕

  5. 5 实测速度762Mbps,时延19ms,走近美国首个移动5G…

    比原准时间早了一些,刚好赶在韩国之前,4月3日,美国第一大移动运营商Verizon在芝加哥和明尼阿波利斯两个城市推出首个5G移动办事,首批5G智妙手机为联想Moto Z3。 强调一下,这是“

  6. 6 5G收集通信手艺,能为物流业带来哪些改变?| 中国汽车报

    日前,京东物流公布率先扶植国内首个5G智能物流示范园区,依托5G收集通信手艺,经由AI、IoT、主动驾驶、机械人等智能物流手艺和产物融合应用,打造高智能、自决议、一体化的智能

  7. 7 苹果再次挖角谷歌:引进人工智能范畴一名大咖

    据CNBC报道,谷歌人工智能范畴的大咖之一,伊恩·古德费罗(Ian Goodfellow)已经到场苹果公司,出任总监级别职务,有望负责苹果软件和硬件的智能算法协调。 古德费罗的去职也获得了

  8. 8 人社部发布了13个新职业,快来看看有没有你想做的…

    本年初初步确定15个拟发布新职业后 近日,人社部发布通知 正式确认了13个新职业信息 离别是: 人工智能工程手艺人员、 物联网工程手艺人员、 物联网安装调试员、 大数据工程手艺

  9. 9 是真的吗?人工智能有了诙谐感会很危险?

    图为在东京国度新兴科学与立异博物馆展出的类人型机械人“Alter”。较量机科学家和说话学家称,跟着机械变得越来越伶俐,诙谐感或许是使人类区别于机械的最后一项特征。 图为首

  10. 10 「热议」再会了,SIM卡!今后不消手机也能打德律了!

    在这个智妙手机敏捷成长的年月,手机中的手机卡也在面临更新换代,手机卡履历了最早的 SIM卡、Mini-SIM 卡、Micor-SIM 卡,再进化为 Nano SIM 卡,尺寸是越做越小了。而如今,SIM 卡或者很

本文内容来自网友供稿,如有信息侵犯了您的权益,请联系反馈核实

Copyright 2024.爱妻自媒体,让大家了解更多图文资讯!