Best of ArchitectureAugust 2024

  1. 1
    Article
    Avatar of gcgitconnected·2y

    Message Queues in System Design

    Message queues are durable components that support asynchronous communication, helping to decouple events and handle tasks without immediate processing. This allows better scalability and durability, especially under high traffic. Different types of queues like FIFO and priority queues, as well as different models like push-based and pull-based queues, provide versatile solutions for various needs. Examples of message queues include RabbitMQ for versatility, Kafka for high throughput, and Amazon SQS for managed cloud-based services.

  2. 2
    Article
    Avatar of freecodecampfreeCodeCamp·2y

    How to Create Software Architecture Diagrams Using the C4 Model

    The C4 model is a method to help software development teams describe and communicate software architecture, using four levels: Context, Containers, Components, and Code. This approach ensures that architecture diagrams are up-to-date and easily understandable, helping everyone stay on the same page. With the help of tools like Structurizr, diagrams can be created and maintained efficiently, integrated directly into development processes with version control and automation.

  3. 3
    Article
    Avatar of javarevisitedJavarevisited·2y

    How to Design Twitter (X) in a System Design Interview?

    Designing a system like Twitter (X) in a system design interview involves outlining core functionalities such as composing and sharing tweets, following users, and favoriting tweets. Non-functional requirements like scalability, high availability, and stability are crucial for handling large-scale operations. Key aspects include capacity estimation, API design, database design, and understanding queries per second (QPS). Employing a structured approach and utilizing tools like Redis for caching, MySQL for data consistency, and Amazon S3 for media storage are essential. Detailed component design includes load balancers, CDNs, and handling failure scenarios to ensure robust system performance.

  4. 4
    Video
    Avatar of communityCommunity Picks·2y

    Implement Clean Architecture in Next.js

    Clean architecture, a concept developed by Robert Martin, integrates various software architectures like hexagonal, onion, and others into a cohesive framework. It focuses on ensuring that the business logic of an application remains independent of frameworks, UI, databases, and external agencies. The post discusses implementing clean architecture in a Next.js application, highlighting the importance of separating different concerns through layers. It explains how to structure code to make applications more testable and maintainable. Key aspects include dependency injection, unit testing, and the interaction between different architectural layers.

  5. 5
    Article
    Avatar of gcgitconnected·2y

    System Design Interview: Design Twitter (X)

    This post discusses the design of a Twitter-like app, covering functional and non-functional requirements, API endpoints for key features like tweeting and user interactions, and strategies for scalable, read-heavy systems. Key components include client apps, load balancers, API servers, relational databases, caching solutions, object storage, and CDNs. The post also explores techniques for database scaling through read replicas and sharding, and the use of message queues for handling peak loads.

  6. 6
    Article
    Avatar of bytebytegoByteByteGo·2y

    EP126: The Ultimate Kafka 101 You Cannot Miss

    This edition of the ByteByteGo newsletter covers several key topics, including a guide to understanding Apache Kafka, tips for efficient API design, an overview of AWS Services, and an advertisement for QA Wolf, an automated testing solution. Kafka is detailed with its core concepts like messages, topics, partitions, producers, consumers, clusters, and use cases. The AWS Services cheat sheet simplifies the exploration of AWS's expansive offerings. Additionally, the newsletter includes 8 practical tips for better API design.

  7. 7
    Article
    Avatar of medium_jsMedium·2y

    How Did LinkedIn Handle 7 Trillion Messages Daily With Apache Kafka?

    LinkedIn uses Apache Kafka to manage and process up to 7 trillion messages daily. They achieve reliability and scalability through a multi-tiered Kafka deployment across multiple data centers, leveraging local and aggregate clusters. LinkedIn ensures message completeness with an internal auditing tool that tracks sent and consumed messages. They maintain a close relationship with the open-source Kafka community by regularly integrating features and patches from their internal branches into the upstream Kafka branch.

  8. 8
    Article
    Avatar of communityCommunity Picks·2y

    Simplifying Your Tech Stack with PostgreSQL

    Simplifying your tech stack with PostgreSQL can streamline development, reduce operational complexity, and minimize moving parts. PostgreSQL can efficiently replace multiple technologies such as Kafka, RabbitMQ, MongoDB, and Redis, supporting functionalities like caching, message queuing, data warehousing, and full-text search. This approach enhances developer productivity, reduces cognitive load, and ensures robust performance and flexibility. Developers benefit from PostgreSQL's comprehensive support for JSON, geospatial queries, auditing, and more, providing a powerful and scalable backend solution.

  9. 9
    Article
    Avatar of infoqInfoQ·2y

    Thinking Like an Architect

    The post delves into the multifaceted role of an architect, emphasizing it as a way of thinking rather than a title. It explores the concept of the 'architect elevator,' highlighting the significance of connecting various organizational levels to ensure effective communication and implementation. The role of an architect is portrayed as an IQ amplifier, guiding others to make better decisions by understanding tradeoffs and impacts. The post also underscores the value of models, metaphors, and the ability to see multiple dimensions to solve complex problems and navigate organizational and technical systems effectively.

  10. 10
    Article
    Avatar of itnextITNEXT·2y

    Don’t Ask Permission To Do Your Job Correctly: Avoiding The Technical Debt Trap

    Technical debt is a common issue in software development, often misunderstood and misused. Clean code, informed decision-making, stakeholder alignment, and clear plans to address debt can keep it advantageous rather than detrimental. Avoid the trap of accumulating 'cruft', which lacks intentional planning and support. Shift perspectives to emphasize knowledge, communication, and pragmatic improvements to ensure sustainable code quality and avoid asking permission to do your job right.

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

    Learn Docker & Deploy to AWS - Beginner Tutorial

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

    Screaming Architecture

    Screaming architecture is a concept by Robert Martin, emphasizing that a software system's structure should clearly communicate its purpose. By organizing systems around use cases, developers can create cohesive and aligned structures that simplify navigation and development. This approach also involves decomposing the problem domain into bounded contexts and utilizing vertical slices to enhance cohesion. The ultimate goal is a system that 'screams' its purpose through its architecture.

  13. 13
    Article
    Avatar of techworld-with-milanTech World With Milan·2y

    Developer hate their job, but like to code outside work

    Find out the latest trends and insights from the 2024 Stack Overflow Developer Survey, ThoughtWorks Technology Radar, Software Architecture InfoQ Trends Report, and DevJobsScanner's analysis of demanded frontend frameworks. Key highlights include the most popular and desired programming languages, top databases, cloud platforms, AI tools usage, developers' job satisfaction, and industry trends in software architecture and AI-assisted development.

  14. 14
    Article
    Avatar of devtoDEV·2y

    Modern API Development with Node.js, Express, and TypeScript using Clean Architecture

    This guide covers building a modern API using Node.js, Express, and TypeScript, with a focus on Clean Architecture principles. Topics include setting up the project, structuring it with Clean Architecture, implementing various layers such as domain, use cases, infrastructure, and interface. It also touches on Dependency Injection, error handling, data validation, real database integration with MongoDB, authentication with JWT, logging with Winston, environment configuration, CI/CD, and project documentation with Swagger.

  15. 15
    Article
    Avatar of nordicapisNordic APIs·2y

    API Design in the Post-OpenAPI Era

    New description languages and frameworks are influencing API design, shifting from traditional OpenAPI Specification towards tools like TypeSpec. The aim is to reduce errors and improve the API development experience. The Platform Summit will feature experts discussing these trends, highlighting tools that support API-first strategies and domain-specific languages for creating consistent API products. The role of OpenAPI is evolving into automatically generated artifacts rather than manually edited files.

  16. 16
    Article
    Avatar of communityCommunity Picks·2y

    How to Create a Good Data Model?

    A data model organizes and manages data, impacting system performance and scalability. This guide explains creating an effective data model using NocoBase as an example. It covers steps like understanding business requirements, identifying data entities, defining relationships, normalizing, testing, optimizing, and maintaining the model. Examples, like a factory management system, illustrate these steps. Using proper tools can simplify the process and maintain data integrity, reducing redundancy and enhancing query performance.

  17. 17
    Article
    Avatar of newstackThe New Stack·2y

    What Is OpenTelemetry? The Ultimate Guide

    OpenTelemetry is a vendor-neutral, standardized approach to capturing observability data like metrics, logs, and traces. It allows integration of various observability tools into a unified system, providing a consistent framework for capturing and analyzing telemetry data. Key components include the API/SDKs, automatic instrumentation agents, and the widely used OpenTelemetry Collector. Fundamental to observability are the golden signals: latency, traffic, errors, and saturation, which are essential for effective system performance analysis. OpenTelemetry's future development aims to enhance client-side instrumentation and extend its capabilities across diverse platforms.

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

    Introduction to Event Sourcing for .NET Developers

    Event sourcing is an architectural pattern where changes are immutably stored as events in an append-only log. This approach offers benefits like a full audit trail, improved debugging, and enhanced business insights. It requires a shift from traditional data storage methods and involves recording every change rather than the current state. Understanding key concepts such as events, state, and event stores is crucial. Although it introduces complexities and challenges, implementing event sourcing can provide significant flexibility and value in certain applications.

  19. 19
    Article
    Avatar of itnextITNEXT·2y

    Orchestration

    Orchestration in software architecture involves a coordinating layer that manages inter-service communication for system-wide use cases. While it enhances debug capabilities and error handling, it can introduce communication overhead and dependency complexities. The orchestrator acts as a facade or mediator, coordinating service interactions and ensuring system consistency. It can simplify the addition of new use cases but complicate service restructuring. Different approaches like SPI and Hierarchy can mitigate some of the challenges.

  20. 20
    Article
    Avatar of communityCommunity Picks·2y

    6 Effective Ways to Load Content in Modern Static Sites with Next.js v14 page router

    Arthur Nikitsin from FocusReactive outlines six effective methods to load content in modern static sites using Next.js v14's pages router. The methods include Static Site Generation (SSG), Server-Side Rendering (SSR), Client-Side Rendering (CSR), Code Splitting, Lazy Loading Components, and Lazy Loading Images. Each method optimizes performance and user experience, even for static sites. While the app router offers more flexibility, it's recommended to wait for its stable release in Next.js v15.

  21. 21
    Article
    Avatar of codemazeCode Maze·2y

    Differences Between Onion Architecture and Clean Architecture

    Onion and clean architectures are both used to create maintainable, scalable, and testable applications by structuring code into layers. Onion architecture is centered around a domain layer with a concentric layer approach focusing on dependency management. Clean architecture, while sharing these principles, organizes code around distinct use cases and emphasizes independence from external systems. The choice between them depends on the priority given to flexibility, business logic complexity, and team familiarity with strict guidelines.

  22. 22
    Article
    Avatar of communityCommunity Picks·2y

    gRPC From Scratch: Part 1 - Client

    An in-depth exploration of the gRPC protocol, explaining its structure and underlying mechanisms. The post covers the basics of creating a gRPC client in Go, detailing how requests and responses are encoded and decoded at a byte level. It also briefly touches on the topic of gRPC streaming and provides a simple example to get started.

  23. 23
    Article
    Avatar of communityCommunity Picks·2y

    How Netflix Uses Chaos Engineering to Create Resilience Systems 🐒

    Netflix transformed from a DVD rental service to a streaming giant using chaos engineering to build resilient distributed systems. By proactively finding and fixing potential failures through controlled experiments and automation, such as using tools like Chaos Monkey, Netflix ensures minimal downtime and high system availability. Key principles include running tests in production, automating fixes, and controlling the test's blast radius to prevent user impact.

  24. 24
    Article
    Avatar of baeldungBaeldung·2y

    Best Practices for Sizing the JDBC Connection Pool

    Efficiently managing database connections using a JDBC connection pool is crucial for application performance. By maintaining a pool of reusable connections, applications can save time and resources. Deciding the optimal pool size involves balancing performance and resource utilization. Factors such as transaction response time, database query duration, and load testing results should be considered. Key settings to tune include initial, minimum, and maximum pool sizes, idle timeout, connection timeout, and transaction isolation levels. Following best practices for tuning these settings ensures robust and efficient database connectivity.

  25. 25
    Article
    Avatar of javarevisitedJavarevisited·2y

    The Art of Asynchronous Communication: Mastering Messaging Queues for Scalable Systems

    Messaging queues are vital for modern applications, enabling asynchronous communication and scalable data processing. Key components include queues, producers, consumers, brokers, and channels. Different types of queues like Point-to-Point, Publish-Subscribe, and Priority Queues serve varied needs. Popular systems include Apache Kafka, RabbitMQ, ApacheMQ, and Amazon SQS. These systems support reliable, scalable, and fault-tolerant communication across distributed systems, crucial for microservices and event-driven architectures.