App下載

史上最全的后端技術(shù)

猿友 2021-03-19 18:16:50 瀏覽數(shù) (3025)
反饋

后臺開發(fā)作為互聯(lián)網(wǎng)技術(shù)的掌上明珠,一直都是程序員們追逐的高峰,本文為大家介紹后端技術(shù)大全。

原文:http://t.cn/AiQWteI2

系統(tǒng)開發(fā)

1. 高內(nèi)聚/低耦合 

高內(nèi)聚指一個軟件模塊是由相關(guān)性很強(qiáng)的代碼組成,只負(fù)責(zé)一項任務(wù),也就是常說的單一責(zé)任原則。模塊的內(nèi)聚反映模塊內(nèi)部聯(lián)系的緊密程度。

模塊之間聯(lián)系越緊密,其耦合性就越強(qiáng),模塊的獨立性則越差。模塊間耦合高低取決于模塊間接口的復(fù)雜性、調(diào)用的方式及傳遞的信息。一個完整的系統(tǒng),模塊與模塊之間,盡可能的使其獨立存在。通常程序結(jié)構(gòu)中各模塊的內(nèi)聚程度越高,模塊間的耦合程度就越低。

2. 過度設(shè)計 

過度設(shè)計就是進(jìn)行了過多的面向未來的設(shè)計或者說把相對簡單的事情想復(fù)雜了,過度追求模塊化、可擴(kuò)展性、設(shè)計模式等,為系統(tǒng)增加了不必要的復(fù)雜度。

3. 過早優(yōu)化 

過早指的不是在開發(fā)過程的早期,而是在還沒弄清楚需求未來的變化的走向的時候。你的優(yōu)化不僅可能導(dǎo)致你無法很好地實現(xiàn)新的需求,而且你對優(yōu)化的預(yù)期的猜測有可能還是錯的,導(dǎo)致實際上你除了把代碼變復(fù)雜以外什么都沒得到。

正確的方法是,先有質(zhì)量地實現(xiàn)你的需求,寫夠testcase,然后做profile去找到性能的瓶頸,這個時候才做優(yōu)化。

4. 重構(gòu) (Refactoring) 

重構(gòu)(Refactoring)就是通過調(diào)整程序代碼改善軟件的質(zhì)量、性能,使其程序的設(shè)計模式和架構(gòu)更趨合理,提高軟件的擴(kuò)展性和維護(hù)性。

5. 破窗效應(yīng) 

又稱破窗理論,破窗效應(yīng)(Broken windows theory)是犯罪學(xué)的一個理論。此理論認(rèn)為環(huán)境中的不良現(xiàn)象如果被放任存在,會誘使人們仿效,甚至變本加厲。一幢有少許破窗的建筑為例,如果那些窗不被修理好,可能將會有破壞者破壞更多的窗戶。最終他們甚至?xí)J入建筑內(nèi),如果發(fā)現(xiàn)無人居住,也許就在那里定居或者縱火。

應(yīng)用在軟件工程上就是,一定不能讓系統(tǒng)代碼或者架構(gòu)設(shè)計的隱患有冒頭的機(jī)會,否則隨著時間的推移,隱患會越來越重。反之,一個本身優(yōu)質(zhì)的系統(tǒng),會讓人不由自主的寫出優(yōu)質(zhì)的代碼。

6. 互不信任原則 

指在程序運行上下游的整個鏈路中,每個點都是不能保證絕對可靠的,任何一個點都可能隨時發(fā)生故障或者不可預(yù)知的行為,包括機(jī)器網(wǎng)絡(luò)、服務(wù)本身、依賴環(huán)境、輸入和請求等,因此要處處設(shè)防。

7. 持久化 (Persistence) 

持久化是將程序數(shù)據(jù)在臨時狀態(tài)和持久狀態(tài)間轉(zhuǎn)換的機(jī)制。通俗的講,就是臨時數(shù)據(jù)(比如內(nèi)存中的數(shù)據(jù),是不能永久保存的)持久化為持久數(shù)據(jù)(比如持久化至數(shù)據(jù)庫或者本地磁盤中,能夠長久保存)。

8. 臨界區(qū) 

臨界區(qū)用來表示一種公共資源或者說是共享數(shù)據(jù),可以被多個線程使用,但是每一次,只能有一個線程使用它,一旦臨界區(qū)資源被占用,其他線程要想使用這個資源,就必須等待。

9. 阻塞/非阻塞 

阻塞和非阻塞通常形容多線程間的相互影響。比如一個線程占用了臨界區(qū)資源,那么其它所有需要這個資源的線程就必須在這個臨界區(qū)中進(jìn)行等待,等待會導(dǎo)致線程掛起。這種情況就是阻塞。此時,如果占用資源的線程一直不愿意釋放資源,那么其它所有阻塞在這個臨界區(qū)上的線程都不能工作。而非阻塞允許多個線程同時進(jìn)入臨界區(qū)。

10. 同步/異步 

通常同步和異步是指函數(shù)/方法調(diào)用方面。

同步就是在發(fā)出一個函數(shù)調(diào)用時,在沒有得到結(jié)果之前,該調(diào)用就不返回。異步調(diào)用會瞬間返回,但是異步調(diào)用瞬間返回并不代表你的任務(wù)就完成了,他會在后臺起個線程繼續(xù)進(jìn)行任務(wù),等任務(wù)執(zhí)行完畢后通過回調(diào)callback或其他方式通知調(diào)用方。

11. 并發(fā)/并行 

  • 并行(parallel)指在同一時刻,有多條指令在多個處理器上同時執(zhí)行。所以無論從微觀還是從宏觀來看,二者都是一起執(zhí)行的。
  • 并發(fā)(concurrency)指在同一時刻只能有一條指令執(zhí)行,但多個進(jìn)程指令被快速的輪換執(zhí)行,使得在宏觀上具有多個進(jìn)程同時執(zhí)行的效果,但在微觀上并不是同時執(zhí)行的,只是把時間分成若干段,使多個進(jìn)程快速交替的執(zhí)行。

 

架構(gòu)設(shè)計

1. 高并發(fā) (High Concurrency) 

由于分布式系統(tǒng)的問世,高并發(fā)(High Concurrency)通常是指通過設(shè)計保證系統(tǒng)能夠同時并行處理很多請求。通俗來講,高并發(fā)是指在同一個時間點,有很多用戶同時的訪問同一 API 接口或者 Url 地址。它經(jīng)常會發(fā)生在有大活躍用戶量,用戶高聚集的業(yè)務(wù)場景中。

2. 高可用 (High Availability) 

高可用HA(High Availability)是分布式系統(tǒng)架構(gòu)設(shè)計中必須考慮的因素之一,它通常是指,一個系統(tǒng)經(jīng)過專門的設(shè)計,以減少停工時間,而保持其服務(wù)的高度可用性。

3. 讀寫分離 

為了確保數(shù)據(jù)庫產(chǎn)品的穩(wěn)定性,很多數(shù)據(jù)庫擁有雙機(jī)熱備功能。也就是,第一臺數(shù)據(jù)庫服務(wù)器,是對外提供增刪改業(yè)務(wù)的生產(chǎn)服務(wù)器;第二臺數(shù)據(jù)庫服務(wù)器,主要進(jìn)行讀的操作。

4. 冷備/熱備 

  • 冷備:兩個服務(wù)器,一臺運行,一臺不運行做為備份。這樣一旦運行的服務(wù)器宕機(jī),就把備份的服務(wù)器運行起來。冷備的方案比較容易實現(xiàn),但冷備的缺點是主機(jī)出現(xiàn)故障時備機(jī)不會自動接管,需要主動切換服務(wù)。
  • 熱備:即是通常所說的active/standby方式,服務(wù)器數(shù)據(jù)包括數(shù)據(jù)庫數(shù)據(jù)同時往兩臺或多臺服務(wù)器寫。當(dāng)active服務(wù)器出現(xiàn)故障的時候,通過軟件診測(一般是通過心跳診斷)將standby機(jī)器激活,保證應(yīng)用在短時間內(nèi)完全恢復(fù)正常使用。當(dāng)一臺服務(wù)器宕機(jī)后,自動切換到另一臺備用機(jī)使用。

5. 異地多活 

異地多活一般是指在不同城市建立獨立的數(shù)據(jù)中心,“活”是相對于冷備份而言的,冷備份是備份全量數(shù)據(jù),平時不支撐業(yè)務(wù)需求,只有在主機(jī)房出現(xiàn)故障的時候才會切換到備用機(jī)房,而多活,是指這些機(jī)房在日常的業(yè)務(wù)中也需要走流量,做業(yè)務(wù)支撐。

6. 負(fù)載均衡 (Load Balance) 

負(fù)載均衡,是對多臺服務(wù)器進(jìn)行流量分發(fā)的負(fù)載均衡服務(wù)。可在多個實例間自動分配應(yīng)用程序的對外服務(wù)能力,通過消除單點故障提升應(yīng)用系統(tǒng)的可用性,讓您實現(xiàn)更高水平的應(yīng)用程序容錯能力,從而無縫提供分配應(yīng)用程序流量所需的負(fù)載均衡容量,為您提供高效、穩(wěn)定、安全的服務(wù)。

7. 動靜分離 

動靜分離是指在web服務(wù)器架構(gòu)中,將靜態(tài)頁面與動態(tài)頁面或者靜態(tài)內(nèi)容接口和動態(tài)內(nèi)容接口分開不同系統(tǒng)訪問的架構(gòu)設(shè)計方法,進(jìn)而提升整個服務(wù)訪問性能和可維護(hù)性。

8. 集群 

單臺服務(wù)器的并發(fā)承載能力總是有限的,當(dāng)單臺服務(wù)器處理能力達(dá)到性能瓶頸的時,將多臺服務(wù)器組合起來提供服務(wù),這種組合方式稱之為集群,集群中每臺服務(wù)器就叫做這個集群的一個“節(jié)點”,每個節(jié)點都能提供相同的服務(wù),從而成倍的提升整個系統(tǒng)的并發(fā)處理能力。

9. 分布式 

分布式系統(tǒng)就是將一個完整的系統(tǒng)按照業(yè)務(wù)功能拆分成很多獨立的子系統(tǒng),每個子系統(tǒng)就被稱為“服務(wù)”,分布式系統(tǒng)將請求分揀和分發(fā)到不同的子系統(tǒng),讓不同的服務(wù)來處理不同的請求。在分布式系統(tǒng)中,子系統(tǒng)獨立運行,它們之間通過網(wǎng)絡(luò)通信連接起來實現(xiàn)數(shù)據(jù)互通和組合服務(wù)。

