Architecture of the Pip.Services toolkit
The Pip.Services toolkit is divided into a few dozen modules. A small part of these modules make up the core itself, while the rest are optional add ons. This approach simplifies adding new functionality and minimizes dependencies on 3rd party libraries.
The general structure of the Pip.Services toolkit is shown on the following diagram:
The foundation of the toolkit is shown in grey. It is made up of the stacks for the 6 supported programming languages: Java, Node.js, .NET Core, Python, Dart, and Golang.
The core of the toolkit is shown in green. It consists of two modules, both of which are required:
Looking at the configuration file, we can conclude that the following components will be created in the microservice:
- ContextInfo - standard Pip.Services component for determining the name and description of a microservice.
- ConsoleLogger - standard Pip.Services component for writing logs to stdout,
- LogCounters - standard Pip.Services component for logging performance counters.
- HelloWorldController - the controller of our microservice, implemented in step 2. Make note of the controller’s descriptor, as it will be used to link the controller class to the REST service.
- HttpEndpoint - standard Pip.Services component that allows multiple services to use a single HTTP port simultaneously.
- HelloWorldRestServices - the REST service we implemented on step 3.
- HeartbeatRestService - standard Pip.Services component that is used to check whether or not a microservice is still up and running by calling GET /heartbeat.
- StatusRestService - standard Pip.Services component for getting the status of a microservice by calling GET /status.
-
Commons - Basic primitives for symmetrical development on various programming languages, as well as patterns, that are used in the rest of the modules.
-
Components - Contains standard components, such as component logging, performance counters, synchronization, configuration, caching, and others. Specific implementations of these components are found in the extension modules.
The main (basic) modules are shown in blue. Although they are not required, they are used in most microservices:
-
Container - A basic container, which is used to compose microservices from loosely-coupled components (see The Structure of a Microservice).
-
Data - Basic components for storing data and implementing storage of data in memory and in the file system.
-
RPC - Basic components for synchronous communication and implementations using local calls and the HTTP/REST protocol.
-
Messaging - Basic components for asynchronous communication and implementing local queues.
Last but not least are the additional (optional) modules, shown in red. These modules are used to support specific technologies, such as:
- Azure - components for working with the Azure cloud
- AWS - components for working with the AWS cloud
- MongoDB - components for storing data in MongoDB
- GRPC - components for synchronous communication via GRPC
- ActiveMQ - components for asynchronous communication via ActiveMQ
- MQTT - components for asynchronous communication via the MQTT protocol
- Memcached - components for caching and synchronizing with Memcached
- Redis - components for caching and synchronizing with Redis
- ElasticSearch - components for logging with ElasticSearch
- Prometheus - components for using performance counters with Prometheus
-
Commons - Basic primitives for symmetrical development on various programming languages, as well as patterns, that are used in the rest of the modules.
-
Components - Contains standard components, such as component logging, performance counters, synchronization, configuration, caching, and others. Specific implementations of these components are found in the extension modules.
The main (basic) modules are shown in blue. Although they are not required, they are used in most microservices:
-
Container - A basic container, which is used to compose microservices from loosely-coupled components (see The Structure of a Microservice).
-
Data - Basic components for storing data and implementing storage of data in memory and in the file system.
-
RPC - Basic components for synchronous communication and implementations using local calls and the HTTP/REST protocol.
-
Messaging - Basic components for asynchronous communication and implementing local queues.
Last but not least are the additional (optional) modules, shown in red. These modules are used to support specific technologies, such as:
- Azure - components for working with the Azure cloud.
- AWS - components for working with the AWS cloud.
- GCP - components for working with the Goolgle cloud.
- MongoDB - components for storing data in MongoDB.
- GRPC - components for synchronous communication via GRPC.
- ActiveMQ - components for asynchronous communication via ActiveMQ
- Kafka - a set of components for messaging using the Kafka protocol.
- MQTT - components for asynchronous communication via the MQTT protocol.
- Memcached - components for caching and synchronizing with Memcached.
- Redis - components for caching and synchronizing with Redis.
- RabbitMQ - a set of components for working with the message queue in RabbitMQ through the AMQP protocol.
- ElasticSearch - components for logging with ElasticSearch.
- Prometheus - components for using performance counters with Prometheus.
-
Commons - Basic primitives for symmetrical development on various programming languages, as well as patterns, that are used in the rest of the modules.
-
Components - Contains standard components, such as component logging, performance counters, synchronization, configuration, caching, and others. Specific implementations of these components are found in the extension modules.
The main (basic) modules are shown in blue. Although they are not required, they are used in most microservices:
-
Container - A basic container, which is used to compose microservices from loosely-coupled components (see The Structure of a Microservice).
-
Data - Basic components for storing data and implementing storage of data in memory and in the file system.
-
RPC - Basic components for synchronous communication and implementations using local calls and the HTTP/REST protocol.
-
Messaging - Basic components for asynchronous communication and implementing local queues.
Last but not least are the additional (optional) modules, shown in red. These modules are used to support specific technologies, such as:
- Azure - components for working with the Azure cloud
- AWS - components for working with the AWS cloud
- MongoDB - components for storing data in MongoDB
- GRPC - components for synchronous communication via GRPC
- ActiveMQ - components for asynchronous communication via ActiveMQ
- MQTT - components for asynchronous communication via the MQTT protocol
- Memcached - components for caching and synchronizing with Memcached
- Redis - components for caching and synchronizing with Redis
- ElasticSearch - components for logging with ElasticSearch
- Prometheus - components for using performance counters with Prometheus
-
Commons - Basic primitives for symmetrical development on various programming languages, as well as patterns, that are used in the rest of the modules.
-
Components - Contains standard components, such as component logging, performance counters, synchronization, configuration, caching, and others. Specific implementations of these components are found in the extension modules.
The main (basic) modules are shown in blue. Although they are not required, they are used in most microservices:
-
Container - A basic container, which is used to compose microservices from loosely-coupled components (see The Structure of a Microservice).
-
Data - Basic components for storing data and implementing storage of data in memory and in the file system.
-
RPC - Basic components for synchronous communication and implementations using local calls and the HTTP/REST protocol.
-
Messaging - Basic components for asynchronous communication and implementing local queues.
Last but not least are the additional (optional) modules, shown in red. These modules are used to support specific technologies, such as:
- Azure - components for working with the Azure cloud.
- AWS - components for working with the AWS cloud.
- MongoDB - components for storing data in MongoDB.
- GRPC - components for synchronous communication via GRPC.
- ActiveMQ - components for asynchronous communication via ActiveMQ.
- MQTT - components for asynchronous communication via the MQTT protocol.
- Memcached - components for caching and synchronizing with Memcached.
- Redis - components for caching and synchronizing with Redis.
- ElasticSearch - components for logging with ElasticSearch.
- Prometheus - components for using performance counters with Prometheus.
The Pip.Services toolkit is an actively growing project. While the core has proven to be stable over the course of many years, additional modules are constantly being expanded and added. Be sure to regularly check our news to be informed of the latest updates and releases.