Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Asynqを使って、サクッと非同期処理を実現する
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Atsushi Miyamoto
December 10, 2024
Technology
650
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Asynqを使って、サクッと非同期処理を実現する
Go Connect #4のLT資料です!
Atsushi Miyamoto
December 10, 2024
More Decks by Atsushi Miyamoto
See All by Atsushi Miyamoto
Agentic RAG with LangGraph
atsushii
1
620
LangChainとSupabaseを活用して、RAGを実装してみた
atsushii
1
980
Checkpointerを介して、DynamoDBに状態を保存してみた
atsushii
1
370
OOM発生時のトラブルシューティング Profilerを活用できるか調査してみた
atsushii
1
710
Other Decks in Technology
See All in Technology
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
200
protovalidate-es を導入してみた
bengo4com
0
140
運用を見据えたAIエージェント設計実践
amacbee
1
3.1k
AIプラットフォームを運用し続けるための可観測性
tanimuyk
4
1.1k
AI駆動開発が変える、大規模開発の前提 ーHuman in the Loop から Human on the Loop へ / AIE2026
visional_engineering_and_design
25
15k
LLMと共に進化するプロセスを目指して
ymatsuwitter
12
3.5k
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
3
220
BigQuery の Cross-cloud Lakehouse への歩み
phaya72
2
600
Agentic Defenseとともにセキュリティエンジニアが輝き続けるには / How Security Engineers Can Keep Excelling with Agentic Defense
yuj1osm
0
120
新規ゲーム開発におけるAI駆動開発のリアル
202409e2
0
2.8k
Oracle AI Database@Azure:サービス概要のご紹介
oracle4engineer
PRO
6
1.9k
noUncheckedIndexedAccess、3時間、1万円。 / noUncheckedIndexedAccess, 3 Hours, 10,000 JPY.
kaonavi
1
320
Featured
See All Featured
The Curious Case for Waylosing
cassininazir
1
380
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.9k
The untapped power of vector embeddings
frankvandijk
2
1.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
エンジニアに許された特別な時間の終わり
watany
107
250k
Into the Great Unknown - MozCon
thekraken
41
2.5k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
150
SEO Brein meetup: CTRL+C is not how to scale international SEO
lindahogenes
1
2.7k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
The agentic SEO stack - context over prompts
schlessera
0
800
Transcript
© 2024 Loglass Inc. 0 © 2024 Loglass Inc. Asynqを使って、サクッ
と非同期処理を実現する 宮本 淳志 2024.12.10
© 2024 Loglass Inc. 1 自己紹介 自動車整備士としてキャリアをスタートし、退職後カナダのバンクーバーへ渡航。その後、プログラ ミングを現地の学校で勉強した後に、機械学習エンジニアとして現地のスタートアップでエンジニア としてのキャリアをスタートさせる。 2年半カナダに滞在したのち、福岡へ移住。
福岡の受託開発会社でバックエンドエンジニアとして3年ほど勤務。バックエンド・フロント・インフ ラの経験を積む。 2024年10月に株式会社ログラスへクラウドエンジニアとして入社。 生成AI入門中 株式会社ログラス クラウドエンジニア 宮本 淳志 Atsushi Miyamoto
© 2024 Loglass Inc. 2
© 2024 Loglass Inc. 3 今日話すこと 1. 非同期処理の重要性 2. Asynqとは
3. Asynqを使った実装 4. AWS x Asynq 5. まとめ Agenda
© 2024 Loglass Inc. 4 以前、Goを使ってアプリケーション開発を行っており、その過程でAsynqを使用しました。 使い勝手が良かったので、今回はAsynqに関する知見を共有できればと思っています。 現在の職場ではAsynqを使用していないため、あくまで以前の経験に基づいたお話となりますので、その点をご了承くだ さい。 00|背景
背景
© 2024 Loglass Inc. 5 01 非同期処理の重要性
© 2024 Loglass Inc. 6 01|非同期処理の重要性 なぜ必要なのか 時間のかかる処理や外部サービスに繋げる処理を同期的に実行すると、レスポンスに時間がかかり、ユー ザーに影響がでるケースがある 非同期で処理を実施すると、処理の結果を待たずにレスポンスを分離して返すことが可能になるため、時間
のかかる処理でもユーザー体験を保つことができる 例: • メール送信 • ファイルアップロード etc.. ※参考: https://aws.amazon.com/jp/builders-flash/202206/master-asynchronous-execution-01/
© 2024 Loglass Inc. 7 02 Asynqとは
© 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
© 2024 Loglass Inc. 9 02|Asynqとは 処理イメージ 1. アプリケーション側からタスクをキュー(Redis)にエンキュー 2.
Redisにタスクが積まれる 3. Worker側からRedisに対してポーリング 4. タスクを取得 5. Worker側で何かしらの処理を行う
© 2024 Loglass Inc. 10 03 Asynqを使った実装
© 2024 Loglass Inc. 11 例として、メール送信をバックグラウンドで処理するハンドラーの実装 03|Asynqを使った実装 Taskハンドラーの実装 • タスクのタイプ定義
◦ 様々なタスクに対して、どの処理を実行するか内部 的に判断するために使用 • タスクを作成する関数を定義 ◦ ここで作成されたタスクが最終的にRedisにエン キューされる • タスクの処理を行うハンドラーの実装 ◦ 非同期で行わせたい処理 参考: https://github.com/hibiken/asynq
© 2024 Loglass Inc. 12 • Redisへ接続 • 先ほど定義した関数を呼び出して、タスク作成 •
Redisへエンキュー 03|Asynqを使った実装 Redisへエンキューする処理の実装 参考: https://github.com/hibiken/asynq
© 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
© 2024 Loglass Inc. 14 04 AWS x Asynq
© 2024 Loglass Inc. 15 • 使用技術 ◦ Golang ◦
AWS ▪ ECS on Fargate ▪ ElastiCache 04|AWS x Asynq ECS x Asynq
© 2024 Loglass Inc. 16 05 まとめ
© 2024 Loglass Inc. 17 05|まとめ まとめ • Asynq便利なので、サクッと非同期基盤を実装したいときにオススメ •
Golang最近触っていないので、キャッチアップしていきたい
© 2024 Loglass Inc. 18