10. CAP理論 

CAP理論,指的是在一個分布式系統(tǒng)中,Consistency(一致性)、Availability(可用性)、Partition Tolerance(分區(qū)容錯性),不能同時成立。

  • 一致性:它要求在同一時刻點,分布式系統(tǒng)中的所有數(shù)據(jù)備份都相同或者都處于同一狀態(tài)。
  • 可用性:在系統(tǒng)集群的一部分節(jié)點宕機(jī)后,系統(tǒng)依然能夠正確的響應(yīng)用戶的請求。
  • 分區(qū)容錯性:系統(tǒng)能夠容忍節(jié)點之間的網(wǎng)絡(luò)通信的故障。

簡單的來說,在一個分布式系統(tǒng)中,最多能支持上面的兩種屬性。但顯然既然是分布式注定我們是必然要進(jìn)行分區(qū),既然分區(qū),我們就無法百分百避免分區(qū)的錯誤。因此,我們只能在一致性和可用性去作出選擇。

在分布式系統(tǒng)中,我們往往追求的是可用性,它的重要性比一致性要高,那么如何實現(xiàn)高可用,這里又有一個理論,就是 BASE 理論,它給 CAP 理論做了進(jìn)一步的擴(kuò)充。

 

11. BASE理論 

BASE 理論指出:

  • Basically Available(基本可用)
  • Soft state(軟狀態(tài))
  • Eventually consistent(最終一致性)

BASE 理論是對 CAP 中的一致性和可用性進(jìn)行一個權(quán)衡的結(jié)果,理論的核心思想就是:我們無法做到強(qiáng)一致,但每個應(yīng)用都可以根據(jù)自身的業(yè)務(wù)特點,采用適當(dāng)?shù)姆绞絹硎瓜到y(tǒng)達(dá)到最終一致性。

12. 水平擴(kuò)展/垂直擴(kuò)展 

  • 水平擴(kuò)展 Scale Out通過增加更多的服務(wù)器或者程序?qū)嵗齺矸稚⒇?fù)載,從而提升存儲能力和計算能力。
  • 垂直擴(kuò)展 Scale Up 提升單機(jī)處理能力。

垂直擴(kuò)展的方式又有兩種:

(1)增強(qiáng)單機(jī)硬件性能,例如:增加CPU核數(shù)如32核,升級更好的網(wǎng)卡如萬兆,升級更好的硬盤如SSD,擴(kuò)充硬盤容量如2T,擴(kuò)充系統(tǒng)內(nèi)存如128G;

(2)提升單機(jī)軟件或者架構(gòu)性能,例如:使用Cache來減少IO次數(shù),使用異步來增加單服務(wù)吞吐量,使用無鎖數(shù)據(jù)結(jié)構(gòu)來減少響應(yīng)時間;

13. 平行擴(kuò)容 

與水平擴(kuò)展類似。集群服務(wù)器中的節(jié)點均為平行對等節(jié)點,當(dāng)需要擴(kuò)容時,可以通過添加更多節(jié)點以提高集群的服務(wù)能力。一般來說服務(wù)器中關(guān)鍵路徑(如服務(wù)器中的登錄、支付、核心業(yè)務(wù)邏輯等)都需要支持運行時動態(tài)平行擴(kuò)容。

14. 彈性擴(kuò)容 

指對部署的集群進(jìn)行動態(tài)在線擴(kuò)容。彈性擴(kuò)容系統(tǒng)可以根據(jù)實際業(yè)務(wù)環(huán)境按照一定策略自動地添加更多的節(jié)點(包括存儲節(jié)點、計算節(jié)點、網(wǎng)絡(luò)節(jié)點)來增加系統(tǒng)容量、提高系統(tǒng)性能或者增強(qiáng)系統(tǒng)可靠性,或者同時完成這三個目標(biāo)。

15. 狀態(tài)同步/幀同步 

  • 狀態(tài)同步:狀態(tài)同步是指服務(wù)器負(fù)責(zé)計算全部的游戲邏輯,并且廣播這些計算的結(jié)果,客戶端僅僅負(fù)責(zé)發(fā)送玩家的操作,以及表現(xiàn)收到的游戲結(jié)果。

特征:狀態(tài)同步安全性高,邏輯更新方便,斷線重連快,但是開發(fā)效率較低,網(wǎng)絡(luò)流量隨游戲復(fù)雜度增加,服務(wù)器需要承載更大壓力。

  • 幀同步:服務(wù)端只轉(zhuǎn)發(fā)消息,不做任何邏輯處理,各客戶端每秒幀數(shù)一致,在每一幀都處理同樣的輸入數(shù)據(jù)。

特征:幀同步需要保證系統(tǒng)在相同的輸入下,要有相同的輸出。幀同步開發(fā)效率高,流量消耗低而且穩(wěn)定,對服務(wù)器的壓力非常小。但是網(wǎng)絡(luò)要求高,斷線重連時間長,客戶端計算壓力大。

 

網(wǎng)絡(luò)通信

1. 連接池 

預(yù)先建立一個連接緩沖池,并提供一套連接使用、分配、管理策略,使得該連接池中的連接可以得到高效、安全的復(fù)用,避免了連接頻繁建立、關(guān)閉的開銷。

