如何寫出更好的程式碼(文末有福利)
女主宣言
我們在過去的幾期推送裡已經給大家介紹了筆者根據多年研發經驗總結出來的編碼規範和 git 等實用工具的運用場景,今天咱們就來繼續聊聊專案開發過程的諸多方法論。本文最先發佈於 7rule,轉載已獲取作者授權。
PS:豐富的一線技術、多元化的表現形式,盡在“HULK一線技術雜談”,點關注哦!
The "Rope Mother" Margaret Hamilton
by NASA IOTD
這幾期和大家分享了我自己在開發時的一些經驗,這次想說說如何寫出更好的程式碼。
1
目標
我們寫程式碼,都是為了完成某個功能,為某個系統服務。我個人在這方面的目標是:要做出10年都能穩定執行的系統。
2
如何做
如果想做到這一點,我覺得最重要的是要做到從整體去看待問題,具體來說:
系統執行都需要哪些環境,如伺服器、資料庫、機房、網路等。
系統在執行時,會遇到哪些問題。
如何更好地設計系統,層次清晰。
程式碼清晰易懂。
3
系統執行時會遇到的問題
我經常聽到某些程式設計同學說:這是個運維方面的問題,不需要我們做。但我認為恰恰相反,通常就是這些所謂的運維方面的問題,會決定你的系統是否能夠穩定執行10年。
正是前幾天,我和一個公司高級別的技術同學溝通,他的一個觀點我特別的認同:真正評價一個系統好壞的標準,效能高低不是最重要的,可運維性才是。
這裡先來說說我覺得需要掌握的運維知識:
運營商和機房
國內的運營商,最重要的就是電信和聯通,這些年移動有所增加,但也還比不上前面兩個。
按照我之前的經驗,一個使用者服務,6 - 7成的使用者走電信線路,3成聯通線路,其餘各種小運營商線路。
那麼你的服務如果想要使用者體驗好,至少需要部署在電信和聯通兩個線路的機房。
有人說,我們有多線機房。也可以啊,但是為了你的服務可靠性考慮,你也需要至少兩個吧,否則一個掛了服務就全掛了。
那麼再說兩個機房的選擇,我認為在同城選擇兩個是最好的,當然這個城市也要可靠,比如北京、上海這種大城市就會可靠很多。
為什麼呢?
是因為通常我們都會有儲存的需求,就拿mysql舉例:你為了保證效能和資料的一致性,通常會在訪問量較高的電信機房配置主庫,聯通機房配置從庫。而同城間的網路傳輸更加可靠,你的服務也會更加可靠。
所以,運營商和部署機房的選擇,十分的重要。
機房間的異地多活問題
上面提到的mysql的那個例子,試想一下,如果電信機房掛了,我們把服務切到聯通,但是聯通的mysql是從庫只讀,那麼服務有問題啊。
所以在你的系統設計中,異地多活這個問題我覺得是一定要考慮進去的。你的解決方案並不能僅僅只是可用,而是要好用才行。
伺服器選型
我之前有過這樣一個經歷:服務擴容,我在新機器上部署後,發現效能不如老機器。
經過多方排查,最終定位發現新機器和老機器不是同一廠商生產的,最終推送公司測試發現新機器廠商的這批機器存在質量問題,所以後來有段時間我們申請機器時,會特意提出要求不使用這個廠商的機器。
新的服務平臺的選型
最早我們的服務直接部署在物理機上,後來公司大推虛擬化,到現在也嘗試部署在容器服務中。
我想說的是,你把服務部署在哪裡,你還是要了解那個平臺的相關知識的。就比如容器吧,我覺得並不是只會使用就行了,還要儘可能多的瞭解它的相關知識,明白可能存在的問題,這樣才能有助於你做出更好地決策。
服務監控
我們的系統上線正式執行後,可能會出現各種各樣的問題,如磁碟寫滿了;程序突然掛掉;記憶體緩慢洩漏;mysql等儲存出現問題等。
這些問題出現並不可怕,你也無法做到全部避免,所以我們需要做好的,是服務的監控報警,有問題第一時間發現,快速解決。
記得我的一個leader告訴我,程式碼上線出現bug不可怕,但如果沒有第一時間收到報警發現問題,才是最可怕的。這一點至關重要!
4
不斷精進
除了上面說的,自己的不斷精進也是十分重要的。
這需要自己不停學習新知識,不斷反思做過的事情。我有時覺得,自己之所以選擇程式設計這條道路,就是能很享受自身不斷精進的所帶來的滿足感。
5
結束語
最後,我再分享下自己這些年在編碼方面不斷改善中一直在做的幾點:
看好書;
對做過的專案要總結、反思;
自己覺得不好的地方堅決重構,沒有時間只是藉口。
用一句話總結下:我要讓我做出的系統能夠穩定執行10年!
福
利
來
了
參與互動,即可有機會領取運維寶典——《OpsDev年度精選》一本。
參與方式
01、轉發本文章到朋友圈並附上走心評論,留存24小時後截圖傳送至後臺,我們將抽取前5名贈送以下好書一本。
02、在本文評論區留下您的真知灼見,我們將挑選評論點贊數最高的一位贈送以下好書一本。
OpsDev 年度精選
這本《2017 OpsDev年度精選》是360 OpsDev團隊把自己近一年的經驗、教訓、感想拿出來與同行們分享,如同開源對產業界的貢獻,經驗分享也會有利於整個行業運維水平的提升,在IT與網際網路已經變成基礎設施的今天,尤其重要。
——譚曉生
360技術總裁 首席安全官
HULK一線技術雜談
由360雲平臺團隊打造的技術分享公眾號,內容涉及雲端計算、資料庫、大資料、監控、泛前端、自動化測試等眾多技術領域,通過夯實的技術積累和豐富的一線實戰經驗,為你帶來最有料的技術分享