[翻譯]Dapr 長程測試和混沌測試

介紹

這是Dapr的特色項目,具體參見:https://github.com/dapr/test-infra/issues/11 ,在全天候運行的應用程序中保持Dapr可靠性至關重要。在部署真正的應用程序之前,可以通過在受控的混沌環境中構建,部署和操作此類應用程序來實現這種信心。

測試應用程序

所測試應用程序將模擬在社交網絡中發布的消息,以便通過情緒分析進行評分。不采用外部依賴來更好地控制環境。可以刪除某些組件,并實現相同的結果。另一方面,這個測試設計是有意地執行Dapr的所有構建塊。
此應用程序中的所有組件使用相同的存儲庫和相同的編程語言實現,以便快速開發。由于此應用程序也使用 Actor 功能,因此可以用 .Net 或 Java 編寫。鑒于當前的項目維護者更熟悉 C#,因此使用帶有 C# 的 .Net SDK來實現這個項目。
存儲庫應與現有存儲庫分開。建議創建一個名為“長程測試”的新存儲庫。

e5ffa9e09b05df61673951a31368bdc7.png

Feed 流發生器

生成人工社交網絡消息帖子,例如:“Dapr很棒。#DaprRocks #Kubernetes“。將在預定義的模板中自動生成這些消息“ is . <Hashtag 1> <Hashtag 2>” 名詞和形容詞的列表是預定義的,并且是隨機選擇的。與主題標簽列表相同。
該消息使用 UUID 生成器獲取隨機生成的消息 Id 和相關 Id,并使用 Dapr 的 PubSub API 以下列格式發布:

{"correlationId": "<UUID>","messageId": "<UUID>","message": "<message>","creationDate": "<creationDate>"
}
消息分析器

該組件通過Dapr 的PubSub功能訂閱主題,查找形容詞與情緒類型(正面,中性,負面)的映射,并使用識別的類型(或未知,如果找不到)并將該內容附加到消息中。最后,通過 Dapr 的輸出綁定API 發布新的標記有效負載。
標記的有效負載采用以下格式:

{"correlationId": "<UUID>","messageId": "<UUID>","message": "<message>","sentiment": "<sentiment type>","creationDate": "<creationDate>"
}
Hashtag 計數器

此組件將通過 Dapr 的輸入綁定調用接收消息。從郵件中提取主題標簽。對于每個hashtag標識的# 標簽,它都會進行一個Actor方法調用:標識為“HashtagActor”的執行組件實例中的方法increment(sentiment)。

Hashtag Actor 服務

此組件對于在 Dapr 中練習“Actor ”功能非常有用。它注冊主題HashtagActor 程序類型,其中hashtag是標識符。這個Actor 有一個方法increment(String sentiment), 其目標是保持每個主題標簽 - 情緒組合的計數器。在狀態鍵中傳遞的情緒和狀態值是前一個值(如果未找到,則為零),增量為 1。

Hashtag 快照服務

此組件將執行 Dapr 的狀態 API(而不是在Actor 的上下文中)。它每分鐘喚醒一次,并從 Redis 狀態存儲中檢索所有Key - 不使用 Dapr 的狀態 API,因為 Dapr 不提供 API 來從另一個 Dapr 應用程序的狀態存儲中查詢一系列狀態。預計只有幾十個Key,因為此組件中預定義了主題標簽列表。
現在,為所有狀態生成鍵值對,并通過 Dapr 的狀態存儲 API 保存。此服務還提供了一個 API,用于通過 GET 方法檢索所有密鑰。

驗證Worker

此組件將對應用程序的結果執行運行狀況檢查。鑒于最終的一致性和人為注入的故障,驗證必須是模糊的。Worker應執行以下驗證:

  • 每5分鐘喚醒一次。

  • 通過在Hashtag 快照服務上調用 API 來獲取所有鍵值對。

  • Sleep 2分鐘。

  • 通過在Hashtag 快照服務上調用 API 來獲取所有鍵值對。

  • 計算已更改的計數器數的比率。

  • 以 JSON 格式向標準輸出指標:{ "longhaul-counters-changeratio": "<ratio>"}

儀表板網絡應用

這是一個簡單的網頁,它將調用Hashtag 快照服務進行 API ,顯示所有鍵值對。這對于手動驗證非常有用。(可選)此組件還可以通過 Dapr 的中間件驗證 OAuth 功能。

失敗守護進程

最后但并非最不重要的一點是,在給定固定配置的情況下,此服務將觸發故障。本文檔稍后將介紹故障類型和特定的故障配置。

平臺、日志和指標

