diff --git a/docs/en/Event-Bus.md b/docs/en/Event-Bus.md new file mode 100644 index 0000000000..cf2b57c018 --- /dev/null +++ b/docs/en/Event-Bus.md @@ -0,0 +1,3 @@ +# Event Bus + +TODO \ No newline at end of file diff --git a/docs/en/Microservice-Architecture.md b/docs/en/Microservice-Architecture.md new file mode 100644 index 0000000000..60d61a0a2e --- /dev/null +++ b/docs/en/Microservice-Architecture.md @@ -0,0 +1,30 @@ +# Microservice Architecture + +*"Microservices are a software development technique—a variant of the **service-oriented architecture** (SOA) architectural style that structures an application as a collection of **loosely coupled services**. In a microservices architecture, services are **fine-grained** and the protocols are **lightweight**. The benefit of decomposing an application into different smaller services is that it improves **modularity**. This makes the application easier to understand, develop, test, and become more resilient to architecture erosion. It **parallelizes development** by enabling small autonomous teams to **develop, deploy and scale** their respective services independently. It also allows the architecture of an individual service to emerge through **continuous refactoring**. Microservices-based architectures enable **continuous delivery and deployment**."* + +— [Wikipedia](https://en.wikipedia.org/wiki/Microservices) + +## Introduction + +One of the major goals of the ABP framework is to provide a convenient infrastructure to create microservice solutions. To make this possible, + +* Provides a [module system](Module-Development-Basics.md) that allows you to split your application into modules where each module may have its own database, entities, services, APIs, UI components/pages... etc. +* Offers an [architectural model](Best-Practices/Module-Architecture.md) to develop your modules to be compatible to microservice development and deployment. +* Provides [best practices guide](Best-Practices/Index.md) to develop your module standards-compliance. +* Provides base infrastructure to implement [Domain Driven Design](Domain-Driven-Design.md) in your microservices. +* Provide services to [automatically create REST-style APIs](AspNetCore/Auto-API-Controllers.md) from your application services. +* Provide services to [automatically create C# API clients](AspNetCore/Dynamic-CSharp-API-Clients.md) that makes easy to consume your services from another service/application. +* Provides a [distributed event bus](Event-Bus.md) to communicate your services. +* Provides many other services to make your daily development easier. + +## Microservice for New Applications + +One common advise to start a new solution is **always to start with a monolith**, keep it modular and split into microservices once the monolith becomes a problem. This makes your progress fast in the beginning especially if your team is small and you don't want to deal with challanges of the microservice architecture. + +However, developing such a well-modular application can be a problem since it is **hard to keep modules isolated** from each other as you would do it for microservices (see [Stefan Tilkov's article](https://martinfowler.com/articles/dont-start-monolith.html) about that). Microservice architecture naturally forces you to well isolate services from each other, but in a modular monolithic application it's easy to tight couple modules to each other and design **weak module boundaries** and API contracts. + +ABP can help you in that point by oferring a **microservice-compatible, strict module architecture** where your module is splitted into multiple layers/projects and developed in its own VS solution completely isolated and independent from other modules. Such a developed module is a natural microservice yet it can be easily plugged-in a monolithic application. See the [module development best practice guide](Best-Practices/Index.md) that offers a **microservice-first module design**. All [standard ABP modules](https://github.com/abpframework/abp/tree/master/modules) are developed based on this guide. So, you can use these modules by embedding into your monolithic solution or deploy them separately and use via remote APIs. They can share a single database or can have their own database based on your simple configuration. + +## Microservice Demo Solution + +The [sample microservice solution](Samples/Microservice-Demo.md) demonstrates a complete microservice solution based on the ABP framework. \ No newline at end of file diff --git a/docs/en/Samples/Microservice-Demo.md b/docs/en/Samples/Microservice-Demo.md new file mode 100644 index 0000000000..d0a05f31a4 --- /dev/null +++ b/docs/en/Samples/Microservice-Demo.md @@ -0,0 +1,40 @@ +# Microservice Demo Solution + +*"Microservices are a software development technique—a variant of the **service-oriented architecture** (SOA) architectural style that structures an application as a collection of **loosely coupled services**. In a microservices architecture, services are **fine-grained** and the protocols are **lightweight**. The benefit of decomposing an application into different smaller services is that it improves **modularity**. This makes the application easier to understand, develop, test, and become more resilient to architecture erosion. It **parallelizes development** by enabling small autonomous teams to **develop, deploy and scale** their respective services independently. It also allows the architecture of an individual service to emerge through **continuous refactoring**. Microservices-based architectures enable **continuous delivery and deployment**."* + +— [Wikipedia](https://en.wikipedia.org/wiki/Microservices) + +## Introduction + +One of the major goals of the ABP framework is to provide a [convenient infrastructure to create microservice solutions](Microservice-Architecture.md). + +This sample aims to demonstrate a simple yet complete microservice solution; + +* Has multiple, independent, self-deployable **microservices**. +* Multiple **web applications**, each uses a different API gateway. +* Has multiple **gateways** / BFFs (Backend for Frontends) developed using the [Ocelot](https://github.com/ThreeMammals/Ocelot) library. +* Has an **authentication service** developed using the [IdentityServer](https://identityserver.io/) framework. It's also a SSO (Single Sign On) application with necessary UIs. +* Has **multiple databases**. Some microservices has their own database while some services/applications shares a database (to demonstrate different use cases). +* Has different types of databases: **SQL Server** (with **Entity Framework Core** ORM) and **MongoDB**. +* Has a **console application** to show the simplest way of using a service by authenticating. +* Uses [Redis](https://redis.io/) for **distributed caching**. +* Uses [RabbitMQ](https://www.rabbitmq.com/) for service-to-service **messaging**. +* Uses [Kubernates](https://kubernetes.io/) to **deploy** & run all services and applications. + +The diagram below shows the system: + +![microservice-sample-diagram](../images/microservice-sample-diagram.png) + +### Source Code + +You can get the source code from [the GitHub repository](https://github.com/abpframework/abp/tree/master/samples/MicroserviceDemo). + +### Status + +This sample is still in development, not completed yet. + +## Microservices + +### Identity Service + +... \ No newline at end of file diff --git a/docs/en/docs-nav.json b/docs/en/docs-nav.json index a3e3355a55..905821c73a 100644 --- a/docs/en/docs-nav.json +++ b/docs/en/docs-nav.json @@ -256,10 +256,23 @@ } ] }, + { + "text": "Samples", + "items": [ + { + "text": "Microservice Demo", + "path": "Samples/Microservice-Demo.md" + } + ] + }, { "text": "Application Modules", "path": "Modules/Index.md" }, + { + "text": "Microservice Architecture", + "path": "Microservice-Architecture.md" + }, { "text": "Testing" }, diff --git a/docs/en/images/microservice-sample-diagram.png b/docs/en/images/microservice-sample-diagram.png new file mode 100644 index 0000000000..b1d9f6c66e Binary files /dev/null and b/docs/en/images/microservice-sample-diagram.png differ