Upgrade to Pro — share decks privately, control downloads, hide ads and more …

How to Split a Monolith: Service Architecture & Domain-Driven Design (DDD)

How to Split a Monolith: Service Architecture & Domain-Driven Design (DDD)

SAP LevelUp Version

Joy Ebertz

March 09, 2021
Tweet

More Decks by Joy Ebertz

Other Decks in Technology

Transcript

  1. Today’s agenda • What do I mean by Service Architecture?

    • Why Worry About Service Architecture? • What is Domain-Driven Design or DDD? • What is Layered Architecture? • Mapping Back to Services
  2. Request API Gateway Authz Service AuthN Rate Limiting App Services

    Business Capability Services Foundational Capability Services Logging Event Bus Secrets Management Service Discovery
  3. Typical SOA Architecture Request API Gateway Authz Service AuthN Rate

    Limiting App Services Business Capability Services Foundational Capability Services Logging Event Bus Secrets Management Service Discovery
  4. DDD is an approach to developing software for complex needs

    by deeply connecting the implementation to an evolving model of the core business concepts.
  5. The problem space is defined by a domain which consists

    of one or more subdomains. The solution space is defined by a domain model which consists of one or more bounded contexts.
  6. Ubiquitous Language Domain Expert Marketing Developer Application Code Test Code

    Specs and Documentation Discussions & whiteboarding
  7. Content Subdomain The container object that groups different versions of

    a piece of content and enables Box file- system capabilities. What is a file?
  8. Content Subdomain Storage Subdomain The container object that groups different

    versions of a piece of content and enables Box file- system capabilities. A blob of customer-owned data identified by a uniq_name. What is a file?
  9. Layered Architecture is a way of dividing up an architecture

    between front-end, middle tier and back-end logic to optimize for decoupling and re-use.
  10. Typical SOA Architecture Request API Gateway Authz Service AuthN Rate

    Limiting App Services Business Capability Services Foundational Capability Services Logging Event Bus Secrets Management Service Discovery
  11. Recap • Service Architecture • Domain-Driven Design or DDD •

    Layered Architecture • Mapping Back to Services Joy Ebertz @jkebertz [email protected]
  12. Further Resources • Eric Evans’ classic DDD book that started

    it all (the ‘Blue Book’): Domain Driven Design: Tackling Complexity in the Heart of Software • Vaughn Vernon has a book a bit more on the practical side (the ‘Red Book’): Implementing Domain Driven Design • If you want something a bit shorter Vaughn Vernon also has a shortened version: Domain Driven Design Distilled • For another shorter, more reference driven option, Eric Evans also has: Domain Driven Design Reference • A former colleague recommends Scott Millett’s book: Patterns, Priciples, and Practices of Domain Driven Design DDD Books
  13. • Getting Started with Domain Driven Design: http://www.informit.com/articles/article.aspx?p=1944876&seqNum=5 • Strategic

    Domain Driven Design with Context Mapping: https://www.infoq.com/articles/ddd- contextmapping/ • My blog post, A Brief Intro to Domain Driven Design: https://austinstartups.com/a-brief-intro- to-domain-driven-design-326cf1669bbc • Is Design Dead? https://www.martinfowler.com/articles/designDead.html • How Can Domain-driven design help with large scale agile development? http://www.ben- morris.com/how-can-domain-driven-design-help-with-large-scale-agile-development/ DDD Articles Further Resources
  14. • Thoughtworks has a really great blog post about this

    topic: https://www.thoughtworks.com/insights/blog/well-factored-approach-securing-roi- your-service-investment-part-2 . Part 1 is here: https://www.thoughtworks.com/insights/blog/well-factored-approach-securing-roi-your- service-investment, but honestly most of the good material is in part 2. • The language in this one is a little bit different, but Mulesoft fundamentally talks about a lot of the same concepts: https://cloud.box.com/s/ggttm7wjsposhrcjxxzdmb3f4uxzp6mg • Another one by Mulesoft. This one doesn't directly talk about the horizontal splitting but does have a great diagram: https://www.linkedin.com/pulse/build-business-capabilities-apis- nial-darbey Layered Architecture Articles Further Resources
  15. • This also covers a lot more material, but in

    their Identifying Services section, IBM also touches on these concepts: https://www.redbooks.ibm.com/redbooks/pdfs/sg248357.pdf • This talks about more general layering principals, but has a lot of rules of thumb that still apply: https://www.linkedin.com/pulse/build-business-capabilities-apis-nial-darbey • Not directly about these concepts, but Jeff Coble's blog post is somewhat related and a good read: https://medium.com/@jeffcoble/from-product-to-platform-5d6857e55afb • My blog post (Microservices: Building things is easy, building the right thing is hard) also touches briefly on this: https://medium.com/box-tech-blog/microservices-building-things-is- easy-building-the-right-thing-is-hard-b88b6e2474c1 Layered Architecture Articles (continued…) Further Resources