狠狠操夜夜甜|人妻在线中文字幕亚洲无码不卡av|一区二区欧美亚洲|日躁夜躁狠狠躁2001|亚洲,超碰,欧美|18AV成人电影|午夜成人免费在线|婷婷激情网深爱五月|色欲综合成人在线|在线美女搞黄大片

中企動力 > 頭條 > 系統(tǒng)互聯(lián)網設計

網站性能檢測評分

注:本網站頁面html檢測工具掃描網站中存在的基本問題,僅供參考。

系統(tǒng)互聯(lián)網設計

互聯(lián)網架構設計:高性能的后端 互聯(lián)網視頻課程

img

施沅

關注

上一期《互聯(lián)網架構設計:高性能的前端》講述了設計互聯(lián)網高性能前端架構的基本方法,本篇文章將闡述一下如何設計高性能的后端服務。

先簡略回顧一下。對于互聯(lián)網產品的高性能架構設計通常包括以下幾個大方面:

1)Web瀏覽器高性能設計

2)App客戶端高性能設計

3)高性能的網絡和硬件

4)后臺服務高性能設計

后端服務一般指用戶直接看到的遠程服務,涉及到網絡硬件、邏輯計算、通信協(xié)議和數據存儲等部分。下面我們將著重介紹高性能后臺服務的設計方法和策略。

1、高性能的網絡和硬件

網絡硬件是提供實現(xiàn)高性能服務的先決條件,如果網絡硬件失敗,再優(yōu)秀的團隊也是“巧婦難為無米之炊”?;ヂ?lián)網產品在網絡硬件方面經常需要使用的高性能方案有如下幾種:

1)CDN加速技術。CDN加速將網站的內容緩存在網絡邊緣(離用戶接入網絡最近的地方),然后在用戶訪問網站內容的時候,通過調度系統(tǒng)將用戶的請求路由或者引導到離用戶接入網絡最近或者訪問效果最佳的緩存服務器上,由該緩存服務器為用戶提供內容服務;相對于直接訪問源站,這種方式縮短了用戶和內容之間的網絡距離,從而達到加速的效果。

2)足夠的帶寬。帶寬應該滿足在網站峰值的情況還能足夠快速的使用,所以網絡帶寬應該大于峰值流量 = 峰值QPS * 平均請求大小。只有在保證帶寬的情況才能實現(xiàn)高性能服務。

3)服務器性能。服務器性能主要從CPU、內存和磁盤三個方面來考慮,CPU核心數量能盡量多點,內存大小最好大一點,利用到磁盤存儲的話SSD會優(yōu)于機械磁盤。

4)硬件負載均衡設備。對于有條件的團隊可以采購硬件負載均衡設備,加強后臺服務負載均衡的能力,比如F5。

2、后臺服務高性能設計

后臺服務的高性能設計是互聯(lián)網產品高性能架構設計中最重要的一環(huán),對服務整體性能起到決定性的作用。我們來看看設計高性能后臺服務的方法:

1)分布式緩存。緩存的本質是通過key-value形式的Hash表提升讀寫速度,一般情況是O(1)的讀寫速度。讀寫量比較高,變化量不大的數據比較適合使用緩存。業(yè)內比較成熟的分布式緩存系統(tǒng)有redis/memcache。

一般的緩存設計架構如下:用戶第一次請求應用程序時,通過存儲服務直接讀取數據,然后將數據存儲到緩存系統(tǒng)去,用戶第二次請求的時候就直接從緩存系統(tǒng)讀取,從而提升讀取速度。

對于分布式緩存系統(tǒng)可以Set化部署,比如商品數據緩存到Set1,用戶數據緩存到Set2,或者一類用戶的數據緩存到Set1,另一類的用戶緩存到Set2,如下圖:

此外,也可以按集群化部署,每一個緩存服務存儲的數據都是對等的,可以對外提供同等的服務,所以外部請求需要負載均衡到不同有緩存服務器,如下圖:

Set化部署的目的主要在于將不同類型的數據路由到不同的地方,好處就是可以減少不同業(yè)務數據的耦合,可以針對不同業(yè)務進行不同的優(yōu)化,從而提升整體性能。集群式部署的目的在于,提高緩存系統(tǒng)的對外服務能力,上層業(yè)務的路由策略簡單靈活,擴縮容比較容易。

2)服務分層

