[翻译]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.mzph.cn/news/282260.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

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

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

一、Session和Cookie的区别 Session是在服务器端保持会话数据的一种方法&#xff08;通常用于pc端网站保持登录状态&#xff0c;手机端通常会使用token方式实现&#xff09;&#xff0c;存储在服务端。 Cookie是在客户端保持用户数据&#xff0c;存储位置是客户端&#xff08…

两圆相交求面积 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开源社区的过程中发现开发和调试环境问题也是成员问…

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

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

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…

接口文档神器Swagger(下篇)

本文来自网易云社区作者&#xff1a;李哲二、Swagger-springmvc原理解析上面介绍了如何将springmvc和springboot与swagger结合&#xff0c;通过简单配置生成接口文档&#xff0c;以及介绍了swagger提供的一些注解。下面将介绍swagger是如何做到与springmvc结合&#xff0c;自动…

利用python进行数据分析D1——ch02引言

基础的课程还没学完&#xff0c;就来这本了&#xff0c;因为我平时的研究还是以数据的处理为主。把自己的事做好做细致读了一下介绍部分&#xff0c;下载书里用到的数据&#xff0c;下载地址&#xff1a;https://github.com/wesm/pydata-book 如果你需要完成以下几大类任务&…

记一次Memory Leak分析

起因&#xff1a;最近公司的一个web产品遇到了内存溢出&#xff0c;于是开始着手调查。调查&#xff1a;首先当务之急是找到那个或那些API导致Memory Leak&#xff0c;这个应该不难&#xff0c;根据监控分析&#xff0c;在内存上升时间段内有哪些API被访问&#xff0c;再就是根…

WebSocket教程

一、为什么需要 WebSocket&#xff1f; 初次接触 WebSocket 的人&#xff0c;都会问同样的问题&#xff1a;我们已经有了 HTTP 协议&#xff0c;为什么还需要另一个协议&#xff1f;它能带来什么好处&#xff1f; 答案很简单&#xff0c;因为 HTTP 协议有一个缺陷&#xff1a…

C# WPF十个美观的界面设计展示

概述很多时候&#xff0c;我们设计的界面总是感觉缺乏美感&#xff0c;不是我们不会开发好看的界面&#xff0c;而是不知道怎么才算美观&#xff0c;这时候我们不妨看看别人好的页面是怎么做的.下面展示一些我觉得做的比较好的cs界面&#xff0c;希望能给大家在平时做界面设计时…

MySQL5.6二进制软件包编译安装详解(三)

一、软件环境 [rootlocalhost ~]# uname -r 3.10.0-862.el7.x86_64 [rootlocalhost ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) 二、安装部署过程详解 MySQL安装3种方式&#xff1a;1>rpm包安装应用文件默认安装在/usr/local 目录下2>源码编译需…

使用autok3s 安装k3s 集群 和 kuboard 管理集群

一、k3s介绍1.1 什么是k3s?k3s 是经过 CNCF 认证的由 Rancher 公司开发维护的一个轻量级的 Kubernetes 发行版&#xff0c;内核机制还是和 k8s 一样&#xff0c;但是剔除了很多外部依赖以及 K8s 的 alpha、beta 特性&#xff0c;同时改变了部署方式和运行方式&#xff0c;目的…

社区纠纷不断:程序员何苦为难程序员

出品 | OSC开源社区&#xff08;ID&#xff1a;oschina2013)今年年初&#xff0c;我们报道“因为被多人侮辱大吼&#xff0c;Swift 之父正式退出 Swift 核心团队”。诸如此类的“语言暴力”、“网络暴力”事件在开源社区乃至整个 IT 社区屡见不鲜。多个技术社区&#xff0c;都出…

PHP 分布式集群中session共享问题以及session有效期的设置

一、Session的原理 以下以默认情况举例&#xff1a; session_start();之后&#xff0c;会生成一个唯一的session_id&#xff0c;每一个用户对应唯一一个session_id&#xff0c;每一个session_id对应服务器端的一个session文件。这个session文件存储着当前session_id的信息&am…