[轉]史上最全的后端技術大全,你都了解哪些技術呢?

640?wx_fmt=jpeg

導語:工欲善其事,必先利其器;士欲宣其義,必先讀其書。后臺開發作為互聯網技術領域的掌上明珠,一直都是開發者們的追逐的高峰。本文將從后臺開發所涉及到的技術術語出發,基于系統開發、架構設計、網絡通信等幾個方面讓大家對后臺開發有一個清晰的了解,講解全面易懂。

?

?

?

目錄

一、系統開發

1. 高內聚/低耦合

?

2. 過度設計

?

3. 過早優化

?

4. 重構 (Refactoring)

?

5. 破窗效應

?

6. 互不信任原則

?

7. 持久化 (Persistence)

?

8. 臨界區

?

9. 阻塞/非阻塞

?

10. 同步/異步

?

11. 并發/并行

二、架構設計

?

1. 高并發 (High Concurrency)

?

2. 高可用 (High Availability)

?

3. 讀寫分離

?

4. 冷備/熱備

?

5. 異地多活

?

6. 負載均衡 (Load Balance)

?

7. 動靜分離

?

8. 集群

?

9. 分布式

?

10. CAP理論

?

11. BASE理論

?

12. 水平擴展/垂直擴展

13. 平行擴容

?

14. 彈性擴容

?

15. 狀態同步/幀同步

三、網絡通信

?

1. 連接池

?

2. 斷線重連

?

3. 會話保持

?

4. 長連接/短連接

?

5. 流量控制/擁塞控制

?

6. 驚群效應

?

7. NAT

四、故障異常

?

1. 宕機

?

2. coredump

?

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

?

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

?

5. 內存溢出/內存泄漏

?

6. 句柄泄漏

?

7. 死鎖

?

8. 軟中斷/硬中斷

?

9. 毛刺

?

10. 重放攻擊

?

11. 網絡孤島

?

12. 數據傾斜

?

13. 腦裂

五、監控告警

?

1. 服務監控

?

2. 全鏈路監控

六、服務治理

?

1. 微服務

?

2. 服務發現

?

3. 流量削峰

?

4. 版本兼容

?

5. 過載保護

?

6. 服務熔斷

?

7. 服務降級

8. 熔斷VS降級

?

9. 服務限流

?

10. 故障屏蔽

七、測試方法

?

1. 黑盒/白盒測試

?

2. 單元/集成/系統/驗收測試

?

3. 回歸測試

?

4. 冒煙測試

?

5. 性能測試

?

6. 基準測試

?

7. A/B測試

?

8. 代碼覆蓋測試

八、發布部署

?

1. DEV/PRO/FAT/UAT

?

2. 灰度發布

?

3. 回滾 (Rollback)


?

?

?

?

?

一、系統開發

?

1. 高內聚/低耦合
?

高內聚指一個軟件模塊是由相關性很強的代碼組成,只負責一項任務,也就是常說的單一責任原則。模塊的內聚反映模塊內部聯系的緊密程度。

?

模塊之間聯系越緊密,其耦合性就越強,模塊的獨立性則越差。模塊間耦合高低取決于模塊間接口的復雜性、調用的方式及傳遞的信息。一個完整的系統,模塊與模塊之間,盡可能的使其獨立存在。通常程序結構中各模塊的內聚程度越高,模塊間的耦合程度就越低。

?

2. 過度設計
?

過度設計就是進行了過多的面向未來的設計或者說把相對簡單的事情想復雜了,過度追求模塊化、可擴展性、設計模式等,為系統增加了不必要的復雜度。

?

3. 過早優化
?

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

?

正確的方法是,先有質量地實現你的需求,寫夠testcase,然后做profile去找到性能的瓶頸,這個時候才做優化。

?

4. 重構 (Refactoring)
?

重構(Refactoring)就是通過調整程序代碼改善軟件的質量、性能,使其程序的設計模式和架構更趨合理,提高軟件的擴展性和維護性。

?

5. 破窗效應
?

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

?

