Cereebro

I’m proud to introduce version 1.0.0 of project Cereebro !

What is it ?

Keeping software documentation is an ageless problem. At the age of micro-services, it’s easy to get lost within a distributed system, even if you designed it.

Cereebro automatically builds a map of a distributed system.

cereebro-sample-screenshot

Why ?

Cereebro was born because of a strong motivation : laziness.

Working as a technical lead for the Lab (experimental) team at edelia (EDF group) is pretty fun. We have more room than others team to make technical decisions, although at some point we may be asked to “do our chores” and follow part of the process like the others do.
This is how I ended up being asked by the architecture team to maintain a list of all the micro-services built by our team, and the dependencies among them. Instead of taking a couple hours to fill an excel sheet, I asked for a small delay in order to build a tool that would do it permanently without risking any mistake.
CTO Dominique Vienne granted us that delay, and my colleague Luc Warrot was easily convinced by the idea of solving a boring task with open source code.

The name Cereebro came when I started working on the project and saw X-Men on TV. Charles Xavier was finding mutants with Cerebro the same way I wanted to find micro-services in our system.
It was also consistent with the movie references that the Netflix team uses for their open-source tools (Zuul, etc…).
Note that cerebro means brain in spanish, and actually it shouldn’t be pronounced cereebro like americans do… cerebro.io wasn’t availble though !

After a couple weeks coding on the way home (and late at night) we had a working prototype and decided to stuff more features before release 1.0.0. Although I severely underestimated how long the polishing part would take, I’m glad we made it production ready.

It was our first open source project, and it’s already a great satisfaction to receive positive feedback from the community.

We hope Cereebro will be as useful to you as it is for us.

How ?

We found all the pieces within the Spring eco-system :

  • the Spring Context contains mostly everything you need to detect an application’s dependencies, it was just a matter of analyzing beans
  • Spring Boot and @Conditional annotations made our relationship detectors elegant and lightweight
  • Spring Cloud and Netflix OSS gave us a central registry of all applications running in the system, and also a centralized place to publish the relationships we detected between those apps

Take a couple minutes to see how to get started, or find an even quicker summary below.

cereebro-eureka-component-diagram

Cereebro Snitch

Add the Cereebro Snitch Spring Boot Starter to each of your applications in order to detect their relationships with other components :

<dependency>
    <groupId>io.cereebro</groupId>
    <artifactId>cereebro-snitch-spring-boot-starter</artifactId>
</dependency>

Cereebro Server

Create a Cereebro Server that will build a complete graph out of all the info snitched by applications :

<dependency>
    <groupId>io.cereebro</groupId>
    <artifactId>cereebro-server-spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>

Add @EnableCereebroServer somewhere on your configuration classes :

@SpringBootApplication
@EnableCereebroServer
public class CereebroServerEurekaClientApplication {
    // ...
}

Learn more

Visit Cereebro.io to find the source code (Apache 2.0 License), how to get started, check out samples and watch a live demo, or read the detailed documentation.

Cereebro releases are available on maven central.