長程測試應用將使用 AKS 群集進行部署,該群集在 3 個可用區中的每個節點上至少有 1 個節點。由于目標是測試復原能力而不是性能,并且流量是人為生成的,因此便宜的硬件類型應該足夠了,例如標準DS2 v2(2個vcpus,7 GiB內存)。
日志和指標將轉發到 Azure 監視器,并且可以通過 JSON 作為結構化數據進行查詢。

故障類型

為了模擬混亂的環境,將注入一些人為的故障。可以通過將服務從 3 縮小到 0,然后從 0 擴展到 3 來實現重新啟動。當需要單個 POD(例如,placement服務)時,重新縮放應改為從1/到 1。

應用容器崩潰

若要模擬的應用崩潰(進程退出),任何容器都將在一段時間內重新啟動此系統。值得注意的是,Dapr的Sidecar 預計將繼續運行。預計容器將正常重新啟動,Dapr的Sidecar將在沒有手動干預的情況下恢復與應用程序的通信。

Pod 崩潰

要模擬給定 POD 不正常的情況,系統中的服務 POD 將在一段時間內重新啟動。這是部分故障,這意味著在 Kubernetes 恢復新 POD 時,服務應繼續運行。預計 Kubernetes 會將服務再次恢復到正常狀態,而來自其他服務的 Dapr sidecar 將能夠與恢復的服務中的所有 POD 進行通信。

服務崩潰

此故障通過重新啟動服務的所有 POD 來模擬服務的完全中斷。這將導致驗證工作程序可能會識別完全中斷。預計 Kubernetes 會將服務再次恢復到正常狀態,而來自其他服務的 Dapr sidecar 將能夠與恢復的服務中的所有 POD 進行通信。

狀態存儲中斷

狀態存儲可能由于任何原因而關閉。為了模擬這一點,Redis 的所有 POD 都將每隔一段時間重新啟動一次。

狀態存儲速度緩慢

狀態存儲的性能可能會因鄰居應用的繁忙或其他外部因素而降低。這是通過在內部以 X tps 對 Redis 執行 Y 秒的寫入操作來模擬的。預計數據處理會有些緩慢,但在突發結束后恢復。

主題中斷

主題可能因任何原因而關閉。這將通過每隔一段時間重新啟動 Kafka 的所有 POD 來模擬。

主題緩慢

由于并置了另一個主題并接收到流量峰值,因此主題的吞吐量可能會降低。緩慢也可能是由其他外部因素引起的。為了模擬這一點,創建了一個隨機主題ios,副本設置為3(保證所有節點都有數據的副本),并且流量以X tps保持,持續時間為Y秒,間隔一次。預計數據處理會有些緩慢,但在突發結束后恢復。

Dapr 的sidecar 注入器奔潰

使用以下步驟模擬此故障后,數據處理應繼續,并且所有 POD 都應具有 Dapr sidecar。

  • 將服務從 3 擴展到 0。

  • 等待服務為 0。

  • 重新啟動達普爾的邊車噴油器。

  • 將服務從 0 擴展到 3。

Dapr的placement服務崩潰

這是通過每隔一段時間重新啟動placement服務來模擬的。

Dapr的Sentry服務崩潰

這是通過每隔一段時間重新啟動sentry服務來模擬的。

Actor 實例化 洪峰

某些應用程序可能會在很短的時間內創建許多Actor。這種突發將通過創建隨機類型的actor并以X tps的固定速率激活它來模擬,以達到一定間隔的持續 D。頻繁的Actor類型必須與應用中使用的actor 類型不同,但也應由 Hashtag Actor 服務注冊,以確保服務獲得流量負載。預計數據處理會有些緩慢,但在洪峰結束后恢復。

失敗配置

失敗守護程序將配置為每隔一小時執行以下模式 (即,活動 1 小時,空閑 1 小時)。

  • Feed 流生成器的容器每 2 分鐘崩潰一次。

  • 消息分析器的容器每 3 分鐘崩潰一次。

  • Hashtag計數器的容器每 4 分鐘崩潰一次。

  • Hashtag Actor 服務的容器每 5 分鐘崩潰一次。

  • Hashtag計數器的POD每9分鐘崩潰一次。

  • Hashtag Actor服務的 POD 每 10 分鐘崩潰一次。

  • 消息分析器的服務每 7 分鐘崩潰一次。

  • 狀態存儲每 25 分鐘中斷一次。

  • 狀態存儲速度為每 29 分鐘 1 分鐘(tps 將在實現期間定義)。

  • 每 21 分鐘中斷一次主題。

  • 每 23 分鐘有 1 分鐘的主題緩慢。

  • Dapr的Sidecar 注入器與Hashtag 快照服務每13分鐘崩潰一次。

  • Dapr的placement每5分鐘崩潰一次。

  • Dapr的sentry服務每7分鐘就會崩潰一次。

  • Actor 的實例化每 10 分鐘突發 1 分鐘(tps 將在實現期間定義)。

