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

Spring BootとKafkaでCQRS

Spring BootとKafkaでCQRS

JJUG CCC 2017 FALL

Mitsuyuki Shiiba

November 18, 2017
Tweet

More Decks by Mitsuyuki Shiiba

Other Decks in Programming

Transcript

  1. Spring BootとKafkaでCQRS Nov.18.2017 at JJUG CCC 2017 Fall Mitsuyuki Shiiba

    EC Incubation Development Department. Rakuten, Inc.
  2. #ccc_e6 Mitsuyuki Shiiba(@bufferings) 仕事 • 楽天株式会社 ⼤阪⽀社(2010〜) • ウェブアプリケーションエンジニア •

    ECインキュベーション開発部 仲間募集中ですー!興味ある⽅は連絡くださいー! 「解決してあげることが改善ではない」20年のWeb開発から⽣ま れた、楽天式"カイゼン"とは。 https://teratail.com/report/3
  3. #ccc_e6 CQRS Command and Query Responsibility Segregation コマンドクエリ責務分離 named by

    Greg Young CQS原則(Bertrand Meyer)が起源になってます。 参照: Bliki(ja) “コマンド・問い合わせの分離” http://bliki-ja.github.io/CommandQuerySeparation/
  4. #ccc_e6 CustomerService void MakeCustomerPreferred(CustomerId) Customer GetCustomer(CustomerId) CustomerSet GetCustomersWithName(Name) CustomerSet GetPreferredCustomers()

    void ChangeCustomerLocale(CustomerId, NewLocale) void CreateCustomer(Customer) void EditCustomerDetails(CustomerDetails) 参照: CQRS, Task Based UIs, Event Sourcing agh! http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis- event-sourcing-agh/ (参照⽇ 2017-11-17)
  5. #ccc_e6 CustomerWriteService void MakeCustomerPreferred(CustomerId) void ChangeCustomerLocale(CustomerId, NewLocale) void CreateCustomer(Customer) void

    EditCustomerDetails(CustomerDetails) 参照: CQRS, Task Based UIs, Event Sourcing agh! http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis- event-sourcing-agh/ (参照⽇ 2017-11-17)
  6. #ccc_e6 CustomerReadService Customer GetCustomer(CustomerId) CustomerSet GetCustomersWithName(Name) CustomerSet GetPreferredCustomers() 参照: CQRS,

    Task Based UIs, Event Sourcing agh! http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis- event-sourcing-agh/ (参照⽇ 2017-11-17)
  7. #ccc_e6 今⽇のお話 • 第1話:僕とDDD • 第2話:僕とCQRS • 第3話:僕とDomain Event •

    第4話:僕とEvent Sourcing • 第5話:僕とCQRS(その2) • 第6話:Spring BootとKafkaでCQRS
  8. #ccc_e6 A Decade of DDD, CQRS, Event Sourcing Greg Young@DDDEU

    2016 https://youtu.be/LDW0QWie21s Picture: https://flic.kr/p/DLfn5i (CC BY-NC-SA 2.0 https://creativecommons.org/licenses/by-nc-sa/2.0/ )
  9. #ccc_e6 A Decade of DDD, CQRS, Event Sourcing こういうことを⾔ってたりする •

    CQRSはEvent SourcingへのStepping-Stone • CQRS/Event Sourcingを全体に適⽤しない • ⾊んな実現⽅法があって良い ESは考え⽅が全然違うから⼀気にそこまでジャンプするの難しい。 だから、CQRSを踏み台にして進むと良い。って感じのことを ⾔ってた。喋るのはやくて何度も聞き直したー。
  10. #ccc_e6 CQRSとEvent Sourcingはセットなの? CQRSのおかげで Event Sourcingは良い感じになる • さっき⾒たね 参照: CQRS

    and Event Sourcing http://codebetter.com/gregyoung/2010/02/13/cqrs-and-event- sourcing/ (参照⽇ 2017-11-17)
  11. #ccc_e6 CQRSとEvent Sourcingはセットなの? Event Sourcingのおかげで CQRSも良い感じになる • 2PC(2 Phase Commit)が不要

    • 何が変更されたのかが分かる 参照: CQRS and Event Sourcing http://codebetter.com/gregyoung/2010/02/13/cqrs-and-event- sourcing/ (参照⽇ 2017-11-17)
  12. #ccc_e6 Demo1: Kafka Java Client KafkaのJavaクライアントを使⽤して Producer/Consumerを使ってみる (Spring Boot関係ないです) Special

    Thanks: Apache KafkaのQuickstartのサンプルを、JavaのClient APIで書き 直してみた – CLOVER http://d.hatena.ne.jp/Kazuhira/20170306/1488814266
  13. #ccc_e6 まとめ • 第1話:僕とDDD • 第2話:僕とCQRS • 第3話:僕とDomain Event •

    第4話:僕とEvent Sourcing • 第5話:僕とCQRS(その2) • 第6話:Spring BootとKafkaでCQRS
  14. #ccc_e6 この後やってみたいこと • Functional Programming • Reactive Programming • Event

    Sourcing • Kafka Streams • Kafka Connect の中のどれか1個 他のは勉強会とかに聞きに⾏きますので誰か教えて!!
  15. #ccc_e6 Reference CQRS, Task Based UIs, Event Sourcing agh! •

    http://codebetter.com/gregyoung/2010/02/16/cqrs-task-based-uis-event-sourcing-agh/ CQRS and Event Sourcing • http://codebetter.com/gregyoung/2010/02/13/cqrs-and-event-sourcing/ Bliki: CQRS • https://martinfowler.com/bliki/CQRS.html Bliki: ReportingDatabase • https://martinfowler.com/bliki/ReportingDatabase.html CQRS Documents by Greg Young • https://cqrs.files.wordpress.com/2010/11/cqrs_documents.pdf
  16. #ccc_e6 Reference Greg Young — A Decade of DDD, CQRS,

    Event Sourcing • https://youtu.be/LDW0QWie21s CQRSに取り組むべき時期、理由、⽅法(Sebastian Daschner) • https://youtu.be/ajASbq5pzss エリック・エヴァンスのドメイン駆動設計 • https://books.rakuten.co.jp/rb/11146351/ 実践ドメイン駆動設計 • https://books.rakuten.co.jp/rb/13138730/ 現場で役⽴つシステム設計の原則 • https://books.rakuten.co.jp/rb/15017530/
  17. #ccc_e6 Reference Apache Kafka • https://kafka.apache.org/ Apache Kafkaに⼊⾨した | SOTA

    • http://deeeet.com/writing/2015/09/01/apache-kafka/ Event sourcing, CQRS, stream processing and Apache Kafka: What’s the connection? • https://www.confluent.io/blog/event-sourcing-cqrs-stream-processing-apache-kafka-whats- connection/ Building a Microservices Ecosystem with Kafka Streams and KSQL • https://www.confluent.io/blog/building-a-microservices-ecosystem-with-kafka-streams-and- ksql/ Building Event-driven Microservices Using CQRS and Serverless • http://www.kennybastani.com/2017/01/building-event-driven-microservices.html