互聯網開發高可用高性能那點事


       高可用、高性能是互聯網應用與傳統應用開發之間差異較大部分,要保證程序高可用、高性能

需要架構設計、實現、算法等每個點都是合理的簡潔可靠的。因為一個點性能差、一個點不穩定會

導致整個系統性能不穩定。

      高可用互聯網程序高可用,即線上服務要保證99.9%以及99.99%可用率。要保證程序高可用需要

首先要保證服務存在,服務存在是前提,就需要服務是集群或者分布式的,通過數量備份來保證服務

高可用。

       集群分布式兩種事物本身不是一個概念,但很多人會搞混,集群:一般情況下是多個節點提供相同

服務,通過多個節點避免服務只有單個節點,單個節點不可用時線上服務不可用。web服務一般通過nginx

反向代理技術,將請求通過ip hash、url hash、隨機、輪訓、加權輪訓等負載均衡算法轉發給后端tomcat

實現高可用。

       分布式系統:分布式是多個節點協調提供一次計算服務,比如ElasticSearch,用戶發出一次請求,多個

節點分別進行查詢,最終由主節點進行合並排序,排序后將打分結果按分高分低進行返回。

       線上微服務高性能一是外部存儲采用高性能存儲,當前互聯網公司一般采用redis進行數據存儲,redis作為

分布式緩存,核心原理是采用hash或樹形結構存儲數據已達到存儲高性能讀取數據。

       使用redis要注意,redis單個節點不穩定,原因有可能是網絡,也有可能是有熱點key導致,熱點key一般

是應用程序對於通用數據未采用定時獲取方式。redis單個節點會導致集群不穩定、集群不穩定會導致所有線

上依賴服務均不穩定。在談電商雙11大促活動備戰,雙11大促備戰時曾遇到這兩個問題。

       線上服務要在合適場景使用合適數據結構,該使用HashSet時就不能使用ArrayList對於各種各樣數據結構

操作時間復雜度要詳細掌握。HashMap put、get操縱時間復雜度時O(n),當hash沖突解決采用鏈表解決的時候。

對於字符串匹配要采用KMP算法,對於搜索中字典統計要采用Trie樹結構。

       IO使用要合理,對於線上服務,不能任何調試信息都打印,線上服務日志一定是Error級別,需要打印時在

打印,因為日志過頻打印一是淹沒線上問題,再有就是會導致性能差,大日志寫磁盤慢時一條會消耗10-20ms

時間。多個幾條日志打印線上服務基本就慢的不行了。

       已經采用了合理算法數據結構,合理邏輯情況下,提升性能就需要增加緩存合理使用緩存,比如搜索引擎

設計實現就是,當詞搜索后進行緩存,下次在自己搜索或其他人搜索時候直接從緩存中取出緩存從而達到高性

能,並且還可以節省計算資源。

        換存也做了就需要多線程、線程池對計算進行拆分,多線程在不夠就需要分布式多個節點、多個線程去執

行計算,個性化推薦系統(八)--- 機器學習深度學習召回集擴量這篇文章就介紹線上模型計算服務,提升性能

方式方法。

        高可用、高性能需要每個點,存儲、IO、數據結構、算法邏輯,一個點的問題,比如一個redis分片節點不

穩定,最終導致所有依賴這個節點所在集群的全部業務都不穩定。這就要求我們要不斷學習,不斷提升才能保

證線上服務高可用、高性能,就像軟件工程一樣沒有銀彈、沒有萬能葯。

  微信搜索:debugme123

        掃描二維碼關注:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM