设为首页 | 加入收藏

欢迎访问三d彩票大赢家走势图-超级大乐透彩票大赢家-彩票大赢家官方苹果版下载

超级大乐透彩票大赢家 >> 三d彩票大赢家走势图-一行代码引发的惊骇
作者:大飞码字
来历:大众号大飞码字




我作业的前5年,都是从事根底体系研制相关的作三d彩票大赢家走势图-一行代码引发的惊骇业。做过后台的接入层,后台的存储体系,RPC结构。说来不怕你笑话,那个运城李明虎时期里边,我对代码一向有一种惊骇感。这种惊骇是怎样来的呢?且让我渐渐说来。

咱们所构建的根底体系,都是运用在亿级乃至十亿级用户产品的事务体系之上的。从客户端(前端)到后台事务逻辑层,再到根底架构层,所写的代码是跑在整个调用链路的最终端的。

你能够以为,简直每个用户的每个恳求都会跑到咱们写得那部分的代码。

这个对体系带来的影响是: 一,代码出问题后,影响的用户规模会很大;二,在这亿级乃至十亿级用户量的状况下,每天所带来的恳求或许是千亿级,万亿级的,三d彩票大赢家走势图-一行代码引发的惊骇在如此巨大恳求量的状况下,简直各种奇葩的反常,你都会遇到,代码要极点的强健,一个小反常没处理好就会带来大费事。

这让我想起来,咱们毛病时分的景象。

几年前,咱们每做完一次版别改变,晚上根本都会睡欠好,忧虑改变的代码有问题。对手机的报警短信特别灵敏,一有风吹草动,立马就会翻开电脑vpn看看,即使是在深夜清晨的时分。

我自己有个习气,每次改变完,都要距离几个小时去看看监控曲线和日志,看看有没有反常的预兆,一旦发现有不对劲当地,就会当即着手排查,直到保证没有问题停止。

不过即使如此,仍是不行避免的会出现问题。

深夜两三点的时分,你的手机忽然响起,报警语音机器人跟你说,你有一个重要的监控曲线出现反常,请查看。然后你的血压立马升高,心跳加快,你从床上,一跃而起,翻开电脑,连上公司的VPN,立马着手排查起来。

几分钟后,QA(质量工程师)电话过来,奉告你,这个毛病现在现已上签到部分毛病体系,现在影响的用户有XXX的数量,请你加快处理的速度,然后你的心跳再次加快。

半小时后,总算有了端倪,这时,你的leader, 电话过来,问询你是怎样回事,大约还需求多长的时刻,才干处理完毕。待你语焉不详地回复完你的leader, 你又开端静心,一行行的排查毛病。

一个小时后,你总算,将问题定位出来,履行了毛病处理计划,例如回滚新的代码,或许屏蔽某些机器等。你才总算有了喘息的时刻。

(ps: 这儿正确的流程是,出问题后,立马回滚代码,但存储体系由于数据的联系,在没有承认原因前不太敢回滚,怕对数据有影响)

你赶忙爬上床去,睡上2-3个小时,由于第二天还要早上,赶到公司,去处理毛病的后遗症,数据损坏和数据紊乱。

2


那个时期,咱们写代码都是特别当心的,改变,更是极度的慎重。所以使得自己对代码改变有了一种焦虑和惊骇的心思。至少在那时分,写代码不是一件轻松的作业。

这个作业,我现在回过头来看。你能够以为有一部分是人的原因,但细心的想想,写代码不出bug ,简直也是极难做到,所以这儿在研制流程上,其实也是有缺失的。

前期由于事务开展太快,团队的全体人力跟不上,所以,一开端许多流程,都是很原始的,那时分,是想做但客观条件不允许。

后来,事务安稳了,流程就标准了不少。比方引入了coverity的代码查看,也推广过测验用例掩盖,继续集成等。

但终究,并不是一切的流程都连续了下去。比方,代码测验用例掩盖,有的团队到后边就抛弃了,需求改变太快,测验用例本钱太高。

coverity却是自动化程度高,没啥人力投入,履行了下来。

但我信任不是一切的公司,一切的团队,都会有这种标准的流程。一个是研制流程老练度建造的问题,但除此,还有本钱,事务迭代速度。在互联网,产品高速迭代的时分,产品都还没有存活下来,老练流程就更不太或许有了。

归纳来看,一种标准,但相对较重的研制流程的树立,应该也是根据具体状况而定的。需求考虑产品的形状,产品迭代的速度,团队的人力预算本钱,产品的生命周期等等。当然,不管怎样说,横竖这不是个人能够决议的作业,假如你地点的团队有完善的研制流程,那是最好的作业,但假如没有那么完善,自己又能够做些什么呢?

我的经历来看,以下的一些办法,关于个人而言也有不错的作用

测验驱动的开发(TDD)

