1001 نکته مهندسی نرم افزار، معماری سیستم یا طراحی سطح بالا High-Level Design
انتخاب معماری درست برای سیستم شما می تواند تفاوت بین "موفقیت بلند مدت" و "کابوس ریفکتورینگهای بی پایان" باشد. معماری، ساختار کلی طراحی سیستم را نشان میدهد. در طراحی سطح بالا، تمرکز صرفا بر چگونگی تعامل اجزای مختلف سیستم با یکدیگر می باشد (بدون وارد شدن به جزئیات داخلی و کدینگ اجزا). این بخش کمک میکند تا افرادی که درگیر پروژه هستند به درک بهتری از اهداف هر جز دست یابند.
معماری خوب آنست که سیستم را تا حد امکان به شکلی مدلسازی و طراحی نماید که لایه "منطق و قواعد کسب و کار" مستقل از سایر لایه ها/اجزا/عناصر ( تکنولوژی، زیرساخت، پلاتفرم، فریم ورک، دیتابیس، واسط کاربری، سرویسها، APIs، ... ) بوده و متاثر از تغییرات آنها نباشد. چنین معماری/طراحی سبب خواهد شد تا هر لایه مستقل از سایر لایه ها، توسعه داده شده و تست شود.
برای پیاده سازی و اجرای معماری (طراحی سطح بالا) نیز می توان از الگوهای زیر سود جست
Software Architectural Styles
- Actor-based Model (Distributed Shared nothing Concurrent programming via message passing)
- Big Ball of Mud Antipattern (Coupling everythings)
- Broker architecture pattern
- Cell-Based Architecture
- Centralized, Decentralized (Distributed Event-Based Systems)
- Client–server (1990s)
- Clean Architecture (2011)
- Component-based
- Controller Responder Pattern (Master/Slave)
- Data-centric
- Domain-Driven Design (DDD)(2003)
- Screaming Architecture (Robert C. Martin, “Uncle Bob.”)
- Event-Bus Pattern
- Event Driven Architecture (EDA) (Event Driven Design & Message Driven Design)
- Application Internal (etc, Goroutins in Golang, Akka)
- Ephemeral (ESB (Enterprise Service Bus))
- Queues (JMS) (etc, RabbitMQ, Active MQ)
- Pub/Sub (Streaming ) (etc, Apache Kafka)
- Feature-based Architecture (Vertical Slice Architecture)
- Fractal Architectures (A Software Craftsman’s take to Infrastructure as Code IaC)
- Hexagonal Architecture (also known as Ports and Adapters) (2005)
- Layered architecture, N Layered (or multilayered and Segmented ) architecture
- Three-tier, Multi-Tier Pattern (Application, API, Product Services, Common Services, Data)
- Microkernel (Core) + Plug-ins architecture
- Microservices architecture
- Modular Monolith
- Orchestration-Driven Service-Oriented Architecture (SOA)
- Onion Architecture (2009)
- Pipes and Filters architecture
- Primary-Replica Architecture Pattern
- Resource-oriented architecture
- Rule-based
- Serverless Architectures (BaaS (Backend as a Service) and FaaS (Function as a Service))
- Space-based architecture (SBA)(Shared Nothing architecture & distributed computing architecture)
- Shared Nothing architecture (SNA)
Software Architectural Patterns
- Batch request (Request Bundle pattern)
- Blackboard (design pattern)
- Circuit Breaker
- Claim-Check pattern
- Competing Consumers pattern
- CQRS + Event Sourcing
- Inbox and outbox pattern
- Model-View-Controller (MVC)
- Peer-to-peer (P2P) architecture pattern
- Publish-Subscribe messaging pattern
- Queue-Based Load Leveling
- Request-Response (REST, RPC, SOAP, …)
- Rule-based
- Saga pattern
- Shared-Data pattern
- Strangler fig pattern
- Backpressure and Throttling
مهمترین بخش معماری یا طراحی سطح بالا این است که چگونه سیستمی مقیاس پذیر طراحی کنیم؟!
برای پاسخ به سوال فوق، بر روی گلوگاه های سیستم و موارد زیر بایستی تمرکز نمود :
- Modularity, Separation of Concerns, Decoupling and Loose Coupling
- Load Distribution, Horizontal Scalability (Scaling Out) (Elastic Infrastructure).
- Geographic distribution: Deploy the system in multiple geographic regions to be closer to users.
- Data partitioning, Scalable Data Sharding
- Concurrency and Parallelism
- Utilize technologies that support auto-scaling and load balancing
- Software Architecture Scalability: Microservices Architecture, Event-Driven Architecture,
- Space-Based Architecture, CQRS+Event Sourcing, Distributed Systems, Serverless Arch, …
- Single Point of Failure (SPOF ) in System Design
- Common Single Points of Failure in Systems
- Databases
- Application Servers
- Load Balancers
- Network Connections
- Strategies to Eliminate Single Points of Failure
- Redundancy
- Availability Zones and Failover Mechanisms
- Load Balancing
- Geographic Distribution
- Monitoring and Alerts
- Health monitoring
- Availability monitoring
- Performance monitoring
- Secuity monitoring
- Usage monitoring
- Fault Tolerance & Resilience
- Asynchronous Processing: Use message queues and asynchronous tasks to handle operations that don't require immediate responses
- Statelessness: Design services to be stateless, meaning they don't store session data between requests. This simplifies scaling and load balancing.
- Cloud-Native Design & Resource Management
- Performance Optimization
- Maintainability & Extensibility
- Capacity Estimation
- Caching and Content Delivery Networks (CDNs)
- Prefer simple CAP systems over exotic eventual consistency if possible.
- Observability, Monitoring and Performance Optimization (identify bottlenecks)
- Tradeoffs and Priorities
ریفرنس : 1001 نکته مهندسی نرم افزار، نقشه را ه معماری، طراحی، توسعه، تست، استقرار، تحویل و نگهدار ی نرم افزارهای بزرگ مقیاس و سازمانی
مدیریت پروژه های فناوری اطلاعات، هوش مصنوعی (یادگیری ماشین و علوم داده)، بلاک چین، مراکز داده و رایانش ابری