2. 斷線重連 

由于網(wǎng)絡(luò)波動造成用戶間歇性的斷開與服務(wù)器的連接,待網(wǎng)絡(luò)恢復(fù)之后服務(wù)器嘗試將用戶連接到上次斷開時的狀態(tài)和數(shù)據(jù)。

3. 會話保持 

會話保持是指在負(fù)載均衡器上的一種機(jī)制,可以識別客戶端與服務(wù)器之間交互過程的關(guān)連性,在作負(fù)載均衡的同時還保證一系列相關(guān)連的訪問請求都會分配到一臺機(jī)器上。用人話來表述就是:在一次會話過程中發(fā)起的多個請求都會落到同一臺機(jī)器上。

4. 長連接/短連接 

通常是指TCP的長連接和短連接。長連接就是建立TCP連接后,一直保持這個連接,一般會中間彼此發(fā)送心跳來確認(rèn)對應(yīng)的存在,中間會做多次業(yè)務(wù)數(shù)據(jù)傳輸,一般不會主動斷開連接。短連接一般指建立連接后,執(zhí)行一次事務(wù)后(如:http請求),然后就關(guān)掉這個連接。

5. 流量控制/擁塞控制 

  • 流量控制防止發(fā)送方發(fā)的太快,耗盡接收方的資源,從而使接收方來不及處理。
  • 擁塞控制防止發(fā)送方發(fā)的太快,使得網(wǎng)絡(luò)來不及處理產(chǎn)生擁塞,進(jìn)而引起這部分乃至整個網(wǎng)絡(luò)性能下降的現(xiàn)象,嚴(yán)重時甚至?xí)?dǎo)致網(wǎng)絡(luò)通信業(yè)務(wù)陷入停頓。

6. 驚群效應(yīng) 

驚群效應(yīng)也有人叫做雷鳴群體效應(yīng),不過叫什么,簡言之,驚群現(xiàn)象就是多進(jìn)程(多線程)在同時阻塞等待同一個事件的時候(休眠狀態(tài)),如果等待的這個事件發(fā)生,那么他就會喚醒等待的所有進(jìn)程(或者線程),但是最終卻只可能有一個進(jìn)程(線程)獲得這個時間的“控制權(quán)”,對該事件進(jìn)行處理,而其他進(jìn)程(線程)獲取“控制權(quán)”失敗,只能重新進(jìn)入休眠狀態(tài),這種現(xiàn)象和性能浪費就叫做驚群。

7. NAT 

NAT(Network Address Translation,網(wǎng)絡(luò)地址轉(zhuǎn)換),就是替換IP報文頭部的地址信息。NAT通常部署在一個組織的網(wǎng)絡(luò)出口位置,通過將內(nèi)部網(wǎng)絡(luò)IP地址替換為出口的IP地址提供公網(wǎng)可達(dá)性和上層協(xié)議的連接能力。

 

故障異常

1. 宕機(jī) 

宕機(jī),一般情況下指的就是計算機(jī)主機(jī)出現(xiàn)意外故障而死機(jī)。其次,一些服務(wù)器例如數(shù)據(jù)庫死鎖也可以稱為宕機(jī),一些服務(wù)器的某些服務(wù)掛掉了,就可以這么說。

2. coredump 

當(dāng)程序出錯而異常中斷時,OS會把程序工作的當(dāng)前狀態(tài)存儲成一個coredunmp文件。通常情況下coredump文件包含了程序運行時的內(nèi)存,寄存器狀態(tài),堆棧指針,內(nèi)存管理信息等。

3. 緩存穿透/擊穿/雪崩 

  • 緩存穿透:緩存穿透是指查詢一個一定不存在的數(shù)據(jù),由于緩存是不命中時需要從數(shù)據(jù)庫查詢,查不到數(shù)據(jù)則不寫入緩存,這將導(dǎo)致這個不存在的數(shù)據(jù)每次請求都要到數(shù)據(jù)庫去查詢,進(jìn)而給數(shù)據(jù)庫帶來壓力。
  • 緩存擊穿:緩存擊穿是指熱點key在某個時間點過期的時候,而恰好在這個時間點對這個Key有大量的并發(fā)請求過來,從而大量的請求打到db。
  • 緩存雪崩:緩存雪崩是指緩存中數(shù)據(jù)大批量到過期時間,而查詢數(shù)據(jù)量巨大,引起數(shù)據(jù)庫壓力過大甚至down機(jī)。
  • 與緩存擊穿不同的是:存擊穿是熱點key失效,緩存雪崩是大量的key同時失效。

