6

开发经验漫谈 -- 如何写出更好的代码

 3 years ago
source link: http://blog.7rule.com/2018/07/06/dev-exp-best-coding.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

开发经验漫谈 -- 如何写出更好的代码

Jul 6, 2018

这几期和大家分享了我自己在开发时的一些经验,这次想说说如何写出更好的代码。

我们写代码,都是为了完成某个功能,为某个系统服务。我个人在这方面的目标是:要做出10年都能稳定运行的系统。

如果想做到这一点,我觉得最重要的是要做到从整体去看待问题,具体来说:

  1. 系统运行都需要哪些环境,如服务器、数据库、机房、网络等。
  2. 系统在运行时,会遇到哪些问题。
  3. 如何更好地设计系统,层次清晰。
  4. 代码清晰易懂。

系统运行时会遇到的问题

我经常听到某些编程同学说:这是个运维方面的问题,不需要我们做。但我认为恰恰相反,通常就是这些所谓的运维方面的问题,会决定你的系统是否能够稳定运行10年。

正是前几天,我和一个公司高级别的技术同学沟通,他的一个观点我特别的认同:真正评价一个系统好坏的标准,性能高低不是最重要的,可运维性才是。

这里先来说说我觉得需要掌握的运维知识:

运营商和机房

国内的运营商,最重要的就是电信和联通,这些年移动有所增加,但也还比不上前面两个。

按照我之前的经验,一个用户服务,6 - 7成的用户走电信线路,3成联通线路,其余各种小运营商线路。

那么你的服务如果想要用户体验好,至少需要部署在电信和联通两个线路的机房。

有人说,我们有多线机房。也可以啊,但是为了你的服务可靠性考虑,你也需要至少两个吧,否则一个挂了服务就全挂了。

那么再说两个机房的选择,我认为在同城选择两个是最好的,当然这个城市也要可靠,比如北京、上海这种大城市就会可靠很多。

为什么呢?

是因为通常我们都会有存储的需求,就拿mysql举例:你为了保证性能和数据的一致性,通常会在访问量较高的电信机房配置主库,联通机房配置从库。而同城间的网络传输更加可靠,你的服务也会更加可靠。

所以,运营商和部署机房的选择,十分的重要。

机房间的异地多活问题

上面提到的mysql的那个例子,试想一下,如果电信机房挂了,我们把服务切到联通,但是联通的mysql是从库只读,那么服务有问题啊。

所以在你的系统设计中,异地多活这个问题我觉得是一定要考虑进去的。你的解决方案并不能仅仅只是可用,而是要好用才行。

服务器选型

我之前有过这样一个经历:服务扩容,我在新机器上部署后,发现性能不如老机器。

经过多方排查,最终定位发现新机器和老机器不是同一厂商生产的,最终推送公司测试发现新机器厂商的这批机器存在质量问题,所以后来有段时间我们申请机器时,会特意提出要求不使用这个厂商的机器。

新的服务平台的选型

最早我们的服务直接部署在物理机上,后来公司大推虚拟化,到现在也尝试部署在容器服务中。

我想说的是,你把服务部署在哪里,你还是要了解那个平台的相关知识的。就比如容器吧,我觉得并不是只会使用就行了,还要尽可能多的了解它的相关知识,明白可能存在的问题,这样才能有助于你做出更好地决策。

我们的系统上线正式运行后,可能会出现各种各样的问题,如磁盘写满了;进程突然挂掉;内存缓慢泄漏;mysql等存储出现问题等。

这些问题出现并不可怕,你也无法做到全部避免,所以我们需要做好的,是服务的监控报警,有问题第一时间发现,快速解决。

记得我的一个leader告诉我,代码上线出现bug不可怕,但如果没有第一时间收到报警发现问题,才是最可怕的。这一点至关重要!

除了上面说的,自己的不断精进也是十分重要的。

这需要自己不停学习新知识,不断反思做过的事情。我有时觉得,自己之所以选择编程这条道路,就是能很享受自身不断精进的所带来的满足感。

最后,我再分享下自己这些年在编码方面不断改善中一直在做的几点:

  1. 对做过的项目要总结、反思
  2. 自己觉得不好的地方坚决重构,没有时间只是借口

最后,再用一句话总结下:我要让我做出的系统能够稳定运行10年。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK