Skip to content

mvrck-jp/training-akka-java-3-persistence

master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 
 
 
 
 
 
 
 
 
 
 

JavaによるAkkaトレーニング第3回

アクターとデータベースのシステム(イベント・ソーシング)

Akkaは状態を持つ非同期処理を実装するだけでなく、耐障害性をもったシステムを構築するのに有用なツールキットです。 トレーニングの第2回ではアクターを用いたアプリケーションの作成方法を学びました。 今回はAkkaアクターを用いたアプリケーションとデータベースを接続する方法について学びます。

課題

この課題をこなすことがトレーニングのゴールです。 独力でも手を動かしながら進められるようようになっていますが、可能ならトレーナーと対話しながらすすめることでより効果的に学べます。

この課題で身につく能力

  • 状態遷移図とEventSourceBehaviorの対応関係がわかる
  • akka-persistence-jdbcとSerializerの動作がわかる、設定ができる
  • パフォーマンスを計測

事前準備:

MacBook前提。

  • MySQL8.0.19をローカル開発環境にインストールしてください
    • brew update
    • brew install mysql@8.0.19
    • mysql.Sever stop //もし自分の環境で別のバージョンのMySQLが走っていたら
    • /usr/local/opt/mysql@8.0/bin/mysql.Sever start
  • Mavenをインストールしてください
    • brew install maven

作業開始:

  • このレポジトリをgit cloneしてください
    • git clone git@github.com:mvrck-inc/training-akka-java-3-persistence.git
  • データベースのセットアップをしてください (setup.sql) - 参考: akka-persistence-jdbcプラグインのデフォルト・テーブル構成(リンク)
  • アプリケーションを走らせてください
    • mvn compile
    • mvn exec:java -Dexec.mainClass=org.mvrck.training.app.Main
  • curlでデータを挿入してください
    • curl -X POST -H "Content-Type: application/json" -d "{\"ticket_id\": 1, \"user_id\": 2, \"quantity\": 1}" http://localhost:8080/orders
    • クライアント側ログからレスポンスを確認してください
    • データベースでjournalテーブルを確認してください (select.sql)
  • wrkでベンチマークを走らせてください
    • wrk -t2 -c4 -d5s -s wrk-scripts/order.lua http://localhost:8080/orders
      • -t2: 2 threads
      • -c4: 4 http connections
      • -d5: 5 seconds of test duration
      • wrk-scripts/order.lua (リンク)
      • クライアント側の実行結果を確認してください
      • データベースでjournalテーブルを確認してください (select.sql)
  • アプリケーション再起動後にcurlでGETしてアクターの内部状態が復元されていることを確認してください
    • curl http://localhost:8080/orders/00fcca39-e162-4c3b-a171-613028772a24
    • orders以下のUUID部分はデータベースのテーブルから探して適当なものに置き換えてください
  • akka-persistenceのセットアップを確認してください
    • application.conf - 参考 akka-persistence-jdbcプラグインのデフォルト設定(リンク)
    • pom.xml
    • jacksonによるSerializationをセットアップを確認してください
  • TicketStockActorとOrderActorの整合性を保つシーケンス図を確認してください - (参考リンク: PlantUML)
  • TicketStockActor
    • 状態遷移図を確認してください - (参考リンク: PlantUML)
    • ソースコードのStateの定義をみて状態遷移図との対応を確認してください(リンク)
    • 詳細な状態遷移図を確認してください
    • ソースコードのコマンドを確認してください(リンク)
    • ソースコードのイベントを確認してください(リンク)
    • 状態遷移表を確認してください
    • ソースコードのコマンドハンドラとイベントハンドラを見て、詳細な状態遷移図との対応を確認してください(リンク)
  • OrderActor
    • 状態遷移図を確認してください - (参考リンク: PlantUML)
    • ソースコードの状態の定義をみて状態遷移図との対応を確認してください(リンク)
    • 詳細な状態遷移図を確認してください
    • ソースコードのコマンドを確認してください(リンク)
    • ソースコードのイベントを確認してください(リンク)
    • 状態遷移表を確認してください
    • ソースコードのコマンドハンドラとイベントハンドラを見て、詳細な状態遷移図との対応を確認してください(リンク)
  • ガーディアンアクター以下親子関係のから樹形図を確認してください (リンク)

発展的内容:

  • 状態遷移図で売り切れ後のチケット追加販売を考えてください
  • 状態遷移図でオーダーのキャンセルを考慮してください
  • 状態遷移図でイベントの中止、払い戻しを考えてください
  • 状態遷移図で先着と抽選の2通りを考えてください
  • 状態遷移図で複数チケットの同時購入を考えてください
  • 不正データのハンドリング、業務例外を考えてください
    • 不正なオーダーを弾いてください(年齢制限、不正なチケット種別の組み合わせ、などなど)
    • 購入履歴と照らし合わせた不正な購入を防いでください
  • asyncテストが必要となるテストケース例を考えてINSTRUCTIONください
  • コンサート以外に、スポーツや映画、入場券のみイベントを実現するテーブルを考えてください

説明

参考文献・資料

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published