應用在軟件工程上就是,一定不能讓系統代碼或者架構設計的隱患有冒頭的機會,否則隨著時間的推移,隱患會越來越重。反之,一個本身優質的系統,會讓人不由自主的寫出優質的代碼。

?

6. 互不信任原則
?

指在程序運行上下游的整個鏈路中,每個點都是不能保證絕對可靠的,任何一個點都可能隨時發生故障或者不可預知的行為,包括機器網絡、服務本身、依賴環境、輸入和請求等,因此要處處設防。

?

7. 持久化 (Persistence)
?

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

?

8. 臨界區
?

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

?

9. 阻塞/非阻塞
?

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

?

10. 同步/異步
?

通常同步和異步是指函數/方法調用方面。

同步就是在發出一個函數調用時,在沒有得到結果之前,該調用就不返回。異步調用會瞬間返回,但是異步調用瞬間返回并不代表你的任務就完成了,他會在后臺起個線程繼續進行任務,等任務執行完畢后通過回調callback或其他方式通知調用方。

?

11. 并發/并行
?

  • 并行(parallel)指在同一時刻,有多條指令在多個處理器上同時執行。所以無論從微觀還是從宏觀來看,二者都是一起執行的。

?

  • 并發(concurrency)指在同一時刻只能有一條指令執行,但多個進程指令被快速的輪換執行,使得在宏觀上具有多個進程同時執行的效果,但在微觀上并不是同時執行的,只是把時間分成若干段,使多個進程快速交替的執行。

?

?

?

?

?

?

?

二、架構設計

?

1. 高并發 (High Concurrency)
?

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

?

2. 高可用 (High Availability)
?

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

?

3. 讀寫分離
?

為了確保數據庫產品的穩定性,很多數據庫擁有雙機熱備功能。也就是,第一臺數據庫服務器,是對外提供增刪改業務的生產服務器;第二臺數據庫服務器,主要進行讀的操作。

?

4. 冷備/熱備
?

  • 冷備:兩個服務器,一臺運行,一臺不運行做為備份。這樣一旦運行的服務器宕機,就把備份的服務器運行起來。冷備的方案比較容易實現,但冷備的缺點是主機出現故障時備機不會自動接管,需要主動切換服務。

  • 熱備:即是通常所說的active/standby方式,服務器數據包括數據庫數據同時往兩臺或多臺服務器寫。當active服務器出現故障的時候,通過軟件診測(一般是通過心跳診斷)將standby機器激活,保證應用在短時間內完全恢復正常使用。當一臺服務器宕機后,自動切換到另一臺備用機使用。

?

5. 異地多活
?

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

?

6. 負載均衡 (Load Balance)
?

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

?

7. 動靜分離
?

動靜分離是指在web服務器架構中,將靜態頁面與動態頁面或者靜態內容接口和動態內容接口分開不同系統訪問的架構設計方法,進而提升整個服務訪問性能和可維護性。

?

8. 集群
?

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

?

9. 分布式
?

分布式系統就是將一個完整的系統按照業務功能拆分成很多獨立的子系統,每個子系統就被稱為“服務”,分布式系統將請求分揀和分發到不同的子系統,讓不同的服務來處理不同的請求。在分布式系統中,子系統獨立運行,它們之間通過網絡通信連接起來實現數據互通和組合服務。

?

10. CAP理論
?

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

  • 一致性:它要求在同一時刻點,分布式系統中的所有數據備份都相同或者都處于同一狀態。

?

  • 可用性:在系統集群的一部分節點宕機后,系統依然能夠正確的響應用戶的請求。

?

  • 分區容錯性:系統能夠容忍節點之間的網絡通信的故障。

?

?

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

?

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

?

11. BASE理論
?

BASE 理論指出:

  • Basically Available(基本可用)

?

  • Soft state(軟狀態)

?

  • Eventually consistent(最終一致性)

?

?

BASE 理論是對 CAP 中的一致性和可用性進行一個權衡的結果,理論的核心思想就是:我們無法做到強一致,但每個應用都可以根據自身的業務特點,采用適當的方式來使系統達到最終一致性。

?

