Microservices architectural style is quickly becoming popular among software developers. But variety of languages, platforms and frameworks, as well as lack of standards make it difficult to find ready-to-use components that you can drop and use into your system. SaaS services offer fairly good solution to that problem. But they also come with difficult tradeoffs. You have to give up control over functionality and data. You may pay extra to SaaS providers. You are limited to features that are given to you and so on. Moreover, not everything can and shall run on the cloud. In that case SaaS services is not a good help.
Pip.Services team offers a different solution - a collection of reusable microservices that you can take, modify and deploy as a part of your own system. You regain full control over functionality and operations. You are able to pick any type of persistence storage, infrastructural components like logging, performance and health monitoring. You can deploy microservices on virtually any platform and use them from any programming language.
That level of flexibility becomes possible due to componentized microservice architecture. You can simply take a microservice, pick the necessary components for persistence, logging, caching, discovery, performance counters, service endpoints and client connectors and describe it in microservice configuration. After that microservice is ready to be deployed in the target development or production environments.
Below you can see the list of options you can choose from. Specific microservice may or may not have all of them. Please, refer to the microservice documentation for details.
- Languages: Java, .NET, Node.js, Go, Python. Ruby is planned to be added in the future
- Deployment: System processes, Windows services and Linux demons, Docker containers, AWS Lambda, Seneca.js, Tomcat container, Spring container, Microservice Service-Fabric, ...
- Persistence: In-memory, Files, MongoDB, Couchbase, Cassandra, MySQL, SQL Server, AWS S3, ...
- Communication protocols: HTTP REST, Seneca, Thrift, Direct, Kafka, ActiveMQ, ZeroMQ, ...
- Discovery: Static, Custom, Consul, Etcd, ...
- Logging: Null, Console, File, Custom, Logstash, Syslog, ...
- Performance counters: Null, Log, Custom, ...
The library contains constantly growing number of microservices, donated and supported by community contributors. They divided into several groups.
- pip-services-logging - Distributed logging microservice. It collects logs from other microservices and stores them in a single location for further analysis.
- pip-services-counters - Performance monitoring microservice. It collects performance metrics from other microservices and generates performance statistics. It is a lightweight alternative to production services like Consul or Etcd that can be used during development and testing.
- pip-services-eventlog - System event logging microservice. It logs key system events like installing a new server, upgrading to a newer version, shutting down system for maintenance and so on
- pip-services-settings - Settings microservice. It keeps system-wide configuration settings split by sections.
- pip-services-statistics - Statistics microservice. It aggregates business statistics within Hour, Day, Month, Year and Total intervals.
- pip-services-blobs - Blob storage microservice. It is the key microservice that enables upload and download of binary blobs. It also tracks references from other system entities and destroys files when the last reference is released.
- pip-services-facets - Faceted search microservice. It records and allows to search by aggregated (faceted) criteria, like groups, types or categories.
- pip-services-changescopes - Change scopes microservice. It trackes changes in specific scope down to individual elements. That helps to use simple pulls to detect changes in one call without use of asynchronous update messages.
- pip-services-email - Email delivery microservice. It sends email messages and supports message templates.
- pip-services-sms - SMS delivery microservice. It sends sms messages and supports message templates.
- pip-services-accounts - Users account management microservice. It allows to register system users and set their key preferences.
- pip-services-passwords - Password authentication microservice. It allows to set and manage user password, performs basic login/password based authentication and supports password recovery via email.
- pip-services-roles - User role-based authorization microservice. It allows to grant roles to a user and performs basic ‘is user in role’ authorization.
- pip-services-emailsettings - Email settings microservice. It manages user primary emails and handles email verification.
- pip-services-smssettings - SMS settings microservice. It manages user phone numbers and handles phone verification.
- pip-services-msgdistribution - Message distribution microservice. It distributes messages to one or many recipients via selected delivery method: email or sms.
- pip-services-sessions - User session management microservice. It tracks sessions opened by users from multiple hosts and applications. It can be very useful for session tracking in client facades (API gateways).
- pip-services-activities - User/party activity logging microservice. It logs activities performed by user (or party) like registering and logging into the system, changing configuration settings, creating/removing/updating system entities and so on.
- pip-services-announcements - System announcements microservice. It allows system administrators or product support personnel to create announcements and show them to product users to keep them informed about important information and events.
- pip-services-feedbacks - Users feedback microservice. It allows to collect feedback from product users about their issues, ideas, copyright infringement or other requests.
- pip-services-attachments - Blob attachments microservice. It tracks references to blobs from other system entities and destroys files when the last reference is released.
- pip-services-tags - User/party search tags microservice. It records tags used by user (or party) when they create their content. Later these tags can be used to suggest tags for search within applications.
- pip-services-quotes - Inspirational quotes microservice. It is a basic sample microservice that shows to users inspiring quotes.
- pip-services-tips - User tips microservice. It shows prerecorded useful tips and suggestions to application users.
- pip-services-guides - Application guides microservice. It shows guides (introduction, walk-through, new release) to application users.
- pip-services-imagesets - Image library microservice. It contains a collection of images that users can search and use to visualize their content.
- pip-services-files - Files microservice. It keeps collections (groups) of files. File content can be stored either in blobs or in external source and referenced via uri.
- pip-services-msgtemplates - Message templates microservice. It allows content managers to compose message templates in multiple languages and later use to send out emails or sms to system users or internet community.
- pip-services-dashboards - Dashboards microservice. It stores configurations of user dashboards.
- pip-services-commons-dotnet - basic portable abstractions in .NET
- pip-services-container-dotnet - IoC container .NET
- pip-services-data-dotnet - data processing and persistence in .NET
- pip-services-net-dotnet - synchronous and asynchronous communication in .NET
- pip-services-azure-dotnet - Azure specific components in .NET
- pip-services-commons-java - basic portable abstractions in Java
- pip-services-container-java - IoC container Java
- pip-services-data-java - data processing and persistence in Java
- pip-services-net-java - synchronous and asynchronous communication in Java
- pip-services-commons-node - basic portable abstractions in Node.js
- pip-services-container-node - IoC container Node.js
- pip-services-data-node - data processing and persistence in Node.js
- pip-services-data-node - data processing and persistence in .NET
- pip-services-net-node - synchronous and asynchronous communication in Node.js
- pip-services-aws-node - AWS specific components in Node.js
- pip-services-commons-python - basic portable abstractions in Python
- pip-services-container-python - IoC container Python
- pip-services-data-python - data processing and persistence in Python
- pip-services-net-python - synchronous and asynchronous communication in Python
- pip-services-commons-go - basic portable abstractions in Go
- pip-services-container-go - IoC container Go
- pip-services-data-go - data processing and persistence in Go
- pip-services-net-go - synchronous and asynchronous communication in Go
- pip-tasks - Cross platform project build system in Powershell
- pip-tasks-commons - Common build tasks for Pip.Tasks
- pip-tasks-dotnet - .NET build tasks for Pip.Tasks
- pip-tasks-java - Java build tasks for Pip.Tasks
- pip-tasks-js - Javascript and Node.js build tasks for Pip.Tasks
- pip-tasks-python - Python build tasks for Pip.Tasks
This project would not be possible without effort contributed by particular individuals.
- Sergey Seroukhov - the project founder, microservice architecture and runtime implementation
- Mark Zontak - Node.js and .NET implementations, AWS integration
- Volodymyr Tkachenko - .NET implementation, Service Fabric and Docker deployments
- Alex Mazur - .NET implementations, Azure integration
- Alex Masliev - Website and graphics
We also would like to recognize help received from the following companies.
- Digital Living Software Corp.
- Modular Mining Systems Inc.
- BootBarn
- EPAM
- Kyrio