Main Topic: Modern application & Micro Service Architecture
- What is a modern application for?
- Where to Start?
- What is the best way to build a modern application?
- Open to whom?
- Decoupled & Purpose Built-Data Management
- MicroServices
- Coupling
- Microservices are Not the Goal
- Migration Patterns
- Strangler fig
- Database Decomposition Patterns
- Strangler pattern strategy with AWS
- Key points
- Domain
- Domain-Driven Design.
- Code as a Model
- Microservice Architecture Case Study.
- Modern Application
- 마이크로서비스 식별기준
- 단일 DB의 맹점
- The Advantages of Decentralized Data Stores
- Problem: 히스토리 데이터 등 여러서 비스에서 데이터를 모두 조인하여 보여 보여줘야 한때 데이터를 어떻게 가져오는가?
What is modern application for?
- Scales to millions of users
- Global availability
- Response in milliseconds
- Handles petabytes of data
- Modern architecture for business agility
https://pages.awscloud.com/rs/112-TZM-766/images/MAD_AWS_AAG_Microservices_5.pdf
Where to start?
- Wrapping the existing monolith in APIs
- Refactoring the monolith to microservice
What is the best way to build a modern application?
- Modular services – Architectural patterns [Step Functions]
- As serverless as possible – [Operational model]
- Automated, Abstracted & Standardized Developer Agility [CI/CD / GitOps modern Architecture]
- Programmatic Guardrails – Management & Governance
Open to whom?
- Free for all: fast dev time, but risk to legal & app reliability (Chaos)
- In win Guardrails: Fast time & low risk to the business
- Monitoring (quota), Provisioning, Deployment(time window), Cost Management, Security & compliance
- Old: Central Contol Low risk but very slow to release
Decoupled & Purpose Built-Data Management
- Purpose-built database at AWS
Elements of Modern Application
- Serverless service: low management
MicroServices
- Small independent services that communicate over well-defined APIs
- Independently deployable services modeled around a business domain
- *** Loosely coupled: Explicit, well-defined, and stable contracts between services
- more state machines that manage domain aggregates 1) make (cross-boundary) changes 2) organize a team (상품팀, 오더팀, 카트팀. 팀구조도 바뀜..)
Coupling
“A structure is stable if cohesion is high, and coupling is low”- Larry Constantine.
Microservices are Not the Goal.
- What are you hoping to achieve?
- Have you considered alternatives to using microservices?
- How will you know if the transition is working?
Migration Patterns
- Strangler fig
- UI composition
- Branch by abstraction
- Parallel run
- Decorating collaborator
- Change data capture
Strangler fig
“An alternative route is to gradually create a new system around the edges of the old, letting it grow slowly over several years until the old system is strangled.”
- step 1. Insert proxy- do noting with additional network hop
- step 2. Migrate functionality- incremental implementation- Returns 501 not implemented
- step 3. Redirect calls- Incremental rollout /parallel run
Database Decomposition Patterns
- Database View
- Wrapping service
- DB as a service interface
- Aggregate exposing monolith
- Change data ownership
- Data Synchronization
- Tracer write
- Split data/code first
- Transactions
- ….
Strangler pattern strategy with AWS
- Step 1: Re-host application: HA 구성
- Step 2: Facade with Amazon API Gateway: API endpoint.
- Step 3: Create AWS Lambda for top hot spot
- Step 4: Canary release5. Step 6: Iteratively strangulate6. Step 7: Not with a bang but a whimper
- 점진적.
Key points
- Incremental adoption of (microservices, technologies, practices) is key
- Small incremental steps ensure that the mistakes we make will small and easier to recover from
- The smaller the change, the smaller the potential negative impacts you will see, and the faster you can address them when they occur.
- 빅뱅 후 남는 것은 빅뱅뿐이다.
Domain
- 보안 / DevOps / Third Party Software. ETC CAST, Cloudamize, ModelizelT
- Monolith to Microservices: Evolutionary Patterns to Transform Your Monolith: Micro Frontends in action.
Domain Driven Design.
- Monoritic to MSA – Average Timeline 2 years 4 months
Code as a Model 잘 기술된 코드가 모델을 가장 잘 나타낸다.
Microservice Architecture Case Study.
- Event storming
- 시스템에 필요한 업무 흐름을 식별학고, 이들의 도메인(서비스)를 파악함으로써 차세대 시스템으로 이행을 위한 청사진.
질문 사항
*** 네~ event storming은 프로젝트 분석/요구사항 수렴 단계에 전체 시스템을 도메인이라는 개념으로 파악하고 도메인 간의 바운더리를 구분하기 위한 과정입니다. 스프린트 planning은 전체 프로젝트의 scope이 정해진 이후에 점진적으로 backlog를 정제하면서 스프린트내 해야할 일감을 정의/수행해나가는 과정이구요~
Reactive
https://miro.com/welcomeonboard/p5Ji2hsURoddthBrHte2NfUd1VWVH2339R6sGq5py2obYVNtx2OP2DWvUkjoGDHD
마이크로서비스 식별기준
- 마이크로서비스 전환 – Refactor or Redesign?
- 기능적 요건
- 정성적 분석 context Gravity aggregate bounded context *
- 정량적 분석
- 비기능적 요건
- 조직 요건
- DevOps
적절 한 팀의 크기: 2 Pizza Team
- 각각의 서비스는 단일 책임(single responsibility)
- 두개의 서비스가 다수의 동작에 걸쳐 빈번한 동기 통신 ..
단일 DB의 맹점.
Centralized Database
Many locks and latches
- Undo Segment Block
- Row Lock
- Rede Log BufferTransaction Table.
For example 스타벅스. 30억건 (Not possible)
The Advantages of Decentralized Data Stores
- Polyglot Persistence
- 각 서비스는 각 서비스 성격에 맞는 data store
- 스키마 변경시 다른서비스 낮은 영향
- 독립적으로 확장 가능
- 주문서비는 여러서비스의 데이터를 수정하는데, 서비스간 데이터 일관성 유지
- Saga pattern.
- Saga orchestration (Example step Function)
- Message channels
- CQRS Pattern
문제 히스토리 데이터 등 여러 서 비스에서 데이터를 모두 조인하여 보여 보여줘야 한때 데이터를 어떻게 가져오는가?
- 각각에 트렌젠션의 무결성
- 비벗 트렌젝션: 페이 / 이메일.
- Step Function 주문 backend