12. 水平擴展/垂直擴展
?

  • 水平擴展 Scale Out通過增加更多的服務器或者程序實例來分散負載,從而提升存儲能力和計算能力。

?

?

  • 垂直擴展 Scale Up?提升單機處理能力。

?

?

垂直擴展的方式又有兩種:

?

(1)增強單機硬件性能,例如:增加CPU核數如32核,升級更好的網卡如萬兆,升級更好的硬盤如SSD,擴充硬盤容量如2T,擴充系統內存如128G;

(2)提升單機軟件或者架構性能,例如:使用Cache來減少IO次數,使用異步來增加單服務吞吐量,使用無鎖數據結構來減少響應時間;

?

? ?

13. 平行擴容
?

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

?

14. 彈性擴容
?

指對部署的集群進行動態在線擴容。彈性擴容系統可以根據實際業務環境按照一定策略自動地添加更多的節點(包括存儲節點、計算節點、網絡節點)來增加系統容量、提高系統性能或者增強系統可靠性,或者同時完成這三個目標。

?

15. 狀態同步/幀同步
?

  • 狀態同步:狀態同步是指服務器負責計算全部的游戲邏輯,并且廣播這些計算的結果,客戶端僅僅負責發送玩家的操作,以及表現收到的游戲結果。

?

?

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

?

  • 幀同步:服務端只轉發消息,不做任何邏輯處理,各客戶端每秒幀數一致,在每一幀都處理同樣的輸入數據。

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

?

?

?

?

?

?

?

三、網絡通信

?

1. 連接池
?

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

?

2. 斷線重連
?

由于網絡波動造成用戶間歇性的斷開與服務器的連接,待網絡恢復之后服務器嘗試將用戶連接到上次斷開時的狀態和數據。

?

3. 會話保持
?

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

?

4. 長連接/短連接
?

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

?

5. 流量控制/擁塞控制
?

  • 流量控制防止發送方發的太快,耗盡接收方的資源,從而使接收方來不及處理。

  • 擁塞控制防止發送方發的太快,使得網絡來不及處理產生擁塞,進而引起這部分乃至整個網絡性能下降的現象,嚴重時甚至會導致網絡通信業務陷入停頓。

?

6. 驚群效應
?

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

?

7. NAT
?

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

?

?

?

?

?

?

?

四、故障異常

?

1. 宕機
?

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

?

2. coredump
?

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

?

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

  • 緩存穿透:緩存穿透是指查詢一個一定不存在的數據,由于緩存是不命中時需要從數據庫查詢,查不到數據則不寫入緩存,這將導致這個不存在的數據每次請求都要到數據庫去查詢,進而給數據庫帶來壓力。

  • 緩存擊穿:緩存擊穿是指熱點key在某個時間點過期的時候,而恰好在這個時間點對這個Key有大量的并發請求過來,從而大量的請求打到db。

  • 緩存雪崩:緩存雪崩是指緩存中數據大批量到過期時間,而查詢數據量巨大,引起數據庫壓力過大甚至down機。

  • 與緩存擊穿不同的是:存擊穿是熱點key失效,緩存雪崩是大量的key同時失效。

?

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

  • 500 Internal Server Error:內部服務錯誤,一般是服務器遇到意外情況,而無法完成請求。可能原因: 1、程序錯誤,例如:ASP或者PHP語法錯誤;2、高并發導致,系統資源限制不能打開過多的文件所致。

  • 501Not implemented:服務器不理解或不支持請求的HTTP請求。

  • 502Bad Gateway:WEB服務器故障,可能是由于程序進程不夠,請求的php-fpm已經執行,但是由于某種原因而沒有執行完畢,最終導致php-fpm進程終止。可能原因:1、Nginx服務器,php-cgi進程數不夠用;2、PHP執行時間過長;3、php-cgi進程死掉;

  • 503Service Unavailable:服務器目前無法使用。系統維護服務器暫時的無法處理客戶端的請求,這只是暫時狀態。可以聯系下服務器提供商。

  • 504Gateway Timeout:服務器504錯誤表示超時,是指客戶端所發出的請求沒有到達網關,請求沒有到可以執行的php-fpm,一般是與nginx.conf的配置有關。

  • 505HTTP Version Not Supported:服務器不支持請求中所用的 HTTP 協議版本。(HTTP 版本不受支持)

