Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

Asynqを使って、サクッと非同期処理を実現する

 Asynqを使って、サクッと非同期処理を実現する

Go Connect #4のLT資料です!

Atsushi Miyamoto

December 10, 2024
Tweet

More Decks by Atsushi Miyamoto

Other Decks in Technology

Transcript

  1. © 2024 Loglass Inc. 0 © 2024 Loglass Inc. Asynqを使って、サクッ

    と非同期処理を実現する 宮本 淳志 2024.12.10
  2. © 2024 Loglass Inc. 1 自己紹介 自動車整備士としてキャリアをスタートし、退職後カナダのバンクーバーへ渡航。その後、プログラ ミングを現地の学校で勉強した後に、機械学習エンジニアとして現地のスタートアップでエンジニア としてのキャリアをスタートさせる。 2年半カナダに滞在したのち、福岡へ移住。

    福岡の受託開発会社でバックエンドエンジニアとして3年ほど勤務。バックエンド・フロント・インフ ラの経験を積む。 2024年10月に株式会社ログラスへクラウドエンジニアとして入社。 生成AI入門中 株式会社ログラス クラウドエンジニア 宮本 淳志 Atsushi Miyamoto
  3. © 2024 Loglass Inc. 3 今日話すこと 1. 非同期処理の重要性 2. Asynqとは

    3. Asynqを使った実装 4. AWS x Asynq 5. まとめ Agenda
  4. © 2024 Loglass Inc. 8 02|Asynqとは 特徴 タスクを非同期に処理する仕組みを実現するために、Workerを活用したキューイングや処理を行うOSSライ ブラリ 特徴:

    • 実装がシンプル • タスクの非同期処理に加え、スケジューリング処理も実装可能 • WebUIを使って、モニタリング可能 • Redisをバックエンドに指定する必要あり • 継続的にメンテされている (最新のリリース約1ヶ月前) ◦ 例 ▪ https://github.com/benmanns/goworker (最新のリリース約6年前) ▪ https://github.com/gocraft/work (最新のリリース約6年前) ※参考: https://github.com/hibiken/asynq
  5. © 2024 Loglass Inc. 9 02|Asynqとは 処理イメージ 1. アプリケーション側からタスクをキュー(Redis)にエンキュー 2.

    Redisにタスクが積まれる 3. Worker側からRedisに対してポーリング 4. タスクを取得 5. Worker側で何かしらの処理を行う
  6. © 2024 Loglass Inc. 11 例として、メール送信をバックグラウンドで処理するハンドラーの実装 03|Asynqを使った実装 Taskハンドラーの実装 • タスクのタイプ定義

    ◦ 様々なタスクに対して、どの処理を実行するか内部 的に判断するために使用 • タスクを作成する関数を定義 ◦ ここで作成されたタスクが最終的にRedisにエン キューされる • タスクの処理を行うハンドラーの実装 ◦ 非同期で行わせたい処理 参考: https://github.com/hibiken/asynq
  7. © 2024 Loglass Inc. 12 • Redisへ接続 • 先ほど定義した関数を呼び出して、タスク作成 •

    Redisへエンキュー 03|Asynqを使った実装 Redisへエンキューする処理の実装 参考: https://github.com/hibiken/asynq
  8. © 2024 Loglass Inc. 13 • Redisへ接続 ◦ Taskごとのプライオリティも指定可能 ▪

    https://github.com/hibiken/asynq/wiki/Queue-Pri ority#weighted-priority • Taskタイプとハンドラのマッピング ◦ タイプごとに行わせたい処理の紐付け • Worker Server起動 03|Asynqを使った実装 Workerの実装 参考: https://github.com/hibiken/asynq
  9. © 2024 Loglass Inc. 15 • 使用技術 ◦ Golang ◦

    AWS ▪ ECS on Fargate ▪ ElastiCache 04|AWS x Asynq ECS x Asynq