⚠️ ⚠️ ⚠️ This team has moved to this NEW ORGANIZATION. Refer to HERE as main documentation and entrypoint for all its repositories.⚠️ ⚠️ ⚠️
Component | Continous Integration | Code Coverage | Code Quality | Endpoint |
---|---|---|---|---|
agents service | ||||
operators service | ||||
incidents service | ||||
sensor data mining service | - | |||
agents desktop client | - | |||
agents web client | AWS | |||
operators web client | AWS |
This is an incident management system based on pure micro-services. That is, we provide a fully functional API with services that allows clients to interact with the system elements. Besides the API is fully functional by itself we also provide three clients to visually interact with the system.
The API is composed by agents-service, operators-service, incidents-service and sensor-data-mining-service. Clients are: agents-dektop-client, agents-web-client and operators-web-client.
Each one of the modules that composes system it is fully sxplained in its own readme file. Here you will learn how the composition of the system is done and how to deploy the system to a fully functional production environment.
Java is a general-purpose computer-programming language that is concurrent, class-based, object-oriented, and specifically designed to have as few implementation dependencies as possible. It is intended to let application developers "write once, run anywhere" (WORA), meaning that compiled Java code can run on all platforms that support Java without the need for recompilation.
How we use it: We use java as our main languaje to develop the project. Every module, service and client for this project has been written in java.
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.
How we use it: All the services are implemented by means of spring boot, even though the model is just a ser of POJOs that are being replicatted on each module. Also, the clients use spring boot for the controllers layer.
MongoDB is a free and open-source cross-platform document-oriented database program. Classified as a NoSQL database program, MongoDB uses JSON-like documents with schemas.
How we use it: Each one of our services has one single mongoDB database where it stores the needed data for that service to fulfil its own porpouse.
Apache Kafka is an open-source stream-processing software platform.
How we use it: One of our clients, agents-web-service, when it submits and incident to the system, will, first, store the incident in the database and then send its reference through Apache kafka to any consumer listening. Operators-web-client acs here as a consumer of kafka and when an incident is assigned to an operator will notify the operator.
Eureka is a REST (Representational State Transfer) based service that is primarily used in the AWS cloud for locating services for the purpose of load balancing and failover of middle-tier servers.
How we use it: We use eureka as our main mocro-services orchestration system.
Zuul is an edge service that provides dynamic routing, monitoring, resiliency, security, and more. Please view the wiki for usage, information, HOWTO, etc https://github.com/Netflix/zuul/wiki
How we use it: We use zuul for the edge API gateway. Through it the clients can access to the private cloud.
Hystrix is a latency and fault tolerance library designed to isolate points of access to remote systems, services and 3rd party libraries, stop cascading failure and enable resilience in complex distributed systems where failure is inevitable.
How we use it: We build our microservice to support failures. That is, in case of a failure the corresponding microservice will offer an alternative resiliant alternative.
We deploy the application at Amazon Web Services because is one of the greatests cloud computing providers in the world, that not only ensures relyability but also huge scalability. Up to now the AWS configuration id the following:
Cluster Name | Number of instances | Instance type | Subnet |
---|---|---|---|
asw-i3a-cloud-cluster | 4 | t2.micro | public |
asw-i3a-cloud-cluster | 1 | m5.large | public |
asw-i3a-micro-services-cluster | 5 | t2.micro | private |
asw-i3a-web-clients-cluster | 4 | t2.micro | public |
Cluster Name | Task Name | Number of tasks | Instance type |
---|---|---|---|
asw-i3a-cloud-cluster | eureka | 1 | m5.large |
asw-i3a-cloud-cluster | zuul | 4 | t2.micro |
asw-i3a-micro-services-cluster | agents-micro-service | 2 | t2.micro |
asw-i3a-micro-services-cluster | incidents-micro-service | 2 | t2.micro |
asw-i3a-micro-services-cluster | operators-micro-service | 2 | t2.micro |
asw-i3a-micro-services-cluster | sensor-data-minig-service | 1 | t2.micro |
asw-i3a-web-clients-cluster | agents-web-client | 2 | t2.micro |
asw-i3a-web-clients-cluster | operators-web-client | 1 | t2.micro |
Nº of connections | Time slot | Succesful | Latency / con |
---|---|---|---|
100 | simultaneous | 100% | 235ms |
1.000 | simultaneous | 100% | 3.418ms |
5.000 | simultaneous | 72% | 6881ms |
10.000 | 10s | 100% | 483ms |
Before deploying the module please keep in mind that you will need at least one server where it will run. Once you have a server, that can be your own computer, follow this steps.
- Download & run eureka.
- Download & run zuul. Configure it so that it knows where eureka is deployed.
- Download & run apache kafka.
- Download & run MongoDB. Alternative you can use www.mlab.com that provides free online MongoDB storage.
- Download & run each ones of the modules descrived abobe. Notice that you will need to configure Eureka and zuul addreses in the properties files for each module. Also configure the apache kafka endpoints and security in order to connect to your local apache kafka server. Same for mongoDB. All this configuration is done through the application.propperties files.
- That's all! The services will register to eureka and the clients will use zuul to connect to services.
If you're gonna run the system on to a single machine please configure manually services and clients ports to not enter in clonflict.
Please, before using, copying or re-distributing this piece of software take a look to the LICENSE. Authors of this project can be found at AUTHORS page.