
diunipisocc/chaosechoThis repository contains the source code of the Chaos Echo Service, which can be used to create applications to "chaos test" solutions for fault resiliency in multi-service applications (e.g., fault recovery, detection, or root cause analysis).
Each instance of Chaos Echo Service emulates a service processing incoming requests by invoking backend services, if any.
An instance of Chaos Echo Service can also fail in processing incoming requests, either
To emulate multiple possible behaviours for processing an incoming request, the backend services are invoked with a given (and customisable) probability, so that each incoming request is processed by invoking a random subset of the backend service.
Similarly, an instance of the Chaos Echo Service fails while processing an incoming request with a given (and customisable) probability. Once failing, the instance of the Chaos Echo Service can either (i) return an error message and continue working or (ii) stop working without returning any answer to the service that send the request being processed. The events (i) and (ii) are equally probable.
Events happening on the application are logged with a severity level, viz.,
ERROR -> error events, e.g., receiving an error message from some backend service or failing to process an incoming request (in the case of crashing, it is not ensured that the corresponding failure is logged by the service, to emulate the case of services unexpectedly failing without logging anything);INFO -> any other event (e.g., receiving or answering to an incoming request, or sending a message to a backend service).To ensure that all notable events of the Chaos Echo Service are logged, and to provide the actually logged events with a ground thruth of what actually happended, each notable event is ensured to be logged with severity DEBUG.
The Chaos Echo Service comes as a Docker container that can be run standalone or (suggested) included in Docker Compose files to deploy arbitrary multi-service application topologies.
Each containerised service requires a set of environment variables to be specified to effectively run:
BACKEND_SERVICES -> string containing the hostnames (separated by ":") of the Chaos Echo services it may invoke while emulating the processing of an incoming request;TIMEOUT -> value of the time interval the service would wait for an answer to be provided by a backend service (whenever the latter is invoked);PICK_PERCENTAGE -> probability of invoking any of the backend services while processing an incoming request, expressed as a percentage, viz., as an integer between 0 and 100;FAIL_PERCENTAGE -> probability of failing while processing an incoming request, expressed as a percentage, viz., as an integer between 0 and 100.Each deployed instance of the Chaos Echo Service can be made accessible by exploiting Docker's native port mapping. It indeed only requires mapping the container's internal port 80 to any of the ports available on the host where the container is deployed.
This repository includes a bash script (viz., generate_traffic.sh) enabling to load any exposed Chaos Echo Service. The script enables sending a given number of requests, each after the other, by waiting a given period between subsequent requests.
The usage of the script is as follows:
./generate_traffic.sh \ [-a|--address <address>:<port>] \ [-n|--number <numberOfRequests>] \ [-p|--period <timeIntervalInSeconds> ]
By default, the script invokes the service published at localhost:8080 by sending it 1000 requests every millisecond (viz., every 0.001 seconds)
The Chaos Echo Composer enables generating Docker Compose files for running multiple Chaos Echo Services to emulate multi-service applications.
Examples of Docker Compose files for running multiple interconnected Chaos Echo Services are available in a dedicated folder.
To run such examples, after cloning this repository on the machine/cluster where to run the examples,
docker stack deploy -c docker-compose.yml echoThis will deploy the specified application, whose frontend can be reached at
http://<ipAddress>:8080.
Deployed applications can then be loaded by exploiting the script generate_traffic.sh. This will produce logs that can be graphically browsed on the Kibana instance deployed alongside the application, which can be reached at http://<ipAddress>:5601. The produced logs are also stored in a logfile (viz., echo-YYYY-MM-DD.log), saved in the example folder.
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像服务
在 Docker Desktop 配置镜像
Docker Compose 项目配置
Kubernetes 集群配置 Containerd
K3s 轻量级 Kubernetes 镜像加速
VS Code Dev Containers 配置
MacOS OrbStack 容器配置
在宝塔面板一键配置镜像
Synology 群晖 NAS 配置
飞牛 fnOS 系统配置镜像
极空间 NAS 系统配置服务
爱快 iKuai 路由系统配置
绿联 NAS 系统配置镜像
QNAP 威联通 NAS 配置
Podman 容器引擎配置
HPC 科学计算容器配置
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名
需要其他帮助?请查看我们的 常见问题Docker 镜像访问常见问题解答 或 提交工单
免费版仅支持 Docker Hub 访问,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等;免费版仅支持 docker.io。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
来自真实用户的反馈,见证轩辕镜像的优质服务