Convert Figma logo to code with AI

Netflix logoSimianArmy

Tools for keeping your cloud operating in top form. Chaos Monkey is a resiliency tool that helps applications tolerate random instance failures.

7,975
1,133
7,975
43

Top Related Projects

10,676

:alarm_clock: :fire: A TCP proxy to simulate network and system conditions for chaos and resiliency testing

2,771

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

  1. Configuring Chaos Monkey:
public class CustomChaosMonkeyConfiguration extends BasicChaosMonkeyConfiguration {
    @Override
    public boolean isEnabled() {
        return true;
    }

    @Override
    public int getMeanTimeBetweenKillsInSeconds() {
        return 3600; // Run every hour
    }
}
  1. Implementing a custom Monkey:
public class CustomMonkey extends Monkey {
    @Override
    public void doMonkeyBusiness() {
        // Custom chaos logic here
        logger.info("Custom monkey is causing chaos!");
    }
}
  1. 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:

  1. Clone the repository:

    git clone https://github.com/Netflix/SimianArmy.git
    
  2. Build the project:

    ./gradlew build
    
  3. Configure your AWS credentials in simianarmy.properties

  4. Run SimianArmy:

    ./gradlew run
    

Note: Ensure you thoroughly understand the potential impacts before running in a production environment.

Competitor Comparisons

10,676

: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.

2,771

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 Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

NetflixOSS Lifecycle Build Status License

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

Simian Army Google group

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.