4. 500/501/502/503/504/505 

  • 500 Internal Server Error:內(nèi)部服務(wù)錯誤,一般是服務(wù)器遇到意外情況,而無法完成請求。可能原因: 1、程序錯誤,例如:ASP或者PHP語法錯誤;2、高并發(fā)導(dǎo)致,系統(tǒng)資源限制不能打開過多的文件所致。
  • 501Not implemented:服務(wù)器不理解或不支持請求的HTTP請求。
  • 502Bad Gateway:WEB服務(wù)器故障,可能是由于程序進(jìn)程不夠,請求的php-fpm已經(jīng)執(zhí)行,但是由于某種原因而沒有執(zhí)行完畢,最終導(dǎo)致php-fpm進(jìn)程終止??赡茉颍?、Nginx服務(wù)器,php-cgi進(jìn)程數(shù)不夠用;2、PHP執(zhí)行時間過長;3、php-cgi進(jìn)程死掉;
  • 503Service Unavailable:服務(wù)器目前無法使用。系統(tǒng)維護(hù)服務(wù)器暫時的無法處理客戶端的請求,這只是暫時狀態(tài)??梢月?lián)系下服務(wù)器提供商。
  • 504Gateway Timeout:服務(wù)器504錯誤表示超時,是指客戶端所發(fā)出的請求沒有到達(dá)網(wǎng)關(guān),請求沒有到可以執(zhí)行的php-fpm,一般是與nginx.conf的配置有關(guān)。
  • 505HTTP Version Not Supported:服務(wù)器不支持請求中所用的 HTTP 協(xié)議版本。(HTTP 版本不受支持)

除了500錯誤可能是程序語言錯誤,其余的報錯,都大概可以理解為服務(wù)器或者服務(wù)器配置出現(xiàn)問題。

5. 內(nèi)存溢出/內(nèi)存泄漏 

  • 內(nèi)存溢出:內(nèi)存溢出(Out Of Memory)指程序申請內(nèi)存時,沒有足夠的內(nèi)存供申請者使用,或者說,給了你一塊存儲int類型數(shù)據(jù)的存儲空間,但是你卻存儲long類型的數(shù)據(jù),那么結(jié)果就是內(nèi)存不夠用,此時就會報錯OOM,即所謂的內(nèi)存溢出。
  • 內(nèi)存泄漏:內(nèi)存泄漏(Memory Leak)指程序中己動態(tài)分配的堆內(nèi)存由于某種原因程序未釋放或無法釋放,造成系統(tǒng)內(nèi)存的浪費,導(dǎo)致程序運行速度減慢甚至系統(tǒng)崩潰等嚴(yán)重后果。

6. 句柄泄漏 

句柄泄漏是進(jìn)程在調(diào)用系統(tǒng)文件之后,沒有釋放已經(jīng)打開的文件句柄。一般句柄泄漏后的現(xiàn)象是,機(jī)器變慢,CPU飆升,出現(xiàn)句柄泄漏的cgi或server的CPU使用率增加。

7. 死鎖 

死鎖是指兩個或兩個以上的線程在執(zhí)行過程中,由于競爭資源或者由于彼此通信而造成的一種阻塞的現(xiàn)象,若無外力作用,它們都抑制處于阻塞狀態(tài)并無法進(jìn)行下去,此時稱系統(tǒng)處于死鎖狀態(tài)或系統(tǒng)產(chǎn)生了死鎖。

8. 軟中斷/硬中斷 

  • 硬中斷:我們通常所說的中斷指的是硬中斷(hardirq)。 主要是用來通知操作系統(tǒng)系統(tǒng)外設(shè)狀態(tài)的變化。
  • 軟中斷:1、通常是硬中斷服務(wù)程序?qū)?nèi)核的中斷;2、為了滿足實時系統(tǒng)的要求,中斷處理應(yīng)該是越快越好。

linux為了實現(xiàn)這個特點,當(dāng)中斷發(fā)生的時候,硬中斷處理那些短時間就可以完成的工作,而將那些處理事件比較長的工作,放到中斷之后來完成,也就是軟中斷(softirq)來完成。

9. 毛刺 

在短暫的某一刻,服務(wù)器性能指標(biāo)(如流量、磁盤IO、CPU使用率等)遠(yuǎn)大于該時刻前后時間段。毛刺的出現(xiàn)代表這服務(wù)器資源利用不均勻,不充分,容易誘發(fā)其他更嚴(yán)重的問題。

10. 重放攻擊 

攻擊者發(fā)送一個目的主機(jī)已接收過的包,來達(dá)到欺騙系統(tǒng)的目的,主要用于身份認(rèn)證過程,破壞認(rèn)證的正確性。它是一種攻擊類型,這種攻擊會不斷惡意或欺詐性地重復(fù)一個有效的數(shù)據(jù)傳輸,重放攻擊可以由發(fā)起者,也可以由攔截并重發(fā)該數(shù)據(jù)的敵方進(jìn)行。攻擊者利用網(wǎng)絡(luò)監(jiān)聽或者其他方式盜取認(rèn)證憑據(jù),之后再把它重新發(fā)給認(rèn)證服務(wù)器。

11. 網(wǎng)絡(luò)孤島 

網(wǎng)絡(luò)孤島指集群環(huán)境中,部分機(jī)器與整個集群失去網(wǎng)絡(luò)連接,分裂為一個小集群并且發(fā)生數(shù)據(jù)不一致的狀況。

12. 數(shù)據(jù)傾斜 

對于集群系統(tǒng),一般緩存是分布式的,即不同節(jié)點負(fù)責(zé)一定范圍的緩存數(shù)據(jù)。我們把緩存數(shù)據(jù)分散度不夠,導(dǎo)致大量的緩存數(shù)據(jù)集中到了一臺或者幾臺服務(wù)節(jié)點上,稱為數(shù)據(jù)傾斜。一般來說數(shù)據(jù)傾斜是由于負(fù)載均衡實施的效果不好引起的。

13. 腦裂 

