Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Implementing Microservices by DDD

628 views

Published on

近年來,各企業為了快速應對商業挑戰,不僅在業務行為上做出很多嘗試,同時在IT應用環境上也因應這樣的挑戰而掀起了很多新的技術應用,容器(Container)技術應用與微服務是當前各企業所擁抱的熱門話題。

尤其以數位化為目標的企業,多數希望運用容器技術實踐微服務、批次處理、應用程式遷移至雲端、混合應用程式以及持續整合(CI)和持續部署(CD),讓以往動輒需時半年以上的應用系統版本更新週期,得以縮短到每天、甚至是即時地提出更貼近消費者喜好的服務,藉此贏得商機。

微服務的設計痛點在於每個服務邊界掌握,透過這次的工作坊,我們將帶領每位參與者,使用Amazon Elastic Container Service (Amazon ECS) 以 Fargate無伺服器模式部署運行容器應用程式,帶著大家一起探討如何捕捉業務應用系統邊界,挑選合適的功能轉型成微服務設計。以Domain Driven Design(領域驅動設計)為核心的戰略思考角度,幫助你作出微服務設計的關鍵決定,讓應用系統在技術轉型同時,能夠順應各種變化,滿足業務需求,提供更真切的服務設計維度。

  • Be the first to comment

Implementing Microservices by DDD

  1. 1. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Kim Kao, Solutions Architect Mar 13, 2019 Implementing Microservices by DDD DDD – A collaboration way to go
  2. 2. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. A typical day for a customer new to AWS... Manager - “We are going to run workload(s) on AWS. We have new sub-systems/module to develop with legacy services. Container is good, Lambda is awesome. It’s great to have whole cloud native advantage if you guys migrate all service into microservice, serverless...” Developer - “Not a problem. I’ll make it …”
  3. 3. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Business Wants https://vaughnvernon.co/tag/event-storming/
  4. 4. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. But You Want https://vaughnvernon.co/tag/event-storming/
  5. 5. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Challenge on migration to Microserivces • Legacy looks like Big ball of mud(BBOM) • Heavy dependency with external system • No idea on splitting BBOM • No idea to find out system boundary • Which service(s) worth to do • Human resources allocation • Team, out sourcing, ISVs solution
  6. 6. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. What are Microservices?
  7. 7. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. = Microservices ?
  8. 8. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. 100/200/300/1000? LOC
  9. 9. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved. What Are Microservices? “A software architecture style in which complex applications are composed of small, independent processes communicating with each other using language- agnostic APIs. These services are small, highly decoupled and focus on doing a small task, facilitating a modular approach to system-building.” - Wikipedia https://en.wikipedia.org/wiki/Microservices
  10. 10. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Way to divide services from Monolith • By noun(s) • By Your Experience(s) • By Team’s decision • Up to Leader/Manager/CxO ... • No right or power to influence
  11. 11. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Case study - Gilt Problem behind Microservices
  12. 12. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Gilt The limited-selling website for limited time purchases, the flash purchase start time is except for 9 :00 pm on Wednesday and Sunday, and the rest are sold at 12 noon in the US East, lasting 36-48 hours and then off the shelf. Popular brands usually go out quickly.
  13. 13. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Monolith Load Balancer Account Service Cart Service Shipping Service StoreFront UI Browser Database Data Access Service
  14. 14. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Account Database Inventory Database Shipping Database Migrate to Microservices Load Balancer StoreFront UI Browser Account Service Cart Service Shipping Service Load Balancer Load Balancer Load Balancer
  15. 15. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Challenge is Coming • Authentication & Authorization • Session mechanism is broken • Centralized & Robust alternative one is required • Service Discovery • Write the traffic routing code(s) in logic? • Re-try, Failover, Caching, ... • Persistence • Isolated Persistence for each Service
  16. 16. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. A Classic solution on AWS Load Balancer StoreFront UI Browser Account Database Account Service Cart Service Inventory Database Shipping Service API Gateway Load Balancer Load Balancer Load Balancer Shipping Database
  17. 17. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Authentication & Authorization • Token based solution fit in • Cognito • 3rd party Authentication Federation • Amazon, Google, Apple, Facebook... • Self developed/hosted centralize A&A services
  18. 18. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Service Discovery • Client Side-Service Discovery • Application Load Balancer-based Service Discovery • DNS-Based Service Discovery • Service Discovery using ECS Event Stream • Configuration Management • New * App Service Mesh (preview) • Cloud Map
  19. 19. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Microservices For Persistence ? Stateful Persistent always be the top issue !!!
  20. 20. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. • Accept all API calls to one RDS Cluster • RDS Instance Sizing predict by services scaling ability • DBA(s) : How to manage Connection Pool ? • Read replica can’t help on Write intention • RDS I/O be the bottleneck when highly Scale up • All Services impacted while any failure occurred • Option : Upgrade Read Replica to Master Launching 1 RDS cluster
  21. 21. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Launching N * RDS for Independency?
  22. 22. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. • DynamoDB • Perfect deal with high transaction (write) • Serve each table for only one transaction/service intention • De-Normalize schema is required • Prevent revision issue • Hard to do complexity Join Query • Cost High • Low Performance • Coding for iteration & aggregation • Apply all RDS tables into DynamoDB? Using NoSQL Solution?
  23. 23. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. It’s about capability • Are you ready to deal with M:N transaction compensation ? • Are you ready to embrace the rapidly change by contract ?
  24. 24. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Transaction Dependencies between Microservices • Upstream-Downstream co-relationship • One Transaction invoke local API and Remote API Book Rental Service Book Flight Service Trip Service Book Hotel Service Exception / Error ? Exception / Error ? Exception / Error ? !" # !$ # !# # + + Transaction Compensate
  25. 25. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Saga : Alternative for 2 Phase -commit
  26. 26. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Context • You have applied the Database per Service pattern. Each service has its own database. • Some business transactions, however, span multiple service so you need a mechanism to ensure data consistency across services.
  27. 27. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Problem How to maintain data consistency across services?
  28. 28. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Forces • 2 Phase-Commit(PC) is a well-known solution for years • The 2PC coordinator also represents a Single Point of Failure, which is unacceptable for critical systems
  29. 29. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Solutions • Each local transaction updates self and publishes a message/event to trigger the next local transaction in the saga. • If a local transaction fails because it violates a business rule then the saga executes a series of compensating transactions that undo the changes that were made by the preceding local transactions. https://microservices.io/patterns/data/saga.html
  30. 30. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Two ways of Saga Pattern • Choreography - each local transaction publishes domain events that trigger local transactions in other services • Orchestration - an orchestrator (object) tells the participants what local transactions to execute https://microservices.io/patterns/data/saga.html
  31. 31. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Choreography-based Saga https://microservices.io/patterns/data/saga.html 2 1 3.b 3.a 4.a 4.b • Logic in code • Compensate chain • Multiple states present in transaction
  32. 32. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Orchestration -based Saga https://microservices.io/patterns/data/saga.html • Coordinator stand alone • Each service provide a pair function for Success or Fail • Abstract compensate logic out of Codes1 1.1 2 3 45
  33. 33. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Resulting Context • This pattern has the following benefits: • It enables an application to maintain data consistency across multiple services without using distributed transactions • This solution has the following drawbacks: • The programming model is more complex. For example, a developer must design compensating transactions that explicitly undo changes made earlier in a saga. • There are also the following issues to address: • In order to be reliable, a service must atomically update its database and publish a message/event. It cannot use the traditional mechanism of a distributed transaction that spans the database and the message broker. Instead, it must use one of the patterns listed below.
  34. 34. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Implementing Saga on AWS
  35. 35. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. AWS Step Functions
  36. 36. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. • Each Service provide cancel operation • State change trigger cancel operation • Simplify Complexity rules • Just a JSON file
  37. 37. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Code snippet https://github.com/humank/lambda-saga-pattern
  38. 38. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  39. 39. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. How to adopt Microservices?
  40. 40. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Business operation without whole picture The Blind Men and the Elephant Is It correct to all in microservices or serverless ?
  41. 41. © 2018, Amazon Web Services, Inc. or its affiliates. All rights reserved. Precondition to do microservices Rapid Provisioning Basic monitoring Rapid application deployment Martin Fowler
  42. 42. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Better way to decompose Monolith Domain Expert Matters
  43. 43. &
  44. 44. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. How to break Monolith?
  45. 45. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Methodology -1 Use Case Modeling
  46. 46. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Methodology -2 ICONIX Processing
  47. 47. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Object Modeling … ER Modeling … xxx Modeling … A lack of Collaboration with non-tech stakeholders Not “Ubiquitous Language”
  48. 48. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Way to collaborate • Point out the events • Who send the command • Find the Noun(s) • Have all team voices Commands Events Aggregate
  49. 49. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Domain Driven Design
  50. 50. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  51. 51. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Domain Driven Design (DDD) • What is DDD? • Not only a Technology / Methodology • Set of principles and patterns for focusing the design effort where it matters most • It’s all about • Understanding the domain where the software will be applied • Create highly expressive model of that domain • Distil Ubiquitous language
  52. 52. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  53. 53. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Modeling - Intent matters
  54. 54. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Domain (Strategy) Modeling – Basic Terms • Domain • Subject area where the software will be applied • Example : VOD Domain, EC Domain, Banking Domain • Subdomain • Logically separated part of the Domain • Example : Ingestion, Streaming, Geo Location • Domain Model • Software model for solution of a domain problem • Bounded Context • Explicit boundary where Domain Model lives
  55. 55. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Domain is about capability Grab key events to Abstraction to give
  56. 56. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Dive into relationships and why Strategic DDD
  57. 57. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Pattern in Practice Tactical DDD
  58. 58. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Approach • Collect the “Aggregates” which stand for similar concept in the “Bounded Context”. • Prioritize the “Domains”, which one is Core Domain, rest for Sub Domain, even Utility Domain. • Get Consensus, not Compromise • Focus on Core Domain
  59. 59. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Coffee shop experience DDD by EventStorming
  60. 60. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  61. 61. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  62. 62. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  63. 63. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  64. 64. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  65. 65. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  66. 66. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
  67. 67. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Go through Event Storming approach Don’t tell tech only Don’t sell tech partially Aim for Core value Figure out trigger and result
  68. 68. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Seat occupied Menu offered Ordered 2 cups of Americano Paid Order received Coffee made up Customers Left Table Cleaned *Key Business Events in Coffeeshop
  69. 69. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Event Trigger • Client • Server • Counter • Barista ACTORS
  70. 70. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Most Valuable / Risky Events
  71. 71. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. © 2018, Amazon Web Services, Inc. or Its Affiliates. All rights reserved. Order Make Up Payment Event Bus (pub/sub) Put event Event Event CloudWatch Event . . . Any other messaging technology Coffee shop Domain implementation Core Domain Sub Domain (Messaging) Support Domain Core Domain
  72. 72. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. When you should dive in Microservices Team Partners Business Operation Coding Value
  73. 73. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. How DDD can help you • Business strategy on resource allocation • Best resources should be put in most key/core domain • Buy or out-sourcing common domain and sub domain • Service re-architecture • Form up the system context boundary • Knowing the upstream-downstream relationship between domains • Meaningful to do microservice (separate computing/persist, and API communication ) • Service Migration • Good to re-architecture
  74. 74. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Take Away Know Why/What/How • Do you really need Microservices? • Leverage Business Events to aggregate context and form up Service Boundary • There is no C4 to solve distributed persistence issue • State Machine to do Transaction Compensate (Step Functions way to go) • DDD is good to collaborate Business and Technology guys by speaking Ubiquitous Language • Crunch Problem, then design solution
  75. 75. © 2018, Amazon Web Services, Inc. or its Affiliates. All rights reserved. Implementing DDD on AWS AWS : YikaiKao@amazon.com Commounty : DDD Taiwan@FB Telegram : YikaiKao WeChat : YikaiKao Twitter : @YikaiKao GitHub Repos

×