這一章我或許沒有辦法寫出一些實例代碼,由於經驗有限。我會結合以往運維的一些系統舉出部分例子共讀者參考,詳情力薦閱讀原文。linux
異常時什麼,何時發生,提供哪些好處?咱們須要明確如下信息:git
異常一般被咱們分爲兩類:github
正如上一章錯誤處理中所說咱們須要將錯誤視爲一等公民存在,我的認爲 Golang 錯誤處理機制的特立獨行,讓我從新審視系統中可能存在的錯誤。數據庫
超時:對於建立一個已於理解的系統是相當重要的,例如:TCP 連接中,咱們能夠利用超時避免連接佔用太久;etcd 中利用超時,規避全局時鐘一致性問題緩存
咱們爲何但願併發程序支持超時呢?這裏有幾個緣由:安全
併發進程可能被取消的緣由有不少:服務器
在分佈式系統中很是常見的,心跳是併發進程向外界發出信號的一種方式。書中討論了兩種心跳:網絡
當一個請求到達咱們的服務,咱們可使用 Nginx ,HAproxy 等分發到多個節點上,但這會消耗過多的計算資源,空間資源(服務器機櫃),維護成本。若是咱們都在進程內,或進程間通訊,咱們僅僅多消耗了一部份內存資源。最爲典型的案例就是利用 Golang 重寫了負載層的中間件,例如:併發
筆者最近剛剛到一家網絡安全公司就任運維工程師,瞭解到不少關於網絡攻擊的信息,最爲明顯的就是 DDoS,CC攻擊。DDoS 的攻擊多是利用 udp服務反射, 或殘缺報文形成流量洪峯,可能比較已於識別。可是 CC 攻擊,就是正常的訪問,大量的正常訪問,致使網站不可用。對於這樣的場景咱們不僅僅須要在負載層添加速率限制,在後臺內部調用層也須要添加。運維
特別是在容器化的環境中,彈性擴縮雖然美好。可是有一句至理名言,同樣東西有多光鮮,背後就有多陰暗。我曾經經歷過,服務瘋狂擴容致使運行在小機上的 Oracle 數據庫不堪重負的場景。在訪問 Oracke 也須要速率限制。
做者最後又再次強調了,治癒異常的 goroutine ,看來併發安全一直是一個很是值得關注的問題。
本次連載到此就要畫上句號了。至於原書的最後一章 goroutine 和 Go 語言進行時,我相信中文集裏面沒有人比劉丹冰講的更加透徹,但願各位給與做者三連支持。附上 B 站連接 GPM 模型
2021 讓咱們共同啓航,在十四五開局之年,金牛聚福,身體健康,驅疫避害。