腦裂是指在集群系統(tǒng)中,部分節(jié)點之間網(wǎng)絡(luò)不可達(dá)而引起的系統(tǒng)分裂,不同分裂的小集群會按照各自的狀態(tài)提供服務(wù),原本的集群會同時存在不一致的反應(yīng),造成節(jié)點之間互相爭搶資源,系統(tǒng)混亂,數(shù)據(jù)損壞。

監(jiān)控告警

1. 服務(wù)監(jiān)控 

服務(wù)監(jiān)控主要目的在服務(wù)出現(xiàn)問題或者快要出現(xiàn)問題時能夠準(zhǔn)確快速地發(fā)現(xiàn)以減小影響范圍。服務(wù)監(jiān)控一般有多種手段,按層次可劃分為:

  • 系統(tǒng)層(CPU、網(wǎng)絡(luò)狀態(tài)、IO、機(jī)器負(fù)載等)
  • 應(yīng)用層(進(jìn)程狀態(tài)、錯誤日志、吞吐量等)
  • 業(yè)務(wù)層(服務(wù)/接口的錯誤碼、響應(yīng)時間)
  • 用戶層(用戶行為、輿情監(jiān)控、前端埋點)

2. 全鏈路監(jiān)控 

  • 服務(wù)撥測:服務(wù)撥測是探測服務(wù)(應(yīng)用)可用性的監(jiān)控方式,通過撥測節(jié)點對目標(biāo)服務(wù)進(jìn)行周期性探測,主要通過可用性和響應(yīng)時間來度量,撥測節(jié)點通常有異地多個。 
  • 節(jié)點探測:節(jié)點探測是用來發(fā)現(xiàn)和追蹤不同的機(jī)房(數(shù)據(jù)中心)節(jié)點之間網(wǎng)絡(luò)可用性和通暢性的監(jiān)控方式,主要通過響應(yīng)時間、丟包率、跳數(shù)來度量,探測方法一般是ping、mtr或其他私有協(xié)議。 
  • 告警過濾:對某些可預(yù)知的告警進(jìn)行過濾,不進(jìn)入告警統(tǒng)計的數(shù)據(jù),如少量爬蟲訪問導(dǎo)致的http響應(yīng)500錯誤,業(yè)務(wù)系統(tǒng)自定義異常信息等。 
  • 告警去重:當(dāng)一個告警通知負(fù)責(zé)人后,在這個告警恢復(fù)之前,不會繼續(xù)收到相同的告警。 
  • 告警抑制:為了減少由于系統(tǒng)抖動帶來的干擾,還需要實現(xiàn)抑制,例如服務(wù)器瞬間高負(fù)載,可能是正常的,只有持續(xù)一段時間的高負(fù)載才需要得到重視。 
  • 告警恢復(fù):開發(fā)/運維人員不僅需要收到告警通知,還需要收到故障消除告警恢復(fù)正常的通知。 
  • 告警合并:對同一時刻產(chǎn)生的多條相同告警進(jìn)行合并,如某個微服務(wù)集群同一時刻出現(xiàn)多個子服務(wù)負(fù)載過高的告警,需要合并成為一條告警。 
  • 告警收斂:有時某個告警產(chǎn)生時,往往會伴隨著其它告警。這時可以只對根本原因產(chǎn)生告警,其它告警收斂為子告警一并發(fā)送通知。如云服務(wù)器出現(xiàn)CPU負(fù)載告警時往往伴隨其搭載的所有系統(tǒng)的可用性告警。 
  • 故障自愈:實時發(fā)現(xiàn)告警,預(yù)診斷分析,自動恢復(fù)故障,并打通周邊系統(tǒng)實現(xiàn)整個流程的閉環(huán)。

 

服務(wù)治理

1. 微服務(wù) 

微服務(wù)架構(gòu)是一種架構(gòu)模式,它提倡將單一應(yīng)用程序劃分成一組小的服務(wù),服務(wù)之間相互協(xié)調(diào)、互相配合,為用戶提供最終價值。每個服務(wù)運行在其獨立的進(jìn)程中,服務(wù)和服務(wù)之間采用輕量級的通信機(jī)制相互溝通(通常是基于HTTP的Restful API).每個服務(wù)都圍繞著具體的業(yè)務(wù)進(jìn)行構(gòu)建,并且能夠被獨立的部署到生產(chǎn)環(huán)境、類生產(chǎn)環(huán)境等。

2. 服務(wù)發(fā)現(xiàn) 

服務(wù)發(fā)現(xiàn)是指使用一個注冊中心來記錄分布式系統(tǒng)中的全部服務(wù)的信息,以便其他服務(wù)能夠快速的找到這些已注冊的服務(wù)。服務(wù)發(fā)現(xiàn)是支撐大規(guī)模 SOA 和微服務(wù)架構(gòu)的核心模塊,它應(yīng)該盡量做到高可用。

3. 流量削峰 

如果觀看抽獎或秒殺系統(tǒng)的請求監(jiān)控曲線,你就會發(fā)現(xiàn)這類系統(tǒng)在活動開放的時間段內(nèi)會出現(xiàn)一個波峰,而在活動未開放時,系統(tǒng)的請求量、機(jī)器負(fù)載一般都是比較平穩(wěn)的。為了節(jié)省機(jī)器資源,我們不可能時時都提供最大化的資源能力來支持短時間的高峰請求。所以需要使用一些技術(shù)手段,來削弱瞬時的請求高峰,讓系統(tǒng)吞吐量在高峰請求下保持可控。削峰也可用于消除毛刺,使服務(wù)器資源利用更加均衡和充分。常見的削峰策略有隊列,限頻,分層過濾,多級緩存等。