?

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

?

5. 內存溢出/內存泄漏
?

  • 內存溢出:內存溢出(Out Of Memory)指程序申請內存時,沒有足夠的內存供申請者使用,或者說,給了你一塊存儲int類型數據的存儲空間,但是你卻存儲long類型的數據,那么結果就是內存不夠用,此時就會報錯OOM,即所謂的內存溢出。

  • 內存泄漏:內存泄漏(Memory Leak)指程序中己動態分配的堆內存由于某種原因程序未釋放或無法釋放,造成系統內存的浪費,導致程序運行速度減慢甚至系統崩潰等嚴重后果。

?

6. 句柄泄漏
?

句柄泄漏是進程在調用系統文件之后,沒有釋放已經打開的文件句柄。一般句柄泄漏后的現象是,機器變慢,CPU飆升,出現句柄泄漏的cgi或server的CPU使用率增加。

?

7. 死鎖
?

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

?

8. 軟中斷/硬中斷
?

  • 硬中斷:我們通常所說的中斷指的是硬中斷(hardirq)。

    ?

    主要是用來通知操作系統系統外設狀態的變化。

  • 軟中斷:1、通常是硬中斷服務程序對內核的中斷;2、為了滿足實時系統的要求,中斷處理應該是越快越好。

?

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

?

9. 毛刺
?

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

?

10. 重放攻擊
?

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

?

11. 網絡孤島
?

網絡孤島指集群環境中,部分機器與整個集群失去網絡連接,分裂為一個小集群并且發生數據不一致的狀況。

?

12. 數據傾斜
?

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

?

13. 腦裂
?

腦裂是指在集群系統中,部分節點之間網絡不可達而引起的系統分裂,不同分裂的小集群會按照各自的狀態提供服務,原本的集群會同時存在不一致的反應,造成節點之間互相爭搶資源,系統混亂,數據損壞。

?

?

?

?

?

?

?

五、監控告警

?

1. 服務監控
?

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

  • 系統層(CPU、網絡狀態、IO、機器負載等)

  • 應用層(進程狀態、錯誤日志、吞吐量等)

  • 業務層(服務/接口的錯誤碼、響應時間)

  • 用戶層(用戶行為、輿情監控、前端埋點)

?

2. 全鏈路監控
?

  • 服務撥測:服務撥測是探測服務(應用)可用性的監控方式,通過撥測節點對目標服務進行周期性探測,主要通過可用性和響應時間來度量,撥測節點通常有異地多個。
    ?

  • 節點探測:節點探測是用來發現和追蹤不同的機房(數據中心)節點之間網絡可用性和通暢性的監控方式,主要通過響應時間、丟包率、跳數來度量,探測方法一般是ping、mtr或其他私有協議。
    ?

  • 告警過濾:對某些可預知的告警進行過濾,不進入告警統計的數據,如少量爬蟲訪問導致的http響應500錯誤,業務系統自定義異常信息等。
    ?

  • 告警去重:當一個告警通知負責人后,在這個告警恢復之前,不會繼續收到相同的告警。
    ?

  • 告警抑制:為了減少由于系統抖動帶來的干擾,還需要實現抑制,例如服務器瞬間高負載,可能是正常的,只有持續一段時間的高負載才需要得到重視。
    ?

  • 告警恢復:開發/運維人員不僅需要收到告警通知,還需要收到故障消除告警恢復正常的通知。
    ?

  • 告警合并:對同一時刻產生的多條相同告警進行合并,如某個微服務集群同一時刻出現多個子服務負載過高的告警,需要合并成為一條告警。
    ?

  • 告警收斂:有時某個告警產生時,往往會伴隨著其它告警。這時可以只對根本原因產生告警,其它告警收斂為子告警一并發送通知。如云服務器出現CPU負載告警時往往伴隨其搭載的所有系統的可用性告警。
    ?

  • 故障自愈:實時發現告警,預診斷分析,自動恢復故障,并打通周邊系統實現整個流程的閉環。

