This posts focuses on the trend of Microservices and the various related terminologies and trends. In the end it lists the brands in their categories.
An application is software. It is composed of different components. These are the application components. Together they make up the application. The difference between one application software component and another application software component is one of separation of concerns. This is simply dividing a computer program (the application) into different sections. If the different components are somewhat independent of each other they are termed loosely coupled.
The different components of an application communicate with each other. When they need to interact with each other they do it via interfaces. A client component does not need to know the inner workings of the other application software component and uses only the interface.
This is where the word service comes into play where what one application software component provides to another software component is called a service.
Now this application may be placed on a distributed system where its different components are located on networked computers. Thereafter in terms of an application running on a distributed system, SOA or Service Oriented Architecture is where services are provided to other software components over a communications protocol over a network. This is due to the underlying hardware being networked and distributed in nature and the application software on them being distributed on it.
In terminology of Distributed Systems when when one of its components communicates with another component they do this via messages. We can say that in a distributed system, an application’s software component sends a message to another software component to utilise its service via an interface and that interface is also utilising a network protocol.
We now know about an Application which is a software program, its components and that services are provided by its components. We now know about Distributed Systems, its components networked together and messages being passed between them over a network. We know about applications running on distributed systems where application software components are running on components of the distributed system. We know the application software components communicate with each other via a network.
In Microservices a distributed systems component is running an applications software component and is providing a service. It’s a process now in execution mode. So one software component is placed and is running on one distributed system component and is providing a service from there to other similar independent components.
A normal process is a running software program in execution mode. Inter Process communications are IPCs in terms of processes. In Microservices IPCs will be network messages.
What we discussed above earlier is the application software architecture and its transition into the distributed systems environment. When you say that each independent software component is now running, is a process, it is running on a distributed systems components and the Inter Process Communications are over a network you have Microservices. These Microservices form an Application.
Furthermore, in Microservices there is a bare minimum of centralized management of different services and they may be written in different programming languages and use different data storage technologies. So we can have one software component written in Go, and another in NodeJS and they will provide each other services. These services will also be over a network. So a Go software component can be running on one distributed system component and a NodeJS software component can be running on another distributed system component and they will interact via the network composing the distributed system. Multiple such distributed software components providing services to each other make up a Microservices Application.
A container provides an environment to run a microservice component. A container is a distributed system object which can be termed loosely as a distributed system hardware+software components service.
In terms of branding:
Amazon AWS is a Distributed Systems Provider.
EC2 is Amazon AWS’s product to provide a distributed system compute component online.
S3 is Simple Storage Service, a product for simple storage of files by Amazon AWS online.
DynamoDB is Amazon AWS’s NoSQL Database product which available as a product online.
Golang and NodeJS are programming languages in which backend server side software components are written.
React is a programming language in which frontend user side application software components are written.
Docker is a software which provides for individual container management. One container provide the environment where a software component can be executed on a distributed system.
Kubernetes and Docker Swarm manages multiple (lots of) containers deployed on distributed systems for running a distributed application. They are for containers management.
RabbitMQ and Kafka work as message brokers for passing messages between microservices
RESTFul HTTP APIs are also a means for intermicroservice communication.
Protocol Buffers and GRPC are means of faster intermicroservice communication messaging.
MongoDB and Couchbase are NoSQL databases which can be run in containers and be utilised by application software components for Database purposes.
Git is an application software component version control system
Promethues is an application (software) to be run (can be in containers) built specifically for the purpose of monitoring microservices software component health (metrics)
Grafana is an application (software) to be run (can be in containers) for the purpose visualizing metrics/health of microservices.
ELK stack which is ElasticSearch, Logstash and Kibana are softwares which provide for logging of events and their search and visualization.