4. 版本兼容 

在升級版本的過程中,需要考慮升級版本后,新的數(shù)據(jù)結(jié)構(gòu)是否能夠理解和解析舊數(shù)據(jù),新修改的協(xié)議是否能夠理解舊的協(xié)議以及做出預(yù)期內(nèi)合適的處理。這就需要在服務(wù)設(shè)計過程中做好版本兼容。

5. 過載保護(hù) 

過載是指當(dāng)前負(fù)載已經(jīng)超過了系統(tǒng)的最大處理能力,過載的出現(xiàn),會導(dǎo)致部分服務(wù)不可用,如果處置不當(dāng),極有可能引起服務(wù)完全不可用,乃至雪崩。過載保護(hù)正是針對這種異常情況做的措施,防止出現(xiàn)服務(wù)完全不可用的現(xiàn)象。

6. 服務(wù)熔斷 

服務(wù)熔斷的作用類似于我們家用的保險絲,當(dāng)某服務(wù)出現(xiàn)不可用或響應(yīng)超時的情況時,為了防止整個系統(tǒng)出現(xiàn)雪崩,暫時停止對該服務(wù)的調(diào)用。

7. 服務(wù)降級 

服務(wù)降級是當(dāng)服務(wù)器壓力劇增的情況下,根據(jù)當(dāng)前業(yè)務(wù)情況及流量對一些服務(wù)和頁面有策略的降級,以此釋放服務(wù)器資源以保證核心任務(wù)的正常運行。降級往往會指定不同的級別,面臨不同的異常等級執(zhí)行不同的處理。

  • 根據(jù)服務(wù)方式:可以拒接服務(wù),可以延遲服務(wù),也有時候可以隨機(jī)服務(wù)。
  • 根據(jù)服務(wù)范圍:可以砍掉某個功能,也可以砍掉某些模塊。

總之服務(wù)降級需要根據(jù)不同的業(yè)務(wù)需求采用不同的降級策略。主要的目的就是服務(wù)雖然有損但是總比沒有好。

8. 熔斷VS降級

  • 相同點:目標(biāo)一致,都是從可用性和可靠性出發(fā),為了防止系統(tǒng)崩潰;用戶體驗類似,最終都讓用戶體驗到的是某些功能暫時不可用;
  • 不同點:觸發(fā)原因不同,服務(wù)熔斷一般是某個服務(wù)(下游服務(wù))故障引起,而服務(wù)降級一般是從整體負(fù)荷考慮;

9. 服務(wù)限流 

限流可以認(rèn)為服務(wù)降級的一種,限流就是限制系統(tǒng)的輸入和輸出流量已達(dá)到保護(hù)系統(tǒng)的目的。一般來說系統(tǒng)的吞吐量是可以被測算的,為了保證系統(tǒng)的穩(wěn)定運行,一旦達(dá)到的需要限制的閾值,就需要限制流量并采取一些措施以完成限制流量的目的。比如:延遲處理,拒絕處理,或者部分拒絕處理等等。

10. 故障屏蔽 

將故障機(jī)器從集群剔除,以保證新的請求不會分發(fā)到故障機(jī)器。

 

測試方法

1. 黑盒/白盒測試 

黑盒測試不考慮程序內(nèi)部結(jié)構(gòu)和邏輯結(jié)構(gòu),主要是用來測試系統(tǒng)的功能是否滿足需求規(guī)格說明書。一般會有一個輸入值,一個輸入值,和期望值做比較。

白盒測試主要應(yīng)用在單元測試階段,主要是對代碼級的測試,針對程序內(nèi)部邏輯結(jié)構(gòu),測試手段有:語句覆蓋、判定覆蓋、條件覆蓋、路徑覆蓋、條件組合覆蓋

2. 單元/集成/系統(tǒng)/驗收測試 

軟件測試一般分為4個階段:單元測試、集成測試、系統(tǒng)測試、驗收測試。

  • 單元測試:單元測試是對軟件中的最小可驗證單元進(jìn)行檢查和驗證,如一個模塊、一個過程、一個方法等。單元測試粒度最小,一般由開發(fā)小組采用白盒方式來測試,主要測試單元是否符合“設(shè)計”。
  • 集成測試:集成測試也叫做組裝測試,通常在單元測試的基礎(chǔ)上,將所有的程序模塊進(jìn)行有序的、遞增的測試。集成測試界于單元測試和系統(tǒng)測試之間,起到“橋梁作用”,一般由開發(fā)小組采用白盒加黑盒的方式來測試,既驗證“設(shè)計”,又驗證“需求”。
  • 系統(tǒng)測試:系統(tǒng)測試時將經(jīng)過集成測試的軟件,作為計算機(jī)系統(tǒng)的一部分,與系統(tǒng)中其他部分結(jié)合起來,在實際運行環(huán)境下進(jìn)行一系列嚴(yán)格有效的測試,以發(fā)現(xiàn)軟件潛在的問題,保證系統(tǒng)的正常運行。系統(tǒng)測試的粒度最大,一般由獨立測試小組采用黑盒方式來測試,主要測試系統(tǒng)是否符合“需求規(guī)格說明書”。
  • 驗收測試:驗收測試也稱交付測試,是針對用戶需求、業(yè)務(wù)流程進(jìn)行的正式的測試,以確定系統(tǒng)是否滿足驗收標(biāo)準(zhǔn),由用戶、客戶或其他授權(quán)機(jī)構(gòu)決定是否接受系統(tǒng)。驗收測試與系統(tǒng)測試相似,主要區(qū)別是測試人員不同,驗收測試由用戶執(zhí)行。