有段时刻,由于事务高速开展,对功用的要求不断进步,存储模型也跟跟着不断迭代改进,所以那段时刻的代码修正是比较多的,那个时刻的焦虑感也特别重。

我记住是在 《重构:改进既有代码的规划》中了解到TDD的。

简略来说, 便是先构建测验用例,再开端写你的功用代码。在规划测验用例之前,你需求先界说好模块对外的接口,包含接口的品种,参数,返回值等。

然后,你针对界说好的接口,编写测验用例。这过程中,你或许会发现接口规划不合理的当地,也需求跟着修正。待你测验用例写完,根本你的接口也被修正的比较好了,所以TDD还能改进你的接口规划。

后续再为每个接口完结特定的代码逻辑。

我其时将这种办法运用到了一个磁盘存储引擎中,发现适当不错。我特别花了一周左右的时刻写测验用例。后边,每天完结部分的功用后,都立马跑测验用例,每次跑完通过,你的心里都有稳的一B的感觉。有种妈妈再也不忧虑我写的代码有bug,被被老板叼,导致扣薪酬了。

由于有了完善的测验用例,而且跟着你测验用例不断的添加和掩盖,你的决心会越来越足,焦虑天然减少了许多。

不过这种办法,比较合适底层的体系和中心安稳的体系。关于需求多变的体系,构建测验用例的人力支付太大,而且需求一变,已有的测验用例或许失效,导致投入产出比不够高。

灰度发布

简略来说,便是一个特性要上线的时分,不是一下就敞开给一切的用户运用。有点像产品上的内测,只不过是用在技能上。

比方我新添加了一个产品需求,例如就微信里边的 “看一看”进口,不是一开端就对一切用户敞开的。

首要会上线一个新的客户端版别,代码逻辑现已预埋,但规划了一个开关,对一切用户都是封闭的。前期,或许会找个千分之一,乃至万分之一的用户(随机或许特定的用户集体),让他们运用。

这过程中,搜集各种log ,监控,用户的反应。来承三d彩票大赢家走势图-一行代码引发的惊骇认和fix 体系存在的各种问题。一般通过两三周三d彩票大赢家走势图-一行代码引发的惊骇后,假如没有大问题,就会进一步的铺开运用的用户。比方变成百分之一,十分之一,一向迭代,直至掩盖悉数用户。

灰度这个思维,在互联网是特别常用的。客户端,前端,后台都能够运用。比方后台,上线一个新修正后,也不是一下就敞开给一切用户。而是依照某种规矩,例如以QQ用户为例,或许是这种规矩

核算Hash值(QQ号) % 1000 <= 灰度用户的份额(取0 --- 1000)

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

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

支付的额定本钱不大,有的公司有自研的灰度体系,那最好。没有的话,在严重且没有掌握的功用上,自己加上几行灰度操控代码也不难。


监控和log



监控和log不是什么新鲜的东西。

作业第一年,咱们的技能总监在一次会议上跟咱们说:你写完的代码是死的,只要在线上跑的代码是活的。监控和log(特别是监控),就像是你代码的体征信息,随时反应着你代码在实践环境中的运转状况,要高度的注重。

这段话,在后边,我深有感触。通过完善规划的监控和log,预先发现了许多的问题,也避免了许多,或代码bug,或体系规划缺点导致严重毛病。

后边,监控和log的规划,也成了咱们计划规划的一部分。一般都会在计划最终,加上有必要的监控的点和log点,例如恳求数,成功数,失利数,各种反常数,极点逻辑履行次数等等。

你应该要意识到监控和log的重要性,而且应该要花时刻特别地规划。

通过杰出规划的监控和log,能发挥的价值,是那种凭感觉随意加的监控log不行比较的。

双写,双读验证


这招,新事务代码用的不多。更多用于根底体系或许中心体系的优化和重构上面。而且有前置条件,需求一个操作能够重复履行(例如只读操作和幂等的数据操作)。

简略来说,便是将新旧代码,划分为两个流程(两个接口),上线到实践环境,然后在同个模块里边调用。

一个恳求进来后,两个流程别离履行一次,逐字节做比照(例如 memcmp)新旧流程的成果。新流程的成果只用于比照,返回得依旧是旧流程的成果,所以不影响线上事务。

假如比照失利,就或许存在反常,要查找并处理,在实践环境跑了几天后,都没问题,就能够选用灰度的办法,进一步放量。不过,一般事务不常运用,在根底体系上运用比较多,这儿就不展开了。

其他


别的,关于客户端,还有热补丁机制,客户端log搜集体系等。不过这种需求的开发量比较大,一个人不一定能够搞定,或许需求有个小团队来完结。

最终


软件工程是个巨大的论题,我也没才能论说这么大的论题。这儿给我们讲了个曾经的故事,而且共享了我常用的一些低本钱,但能够进步线上代码质量的办法,给我们参阅参阅。我们有好的做法,也欢迎在留言里共享出来。



上一条      下一条
返回顶部