先簡略回顧一下。對於互聯網產品的高性能架構設計一般包括如下幾個大方面:前端
後端服務通常指用戶直接看到的遠程服務,涉及到網絡硬件、邏輯計算、通訊協議和數據存儲等部分。下面咱們將着重介紹高性能後臺服務的設計方法和策略。redis
後臺服務的高性能設計是互聯網產品高性能架構設計中最重要的一環,對服務總體性能起到決定性的做用。咱們來看看設計高性能後臺服務的方法:sql
1分佈式緩存。數據庫
緩存的本質是經過key-value形式的Hash表提高讀寫速度,通常狀況是O(1)的讀寫速度。讀寫量比較高,變化量不大的數據比較適合使用緩存。業內比較成熟的分佈式緩存系統有redis/memcache。在此我向你們推薦一個架構學習交流圈。交流學習企鵝圈號:948368769 裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構等這些成爲架構師必備的知識體系。還能領取免費的學習資源,目前受益良多編程
通常的緩存設計架構以下:用戶第一次請求應用程序時,經過存儲服務直接讀取數據,而後將數據存儲到緩存系統去,用戶第二次請求的時候就直接從緩存系統讀取,從而提高讀取速度。後端
對於分佈式緩存系統能夠Set化部署,好比商品數據緩存到Set1,用戶數據緩存到Set2,或者一類用戶的數據緩存到Set1,另外一類的用戶緩存到Set2,以下圖:瀏覽器
此外,也能夠按集羣化部署,每個緩存服務存儲的數據都是對等的,能夠對外提供同等的服務,因此外部請求須要負載均衡到不一樣有緩存服務器,以下圖:緩存
Set化部署的目的主要在於將不一樣類型的數據路由到不一樣的地方,好處就是能夠減小不一樣業務數據的耦合,能夠針對不一樣業務進行不一樣的優化,從而提高總體性能。集羣式部署的目的在於,提升緩存系統的對外服務能力,上層業務的路由策略簡單靈活,擴縮容比較容易。安全
2.服務分層性能優化
在經典的三層(接入層、邏輯層和存儲層)後臺服務架構中,三層的劃分的原則就是同層次的系統專一處理本身的事情。接入層專一於處理前端和後臺服務的接入連通、安全認證和數據轉發。邏輯層專一於處理不一樣業務的無狀態邏輯服務。存儲層專一於處理業務數據的存儲。這樣分層的好處在於各個層次可以依據業務特色專一於本身的事情,提升系統複用性,下降業務間的耦合性。在中小型網站中三層架構的典型實現是Nginx(接入層)、Apache Web(邏輯層)、Mysql/Redis(存儲層)。
3.操做異步化
目前大型系統中廣泛消息隊列來將調用異步化,不只能夠提高系統性能還能夠提高系統的擴展性。對於大量的數據庫寫請求,對於數據庫的壓力很大,同時也會形成數據庫響應不及時。能夠考慮使用消息隊列,數據庫的寫請求能夠直接寫入到消息隊列,而後經過多線程或多進程從消息隊列中讀取數據慢慢寫入到數據庫。消息隊列服務器的處理速度會遠遠快於數據庫,因此用戶在寫入操做時會感受到很快的寫入速度。
此外,消息隊列對於請求不均衡的系統,還具備削峯填谷的做用,將短期內的高峯請求,逐步平攤到更長的時間裏去,從而避免短期內大量請求壓跨系統。
4.服務拆分
服務拆分有多種說法,好比大系統小作,分佈式拆分,分層結構以及目前很流行的微服務化。不過服務拆分通常來講有如下原則:
對於服務拆分主要有縱向拆分和水平拆分兩種方法。三層架構就是典型的縱向拆分模式,第2)點有所闡述。對於不一樣的業務模塊,針對業務邏輯和存儲服務能夠按水平拆分的方法將拆分爲不一樣的系統。好比商品系統邏輯層、訂單系統邏輯層、商品系統存儲層、訂單系統存儲層。在此我向你們推薦一個架構學習交流圈。交流學習企鵝圈號:948368769 裏面會分享一些資深架構師錄製的視頻錄像:有Spring,MyBatis,Netty源碼分析,高併發、高性能、分佈式、微服務架構的原理,JVM性能優化、分佈式架構等這些成爲架構師必備的知識體系。還能領取免費的學習資源,目前受益良多
5分佈式集羣化
分佈式集羣化是指將不一樣的業務用集羣化的方式部署到不一樣的機器上去,對於每個業務都具有大規模集羣化的能力,從而提高系統的擴展性和高性能。
對於無狀態化的被調服務A,在基於負載均衡的技術下,能夠經過集羣化部署成倍的提高服務性能,好比A1服務的性能是1萬請求每秒,那麼部署3臺A服務機器,那麼A服務的性能就是3萬請求每秒了。
6.代碼優化
對於IO操做的請求能夠採用基於狀態機的異步化編程。以下圖的請求須要業務系統調用三個接口才能返回響應數據,當業務系統收到請求時,將給該請求分配一個seqid,該seqid在接口響應中也應該原封返回,而後併發三個IO接口的請求包,將該seqid對應的請求上下文保存到timer中,而後去併發處理其餘請求,從而極大的提高系統性能。
此外,高性能的編程模型還有多線程模型、多進程模型、多協程模型和事件驅動模型。
對於數據結構的設計能夠採用高效的數據結構,好比典型的key-value緩存系統就是基於hash的基本原理來實現的,hash表的查詢效率是O(1),效率極快。