3. 回歸測試 

當(dāng)發(fā)現(xiàn)并修改缺陷后,或在軟件中添加新的功能后,重新測試。用來檢查被發(fā)現(xiàn)的缺陷是否被改正,并且所做的修改沒有引發(fā)新的問題。

4. 冒煙測試 

這一術(shù)語源自硬件行業(yè)。對一個硬件或硬件組件進(jìn)行更改或修復(fù)后,直接給設(shè)備加電。如果沒有冒煙,則該組件就通過了測試。在軟件中,“冒煙測試”這一術(shù)語描述的是在將代碼更改嵌入到產(chǎn)品的源樹中之前對這些更改進(jìn)行驗證的過程。

冒煙測試是在軟件開發(fā)過程中的一種針對軟件版本包的快速基本功能驗證策略,是對軟件基本功能進(jìn)行確認(rèn)驗證的手段,并非對軟件版本包的深入測試。

比如:對于一個登錄系統(tǒng)的冒煙測試,我們只需測試輸入正確的用戶名、密碼,驗證登錄這一個核心功能點,至于輸入框、特殊字符等,可以在冒煙測試之后進(jìn)行。

5. 性能測試 

性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負(fù)載條件來對系統(tǒng)的各項性能指標(biāo)進(jìn)行測試。負(fù)載測試和壓力測試都屬于性能測試,兩者可以結(jié)合進(jìn)行。

  • 通過負(fù)載測試,確定在各種工作負(fù)載下系統(tǒng)的性能,目標(biāo)是測試當(dāng)負(fù)載逐漸增加時,系統(tǒng)各項性能指標(biāo)的變化情況。
  • 壓力測試是通過確定一個系統(tǒng)的瓶頸或者不能接受的性能點,來獲得系統(tǒng)能提供的最大服務(wù)級別的測試。

6. 基準(zhǔn)測試 

基準(zhǔn)測試(Benchmark)也是一種性能測試方式,用來測量機(jī)器的硬件最高實際運行性能,以及軟件優(yōu)化的性能提升效果, 同時也可以用來識別某段代碼的CPU或者內(nèi)存效率問題. 許多開發(fā)人員會用基準(zhǔn)測試來測試不同的并發(fā)模式, 或者用基準(zhǔn)測試來輔助配置工作池的數(shù)量, 以保證能最大化系統(tǒng)的吞吐量.

7. A/B測試 

A/B測試,是用兩組及以上隨機(jī)分配的、數(shù)量相似的樣本進(jìn)行對比,如果實驗組和對比組的實驗結(jié)果相比,在目標(biāo)指標(biāo)上具有統(tǒng)計顯著性,那就可以說明實驗組的功能可以導(dǎo)致你想要的結(jié)果,從而幫你驗證假設(shè)或者做出產(chǎn)品決定。

8. 代碼覆蓋測試 

代碼覆蓋(Code coverage)是軟件測試中的一種度量,描述程式中源代碼被測試的比例和程度,所得比例稱為代碼覆蓋率。在做單元測試時,代碼覆蓋率常常被拿來作為衡量測試好壞的指標(biāo),甚至,用代碼覆蓋率來考核測試任務(wù)完成情況,比如,代碼覆蓋率必須達(dá)到80%或 90%。于是乎,測試人員費盡心思設(shè)計案例覆蓋代碼。

 

發(fā)布部署

1. DEV/PRO/FAT/UAT 

  • DEV(Development environment):開發(fā)環(huán)境,用于開發(fā)人員調(diào)試使用,版本變化較大。
  • FAT(Feature Acceptance Test environment):功能驗收測試環(huán)境,用于軟件測試人員測試使用。
  • UAT(User Acceptance Test environment):用戶驗收測試環(huán)境,用于生產(chǎn)環(huán)境下的功能驗證,可作為預(yù)發(fā)布環(huán)境。
  • PRO(Production environment):生產(chǎn)環(huán)境,正式線上環(huán)境。

2. 灰度發(fā)布 

灰度發(fā)布是指在升級版本過程中,通過分區(qū)控制,白名單控制等方式對一部分用戶先升級產(chǎn)品特性,而其余用戶則保持不變,當(dāng)一段時間后升級產(chǎn)品特性的用戶沒有反饋問題,就逐步擴(kuò)大范圍,最終向所有用戶開放新版本特性,灰度發(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、修改問題,以保證其影響度。

3. 回滾 (Rollback) 

指的是程序或數(shù)據(jù)處理錯誤時,將程序或數(shù)據(jù)恢復(fù)到上一次正確狀態(tài)(或者是上一個穩(wěn)定版本)的行為。

以上就是小編為您整理的 史上最全的后端技術(shù) 的全部內(nèi)容。

        


0 人點贊