?

?

?

?

六、服務治理

?

1. 微服務
?

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

?

2. 服務發現
?

服務發現是指使用一個注冊中心來記錄分布式系統中的全部服務的信息,以便其他服務能夠快速的找到這些已注冊的服務。服務發現是支撐大規模 SOA 和微服務架構的核心模塊,它應該盡量做到高可用。

?

3. 流量削峰
?

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

?

4. 版本兼容
?

在升級版本的過程中,需要考慮升級版本后,新的數據結構是否能夠理解和解析舊數據,新修改的協議是否能夠理解舊的協議以及做出預期內合適的處理。這就需要在服務設計過程中做好版本兼容。

?

5. 過載保護
?

過載是指當前負載已經超過了系統的最大處理能力,過載的出現,會導致部分服務不可用,如果處置不當,極有可能引起服務完全不可用,乃至雪崩。過載保護正是針對這種異常情況做的措施,防止出現服務完全不可用的現象。

?

6. 服務熔斷
?

服務熔斷的作用類似于我們家用的保險絲,當某服務出現不可用或響應超時的情況時,為了防止整個系統出現雪崩,暫時停止對該服務的調用。

?

7. 服務降級
?

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

  • 根據服務方式:可以拒接服務,可以延遲服務,也有時候可以隨機服務。

  • 根據服務范圍:可以砍掉某個功能,也可以砍掉某些模塊。

?

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

?

8. 熔斷VS降級

  • 相同點:目標一致,都是從可用性和可靠性出發,為了防止系統崩潰;用戶體驗類似,最終都讓用戶體驗到的是某些功能暫時不可用;

  • 不同點:觸發原因不同,服務熔斷一般是某個服務(下游服務)故障引起,而服務降級一般是從整體負荷考慮;

?

9. 服務限流
?

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

?

10. 故障屏蔽
?

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

?

?

?

?

?

?

?

七、測試方法

?

1. 黑盒/白盒測試
?

黑盒測試不考慮程序內部結構和邏輯結構,主要是用來測試系統的功能是否滿足需求規格說明書。一般會有一個輸入值,一個輸入值,和期望值做比較。

白盒測試主要應用在單元測試階段,主要是對代碼級的測試,針對程序內部邏輯結構,測試手段有:語句覆蓋、判定覆蓋、條件覆蓋、路徑覆蓋、條件組合覆蓋

?

2. 單元/集成/系統/驗收測試
?

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

  • 單元測試:單元測試是對軟件中的最小可驗證單元進行檢查和驗證,如一個模塊、一個過程、一個方法等。單元測試粒度最小,一般由開發小組采用白盒方式來測試,主要測試單元是否符合“設計”。

  • 集成測試:集成測試也叫做組裝測試,通常在單元測試的基礎上,將所有的程序模塊進行有序的、遞增的測試。集成測試界于單元測試和系統測試之間,起到“橋梁作用”,一般由開發小組采用白盒加黑盒的方式來測試,既驗證“設計”,又驗證“需求”。

  • 系統測試:系統測試時將經過集成測試的軟件,作為計算機系統的一部分,與系統中其他部分結合起來,在實際運行環境下進行一系列嚴格有效的測試,以發現軟件潛在的問題,保證系統的正常運行。系統測試的粒度最大,一般由獨立測試小組采用黑盒方式來測試,主要測試系統是否符合“需求規格說明書”。

  • 驗收測試:驗收測試也稱交付測試,是針對用戶需求、業務流程進行的正式的測試,以確定系統是否滿足驗收標準,由用戶、客戶或其他授權機構決定是否接受系統。驗收測試與系統測試相似,主要區別是測試人員不同,驗收測試由用戶執行。

?

3. 回歸測試
?

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

?

4. 冒煙測試
?

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

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

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

?

5. 性能測試
?

