Learning Notes 'System Architecture Foundations'
| Infomration | Value |
|---|---|
| Course Link | LinkedIn Learning: System Architecture Foundations |
| Learning Date | 2022-05-05 |
| Why Taking this course? | Wanna learn systematic way of designing complex software system. |
| Summary | I learned the design process of complex system, along with 5 common architecture patterns |
Architect
- Everything starting from customers and centered on communication, rather than starting form techniques.
- Agile architect:
- How to break the chicken-egg problem between “user requirement” and “software development result”: use “inspect and adapt loop” (i.e. building MVP and get early feedbacks). More specifically, the 4-step cycles consisting of:
- Develop –> review –> talk to user –> refine –> (repeat this cycle)
- Cycle around 2 days.
- Everyone is architect (no need permission as architect).
- Agile architect job is : teaching, coaching, coordinating
- Agile architect job is: keep the big thing in the head rather than low-level code. Developer know the code best.
- From developer to architect:
- Good at programming
- At least read code (open source projects)
- Agile architect:
Thinking Architecturally:
- Conway’s law:
- Agile development: require both system architecture and development style to be agile
- System architecture: microservice (very thin and tall piece from frontend to backend that one developer handle)
- Development style: quick experiment and quick feedbacks.
- Agile development: require both system architecture and development style to be agile
- Agile: Incremental development (one piece at a time), instead of big up-front design. (BUFD). Agile development will postpone the technical decision but more emphasize user requirements.
Design Process
- Start with “Problem Statement” describe the problem and solution if the computer doesn’t exist. Describe the problem in the form of a set of “user stories” (each user story is a requirement of small piece)
- Narrowing w/ slice and dice (draw a high-level picture with many if-condition, and each path is a narrow’s scope)
Category of Architecture
- System architecture
- Enterprise architecture (it’s a failed approach due to complex): structure of business structure/process itself; structure of code should reflect business process
Architecture Pattern
- Pattern 1: Monolith
- What is “monolith”: an all-in-one system that contain complex components in a single system.
- Pro: (almost no)
- Cons: very hard to maintain
- Type 1: N-tiers (one types of monolith containing
- UI
- Business Logic
- Database
- Type 2: Vertical divisions (very narrow-scope service where each include independent database and UI).
- Pattern 2: Microkernel Pattern
- How:
- Core service handle core logic.
- Other auxiliary service are plug-ins to these services.
- Application: This types of architecture not only for operation system, but also can be used for business application.
- Pro: isolation between core kernels avoid big ball of mud dependencies. Also, the plugins are usually small and easy to write.
- Cons: APIs to the kernel are delicate.
- How:
- Pattern 3: Message-based architecture.
- Example 1: Job run independently and communicate via message (a small piece of encapsule information) on message bus.
- Each job can either talk to each other directly, or via a intermediate bloker.
- Example 2: Pub/sub system: rather than using queue, receiver agent subscribe to a broker.
- Pattern 4: Microservice
- Large service is made up of many small independent services.
- requirement:
- Small (100 line of codes)
- Independently deployable (most important)
- Fully autonomous (own database)
- Hide implementation details
- Almost always distributed.
- Pattern 5: Reactive pattern.