Series: Understanding software architecture and design ?
Episode 2: Key Components of Software Architecture
Software architecture is a blueprint that defines the structure, behavior, and software system.
1. Architectural Patterns:
- Layered (n-tier): Organizes the system into layers like presentation, business logic, and data access, each responsible for specific tasks.
- Microservices: Decomposes the application into small, independent services that interact over a network.
- Event-Driven: Uses events to trigger and coordinate actions across decoupled services.
- Service-Oriented Architecture (SOA): Similar to microservices but involves larger, more integrated services.
- Client-Server: Splits the system into clients, which request services, and servers, which provide services.
- Monolithic: A single, unified system that includes all functionalities in one unit.
2. Components and Modules:
- Components: Modular and reusable pieces of software with specific interfaces and functions.
- Modules: Logical groupings of components, often organized by functionality.
3. Interfaces and APIs:
- Define the methods by which components of the system communicate.
- Include RESTful APIs, GraphQL, gRPC to facilitate communication and data exchange.
4. Data Flow and Storage:
- Data Models: Representations of data structures and relationships.
- Databases: Systems for storing and retrieving data, including SQL, NoSQL, and in-memory databases.
- Data Access Layer: Manages the interaction between the application and the database.
5. Deployment:
- On-Premises: Deploys software on local servers within an organization.
Recommended by LinkedIn
- Cloud-Based: Hosts software on cloud infrastructure (e.g., AWS, Azure, GCP).
- Hybrid: Combines on-premises and cloud deployments.
- Containers: Uses containerization technologies (e.g., Docker, Kubernetes) for deployment and management.
6. Security:
- Authentication and Authorization: Validates user identities and controls access.
- Encryption: Protects data at rest and in transit.
- Firewalls and Intrusion Detection: Defends against unauthorized access and attacks.
7. Scalability and Performance:
- Load Balancing: Distributes incoming network traffic across multiple servers.
- Caching: Stores frequently accessed data in memory for quick retrieval.
- Asynchronous Processing: Handles background tasks to improve responsiveness.
8. Non-Functional Requirements (NFRs):
- Performance: Measures the system's responsiveness and efficiency.
- Scalability: Ensures the system can handle increasing loads.
- Reliability: Maintains consistent operation without failures.
- Maintainability: Allows for easy updates and modifications.
- Usability: Ensures the system is user-friendly and accessible.
These components together form the backbone of a software system, guiding its development, deployment, and maintenance to ensure it meets both functional and non-functional requirements effectively.