性能測試是通過自動化的測試工具模擬多種正常、峰值以及異常負載條件來對系統的各項性能指標進行測試。負載測試壓力測試都屬于性能測試,兩者可以結合進行。

  • 通過負載測試,確定在各種工作負載下系統的性能,目標是測試當負載逐漸增加時,系統各項性能指標的變化情況。

  • 壓力測試是通過確定一個系統的瓶頸或者不能接受的性能點,來獲得系統能提供的最大服務級別的測試。

?

6. 基準測試
?

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

?

7. A/B測試
?

A/B測試,是用兩組及以上隨機分配的、數量相似的樣本進行對比,如果實驗組和對比組的實驗結果相比,在目標指標上具有統計顯著性,那就可以說明實驗組的功能可以導致你想要的結果,從而幫你驗證假設或者做出產品決定。

?

8. 代碼覆蓋測試
?

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

?

?

?

?

?

?

?

八、發布部署

?


1. DEV/PRO/FAT/UAT
?

  • DEV(Development environment):開發環境,用于開發人員調試使用,版本變化較大。

  • FAT(Feature Acceptance Test environment):功能驗收測試環境,用于軟件測試人員測試使用。

  • UAT(User Acceptance Test environment):用戶驗收測試環境,用于生產環境下的功能驗證,可作為預發布環境。

  • PRO(Production environment):生產環境,正式線上環境。

?

2. 灰度發布
?

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

?

3. 回滾 (Rollback)
?

指的是程序或數據處理錯誤時,將程序或數據恢復到上一次正確狀態(或者是上一個穩定版本)的行為。

?

?

640?wx_fmt=gif

?

640?wx_fmt=png

?

---------------------

作者:iMike
來源:微信公眾號 -?運維之美(Hi-Linux)
轉自:云加社區
原文:https://cloud.tencent.com/developer/article/1498018
版權聲明:本文為作者原創文章,轉載請附上博文鏈接!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/285576.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/285576.shtml
英文地址,請注明出處:http://en.pswp.cn/news/285576.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(二)

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(一) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(二) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(三) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(四) 【專升本計算機】2021…

DB2錯誤碼信息

00 完全成功完成 表 3 01 警告 表 4 02 無數據 表 5 07 動態 SQL 錯誤 表 6 08 連接異常 表 7 09 觸發操作異常 表 8 0A 功能部件不受支持 表 9 0D 目標類型規范無效 表 10 0F 無效標記 表 11 0K RESIGNAL 語句無效 表 12 0N SQL/XML 映射錯誤 表 13 20 找不到 CASE…

WPF 開源控件庫Extended WPF Toolkit介紹(經典)

01—Extended WPF Toolkit介紹Extended WPF Toolkit 可以說是WPF Toolkit 的一個補充,Extended WPF Toolkit包含了標準的WPF Toolkit里沒有的Windows Presentation Foundation(WPF)控件、工具和組件。Extended WPF Toolkit是創建下一代Window…

vi和vim 的常用操作

:q! 強制退出 到文件末尾: ESC shift G : 到文件頭: G G: 整塊模式 快捷鍵 【不使用鼠標,來選擇塊】 v 字符選擇,會將光標經過的地方反白選擇!V(大寫) 行選擇,會將光標經過…

C語言試題102之用*號輸出字母 C 的圖案

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:用號輸出字母 C 的圖案 分析:可先用’號在紙上寫出字母 C,再分行輸出。 2 、溫馨提…

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(三)

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(一) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(二) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(三) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(四) 【專升本計算機】2021…

WPF 用代碼實現WrapPanel右側自動對齊(解決多余空白問題)

未處理前效果&#xff1a; 處理后效果&#xff1a; <Border Background"{StaticResource BorderBg}" BorderThickness"2" BorderBrush"{StaticResource BorderBrush}" CornerRadius"5" Padding"5" x:Name"SvK…

.NET 中的引用程序集

.NET 中的引用程序集Intro在 .NET 里有一種特殊的程序集叫做 ReferenceAssembly(引用程序集)&#xff0c;引用程序集&#xff08;Reference Assemblies&#xff09; 是一種特殊類型的程序集&#xff0c;它只包含表示庫的公共 API 所需的最少元數據量。它們包括在生成工具中引用…

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(四)

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(一) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(二) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(三) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(四) 【專升本計算機】2021…