如果上述所有故障在現實世界中都不能一起證明是可行的,那么 Failure Daemon 可以隨機選擇上述故障配置的子集(例如 5),并僅在給定運行中執行這些配置。

測試驗證

測試驗證通過 Azure 監視器中觸發 sev3 的監視器上的警報進行。將配置以下監視器,并應始終保持正常:

數據處理

對于兩個連續的數據點,驗證工作人員的更改比率指標永遠不應為零。此指標由驗證工作程序發出。

消息分析器延遲

消息分析器必須發布自消息創建以來延遲的指標。任何消息都不應早于 2 分鐘。此指標由消息分析器發出。

Hashtag計數器延遲

Hashtag計數器必須發布自消息創建以來延遲的指標。任何消息都不應早于 4 分鐘。此指標由 Hashtag計數器發出。

過時快照

即使 Hashtag 快照服務正在運行,最后一個快照也可能太舊。Hashtag 快照服務應在自上次成功運行以來延遲時發布指標。延遲不應超過 5 分鐘。此指標可由 Hashtag 快照服務發出。

服務運行狀況

可以使用其他告警檢測到完全中斷。要檢測部分故障,任何服務都不能在超過 50 分鐘內具有少于 3 個正常運行的 POD。此衡量指標可由失敗守護程序發出。

一般錯誤計數峰值

錯誤計數峰值時發出警報。確切的值將在實施過程中確定。

無錯誤

錯誤計數不應大于零超過 70 分鐘(即,進入正常小時 10 分鐘)。

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

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

相關文章

python UDP-數據報協議

基于udp協議通信的套接字 服務端 1 from socket import *2 3 server socket(AF_INET, SOCK_DGRAM) # SOCK_DGRAM>數據報協議4 server.bind((127.0.0.1, 8080))5 6 print(start....)7 while True:8 data, client_addr server.recvfrom(1024) # (bhello, (127.0.0.1, …

Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0

一、問題描述&#xff1a; 在服務器端可以正常連接并操作mysql&#xff0c;但是在windows端使用navicat工具遠程ssh連接就出現下面錯誤。 1、服務器端&#xff1a; 2、windows端navicat連接 3、原因 原來我今天在做主從配置的時候&#xff0c;將 /etc/my.cnf 配置文件中的b…

自定義ProgressBar(圓)

2019獨角獸企業重金招聘Python工程師標準>>> <lib.view.progressbar.ColorArcProgressBarandroid:layout_width"match_parent"android:layout_height"220dip"android:id"id/barInterest"android:layout_centerInParent"true&…

C# Task用法詳解

概述Task是微軟在.Net 4.0時代推出來的&#xff0c;Task看起來像一個Thread&#xff0c;實際上&#xff0c;它是在ThreadPool的基礎上進行的封裝&#xff0c;Task的控制和擴展性很強&#xff0c;在線程的延續、阻塞、取消、超時等方面遠勝于Thread和ThreadPool&#xff0c;所以…

函數調用堆棧圖

轉載于:https://www.cnblogs.com/DeeLMind/p/7617972.html

jquery運動

在前面封裝的move.js框架&#xff0c;在jquery中有同樣封裝好的功能animate()。使用方法非常類似&#xff0c;下面我們看看animate的使用方法&#xff0c;有了原生的運動方法&#xff0c;然后再使用jquery的運動方法就會變得非常簡單。 animate()語法 $(selector).animate({par…

Session的原理,大型網站中Session方面應注意什么?

一、Session和Cookie的區別 Session是在服務器端保持會話數據的一種方法&#xff08;通常用于pc端網站保持登錄狀態&#xff0c;手機端通常會使用token方式實現&#xff09;&#xff0c;存儲在服務端。 Cookie是在客戶端保持用戶數據&#xff0c;存儲位置是客戶端&#xff08…

MySQL5.5讀寫分離之mysql-proxy

通常一個網站在初期訪問量都比較小&#xff0c;所以一般的小架構足以支撐。但是&#xff0c;當網站逐漸發展起來后&#xff0c;隨之而來的是大量的訪問&#xff0c;這時候最先出現的瓶頸就是數據庫了。因為數據的寫入讀取操作&#xff08;I/O&#xff09;是集群中響應速度最慢的…

兩圓相交求面積 hdu5120

