日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

China .NET Conf 2019-.NET技术架构下的混沌工程实践

發(fā)布時間:2023/12/4 asp.net 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 China .NET Conf 2019-.NET技术架构下的混沌工程实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

這個月的8號、9號,個人很榮幸參加了China.NET Conf 2019 , 中國.NET開發(fā)者峰會,同時分享了技術(shù)專題《.NET技術(shù)架構(gòu)下的混沌工程實踐》,給廣大的.NET開發(fā)小伙伴介紹混沌工程和高可用性改造實踐。會后大家伙聚餐的時候,陳計節(jié)老師建議大家將各自的議題分享到社區(qū),分享給大家。因此,今天和大家分享我的技術(shù)專題《.NET技術(shù)架構(gòu)下的混沌工程實踐》。

整個專題主要分為四個部分:

  • .NET分布式、微服務(wù)架構(gòu)下的高可用性挑戰(zhàn)

  • 混沌工程簡介

  • .NET混沌工程的實踐和成果分享

  • 展望和規(guī)劃

  • 一、.NET分布式、微服務(wù)架構(gòu)下的高可用性挑戰(zhàn)

    目前,我們特來電的技術(shù)架構(gòu)是分布式、微服務(wù)化的,線上超過1000臺Server,高可用保障壓力很大:

    • 系統(tǒng)7*24小時運行,不允許宕機,一旦宕機出問題,直接影響全國人民出行;

    • 系統(tǒng)SLA要求99.95% ,全年可宕機時間只有4.38小時;

    • 服務(wù)調(diào)用鏈路越來越長,依賴越來越復(fù)雜,某個環(huán)節(jié)出問題,都有肯能導致服務(wù)雪崩、大規(guī)模宕機;

    • 線上遭遇:網(wǎng)絡(luò)抖動、內(nèi)存泄露、線程阻塞、CPU被打爆、 數(shù)據(jù)庫被打爆、中間件宕機等棘手問題;

    • 每天上百次發(fā)布更新,系統(tǒng)高可用性保障壓力非常大;

    一張全鏈路監(jiān)控圖可以反映我們系統(tǒng)的復(fù)雜:

    例如主機CPU被打爆的問題,線上經(jīng)常會遇到:

    經(jīng)歷了線上各種高可用性問題后,我們做了很多反思和總結(jié):

    系統(tǒng)在實現(xiàn)了分布式、微服務(wù)化之后,我們到底有多少把握來保證系統(tǒng)的正常運行???

    如果出現(xiàn)問題,整個分布式系統(tǒng)會變得非常“混亂”,甚至會引發(fā)系統(tǒng)的大規(guī)模宕機。

    因此,我們有必要在線上事故出現(xiàn)之前,提前識別出系統(tǒng)有哪些弱點和問題,統(tǒng)一管控系統(tǒng)的固有混沌。

    這套管控系統(tǒng)固有混沌的方法和體系,就是我們今天要介紹的主角:混沌工程

    二、混沌工程簡介

    1. 什么是混沌工程?

    通過受控的實驗,掌握系統(tǒng)運行行為的過程,稱為混沌工程。

    ? ? 混沌工程的典型實踐:Chaos Monkey
    ? ? ?一只搗亂的猴子,在你的系統(tǒng)里面上蹦下竄,不停搗亂,直到搞掛你的系統(tǒng)。

    ? ??

    2. 為什么需要混沌工程?

    ? ?混沌工程可以提升整個系統(tǒng)的彈性。
    ? ?通過混沌實驗,可以發(fā)現(xiàn)系統(tǒng)脆弱的一面,主動發(fā)現(xiàn)這些問題,并解決這些問題

    3. 混沌工程怎么做?

    ? ?混沌工程的一般實施步驟:

    1 選擇系統(tǒng)正常運行狀態(tài)下的可度量指標,作為基準的“穩(wěn)定狀態(tài)”
    2 混沌實驗分為實驗組和對照組,都能保持系統(tǒng)的“穩(wěn)定狀態(tài)”
    3 對實驗組注入混沌事件,如服務(wù)不可用、中間件宕機等混沌事件
    4 比較實驗組和對照組“穩(wěn)定狀態(tài)”的差異

    ? ?如果混沌實驗前后系統(tǒng)的“穩(wěn)定狀態(tài)”一致,則可以認為系統(tǒng)應(yīng)對這種混沌事件是彈性的、高可用的。
    ? ?相反的,如果打破了系統(tǒng)的穩(wěn)定狀態(tài),我們就找到了一個系統(tǒng)弱點,然后盡可能地解決它,提升系統(tǒng)的高可用性。

    4. 實施混沌工程的推薦原則

    • 明確系統(tǒng)穩(wěn)定運行的狀態(tài)(指標)

    • 混沌事件必須是現(xiàn)實世界可能發(fā)生的(合理的)

    • 在生產(chǎn)環(huán)境進行混沌實驗 :生產(chǎn)環(huán)境可以真實地反映系統(tǒng)的穩(wěn)定性

    • 持續(xù)集成:線上應(yīng)用每天都在更新,通過持續(xù)集成的方式可以不斷發(fā)現(xiàn)問題、解決問題。

    • 最小化影響范圍:線上進行混沌實驗,必須可控,必須確定混沌實驗的最小化影響范圍。

    ? ?這里大家會問:在生產(chǎn)環(huán)境上搞混沌實驗,能行嗎?

    5. 現(xiàn)實中的混沌工程

    ? 生產(chǎn)環(huán)境必須以穩(wěn)定為前提,因此推薦O2O模式的混沌實驗:即線下演練、線上驗證
    ? 在系統(tǒng)未經(jīng)過大規(guī)模高可用性改造之前,建議首先進行全面的線下演練:

    ? ?

    ? ?那么, .NET技術(shù)架構(gòu)下的混沌工程怎么做?

    三、.NET混沌工程的實踐和成果分享

    ? 我們線上系統(tǒng)主要用到了以下.NET技術(shù)棧和開源技術(shù):

    • ASP.NET MVC

    • 基于ASP.NET Core的Web運行框架-WRF

    • 基于ASP.NET Web API的分布式服務(wù)網(wǎng)關(guān)-SG

    • 基于.NET RPC通訊技術(shù)的分布式微服務(wù)平臺-HSF

    • 基于RabbitMQ和Kafka的消息應(yīng)用中心-MAC

    • iBatis.NET & Entity Framework

    • RabbitMQ & RabbitMQ Client for .NET

    • Kafka & Confluent.Kafka

    • Redis

    • Nginx

    ? ? 在上述.NET 技術(shù)架構(gòu)下,我們梳理了大量的混沌工程事件:

    ? ??

    ? ??

    ? ??

    ? ? ?通過大量的混沌實驗,我們逐步建立了提升系統(tǒng)高可用性的方法論和體系:

    ? ? ?

    ? ? ?.NET技術(shù)架構(gòu)下的高可用性改進-依賴治理、容錯降級? ? ?

    ? ? ? 業(yè)務(wù)場景:
    ? ? ? 隨著業(yè)務(wù)復(fù)雜度的上升,服務(wù)調(diào)用鏈路越來越長,鏈路上存在大量不可控的因素:? ? ??


      • 網(wǎng)絡(luò)抖動,導致服務(wù)異常

      • Redis、MQ、DB等中間件不可用,導致服務(wù)超時、異常

      • 依賴的服務(wù)不可用,直接影響服務(wù)調(diào)用方??

    ? ? ?? ? ?

    ? ? ?如何應(yīng)對:識別強弱依賴,對弱依賴進行降級,對強依賴有限降級? ? ?


      • “用戶有感知” 是強依賴

      • “用戶無感知” 是弱依賴

      • 故障發(fā)生時,核心業(yè)務(wù)有損失的是強依賴,無損失的是弱依賴

    ? ? ??? ? ?

    ? ? ? .NET技術(shù)架構(gòu)下的高可用性改進-解耦/隔離? ? ? ?

    ? ? ??業(yè)務(wù)場景:
    ? ? ? 核心業(yè)務(wù)的調(diào)用鏈路很長,整個鏈路上包含主流程和輔流程
    ? ? ? 輔流程的重要性低,不能因為輔流程的不可用,影響了主流程。

    ? ? ??

    ? ? ? ?如何應(yīng)對:

    ? ? ? ?

    ? ? ? ?.NET技術(shù)架構(gòu)下的高可用性改進-超時治理? ? ? ??

    ? ? ? ?業(yè)務(wù)場景:
    ? ? ? ?對于服務(wù)超時,長時間等待會影響用戶體驗,并發(fā)大時還可能造成線程池被打爆。
    ? ? ? ?同時可能產(chǎn)生服務(wù)級聯(lián)反應(yīng),導致大范圍服務(wù)雪崩。

    ? ? ? ?? ? ? ?

    ? ? ? ? 應(yīng)對方案:
    ? ? ? ? 超時時間設(shè)置:服務(wù)剛上線時,可以根據(jù)壓測情況預(yù)估一個值;
    ? ? ? ? 服務(wù)上線后再根據(jù)實際監(jiān)控進行修改,比如設(shè)置99%的請求響應(yīng)時間為超時時間。
    ? ? ? ? 超時后的處理策略:
    ? ? ? ? 如果不是核心服務(wù),可直接超時返回失敗。
    ? ? ? ? 如果是核心服務(wù),可以設(shè)置相應(yīng)的重試次數(shù).? ? ? ? ?

    ? ? ? ? 示例:
    ? ? ? ? 配置服務(wù)超時時間
    ? ? ? ? 設(shè)置Http請求超時時間
    ? ? ? ? 設(shè)置數(shù)據(jù)庫連接超時、SQL執(zhí)行超時
    ? ? ? ? 代碼控制超時時間(例如:Polly的Timeout策略)

    ? ? ? .NET技術(shù)架構(gòu)下的高可用性改進-重試補償? ? ? ? ?

    ? ? ? ??業(yè)務(wù)場景:
    ? ? ? ? 實際線上應(yīng)用中,假如遇到網(wǎng)絡(luò)抖動、發(fā)布重啟、數(shù)據(jù)庫阻塞超時等情況,都有可能引起服務(wù)調(diào)用失敗。? ? ? ? ?

    ? ? ? ? 應(yīng)對方案:
    ? ? ? ? 通過失敗重試、異常后的補償,盡可能地保證業(yè)務(wù)可用。
    ? ? ? ? 重試情況下:業(yè)務(wù)要保證冪等性、保證最終一致性。? ? ? ??

    ? ? ? ??示例:
    ? ? ? ? 服務(wù)失敗重試策略
    ? ? ? ? 消息發(fā)送、消費失敗重試、補償
    ? ? ? ? 代碼層面失敗重試補償(例如:Polly的Retry策略)

    ? ? ? 高可用改進還有很多技巧,這里不一一詳細給大家贅述了。

    ? ? ??通過對系統(tǒng)進行全面的高可用性改進,提升了我們對線上系統(tǒng)的信心!

    四、 展望和規(guī)劃

    ? ? 2019年,我們啟動了混沌工程實踐,逐步建立了混沌工程的自有方法論和體系,通過近一年的混沌工程實踐,混沌工程文化逐漸被開發(fā)團隊所認可。目前,混沌工程已經(jīng)逐步過渡到線上生產(chǎn)環(huán)境進行(這來自于足夠的信心和把握)。但這只是一個起步,未來:

    • 正式的混沌工程團隊:通過多團隊配合、保障資源的持續(xù)投入

    • 覆蓋所有的關(guān)鍵核心應(yīng)用:讓混沌工程深入到每個產(chǎn)品

    • 堅持O2O混沌工程實踐:線下演練、線上驗證,更可控

    • 混沌事件注入工具:ChaosBlade for .NET,工具讓混沌工程更高效

    • 持續(xù)的混沌實驗:持續(xù)進行、持續(xù)改進

    ? ??目標:通過混沌工程揭示問題、解決問題、形成閉環(huán),不斷提升系統(tǒng)高可用性。

    以上是本次China.NET Conf 2019的技術(shù)專題,分享給大家。


    總結(jié)

    以上是生活随笔為你收集整理的China .NET Conf 2019-.NET技术架构下的混沌工程实践的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。