这几期和大家分享了我自己在开发时的一些经验,这次想说说如何写出更好的代码。
目标
我们写代码,都是为了完成某个功能,为某个系统服务。我个人在这方面的目标是:要做出10年都能稳定运行的系统。
如何做
如果想做到这一点,我觉得最重要的是要做到从整体去看待问题,具体来说:
- 系统运行都需要哪些环境,如服务器、数据库、机房、网络等。
- 系统在运行时,会遇到哪些问题。
- 如何更好地设计系统,层次清晰。
- 代码清晰易懂。
系统运行时会遇到的问题
我经常听到某些编程同学说:这是个运维方面的问题,不需要我们做。但我认为恰恰相反,通常就是这些所谓的运维方面的问题,会决定你的系统是否能够稳定运行10年。
正是前几天,我和一个公司高级别的技术同学沟通,他的一个观点我特别的认同:真正评价一个系统好坏的标准,性能高低不是最重要的,可运维性才是。
这里先来说说我觉得需要掌握的运维知识:
运营商和机房
国内的运营商,最重要的就是电信和联通,这些年移动有所增加,但也还比不上前面两个。
按照我之前的经验,一个用户服务,6 - 7成的用户走电信线路,3成联通线路,其余各种小运营商线路。
那么你的服务如果想要用户体验好,至少需要部署在电信和联通两个线路的机房。
有人说,我们有多线机房。也可以啊,但是为了你的服务可靠性考虑,你也需要至少两个吧,否则一个挂了服务就全挂了。
那么再说两个机房的选择,我认为在同城选择两个是最好的,当然这个城市也要可靠,比如北京、上海这种大城市就会可靠很多。
为什么呢?
是因为通常我们都会有存储的需求,就拿mysql举例:你为了保证性能和数据的一致性,通常会在访问量较高的电信机房配置主库,联通机房配置从库。而同城间的网络传输更加可靠,你的服务也会更加可靠。
所以,运营商和部署机房的选择,十分的重要。
机房间的异地多活问题
上面提到的mysql的那个例子,试想一下,如果电信机房挂了,我们把服务切到联通,但是联通的mysql是从库只读,那么服务有问题啊。
所以在你的系统设计中,异地多活这个问题我觉得是一定要考虑进去的。你的解决方案并不能仅仅只是可用,而是要好用才行。
服务器选型
我之前有过这样一个经历:服务扩容,我在新机器上部署后,发现性能不如老机器。
经过多方排查,最终定位发现新机器和老机器不是同一厂商生产的,最终推送公司测试发现新机器厂商的这批机器存在质量问题,所以后来有段时间我们申请机器时,会特意提出要求不使用这个厂商的机器。
新的服务平台的选型
最早我们的服务直接部署在物理机上,后来公司大推虚拟化,到现在也尝试部署在容器服务中。
我想说的是,你把服务部署在哪里,你还是要了解那个平台的相关知识的。就比如容器吧,我觉得并不是只会使用就行了,还要尽可能多的了解它的相关知识,明白可能存在的问题,这样才能有助于你做出更好地决策。
服务监控
我们的系统上线正式运行后,可能会出现各种各样的问题,如磁盘写满了;进程突然挂掉;内存缓慢泄漏;mysql等存储出现问题等。
这些问题出现并不可怕,你也无法做到全部避免,所以我们需要做好的,是服务的监控报警,有问题第一时间发现,快速解决。
记得我的一个leader告诉我,代码上线出现bug不可怕,但如果没有第一时间收到报警发现问题,才是最可怕的。这一点至关重要!
不断精进
除了上面说的,自己的不断精进也是十分重要的。
这需要自己不停学习新知识,不断反思做过的事情。我有时觉得,自己之所以选择编程这条道路,就是能很享受自身不断精进的所带来的满足感。
最后,我再分享下自己这些年在编码方面不断改善中一直在做的几点:
- 看好书
- 对做过的项目要总结、反思
- 自己觉得不好的地方坚决重构,没有时间只是借口
最后,再用一句话总结下:我要让我做出的系统能够稳定运行10年。
网友评论