Best of ArchitectureJuly 2024

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

    8 Strategies for Reducing Latency

    High latency can render an application unusable, frustrating users and negatively impacting business outcomes. Developers need to understand low-latency strategies such as caching, using Content Delivery Networks (CDNs), load balancing, asynchronous processing, database indexing, data compression, pre-caching, and utilizing keep-alive connections to mitigate these issues and improve performance.

  2. 2
    Article
    Avatar of communityCommunity Picks·2y

    19 Microservices Patterns for System Design Interviews

    The post provides an overview of 19 essential microservices design patterns that are crucial for system design interviews. These patterns address various challenges like scalability, fault tolerance, and data consistency in microservices architectures. Patterns discussed include Circuit Breaker, API Gateway, Saga, Event Sourcing, and more. The post also highlights the importance of these patterns in demonstrating problem-solving abilities in technical interviews and offers resources for preparing system design interviews.

  3. 3
    Article
    Avatar of javarevisitedJavarevisited·2y

    10 Best GitHub Repositories to Prepare for System Design Interviews

    System design interviews are crucial for senior and lead engineering positions but tough to crack. A well-curated list of GitHub repositories offers resources, examples, and practice materials to help prepare for these interviews. Key repositories include ByteByteGoHq, System Design Primer, Awesome System Design, System Design Interview, Grokking System Design, and others, covering topics like scalability, large-scale system design, real-world architectures, and more.

  4. 4
    Article
    Avatar of medium_jsMedium·2y

    40 Must-Read White Papers to Learn System Design and Software Architecture

    This post lists 40 essential white papers for learning system design and software architecture. It is geared towards those preparing for system design interviews or aiming to understand complex system architectures. Each white paper provides in-depth technical insights from industry leaders like Google and AWS, covering topics from distributed file systems to data processing models and consensus algorithms.

  5. 5
    Article
    Avatar of javarevisitedJavarevisited·2y

    Most-Used Distributed System Design Patterns

    Distributed system design patterns offer architectural solutions and best practices for developing distributed applications. This post discusses widely-used patterns like Ambassador for proxy tasks, Circuit Breaker to prevent cascading failures, CQRS for separating read and write databases, Event Sourcing for recording events, Sidecar for managing cross-cutting concerns, Leader Selection for electing a single node leader, Publisher/Subscriber for asynchronous communication, Sharding for data distribution, Bulkhead to isolate system components, and Cache-Aside for optimized caching strategies. Examples of tools and implementations for each pattern are provided to illustrate their applications and benefits.

  6. 6
    Article
    Avatar of devtoDEV·2y

    Part 1: What is Clean Architecture?

    Clean Architecture, introduced by Robert C. Martin, aims to create systems that are easy to understand, flexible, and maintainable by emphasizing separation of concerns. It organizes code into concentric circles, where dependencies only flow inward, ensuring modularity and testability. The architecture allows for improved testability, flexibility, maintainability, reusability, and scalability by keeping business logic decoupled from external dependencies like frameworks and databases.

  7. 7
    Article
    Avatar of communityCommunity Picks·2y

    Top 5 Must-Read Books for Software Architects

    Software architecture is comparable to solving complex puzzles, where each piece must fit perfectly to create an efficient system. At Tectrain, a team of software architects recommends five must-read books that provide deep insights into mastering software architecture. These books include practical guides, real-world case studies, and step-by-step tutorials, making them invaluable resources for both novices and experienced professionals looking to enhance their skills and tackle certification programs like the iSAQB CPSA-F.

  8. 8
    Article
    Avatar of medium_jsMedium·2y

    System Design: Load Balancer

    Load balancers are essential in distributing workloads effectively across multiple servers in distributed applications. They can operate at various application layers and employ static or dynamic algorithms to manage requests. Static algorithms depend on predefined parameters while dynamic ones use real-time system state data. Popular load balancing strategies include Round Robin (and its variations), Least Connections, Least Response Time, IP Hashing, and URL Hashing. The choice of strategy depends on specific system needs and configurations to ensure optimal performance.

  9. 9
    Article
    Avatar of bytebytegoByteByteGo·2y

    EP121: 9 Essential Components of a Production Microservice Application

    Explore the nine essential components for a production microservice application, which include API Gateway, Service Registry, Service Layer, Authorization Server, Data Storage, Distributed Caching, Async Microservices Communication, Metrics Visualization, and Log Aggregation and Visualization. Each component has a specific function crucial for the microservices architecture's efficiency, performance, and security.

  10. 10
    Article
    Avatar of javarevisitedJavarevisited·2y

    System Design Basics — Rate Limiter

    A rate limiter is a mechanism used in software systems and network communications to control the rate at which requests or operations are performed. It helps maintain system stability, prevent resource overuse, and ensure fair usage among users. Rate limiters are critical in high-traffic, distributed architectures. Common rate limiting algorithms include Token Bucket, Leaky Bucket, and Sliding Window. Understanding rate limiting is important for system design interviews, where it is often discussed alongside concepts like API gateways and load balancers.

  11. 11
    Article
    Avatar of communityCommunity Picks·2y

    Building Microservices with nodejs nestjs #series

    The video series covers building microservices for enterprise applications using the Node.js ecosystem. It includes topics like Express/NestJS with TypeScript, deploying services with AWS CDK, and various microservice architectures such as event-driven and serverless. The series provides practical insights into deploying with AWS ECS or Lambda and discusses best practices for different microservice patterns.

  12. 12
    Article
    Avatar of ardalisArdalis·2y

    From Microservices to Modular Monoliths

    Struggling with the complexity of microservices? Consider migrating to a modular monolith. This approach maintains the gains from breaking up a legacy system without dealing with the issues of a massively distributed system. A modular monolith can simplify management, reduce latency, and keep communication efficient among well-defined modules. However, such a migration needs careful planning and execution.

  13. 13
    Article
    Avatar of communityCommunity Picks·2y

    9 Software Architecture Patterns for Distributed Systems

    In modern software development, distributed systems require efficient design to manage data and communication between components. Key architectural patterns like Peer-to-Peer, API Gateway, Pub-Sub, Request-Response, Event Sourcing, ETL, Batching, Streaming Processing, and Orchestration offer solutions for reliability, scalability, and maintainability. These patterns are essential not only for system robustness but also for system design interviews, providing a deep understanding of their strengths and trade-offs.

  14. 14
    Article
    Avatar of hnHacker News·2y

    taubyte/tau: Open source distributed Platform as a Service (PaaS). A self-hosted Vercel / Netlify / Cloudflare alternative.

    Tau is an open-source, distributed Platform as a Service (PaaS) designed to compete with major providers like Vercel, Netlify, and Cloudflare. It's a developer-friendly framework focused on minimal configuration, auto-discovery, and peer-to-peer networking. Using Git for infrastructure management, Tau emphasizes local development and seamless production deployment. Features include WebAssembly support, content-addressed storage, and a plugin system for extensibility.

  15. 15
    Article
    Avatar of hnHacker News·2y

    jodigiordano/gg: The software architecture simulator

    gg is a light software architecture simulator designed for documentation and presentation purposes. Although still in its proof-of-concept phase, it allows users to define various software architectures and create step-by-step presentations of different usage scenarios. The tool can be started by cloning the repository, installing dependencies, and running the development server.

  16. 16
    Article
    Avatar of bytesdevBytes by ui.dev·2y

    React Native makes it official

    The React Native team now officially recommends using the Expo framework for new projects. Expo offers extensive native libraries, simplified routing, and better native code management, making it a top choice for most developers. Additionally, managing API keys efficiently is crucial for security, with tools like Zero providing centralized management. Tinybase released a new version focusing on data sync functionality, and there are other noteworthy updates in the developer community, including Deno's new features and insights into performance benchmarking.

  17. 17
    Article
    Avatar of towardsdevTowards Dev·2y

    SOLID Principles in C#

    The SOLID principles are a set of five key design principles for building maintainable and flexible software architecture: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion. The post details each principle with examples in C#, providing guidelines to help keep classes focused and testable, favoring abstraction and composition over inheritance, and ensuring extensibility without modifying existing code.

  18. 18
    Article
    Avatar of itnextITNEXT·2y

    Software Architecture Diagrams with C4 Model

    The C4 model helps software development teams describe and communicate software architecture through four levels: Context, Containers, Components, and Code. This hierarchical approach offers a clear and detailed view of a system, from a high-level context to the specifics of code. The model encourages using diagrams as code, enabling easy version control, collaboration, and automation. Tools like Structurizr facilitate the creation and updating of these diagrams, which can be integrated into CI pipelines for automatic rendering.

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

    Building Your First Use Case With Clean Architecture

    Learn how to design a user registration feature using Clean Architecture principles, focusing on the dependency rule to decouple business logic from external dependencies. Clean Architecture emphasizes separation of concerns, making systems more maintainable and testable. The practical guide covers defining use cases, managing dependencies, handling race conditions, and updating hashing algorithms.

  20. 20
    Article
    Avatar of communityCommunity Picks·2y

    Microservices Architecture, The Hard Parts : Trap of Distributed Monolith

    Seasoned Senior Software Engineers often encounter significant challenges when implementing Microservices Architecture. Initial enthusiasm can give way to difficulties, particularly when releasing new features or managing performance and latency due to service interdependencies. Identifying and addressing issues such as inadequate service boundaries, excessive synchronous communication, overly fine-grained services, service coupling, and shared code without versioning are critical to preventing the creation of a Distributed Monolith.

  21. 21
    Article
    Avatar of devtoDEV·2y

    Part 2 :Design Principles in Software Development

    Adhering to fundamental design principles in software development—such as Dependency Inversion, Separation of Concerns, Single Responsibility, DRY (Don't Repeat Yourself), and Persistence Ignorance—is key to creating robust, maintainable, and scalable applications. Each principle contributes to keeping the codebase clean and efficient, which in turn simplifies maintenance and extension of the software.

  22. 22
    Article
    Avatar of developertechDeveloper Tech·2y

    Microservice architecture vs modular architecture

    Architecture forms the foundation for a system's performance, scalability, and maintainability. This post contrasts microservice architecture and modular architecture, highlighting their key characteristics, including data management, scalability, flexibility, performance, state management, development complexity, maintenance, and cost considerations. Microservice architecture enhances agility and autonomy through independent services, while modular architecture provides a unified, simpler development environment with centralized data management. The choice depends on project specifics, with microservices favoring high scalability and flexibility, and modular architecture being suitable for stable requirements with centralized control.

  23. 23
    Article
    Avatar of communityCommunity Picks·2y

    The 5 Rules of Effective Component-Driven Development

    Component-driven development enhances system flexibility, boosts teamwork, and reduces implementation stress and time. By creating systems using reusable, specialized, context-agnostic, isolated, and replaceable components, developers can improve maintainability and reduce costs. This approach is technology-agnostic and applicable across various stacks like mobile apps, WordPress, and Laravel.

  24. 24
    Video
    Avatar of communityCommunity Picks·2y

    7 Must-know Strategies to Scale Your Database

    Understanding when and why to scale your database is essential to maintain optimal performance as your application grows. Key strategies include indexing for quick data retrieval, using materialized views for pre-computed snapshots of data, and implementing denormalization to simplify complex queries. Vertical scaling, adding resources to a single server, and caching frequently accessed data in a fast storage layer can enhance responsiveness. Replication bolsters availability and fault tolerance by creating database copies on multiple servers. Sharding, which involves splitting a database into smaller sections, enables horizontal scaling and manages large data loads efficiently.

  25. 25
    Video
    Avatar of beabetterdevBe A Better Dev·2y

    Event Driven vs Request Response

    Event-driven and request-response are two key software architecture patterns for integrating microservices. Event-driven (asynchronous) systems use entities like topics to publish messages to subscribers, offering loose coupling and ease of scaling. Request-response (synchronous) models involve direct API calls and can suffer from higher latency and complexity when adding new dependencies. Each approach has its pros and cons, and choosing the right one depends on specific use cases and requirements.