轉載 兩圓相交分如下集中情況&#xff1a;相離、相切、相交、包含。 設兩圓圓心分別是O1和O2&#xff0c;半徑分別是r1和r2&#xff0c;設d為兩圓心距離。又因為兩圓有大有小&#xff0c;我們設較小的圓是O1。 相離相切的面積為零&#xff0c;代碼如下&#xff1a; [cpp] view …

Python_list部分功能介紹

x.append():在列表尾部添加一個元素 x.clear():把列表清空 x.count():判斷某個元素出現的次數 x.extend():合并兩個列表&#xff0c;或者一個元組 x.index():獲取元素下標 x.insert():指定下標添加元素 x.pop():移除某一元素&#xff0c;移除的元素可獲取 x.remove():移除指定的…

一招解決開發環境問題 —— 遠程容器開發指南

前言使用C作為主要開發語言的程序猿們應該會認同搭建開發環境是一件煩人的事情。為了編譯一個程序不僅需要下載各種依賴包&#xff0c;還可能面臨本地系統不兼容、編譯器版本不一致、包版本沖突等各種問題。筆者在運營iLogtail開源社區的過程中發現開發和調試環境問題也是成員問…

php中常用的加密方式

一、md5 要說php中的最常用的加密方式&#xff0c;md5可以說是當仁不讓。 使用起來也很簡單便捷。 注&#xff1a;使用方式請看 六、md5加密方式的漏洞及解決方案 二、password_hash 作為php5.5以上版本專門用于加密的方式&#xff0c;自然有其獨到之處。 使用方式鏈接&a…

解決問題的策略-分而治之

一個宏偉的目標看上去遙不可及&#xff0c;這怎么可能做成呢&#xff1f;但是你把這些目標分解成一個一個的小目標&#xff0c;小目標再往下分解&#xff0c;分解到最后&#xff0c;分解成細枝末節時你會發現&#xff0c;這事其實是可以做的。這個做成了再往下走一步&#xff0…

UITabBarController的基本原理及使用(一)

前言 UITabBarController在iOS開發中是一個高頻使用的控制器&#xff0c;典型的案例如QQ、微信均使用UITabBarController布局。本文將從一個新建工程&#xff0c;和大家一起了解UITabBarController的基本原理和使用方法。 基本概念 UITabBarController能夠方便地管理多個控制器…

word-vba-microsoft(中英文)

中文 https://msdn.microsoft.com/zh-cn/vba/word-vba/articles/view-displaypageboundaries-property-word 英文 https://msdn.microsoft.com/en-us/vba/word-vba/articles/view-displaypageboundaries-property-word轉載于:https://www.cnblogs.com/itzxy/p/7625915.html

C# 多線程ThreadPool用法舉例

概述ThreadPool是.Net Framework 2.0版本中出現的。自從Task出來以后&#xff0c;ThreadPool已經很少用了&#xff0c;但是一些老的代碼或者一些古老的程序猿還是會用到他&#xff0c;所以我們可以不用它&#xff0c;但是還是有必須學習和了解他.ThreadPool用法舉例static void…

Mysql實現主從復制(一主雙從)

一、環境介紹 LNMP&#xff08;centos7&#xff0c;mysql5.6&#xff09; vmware workstation pro配置了3個虛擬機&#xff0c;均安裝了LNMP環境&#xff1a; master&#xff1a; 192.168.0.105 slave&#xff1a; 192.168.0.106 、192.168.0.107 二、原理 &a…

Elasticsearch學習筆記-04.3批處理

除了創建、更新和刪除個別文檔&#xff0c;Elasticsearch還提供了使用_bulk API的上述操作的批量操作方法。這個功能很重要&#xff0c;因為他提供了一種有效的機制來在盡可能少的網絡傳輸過程中執行多次操作。 作為一個快速示例&#xff0c;下面的命令在一次批量操作中索引了兩…

接口文檔神器Swagger(下篇)

本文來自網易云社區作者&#xff1a;李哲二、Swagger-springmvc原理解析上面介紹了如何將springmvc和springboot與swagger結合&#xff0c;通過簡單配置生成接口文檔&#xff0c;以及介紹了swagger提供的一些注解。下面將介紹swagger是如何做到與springmvc結合&#xff0c;自動…

php實現mysql分表

一、場景說明 1、為什么要進行分表 隨著數據量的不斷增大&#xff0c;一張表中的數據肯定也會越來越多&#xff0c;甚至達到百萬甚至千萬級。我們通常會通過搭建mysql集群&#xff08;主從同步&#xff09;&#xff0c;讀寫分離來實現優化數據庫查詢執行效率。 但是由于數據…