GitHub - mehdihadeli/awesome-software-architecture: 📚 A curated list of awesome articles, videos, and other resources to learn and practice software architecture, patterns, and principles. (original) (raw)

Microservices

A brief introduction to the concept of microservices, including their benefits and drawbacks, as well as common characteristics of microservices architecture.

Communication

An overview of the different communication patterns and protocols that can be used in microservices architecture, such as synchronous vs. asynchronous communication, REST vs. message-based communication, and the use of service buses.

Composite UI

A discussion of the Composite UI pattern, which involves combining multiple microservices into a single user interface, and the different approaches to implementing it, such as server-side composition vs. client-side composition.

Service Boundaries

An exploration of how to define and enforce service boundaries in microservices architecture, including strategies for identifying service boundaries and techniques for implementing them, such as domain-driven design and bounded contexts.

Testing

A guide to testing microservices, including strategies for testing individual services and testing the interactions between services, as well as tools and frameworks for testing microservices.

API Gateway

An introduction to the concept of an API Gateway, which acts as a single entry point for clients to access multiple microservices, and the benefits and drawbacks of using an API Gateway.

API Gateway - Ambassador

A specific implementation of an API Gateway using the Ambassador open-source project, including an overview of its features and how to configure and deploy it.

API Gateway - Kong

A specific implementation of an API Gateway using the Kong open-source project, including an overview of its features and how to configure and deploy it.

API Gateway - Ocelot

A specific implementation of an API Gateway using the Ocelot open-source project, including an overview of its features and how to configure and deploy it.

Observability

An exploration of the concept of observability in microservices architecture, which involves the ability to monitor and debug distributed systems, and the different techniques and tools for achieving observability, such as logging, tracing, health checks ,and monitoring.

Observability - Distributed Tracing

A deep dive into the use of distributed tracing as a tool for achieving observability in microservices architecture, including an overview of how distributed tracing works, common tracing frameworks, and how to instrument microservices for tracing.

Observability - Monitoring

An overview of the different types of monitoring that can be used in microservices architecture, such as system monitoring, application monitoring, and business monitoring, and the different tools and approaches for monitoring microservices.

Observability - Diagnostics

An overview of the different techniques and tools for diagnosing and debugging issues in microservices architecture, including log analysis.

Observability - Logging

Logging is an important aspect of observability in microservices architecture. This topic covers different logging frameworks and strategies used for monitoring and troubleshooting distributed systems.

Observability - CorrelationId

Correlation ID is a technique used to track requests across multiple microservices. This topic explains what Correlation ID is and how it is implemented in a distributed system.

Observability - Tools - EFK

EFK stack (Elasticsearch, Fluentd, and Kibana) is a popular logging and observability solution. This topic covers the basics of EFK, how it works, and how to set it up in a microservices architecture.

Observability - Tools - ELK

ELK stack (Elasticsearch, Logstash, and Kibana) is another popular logging and observability solution. This topic covers the basics of ELK, how it works, and how to set it up in a microservices architecture.

Observability - Tools - Fluent Bit

Fluent Bit is a lightweight and efficient log processor and forwarder. This topic covers the basics of Fluent Bit, how it works, and how to set it up in a microservices architecture.

Observability - Tools - FluentD

Fluentd is an open-source log collector and aggregator. This topic covers the basics of Fluentd, how it works, and how to set it up in a microservices architecture.

Observability - Tools - Loki

Loki is a horizontally-scalable, highly-available log aggregation system. This topic covers the basics of Loki, how it works, and how to set it up in a microservices architecture.

Resiliency

Resiliency is the ability of a system to recover from failures and continue functioning. This topic covers different resiliency patterns and strategies used for building fault-tolerant microservices.

Resiliency - Idempotency

Idempotency is a technique used to ensure that an operation can be safely retried without causing unintended effects. This topic explains what idempotency is and how it can be implemented in a microservices architecture.

Resiliency - High Availability

High availability is a property of a system that ensures it remains operational even in the face of hardware or software failures. This topic covers different high availability patterns and strategies used for building fault-tolerant microservices.

Security

Security is a critical aspect of any distributed system. This topic covers different security challenges and strategies used for securing microservices.

Security - Key Vault

A key vault is a secure storage location for storing cryptographic keys, certificates, and secrets used by a microservices architecture. This topic explains what a key vault is and how to use it to securely manage sensitive data in a microservices

Tools - CAP

CAP (short for "CAPability") is a distributed transaction solution for microservices that is based on the idea of eventual consistency. It provides an event bus with an Outbox pattern, which allows you to publish messages/events to multiple microservices in a reliable and transactional way. CAP is written in .NET Core

Tools - Dapr

Dapr (Distributed Application Runtime) is an open-source framework for building microservices-based applications. It provides a set of building blocks, such as state management, pub/sub messaging, and service-to-service invocation, that help developers to focus on writing business logic rather than infrastructure code. Dapr is designed to be language-agnostic and can be used with any programming language and any cloud or edge environment. This topic covers the key features of Dapr and how to use it to build distributed applications.

Tools - Mass Transit

Mass Transit is an open-source distributed application framework for .NET. It provides a set of abstractions and building blocks for building scalable and fault-tolerant microservices-based applications. Mass Transit supports various messaging technologies, such as RabbitMQ, ActiveMQ, and Azure Service Bus, and provides features such as request-response, pub/sub messaging, and message routing. This topic covers the key features of Mass Transit and how to use it to build distributed applications.

Tools - NService Bus

NService Bus is a commercial distributed application framework for .NET. It provides a set of abstractions and building blocks for building scalable and reliable microservices-based applications. NService Bus supports various messaging technologies, such as RabbitMQ, Azure Service Bus, and Amazon SQS, and provides features such as request-response, pub/sub messaging, and message routing. This topic covers the key features of NService Bus and how to use it to build distributed applications.

Tools - SteelToe

Steeltoe is an open-source framework for building .NET microservices-based applications that run on Cloud Foundry and Kubernetes. Steeltoe provides a set of libraries and building blocks, such as service discovery, circuit breakers, and security, that help developers to build and operate cloud-native applications. Steeltoe is designed to be modular and can be used with any .NET framework, such as ASP.NET, .NET Core, and .NET Framework. This topic covers the key features of Steeltoe and how to use it to build cloud-native applications.

Tools - Tye

Tye is an open-source development tool for building, testing, and deploying microservices-based applications. Tye provides a simple and fast way to develop and run applications locally using containers, without the need to manage the infrastructure. Tye supports various programming languages, such as .NET, Java, and Node.js, and integrates with popular tools such as Docker, Kubernetes, and Helm. This topic covers the key features of Tye and how to use it to develop and deploy microservices-based applications locally.

Tools - wolverine

Wolverine is an open-source project that provides a next-generation command and message bus for .NET. It allows developers to build scalable and distributed applications by enabling communication between different parts of the application through a message-based architecture. Wolverine is built on top of the Jasper Framework and provides features such as distributed command routing, message serialization, and versioning. It supports both synchronous and asynchronous message handling, and can be used with various transport protocols such as HTTP, RabbitMQ, and Azure Service Bus.