戲說系列 從術和道來看基於流量的架構設計(下)

2021-08-13 23:25:09 字數 2875 閱讀 8409

又過去好幾天了,上週公司事情太多,所以沒有時間來寫了,一件事情堅持真的很不容易的,今天繼續。。。

大家看看上邊的圖,在規劃流量階段,通過應用上邊的流控策略,包括資料局前置,基本可以解決大部分的問題,但是仍然有些問題是沒有解決的。因為每天每個時段的流量的特點不同,我們需要的是可以動態,甚至是智慧型的對流量進行調控,所以就需要有乙個智慧型的開關調控系統,根據流量的特點不斷的人工或者智慧型進行流量的調控,比如限流的值,執行緒池的值,開關的值,這樣就可以實時的智慧型的進行一些流控和降級的處理。。。。同時有些業務臨時資料我們是看不到的,比如在**的業務環境下,使用者可以抽的次數在快取裡邊,如果我們想要看某使用者當前的可抽次數的話,那麼一般可以找dba,但是這樣做太麻煩了,如果有乙個智慧型的業務資料監控系統,那就好辦多了。。這個階段我們需要最終的效果是流量可以動態調控,系統架構可以動態的收縮。系統架構動態收縮的意思是,比如到了大**公司機器不夠,這個時候可以把一部分服務機器減少,然後流量進行降級處理,空閒出來的機器就可以給其他的應用來用,以保證核心業務的正常執行。

再看看上邊的圖,在設計流量階段,更多的使用大資料與ai技術實現流量可分析可**,智慧型倒流,千人千面。這部分不是文章重點,暫時不討論。

下面我們先總結一下:

1. 流量治理的目標:快速成功,快速失敗。快速成功很好理解,請求來了,我們希望能夠盡早拿到資料,盡早成功,快速成功也是可以避免流量擠壓。快速失敗就需要我們考慮一下了,當流量來了後如何可以快速失敗呢,比如熔斷,執行緒池隔離,降級,設定合理的超時時間,等技術就是為了應對快速失敗。需要注意的是設定合理的超時時間,這一塊是需要權衡的,設定的太小失敗率高,設定的太大容易請求擠壓和超時。

2. 流量管理的目標:可動態調控,智慧型開關

3. 通道資料的管理目標:可檢視全通道資料

4. 終極目標: 智慧型體驗,千人千面,可分析可**

接下來看看術的部分,術的部分主要是流控,資料前置。流控上一章節介紹過了,資料前置主要是一種思路,能前置的資料就前置,前置的目的就是想讓使用者盡快盡早的拿到資料,而不是要到mysql才能拿到,比如能在終端拿到的就在終端拿到,能再接入層拿到的就到接入層,能在應用層拿到的就在應用層,能在本地快取拿到的就在本地快取,能在分布式快取拿到的就在分布式快取拿到。

然後我們看看道的部分,首先看看系統拆分,從流量的角度來看的話服務化,微服務也是流量驅動的,那麼如何拆分系統,拆分後系統之間的關係管理,系統的高可用和系統層面的降級都是我們需要考慮的。一般會根據業務進行拆分,比如分成使用者中心,活動,支付,賬務等。拆分的時候考慮好系統的邊界。

上圖是通道優化的內容,通道優化我們要考慮整個通道可能的瓶頸點。從終端往後,比如頻寬是否有瓶頸,網絡卡是否有瓶頸,路由器,交換機(一般硬體架構的瓶頸在系統運維層面已經考慮到了),作業系統是否有瓶頸(比如作業系統的版本是否支援nio,作業系統的控制代碼數,最大執行緒數,limit.d等),需要關注和了解作業系統的核心態,使用者態,零拷貝,執行緒管理,ng是否有瓶頸,比如ng的程序數,ng的連線數,超時配置等。tomcat的io模式,連線數,最大執行緒數等。jvm的堆記憶體,棧記憶體,gc等。本地快取是使用堆內還是堆外快取,還是本地redis,如果是堆外快取需要考慮序列號的問題,如果是本地redis需要考慮連線數,超時等。mq需要考慮發端的模式,消費端的模式,消費端的數量,一次獲取記錄的條數等。程式優化主要考慮使用資料型別的合理性,演算法的時間複雜度等。mysql主要考慮是否可用使用mysql自己的快取,能否走索引掃瞄,能否走覆蓋索引掃瞄,資料庫鎖的問題。

上圖是配置管理需要考慮的內容,比如開關的值,限流的值,執行緒池的值,超時的值,熔斷的值,降級的值。這些那些是可以動態管理的,那些是短期內無法實現的,那些是需要特別注意的。

上圖是團隊建設的內容,有人說應對流量為什麼還要考慮團隊建設呢?線上出問題的時候能否快速的反映,快速的解決,這對乙個團隊也是一種挑戰,如果我們的團隊是積極的,有責任心的,快速反應快速學習的隊伍,那麼就不怕,即使有問題也可以快速的解決,但如果線上有問題了,找不到人,或者上線後沒有人驗證。。。。。人的問題始終是乙個核心的問題。

然後說說資料鏈監控的問題,比如**的時候,使用者當天可以抽的次數,使用者總共可以抽的次數,如果我們想看某個人的次數的話可能需要趙dba,但是這樣就太麻煩了,如果公司有自己的業務資料鏈監控系統的話,那麼就好辦了,這個對應付線上的問題,及時找出問題有很大的幫助。

上邊說了這麼多,什麼術啊,道啊的,其實就是想說,當我們接到乙個系統的時候,我們應該清楚有多少流量是前端可以擋住的,有多少靜態流量走了***,有多少靜態流量走了ng的快取,有多少靜態流量走了分布式的檔案系統。又有多少的動態流量走了接入層,有多少動態流量走了應用層,應用層又分別到了哪些服務,百分比是多少,多少流量走了快取(終端的,接入層的,應用層的,分布式的),最後有多少走到了資料庫。同時自己也要清楚這個鏈路上哪些地方有瓶頸,哪些資料是可以前置的,哪些流量可以做流控,自己心裡有了乙個大概的思路和想法,那麼在應對這樣的系統心裡就有底了。

戲說系列 啟動了

之前好幾年前的部落格賬號和密碼都找不到了,今天就新開了乙個。今天大致說下新開部落格的目的,公司這邊每隔一段時間都會有安排分享,正好輪到我了,我也有自己的一些思考,想把之前的一些經驗和技術沉澱一下,同時把自己認為對的或 者不對的分享給大家,不管對大家有沒有幫助,希望會對大家有一些幫助。為什麼叫 戲說 ...

遞迴和迭代術

1 遞迴和迭代術語的定義是什麼?乙個函式可以同時採用這兩種方法嗎?答 遞迴的定義 將乙個大問題分解成比較小的 有著相同形式的問題。迭代跟遞迴策略是相反的。它使用迴圈 一般情況下,使用 for和 while 語句 的實現被稱為迭代的。他們能夠通過截然不同的方式來解決乙個問題。然而,這些策略並不互相排斥...

Maemo Linux手機平台系列分析 2 術語

在maemo中使用和定義的術語 這裡有關於 alsa 的詳細介紹 http gentoo.linuxsir.org doc cn alsa guide.xml 附錄 qa q 為什麼去分析maemo平台呢?a 分析乙個平台是為了掌握它,吸收有用的東西為我所用。q 為什麼選擇maemo平台呢?a j ...