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
Atsushi Miyamoto
December 10, 2024
Technology
710
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
650
LangChainとSupabaseを活用して、RAGを実装してみた
atsushii
1
1k
Checkpointerを介して、DynamoDBに状態を保存してみた
atsushii
1
390
OOM発生時のトラブルシューティング Profilerを活用できるか調査してみた
atsushii
1
750
Other Decks in Technology
See All in Technology
Master Dataグループ紹介資料
sansan33
PRO
1
4.9k
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
220
DMMブックスのNext.js化を加速させるAI活用 / Migrating DMM Books to Next.js with AI
kentarom
1
310
少人数データチームのDevin活用実践事例
runandy16
2
350
【Oracle AI Spotlight ウェビナー】AWSか、Azureか、Google Cloudか。その議論にオラクルを含める意義。
oracle4engineer
PRO
1
200
いま好きなこと 最初はそんなに好きじゃなかった #tamagawadev
nishiuma
1
220
最新技術に積極チャレンジ!EKS共通基盤のこれまでとこれから
daitak
0
290
どんな手を使っても絶対間に合わせるスケジューラ
asari194617
0
1.5k
Point Cloud as a Foreign Language for Multi-modal Large Language Model
takmin
0
360
Guerilla InnerSource in enterprises, during the AI hype
onenashev
PRO
0
140
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
170
PM領域でのAI Agentの活用
lycorptech_jp
PRO
0
230
Featured
See All Featured
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
400
How to Talk to Developers About Accessibility
jct
2
530
Six Lessons from altMBA
skipperchong
29
4.5k
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
220
Everyday Curiosity
cassininazir
0
310
Measuring & Analyzing Core Web Vitals
bluesmoon
9
990
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
410
How STYLIGHT went responsive
nonsquared
100
6.3k
Technical Leadership for Architectural Decision Making
baasie
3
550
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
430
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
400
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