后天就是双十一,明天晚上我们这些当码农的就要开始通宵轮值了。长达两个多月的准备,也是让人精疲力尽的,然而着一切一切都将在未来几天迎来终了,完结撒花。
前几天有高中同学微信找到我,让我帮忙在双十一的时候买东西。我自然是坚定拒绝的,不是我不想帮忙,而是身在江湖身不由己。作为系统扛第一波流量的开发者,要是因为玩忽职守没有及时发现系统的异常并消灭,估计就得回家准备简历了吧。
虽然说每个在这里的人,总有一天会离开,但是以这种方式离开,说出去也不光彩。
当几乎一切系统都可以水平扩容的时候,在某种意义上,双十一就不再是「技术的盛宴」,而是机器的堆砌。相比起明星出轨给微博带来的毁灭性打击,世界杯进球给 Twitter 带来的冲击,双十一的流量并不算是突发流量,而是一场事先策划好的大流量压测。
真的要感谢师兄极具先见之明地在系统设计之初,为数据库做了足够多份的 sharding,使得我今年在扩容的时候,没有面临数据库重构的麻烦事情,数据库扩容的工作都是给力的 DBA 帮忙搞定了,应用服务器的扩容也是问 PE 要机器搞定了。这个 sharding 的粒度,或许到明年后年也还是够用的。
当然,整个双十一准备过程也没有说的那么简单,扩容也不是加机器那么简单,加机器也得加得有理有据,要是预算没事先报上去,还得到处找人借机器,东拼西凑。
DBA 妹纸近期打算开个独立博客什么的,到时候我这边给挂一个友链。
当你为系统输出了完善的业务日志,为业务产出详尽的数据报表,看着每天每天形状几乎一模一样的实时曲线,看着每周每周逐渐增长的同比曲线,基本上就可以预知双十一当日的业务报表大概的样子。
当你为系统输出了完善的错误日志,为异常配置了详细的告警,基本上不用看日志也知道哪个上游系统不稳定,或者哪个下游系统来了突发流量触发流控,或者是其他千奇百怪但是又可以忽略的告警。
当你对每个 RPC 做好异常处理,设定好能容忍的等待时长,能自动降级的弱依赖就自动降级,不能自动降级的强依赖就业务失败,基本上就不用担心上游系统的稳定性问题。
或许在电商系统的世界里,动态扩容并不是什么非有不可的特性,因为一切流量都在运营的掌控之中,今天搞个大促,流量翻倍,一周之后系统开始告警,同比下跌 50%:joy:
当然有了 Docker 之后,动态扩容也就成不了什么大问题,只要应用服务器无状态,只要物理机足够多,只要 MySQL 连接数还够用,分分钟部署镜像实现扩容。
然而这个世界上,有一种可怕的东西,叫做遗留系统。技术部里面大多数同事都在维护遗留系统。还好我负责的系统并不是遗留系统,而是去年我师兄和几个同事从零开始写出来的新系统,上线之后不久我就加入开发团队。经过半年多的开发,经历了去年双十一,又经过一年多的开发,系统里面被写入了越来越多的代码。
在物理领域,有一个著名的公式,叫做质能方程。
$$e = mc^2$$
在软件工程领域,也有一个著名的公式,叫「软件质量第一定律」。
$$errors = (more/ code)^2$$
虽然代码越来越多,越来越多,但是我还是看过代码树中几乎每一行业务代码,无论是谁提交的。也许是出于那种被称为「ownership」的东西,也许是出于对未知的不安,反正我是看过几乎每一行业务代码,当然,文件开始的那一坨 import 我是不会看的 :)
说回到双十一,我是决定不去买买买了。一个是我已经许久不在淘系电商上购物,主要消费转向线下了。另一个是我实在也没啥可买的,过冬的衣服也已经在实体店买好,服役近两年的 iPhone 5s 莫名其妙地修复了电量问题后,还能再战三年!
其实我是打算在我写出一个不是 Hello World 级别的 iOS App 之前都不换手机的。为了早日用上肾 6s,得赶在肾 7 上市之前撸一个 App 出来才行。大不了以后在后端开发的队伍中掉队了,咱还能到客户端工程师的队伍中混口饭吃,成功跨界成为客户端开发者中最会写后端的,后端开发者中最会写客户端的!
听说,每个有理想的工程师年轻的时候都有过底层梦,随着年龄的增长,当初的梦想渐渐被堆积如山的业务需求磨平,工作之余那可怜的几分钟只是想着升职加薪出任 CTO 迎娶设计师。如今的我能用多种语言换着花样写后端,能写一点简单的前端,催促着自己学习客户端,说是为了生活,却和梦想渐行渐远。
双十一是女生的购物狂欢,是情侣买买买的恩爱秀,阿里云却也跑去凑热闹,卖服务器也搞个整点秒杀。秒杀就秒杀吧,所有的优惠都只针对新用户,这让我们这些老用户怎么看?
也许,双十一期间,我顶多就买点新加坡地区的服务器吧。
注孤生。