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
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
ポケモンの型をTypeScriptの型システムで表現してみた
subroh0508
0
340
PHP と TypeScript の型システム比較:AI 時代の「型」は誰のためにあるのか? #frontend_phpcon_do / frontend_phpcon_do_2026
shogogg
1
260
Djangoユーザが知っ得なPostgreSQL機能 - 設計の選択肢を増やす / Djang-use-PostgreSQL
soudai
PRO
0
200
Agentic Defenseとともにセキュリティエンジニアが輝き続けるには / How Security Engineers Can Keep Excelling with Agentic Defense
yuj1osm
0
120
TypeScript Compiler APIとPHP-Parserを活用し、TypeScriptとPHPで型を共有する
shuta13
0
370
AI フレンドリーなエラー監視を TypeScript で実現する
shinyaigeek
2
270
データ基盤をDataformで整えた話 〜 開発環境を添えて 〜
takapy
0
120
Ruby::Boxでできること、Refinementsでできること
joker1007
3
400
AI Testing Talks: Challenges of Applying AI in Software Testing: From Hype to Practical Use
exactpro
PRO
1
140
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.7k
作って終わりにしない タイミーのセマンティックレイヤー育成の現在地
chanyou0311
0
140
Terraformモジュールは、なぜ「魔境」化するのか
hayama17
1
210
Featured
See All Featured
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.5k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Principles of Awesome APIs and How to Build Them.
keavy
128
17k
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
300
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
190
GraphQLとの向き合い方2022年版
quramy
50
15k
Raft: Consensus for Rubyists
vanstee
141
7.5k
Navigating Weather and Climate Data
rabernat
0
210
Code Review Best Practice
trishagee
74
20k
Into the Great Unknown - MozCon
thekraken
41
2.5k
Building Adaptive Systems
keathley
44
3k
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