Best of MicroservicesOctober 2024

  1. 1
    Article
    Avatar of devtoDEV·2y

    Dockerfile Best Practices: How to Create Efficient Containers

    In the era of microservices and cloud computing, optimizing Dockerfiles is essential for building lightweight, fast, and secure containers. Key practices include using minimal base images like Alpine or Scratch, reducing layers by combining commands, optimizing layer caching, installing dependencies wisely, managing secrets carefully, using a '.dockerignore' file, employing multi-stage builds, avoiding running containers as the root user, scanning for vulnerabilities, and directing logs to standard output. Regular updates and using specific version pins also enhance security and reproducibility.

  2. 2
    Video
    Avatar of awegoAwesome Go·2y

    Complete Backend Engineering Course in Go

    This course offers a comprehensive guide to backend engineering in Go, covering the creation of a RESTful API from scratch to deployment. It spans from basic concepts like creating a low-level TCP server to advanced topics like authentication, authorization, caching, logging, CI/CD, and deployment to Google Cloud. The course emphasizes understanding core principles, design patterns, and best practices for API development, including the repository pattern, clean architecture, optimistic concurrency control, and more. A free, initial module is available, along with a GitHub repository for further exploration.

  3. 3
    Article
    Avatar of microservicesioMicroservices.io·1y

    The evolution of the Microservice Architecture pattern language

    The post discusses the evolution of the Microservice Architecture pattern language over the past decade, highlighting its origins and development. It introduces essential concepts like anti-patterns, the forces of dark energy and dark matter in architectural decisions, and the importance of context in determining architectural choices. Additionally, it advises on refining terminology and emphasizes that monolithic architectures remain useful in many contexts. Future improvements and ongoing adaptation in the field are also covered.

  4. 4
    Article
    Avatar of bytebytegoByteByteGo·2y

    EP134: What do Amazon, Netflix, and Uber have in common?

    Amazon, Netflix, and Uber excel at scaling their systems using strategies like stateless services, horizontal scaling, load balancing, auto scaling, caching, database replication, database sharding, and async processing. The post also explains key differences between paging and segmentation in memory management, and provides insights into the microservices tech stack used in pre-production and production phases.

  5. 5
    Article
    Avatar of nordicapisNordic APIs·1y

    How Modern Banking Is Using GraphQL

    GraphQL is revolutionizing the banking industry by providing flexible and efficient data querying and integration. Major banks like National Australia Bank and Varo are leveraging GraphQL to streamline their systems, reduce duplication, and improve the user experience. Institutions like Goldman Sachs and BBVA are also adopting GraphQL to enhance data connectivity and security, showcasing the language's versatility and scalability in handling complex financial data needs.

  6. 6
    Article
    Avatar of systemdesigncodexSystem Design Codex·2y

    Eventual Consistency is Tricky

    Eventual consistency is essential in distributed systems, allowing scalability despite temporary inconsistencies. Key patterns to achieve eventual consistency include Event-Based, Background Sync, Saga, and CQRS. Each pattern has specific use cases, pros, and cons, ranging from loosely coupled systems to complex long-running transactions, ensuring data congruence through various methods.

  7. 7
    Article
    Avatar of threedotslabsThree Dots Labs·2y

    Distributed Transactions in Go: Read Before You Try

    The post discusses the complexities of using distributed transactions in microservices with Go. It warns against using distributed transactions due to their complications and instead suggests alternatives like embracing eventual consistency and using the outbox pattern. The post also provides a detailed implementation approach for using event-driven architecture with Redis and Watermill in Go, including handling events asynchronously and ensuring data consistency. It emphasizes the importance of correct service boundaries and provides guidance on testing and monitoring event-driven systems.

  8. 8
    Article
    Avatar of itnextITNEXT·2y

    Ambiguous architectural patterns

    The post discusses ambiguous architectural patterns such as Monolith, Microkernel, Domain Services, Cells, and Nanoservices. It highlights how these terms have evolved and sometimes been misinterpreted or redefined over time, leading to confusion. It stresses the importance of understanding these differences to avoid miscommunication and inefficiency in software development.

  9. 9
    Article
    Avatar of faunFaun·2y

    Java 23, SpringBoot 3.3.4, Jakarta 10

    A rapid-start template optimized for microservices and cloud-native architectures using Java 23, SpringBoot 3.3.4, and Jakarta 10. It features a packaging structure based on Hexagonal Architecture, cross-cutting concerns handled via AOP, JWT for authentication and authorization, robust web security, and Docker containerization. The Hexagonal Architecture ensures a clear separation of concerns, maintaining flexibility and adaptability. Comprehensive logging, multiple Spring profiles, and extensive use of Swagger and OpenAPI for API documentation are also highlighted.

  10. 10
    Article
    Avatar of java_libhuntAwesome Java Newsletter·2y

    The Best Microservices Design Patterns Explained Like You’re Ordering Pizza

    The post creatively explains various microservices design patterns using a pizza-making analogy. It covers essential patterns like Single Responsibility, API Gateway, Database per Service, Circuit Breaker, Event Sourcing, Saga, Strangler, Bulkhead, CQRS, Sidecar, and Backend for Frontend (BFF). Each pattern is described with its benefits and real-life examples to illustrate its practical application in software engineering.

  11. 11
    Article
    Avatar of itnextITNEXT·2y

    Middleware

    Middleware acts as a low-level layer providing connectivity and communication for a system of services, improving scalability and error recovery. It's commonly used in backend systems, offering variants such as message brokers, service meshes, and enterprise service buses. Middleware enhances dynamic scaling, helps in deployments, and ensures message delivery but may introduce latency and complexity.

  12. 12
    Video
    Avatar of codeheimcodeHeim·2y

    #58 Golang - Asynchronous Messaging with RabbitMQ

    Learn how to integrate RabbitMQ with Go for building scalable distributed systems. The post covers the basic architecture of RabbitMQ, how to set up a producer to send messages, and a consumer to receive messages using the AMQP protocol. The tutorial uses the Gin framework to set up a web server and demonstrates sending and receiving messages through HTTP requests. Additionally, it discusses handling errors and system interrupts.

  13. 13
    Article
    Avatar of simplethreadSimple Thread·2y

    Beyond Microservices: (Mis)Using Linux Containers for Software Testing

    Containerization is becoming essential for software testing beyond just building microservices. Containers aid in swift test scenario setup, state control, and scalability. The post highlights various patterns, including using containers for unit, feature, and service tests, controlling test state, testing on different runtimes, and simulating hardware environments. Containers provide a flexible and low-overhead solution, enhancing testing efficiency and enabling comprehensive system validation.

  14. 14
    Article
    Avatar of microservicesioMicroservices.io·2y

    Microservices rules #10: Make smaller, safer, and reversible changes - part 3

    Making smaller, safer, and reversible changes is crucial for the production deployment of microservices. This approach minimizes risks and ensures system stability.

  15. 15
    Article
    Avatar of milanjovanovicMilan Jovanović·2y

    Implementing the Outbox Pattern

    The Outbox Pattern addresses the challenge of maintaining data consistency in distributed systems by ensuring atomicity between database operations and message publication. This pattern saves messages to an Outbox table within the same database transaction and later publishes them via a separate process, ensuring at-least-once delivery. Implementation details, such as creating the Outbox table and a processing job using Quartz, are discussed along with considerations for scalability, idempotency, and database performance.

  16. 16
    Article
    Avatar of cerbosCerbos·2y

    Why you need to think about both your security and users when implementing authorization

    Designing a customizable and performant authorization system is crucial for both security and user experience. Fine-grained permissions are vital for accommodating diverse business needs and complying with regulations like GDPR and CCPA. A flexible authorization framework can offer competitive advantages, especially when integrating with tools like Okta or AWS Cognito for authentication. Implementing a centralized authorization service not only enhances security but also provides valuable audit logs for breach analysis. Metrics such as MTTD, MTTI, and MTTR can measure the effectiveness of these systems. A mix of server and client-side checks can improve scalability and user experience, making authorization a strategic asset that aligns with business goals.

  17. 17
    Article
    Avatar of cerbosCerbos·2y

    Guide to Java authentication and authorization

    Authorization is crucial for ensuring only authorized users can access specific resources in an application. Traditional methods like RBAC have been supplemented by ABAC and PBAC for more granular control. OAuth and OpenID Connect are popular for secure authentication. The post reviews three Java frameworks: Spring Security, Apache Shiro, and JAAS, and discusses their features and integration capabilities. The role of authorization in microservices, its challenges, and emerging technologies like zero trust architecture are also explored.

  18. 18
    Article
    Avatar of communityCommunity Picks·2y

    Top 10 Microservices Design Patterns you should know

    Microservices are small, independently deployable components of a larger application, offering benefits like scalability, flexibility, faster development, resilience, and easier maintenance. However, they also pose challenges such as complexity, inter-service communication, data management, deployment overhead, and security. To address these challenges, various design patterns such as Database Per Service, API Gateway, Backend For Frontend (BFF), CQRS, Event Sourcing, Saga, Sidecar, Circuit Breaker, Anti-Corruption Layer, and Aggregator are used.

  19. 19
    Article
    Avatar of justjavaJust Java·2y

    Why Spring Boot

    Spring Boot streamlines project setup, making development easier with features like auto-configuration, extensive tools, and strong community support. It excels in microservices, cloud-based projects, and simplifies testing processes.

  20. 20
    Article
    Avatar of itnextITNEXT·2y

    Mesh

    Mesh is an architectural pattern that uses interconnected, layered shards as middleware, enhancing scalability and fault tolerance in distributed environments. It supports dynamic scaling and high availability but may introduce communication artifacts and performance overhead. Meshes vary significantly by structure, connectivity, and layers, and are implemented in various forms such as Peer-to-Peer Networks, Leaf-Spine Architecture, Actors, and Service Meshes.

  21. 21
    Article
    Avatar of faunFaun·1y

    Kubernetes Go-live checklist for your Microservices

    Successfully taking Kubernetes microservices from development to production requires careful planning and configuration. Key steps include calculating per-pod capacity, setting resource requests and limits, configuring autoscaling, ensuring high availability, implementing probes for health checks, and setting up comprehensive monitoring and alerting systems. By following this checklist, you can enhance the stability, scalability, and performance of your applications.

  22. 22
    Article
    Avatar of communityCommunity Picks·2y

    .NET Aspire RabbitMQ integration - .NET Aspire

    Learn how to integrate RabbitMQ with .NET Aspire for reliable messaging and streaming. The integration supports adding RabbitMQ server resources, management plugins, data volumes, and bind mounts. It also covers setting up user credentials, health checks, and observability features like logging and tracing. A NuGet package is available for client integration to facilitate interaction with RabbitMQ servers.