在經典的三層(接入層、邏輯層和存儲層)后臺服務架構中,三層的劃分的原則就是同層次的系統(tǒng)專注處理自己的事情。接入層專注于處理前端和后臺服務的接入連通、安全認證和數據轉發(fā)。邏輯層專注于處理不同業(yè)務的無狀態(tài)邏輯服務。存儲層專注于處理業(yè)務數據的存儲。這樣分層的好處在于各個層次能夠依據業(yè)務特點專注于自己的事情,提高系統(tǒng)復用性,降低業(yè)務間的耦合性。在中小型網站中三層架構的典型實現(xiàn)是Nginx(接入層)、Apache Web(邏輯層)、Mysql/Redis(存儲層)。

3)操作異步化

目前大型系統(tǒng)中普遍消息隊列來將調用異步化,不僅可以提升系統(tǒng)性能還可以提升系統(tǒng)的擴展性。對于大量的數據庫寫請求,對于數據庫的壓力很大,同時也會造成數據庫響應不及時??梢钥紤]使用消息隊列,數據庫的寫請求可以直接寫入到消息隊列,然后通過多線程或多進程從消息隊列中讀取數據慢慢寫入到數據庫。消息隊列服務器的處理速度會遠遠快于數據庫,所以用戶在寫入操作時會感覺到很快的寫入速度。

此外,消息隊列對于請求不均衡的系統(tǒng),還具有削峰填谷的作用,將短時間內的高峰請求,逐步平攤到更長的時間里去,從而避免短時間內大量請求壓跨系統(tǒng)。

4)服務拆分

服務拆分有多種說法,比如大系統(tǒng)小做,分布式拆分,分層結構以及目前很流行的微服務化。不過服務拆分一般來說有以下原則:

a)高內聚、低耦合: 將耦合性低的業(yè)務邏輯劃分為不同系統(tǒng),將聚合性高的業(yè)務邏輯劃分為同一個系統(tǒng)。

b)單一職責原則:對于一個層次或者一個模塊應該保持相對單一的職責,專注于自己的服務。

c)故障隔離:不同系統(tǒng)必須相對獨立設計和運行,能夠獨立處理自己的故障,而不至于影響全局。

d)獨立運維和持續(xù)交互:對于不同的系統(tǒng)可以隨時迭代更新,而不至于影響其他服務。

對于服務拆分主要有縱向拆分和水平拆分兩種方法。三層架構就是典型的縱向拆分模式,第2)點有所闡述。對于不同的業(yè)務模塊,針對業(yè)務邏輯和存儲服務可以按水平拆分的方法將拆分為不同的系統(tǒng)。比如商品系統(tǒng)邏輯層、訂單系統(tǒng)邏輯層、商品系統(tǒng)存儲層、訂單系統(tǒng)存儲層。

5)分布式集群化

分布式集群化是指將不同的業(yè)務用集群化的方式部署到不同的機器上去,對于每一個業(yè)務都具備大規(guī)模集群化的能力,從而提升系統(tǒng)的擴展性和高性能。

對于無狀態(tài)化的被調服務A,在基于負載均衡的技術下,可以通過集群化部署成倍的提升服務性能,比如A1服務的性能是1萬請求每秒,那么部署3臺A服務機器,那么A服務的性能就是3萬請求每秒了。

6)代碼優(yōu)化

對于IO操作的請求可以采用基于狀態(tài)機的異步化編程。如下圖的請求需要業(yè)務系統(tǒng)調用三個接口才能返回響應數據,當業(yè)務系統(tǒng)收到請求時,將給該請求分配一個seqid,該seqid在接口響應中也應該原封返回,然后并發(fā)三個IO接口的請求包,將該seqid對應的請求上下文保存到timer中,然后去并發(fā)處理其他請求,從而極大的提升系統(tǒng)性能。

此外,高性能的編程模型還有多線程模型、多進程模型、多協(xié)程模型和事件驅動模型。

對于數據結構的設計可以采用高效的數據結構,比如典型的key-value緩存系統(tǒng)就是基于hash的基本原理來實現(xiàn)的,hash表的查詢效率是O(1),效率極快。

轉自原文:https://zhuanlan.zhihu/p/28817489

img

在線咨詢

建站在線咨詢

img

微信咨詢

掃一掃添加
動力姐姐微信

img
img

TOP