如何打造一个健壮的软件?
答案可以很复杂,也可以很简单。
总结两点经验:
1)保证线程安全;
2)网络发生错误时自动重试;
这是从我的前老板那里学到的经验,为了避开搜索引擎的检索,下面称他为“八戒”。
1
八戒是一个“明星程序员”,传说中的“十倍速程序员”。
二十多岁时开发的软件卖给大厂,“拥有与年龄不相匹配的财富”,出国,买大 House;他在国外某头部大厂工作的时候,据说用一个月时间改掉了厂里“一年都没解决的bug”。
工作中,他经常多线程同时应对不同岗位随时抛过来的各种问题,对所有问题都能快速反应,能迅速提供逻辑严密的解决方案,对结果的好坏有预估。
不过怎么描述这个人都显得很空白,只有亲临智商被碾压的现场,才会真正明白聪明人和普通人的区别在哪里。
2
关于线程竞争问题,在2018年以前,市面上的 app 崩溃还很常见。当时,我们对读写同一个内存值这种偶发情况,并没有足够清醒的认识。
后来对此问题的措施是:
a)任务的发起和回调都在主线程发生;
b)给可能同时读写的值加递归锁。
这样就加强了程序的可靠性,把数据竞争控制在笼子里。经过处理之后,在很大程度上改善了一个软件的可用性。
3
关于错误重试的问题,在应用初起时,或者网络发生变化,外部环境各种不稳定时,常常有失败的网络请求发生。起初我们觉得,失败就失败呗,下一次请求就能拉到数据了。八戒说,不对,不要让用户去做这件事,要主动地自动去做。
八戒教导我们说:看似简单的结果,但背后是隐藏了复杂的逻辑得到的,不是因为表现简单,我们的程序也简单处理。Wechat为什么这么稳?肯定在业务底层做了很多看不见基础工作,最后才得到稳定的输出。
在前一次请求失败的情况下,依次延时1秒和3秒依次做了两次重试。经过自动重试处理之后,初次打开app拉不到数据的情况没有了。
4
总的来说,看起来没有使用什么特殊技术,无非是把内存管理好,自动重复发请求。
有用的思想往往这样,靠表面观察并不容易发现,要么是聪明人的灵光一闪,要么是从无数次挫败和捶打之后的反省中滋生。
八戒同学的人生第一桶金是靠写一个下载软件赚到的,九零年代有个电脑的人应该都用过,所以为什么让我们“为用户自动重试”,这应该他早期的开发经验,这可以说是来自祖国软件业“先驱”的宝贵经验了。
“高端的食材往往只需要最简单的烹饪方式”,简单朴素,但却能交付稳定健壮的结果。