SimianArmy
Tools for keeping your cloud operating in top form. Chaos Monkey is a resiliency tool that helps applications tolerate random instance failures.
Top Related Projects
:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing
Chaos testing, network emulation, and stress testing tool for containers
A powerful testing tool for Kubernetes clusters.
Quick Overview
SimianArmy is a suite of tools developed by Netflix for testing and maintaining cloud infrastructures and services. It includes various "monkeys" that introduce controlled chaos into cloud environments to test resilience, identify weaknesses, and ensure high availability. The project aims to improve the reliability and robustness of cloud-based applications.
Pros
- Enhances system reliability by proactively identifying weaknesses
- Provides a suite of tools for different aspects of chaos engineering
- Highly customizable and extensible for specific use cases
- Helps teams prepare for real-world failures and outages
Cons
- Requires careful configuration to avoid unintended disruptions
- May be complex to set up and manage for smaller teams
- Some components may be outdated or less maintained
- Primarily designed for AWS, which may limit its usefulness for other cloud platforms
Code Examples
- Configuring Chaos Monkey:
public class CustomChaosMonkeyConfiguration extends BasicChaosMonkeyConfiguration {
@Override
public boolean isEnabled() {
return true;
}
@Override
public int getMeanTimeBetweenKillsInSeconds() {
return 3600; // Run every hour
}
}
- Implementing a custom Monkey:
public class CustomMonkey extends Monkey {
@Override
public void doMonkeyBusiness() {
// Custom chaos logic here
logger.info("Custom monkey is causing chaos!");
}
}
- Scheduling a Monkey:
public class MonkeyScheduler {
@Scheduled(fixedRate = 3600000) // Run every hour
public void runMonkey() {
Monkey monkey = new CustomMonkey();
monkey.doMonkeyBusiness();
}
}
Getting Started
To get started with SimianArmy:
-
Clone the repository:
git clone https://github.com/Netflix/SimianArmy.git
-
Build the project:
./gradlew build
-
Configure your AWS credentials in
simianarmy.properties
-
Run SimianArmy:
./gradlew run
Note: Ensure you thoroughly understand the potential impacts before running in a production environment.
Competitor Comparisons
:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing
Pros of Toxiproxy
- Lightweight and focused on network simulation, making it easier to integrate into existing systems
- Provides a RESTful API for dynamic configuration, allowing for more flexible testing scenarios
- Supports multiple programming languages through client libraries
Cons of Toxiproxy
- Limited to network-related failures and doesn't cover broader chaos engineering scenarios
- Requires manual setup and management of proxies for each service
- Less comprehensive documentation and community support compared to SimianArmy
Code Comparison
Toxiproxy (Go):
proxy := toxiproxy.NewProxy("mysql", "localhost:3306", "localhost:33306")
toxic := toxiproxy.NewLatencyToxic("latency", toxiproxy.Downstream, 1000)
proxy.AddToxic(toxic)
SimianArmy (Java):
public class CustomChaosMonkey extends BasicChaosMonkey {
@Override
protected Context context() {
return Context.valueOf(cfg.getStr("simianarmy.chaos.context"));
}
}
Both projects aim to improve system resilience, but Toxiproxy focuses on network simulation, while SimianArmy offers a broader range of chaos engineering tools. Toxiproxy is more suitable for targeted network testing, while SimianArmy provides a comprehensive suite for large-scale distributed systems.
Chaos testing, network emulation, and stress testing tool for containers
Pros of Pumba
- Focused specifically on Docker containers, making it more specialized for container-based chaos engineering
- Lightweight and easy to set up, with a single binary installation
- Actively maintained with regular updates and contributions
Cons of Pumba
- Limited scope compared to SimianArmy's broader cloud infrastructure testing capabilities
- Fewer built-in chaos testing scenarios and customization options
- Smaller community and ecosystem around the project
Code Comparison
SimianArmy (Java):
public class BasicChaosMonkey extends BasicMonkeyAutomaticScheduler {
@Override
protected void doMonkeyBusiness() {
context.scheduler().schedule(this, getRandomTerminationInterval(), TimeUnit.MILLISECONDS);
destroyInstances();
}
}
Pumba (Go):
func (n *NetworkChaos) Run(ctx context.Context, random bool, containers []string) error {
for _, container := range containers {
if err := n.toxiproxyClient.CreateProxy(container, "0.0.0.0:0", n.host); err != nil {
return err
}
}
return nil
}
Both projects aim to introduce chaos into systems, but SimianArmy focuses on broader cloud infrastructure testing, while Pumba specializes in Docker container chaos engineering. SimianArmy offers more comprehensive testing scenarios, while Pumba provides a simpler, container-specific approach.
A powerful testing tool for Kubernetes clusters.
Pros of PowerfulSeal
- Specifically designed for Kubernetes environments, offering more targeted chaos engineering for container orchestration
- Actively maintained with regular updates and community contributions
- Provides a user-friendly web interface for easier management and visualization of chaos experiments
Cons of PowerfulSeal
- More limited scope compared to SimianArmy's broader cloud infrastructure focus
- Requires Kubernetes expertise, which may be challenging for teams not familiar with container orchestration
- Less extensive documentation and community resources compared to SimianArmy
Code Comparison
SimianArmy (Java):
public class BasicChaosMonkey extends BasicSimianArmyContext {
@Override
public void start() throws Exception {
super.start();
chaos = new ChaosMonkey(this);
}
}
PowerfulSeal (Python):
class PolicyRunner:
def run(self):
while self.is_runnable():
for action in self.policy.get_actions():
self.execute(action)
self.sleep()
Both projects aim to improve system resilience through chaos engineering, but they differ in their implementation and target environments. SimianArmy offers a broader set of tools for cloud infrastructure, while PowerfulSeal focuses specifically on Kubernetes environments with a more user-friendly interface.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
PROJECT STATUS: RETIRED
The Simian Army project is no longer actively maintained. Some of the Simian Army functionality has been moved to other Netflix projects:
- A newer version of Chaos Monkey is available as a standalone service.
- Swabbie is a new standalone service that will replace the functionality provided by Janitor Monkey.
- Conformity Monkey functionality will be rolled into other Spinnaker backend services.
DESCRIPTION
The Simian Army is a suite of tools for keeping your cloud operating in top form. Chaos Monkey, the first member, is a resiliency tool that helps ensure that your applications can tolerate random instance failures
DETAILS
Please see the wiki.
SUPPORT
Because the project is no longer maintained, there is a good chance that nobody will be able to answer a support question.
LICENSE
Copyright 2012-2016 Netflix, Inc.
Licensed under the Apache License, Version 2.0 (the âLicenseâ); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an âAS ISâ BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Top Related Projects
:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing
Chaos testing, network emulation, and stress testing tool for containers
A powerful testing tool for Kubernetes clusters.
Convert designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot