Skip to content

mvrck-jp/training-akka-java-2-actor

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トレーニング第2回

アクターによる非同期処理

Akkaは非同期処理を実装するのに有用なツールキットです。 今回はAkkaのアクターを使った非同期処理を紹介し、3層アーキテクチャで用いたデータベース・トランザクションによる排他制御との違いを学びます。

課題

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

この課題で身につく能力

  • akkaのアクターを使って素早くアプリケーションの原型を作成できる
  • 状態遷移図をもとにアクターの実装をソースコードに書き起こせる

事前準備:

MacBook前提。

  • Mavenをインストールしてください
    • brew install maven
    • Mavenに関してはMave 3.x系であれば動くのではないかと思います。

作業開始:

MacBook前提。

  • このレポジトリをgit cloneしてください
    • git clone git@github.com:mvrck-inc/training-akka-java-2-actor.git

この課題はgit clone下ソースコードをそのまま使うことで、自分で新たにソースコードを書くことなく実行できるようになっています。 もちろん、自分で書き方を覚えたい方や、最後の発展的内容に取り組みたい方はご自分でぜひソースコードを書いてみてください。

  • アプリケーションを走らせてください
    • mvn compile
    • mvn exec:java -Dexec.mainClass=org.mvrck.training.app.Main
  • curlでデータをPOSTしてください
    • curl -X POST -H "Content-Type: application/json" -d "{\"ticket_id\": 1, \"user_id\": 2, \"quantity\": 1}" http://localhost:8080/orders
    • クライアント側ログからレスポンスを確認してください
  • 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 (リンク)
      • クライアント側とサーバー側の実行結果を確認してください
  • TicketStockActorとOrderActorの整合性を保つシーケンス図を確認してください - (参考リンク: PlantUML)
  • TicketStockActorの状態遷移図を確認してください - (参考リンク: PlantUML)
  • OrderActorの状態遷移図を確認してください - (参考リンク: PlantUML)
  • 詳細な状態遷移図を見てメッセージ、遷移可能状態、副作用を確認してください(リンク1) (リンク2)(リンク3)
  • ソースコードのコマンドを[確認してください]
  • 状態遷移「表」を確認してください
  • ソースコードの状態の定義を[確認してください]
  • ガーディアンアクター以下親子関係のから樹形図を確認してください (リンク)
  • 各アクターの実装を確認してください

発展的内容:

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

説明

参考文献・資料

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published