14.6.3.1 The InnoDB Buffer Pool

14.6.3.1 The InnoDB Buffer PoolInnoDB 保持一個存儲區域被稱為buffer pool 用于cache數據和索引在內存里,知道InnoDB buffer pool 如何工作,利用它來保持頻繁訪問的數據在內存里,是MYSQL 調優的一個重要方面。你可以配置InnoDB buffer pool的各個方面來改善性能:理想情況下,你…

C語言試題105之要求輸出國際象棋棋盤

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:要求輸出國際象棋棋盤。 分析:用 i 控制行,j 來控制列,根據 i+j 的和的變化來控制…

一個js的動畫,以前以為只有flash可以實現

11年剛干這行的時候&#xff0c;看到這種什么百葉窗的動畫&#xff0c;以為都是flash實現的&#xff0c;最近突然靈光一閃&#xff0c;想到了用js實現&#xff08;雖然我不是做前端的&#xff0c;本人做.net&#xff09;。代碼雖然實現了&#xff0c;但是比較亂&#xff0c;先上…

[轉]docker入門(利用docker部署web應用)

前言:本課程是在慕課網上學習 第一個docker化的java應用 課程時所做的筆記,供本人復習之用 目錄 第一章 什么是docker 1.1 docker的發展史 1.2 docker國內應用史 1.3 什么是Docker 第二章 了解docker 2.1 docker思想 2.1.1 集裝箱 2.1.2 標準化 2.1.3 隔離 2.2 dock…

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(五)

【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(一) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(二) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(三) 【專升本計算機】2021年甘肅省專升本計算機全真模擬試題(四) 【專升本計算機】2021…

如何讓 EF Core 6 支持 DateOnly 類型

前言上次&#xff0c;我們發現《DateOnly 和 TimeOnly 類型居然不能序列化》。但問題還不僅僅如此。問題重現假設有下列實體類&#xff1a;public class User {public int Id { get; set; }public string Name { get; set; } public DateOnly Birthday { get; set; } }由…

yii2筆記: 單元測試

使用composer方式安裝yii2-app-basic (https://github.com/yiisoft/yii2-app-basic/blob/master/README.md) 裝好后既可以使用 建一個Model文件EntryForm.php在models目錄下 <?phpnamespace app\models;use Yii; use yii\base\Model;class EntryForm extends Model {public…

[轉]Python 列表(List) 的三種遍歷(序號和值)方法

if __name__ __main__:list [html, js, css, python]for i in list:print(list.index(i), i)# 方法1print( 遍歷列表方法1&#xff1a;)for i in list:print ("序號&#xff1a;%s 值&#xff1a;%s" % (list.index(i) 1, i))print (\n遍歷列表方法2&#xff1a;)…

C語言試題103之輸出特殊圖案,請在 c 環境中運行,看一看

?作者簡介:大家好我是碼莎拉蒂,CSDN博客專家?????? ??個人主頁:個人主頁 ??系列專欄:C語言試題200例 ??推薦一款模擬面試、刷題神器?? 點擊跳轉進入網站 1、題目 題目:輸出特殊圖案,請在 c 環境中運行,看一看 2 、溫馨提示 想獲取更多C語言題目請猛搓這…

Web頁面獲取用戶控件頁面中服務器控件的值

用戶控件頁面后臺&#xff1a; public string P_Name{get { return txt_P_name.Value; }set { txt_P_name.Value value; }} Web頁面后臺&#xff1a; if (head.P_Name ! "")//head為用戶控件的標簽名{strwhere " and a.P_NAME like %" head.P_Name &qu…

【C#程序設計】教學講義——第一章:C#語言概述

文章目錄 1.1 認識Visual C#1.2 .NET Framework 3.51.3 Visual C# 2008集成開發環境1.4 使用幫助系統1.5 用C#創建Windows應用程序1.6 用C#創建控制臺應用程序1.1 認識Visual C# 1.1.1 C#語言的由來 1.C和C++ 一直是商業軟件開發領域中最具有生命力的語言; 利用C和C++語言開…