Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
ota42y
PPTX, PDF
49,341 views
マイクロサービスにおける非同期アーキテクチャ
Rails Developers Meetup #5 https://techplay.jp/event/631406
Engineering
◦
Read more
6
Save
Share
Embed
Embed presentation
Download
Downloaded 24 times
1
/ 105
2
/ 105
3
/ 105
4
/ 105
5
/ 105
6
/ 105
7
/ 105
8
/ 105
9
/ 105
10
/ 105
11
/ 105
12
/ 105
13
/ 105
14
/ 105
15
/ 105
16
/ 105
17
/ 105
18
/ 105
19
/ 105
20
/ 105
21
/ 105
22
/ 105
23
/ 105
24
/ 105
25
/ 105
26
/ 105
27
/ 105
28
/ 105
29
/ 105
30
/ 105
31
/ 105
32
/ 105
33
/ 105
34
/ 105
35
/ 105
36
/ 105
37
/ 105
38
/ 105
39
/ 105
40
/ 105
41
/ 105
42
/ 105
43
/ 105
44
/ 105
45
/ 105
46
/ 105
47
/ 105
48
/ 105
49
/ 105
50
/ 105
51
/ 105
52
/ 105
53
/ 105
54
/ 105
55
/ 105
56
/ 105
57
/ 105
58
/ 105
59
/ 105
60
/ 105
61
/ 105
62
/ 105
63
/ 105
64
/ 105
65
/ 105
66
/ 105
67
/ 105
68
/ 105
69
/ 105
70
/ 105
71
/ 105
72
/ 105
73
/ 105
74
/ 105
75
/ 105
76
/ 105
77
/ 105
78
/ 105
79
/ 105
80
/ 105
81
/ 105
82
/ 105
83
/ 105
84
/ 105
85
/ 105
86
/ 105
87
/ 105
88
/ 105
89
/ 105
90
/ 105
91
/ 105
92
/ 105
93
/ 105
94
/ 105
95
/ 105
96
/ 105
97
/ 105
98
/ 105
99
/ 105
100
/ 105
101
/ 105
102
/ 105
103
/ 105
104
/ 105
105
/ 105
More Related Content
PDF
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
PDF
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
PDF
インタフェース完全に理解した
by
torisoup
PDF
PHPからgoへの移行で分かったこと
by
gree_tech
PDF
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
PDF
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
PDF
ドメイン駆動設計入門
by
Takuya Kitamura
PDF
ドメイン駆動設計 基本を理解する
by
増田 亨
ドメイン駆動設計のための Spring の上手な使い方
by
増田 亨
SolrとElasticsearchを比べてみよう
by
Shinsuke Sugaya
インタフェース完全に理解した
by
torisoup
PHPからgoへの移行で分かったこと
by
gree_tech
ドメイン駆動設計のためのオブジェクト指向入門
by
増田 亨
分散トレーシング技術について(Open tracingやjaeger)
by
NTT Communications Technology Development
ドメイン駆動設計入門
by
Takuya Kitamura
ドメイン駆動設計 基本を理解する
by
増田 亨
What's hot
PDF
Javaのログ出力: 道具と考え方
by
Taku Miyakawa
PPTX
分散システムについて語らせてくれ
by
Kumazaki Hiroki
PPTX
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
PDF
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
PDF
PostgreSQLアンチパターン
by
Soudai Sone
ODP
SPAのルーティングの話
by
ushiboy
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
KEY
やはりお前らのMVCは間違っている
by
Koichi Tanaka
PDF
Serverless時代のJavaについて
by
Amazon Web Services Japan
PDF
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
PDF
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
by
Naoya Kishimoto
PDF
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
PDF
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
PDF
ドメイン駆動設計の正しい歩き方
by
増田 亨
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
PDF
マイクロサービス 4つの分割アプローチ
by
増田 亨
PDF
Unityでオニオンアーキテクチャ
by
torisoup
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PDF
暗号技術の実装と数学
by
MITSUNARI Shigeo
Javaのログ出力: 道具と考え方
by
Taku Miyakawa
分散システムについて語らせてくれ
by
Kumazaki Hiroki
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
ドメイン駆動設計サンプルコードの徹底解説
by
増田 亨
超実践 Cloud Spanner 設計講座
by
Samir Hammoudi
PostgreSQLアンチパターン
by
Soudai Sone
SPAのルーティングの話
by
ushiboy
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
by
Takuto Wada
やはりお前らのMVCは間違っている
by
Koichi Tanaka
Serverless時代のJavaについて
by
Amazon Web Services Japan
3週連続DDDその3 ドメイン駆動設計 戦略的設計
by
増田 亨
[CEDEC 2021] 運用中タイトルでも怖くない! 『メルクストーリア』におけるハイパフォーマンス・ローコストなリアルタイム通信技術の導入事例
by
Naoya Kishimoto
ドメインロジックに集中せよ 〜ドメイン駆動設計 powered by Spring
by
増田 亨
コンテナの作り方「Dockerは裏方で何をしているのか?」
by
Masahito Zembutsu
ドメイン駆動設計の正しい歩き方
by
増田 亨
ドメイン駆動設計 ( DDD ) をやってみよう
by
増田 亨
マイクロサービス 4つの分割アプローチ
by
増田 亨
Unityでオニオンアーキテクチャ
by
torisoup
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
暗号技術の実装と数学
by
MITSUNARI Shigeo
Viewers also liked
PDF
JSUG20171027-spfingboot-k8s-ocp
by
Nobuhiro Sue
PDF
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
by
de:code 2017
PDF
[AC05] マイクロサービスは分割がキモ!基幹システムのためのドメイン駆動設計
by
de:code 2017
PDF
マイクロサービスアーキテクチャの設計 - JUG2015
by
Yusuke Suzuki
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PPTX
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
by
Toshiaki Maki
PDF
マイクロサービスで、 一歩先行くImmutable Infrastructureを目指そう
by
Takashi Abe
PDF
要求の変化とマイクロサービスアーキテクチャ
by
Yusuke Suzuki
PDF
Light and shadow of microservices
by
Nobuhiro Sue
PDF
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
by
Yusuke Suzuki
PDF
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
by
Yusuke Suzuki
PDF
[Cloud OnAir ] #03 No-ops で大量データ処理基盤を簡単に構築する
by
Google Cloud Platform - Japan
JSUG20171027-spfingboot-k8s-ocp
by
Nobuhiro Sue
[DO07] マイクロサービスに必要な技術要素はすべて Spring Cloud にある
by
de:code 2017
[AC05] マイクロサービスは分割がキモ!基幹システムのためのドメイン駆動設計
by
de:code 2017
マイクロサービスアーキテクチャの設計 - JUG2015
by
Yusuke Suzuki
マイクロにしすぎた結果がこれだよ!
by
mosa siru
マイクロサービスに必要な技術要素はすべてSpring Cloudにある #DO07
by
Toshiaki Maki
マイクロサービスで、 一歩先行くImmutable Infrastructureを目指そう
by
Takashi Abe
要求の変化とマイクロサービスアーキテクチャ
by
Yusuke Suzuki
Light and shadow of microservices
by
Nobuhiro Sue
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
by
Yusuke Suzuki
マイクロサービスアーキテクチャ - アーキテクチャ設計の歴史を背景に
by
Yusuke Suzuki
[Cloud OnAir ] #03 No-ops で大量データ処理基盤を簡単に構築する
by
Google Cloud Platform - Japan
More from ota42y
PPTX
なぜか技術書典5で 3サークルの運営を同時にやった話
by
ota42y
PPTX
なぜか技術書典5で 3サークルの運営をやってた話
by
ota42y
PPTX
マイクロサービスにおける 結果整合性との戦い
by
ota42y
PPTX
Rails上でのpub/sub イベントハンドラの扱い
by
ota42y
PPTX
goroutineはどうやって動いているのか
by
ota42y
PPTX
bootsnapはどれくらい早くなるのか
by
ota42y
PPTX
Microservices Architecture の利点と欠点
by
ota42y
PDF
ruby-ffiについてざっくり解説
by
ota42y
PDF
FiNCでのOSSとのつきあい方
by
ota42y
PDF
CarrieWaveについてざっくり解説
by
ota42y
PDF
prmdのドキュメントが読みやすくなる話
by
ota42y
PPTX
身近なサイバー攻撃から身を守る
by
ota42y
PPTX
HCI分野の紹介と最新研究
by
ota42y
なぜか技術書典5で 3サークルの運営を同時にやった話
by
ota42y
なぜか技術書典5で 3サークルの運営をやってた話
by
ota42y
マイクロサービスにおける 結果整合性との戦い
by
ota42y
Rails上でのpub/sub イベントハンドラの扱い
by
ota42y
goroutineはどうやって動いているのか
by
ota42y
bootsnapはどれくらい早くなるのか
by
ota42y
Microservices Architecture の利点と欠点
by
ota42y
ruby-ffiについてざっくり解説
by
ota42y
FiNCでのOSSとのつきあい方
by
ota42y
CarrieWaveについてざっくり解説
by
ota42y
prmdのドキュメントが読みやすくなる話
by
ota42y
身近なサイバー攻撃から身を守る
by
ota42y
HCI分野の紹介と最新研究
by
ota42y
マイクロサービスにおける非同期アーキテクチャ
1.
ota42y 2017/09/28 Rails Developers Meetup
#5 マイクロサービスにおける 非同期アーキテクチャ
2.
• ota42y • ゲームクライアントエンジニア →サーバエンジニアに転職(1年ぐらい前) •
rubyとかgoとかC++とか • twitterとかgithubとか 自己紹介
3.
• twitter凍結したらこちらへ – https://ota42y.com/ –
ネタとして入れたら今朝になって現実味が… あとでツイート全削除かな… – 凍結されそう
6.
• 外から見たときは一つのアプリ • 内部的にはドメイン事に別々のサーバ microservice ダイエット家庭教師 FiNCモール FiNC
アプリ lifelog 法人向けchat ranking main
7.
• 各サーバは独立しており、API経由で連携 • 非同期に連携処理も多数含まれる •
巨大かつ複雑になりやすい→知見 microservice ダイエット家庭教師 FiNCモール FiNC アプリ lifelog 法人向けchat ranking main
9.
処理の完了を待たずに次の処理を実行し、 メインの流れとは別にその処理が進行する 今回の文脈では待ち時間を減らすためにす ぐレスポンスを返し、別プロセス等で処理 非同期処理
10.
今回は特にJob Queueの話 Mail Server Rails user
11.
今回は特にJob Queueの話 Mail Server Rails user
12.
今回は特にJob Queueの話 Mail Server Rails user
13.
今回は特にJob Queueの話 Mail Server Rails user
14.
今回は特にJob Queueの話 Mail Server Rails user Oh!
15.
今回は特にJob Queueの話 Mail Server Rails user
16.
今回は特にJob Queueの話 Mail Server Rails user Slowly…
17.
今回は特にJob Queueの話 Mail Server Rails user Queue
18.
今回は特にJob Queueの話 Mail Server Rails user Queue
19.
今回は特にJob Queueの話 Mail Server Rails user Queue
20.
今回は特にJob Queueの話 Mail Server Rails user Queue Fast!
21.
今回は特にJob Queueの話 Mail Server Rails user Queue
22.
今回は特にJob Queueの話 Mail Server Rails user Worker Queue
23.
今回は特にJob Queueの話 Mail Server Rails user Worker Queue
24.
今回は特にJob Queueの話 Mail Server Rails user Worker Queue
25.
今回は特にJob Queueの話 Mail Server Rails user Worker Queue
26.
今回は特にJob Queueの話 Mail Server Rails user Worker Queue
27.
今回は特にJob Queueの話 Mail Server Rails user Worker Queue Oh!
28.
今回は特にJob Queueの話 Rails Queue Job Queueを抽象化したActiveJobは Railsに標準搭載 Rails環境での非同期処理では一般的な構成
29.
• microserviceでは非同期処理を多用する • 非同期処理の移り変わりとともに紹介 microservice ダイエット家庭教師 FiNCモール FiNC
アプリ lifelog 法人向けchat ranking main
30.
牧歌的時代 〜何でもdelayed_jobに突っ込む〜
31.
delayed_job https://github.com/collectiveidea/delay ed_job Railsで最も簡単に導入できるJob Queue
32.
delayed_job https://github.com/collectiveidea/delay ed_job • RDBのテーブルをQueueとして使う • 1
job=1 recordとして保存する • RDB以外を用意・運用する必要無い(redisとか) • 優先度や時刻指定など一通りの機能がある • RDBに書き込むのでJobは永続化される FiNCでは最初期から採用
33.
delayed_job delayメソッドに続けて本来のメソッドを呼ぶだけ • 関連する情報がシリアライズされてDBへ • workerがデータを取り出して復元・実行
34.
便利(o゜▽゜)
35.
しかしある日…
36.
🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥突然の大障害🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥🔥
37.
delayed_jobが遅くなる アプリのメインのサービスで障害が… delayed_jobがjobを実行するのが急激に遅くなる queueが処理されずにどんどん積まれていく 1時間たっても非同期処理が実行されず、 先に進めなくなるユーザや表示が変に…
38.
\(^o^)/
39.
delayed_jobが遅くなる delayed_jobではjobの同時実行を防ぐ機構がある 制御用カラムにworkerの識別子を書き、 カラムのupdateに成功(=実行権の取得) した場合に処理を実行し、同時実行を防いでいる
40.
MySQLの例 こんなupdate文で実行権を取得して処理を実行 (delayed_jobに:optimized_sql を設定した場合)
41.
MySQLの例 実行可能なjobの中で、最も優先度の高いやつ1つ に対して自分の識別子をupdate 成功したら実行権を取得したとしてjobを実行する 他workerが実行権を得るとwhere句から外れる そのため、実行権を重複して得ることはない
42.
地獄への急行列車 indexが効かないwhere句の絞り込み&ソート →テーブルロック
43.
地獄への急行列車 indexが効かないwhere句の絞り込み&ソート →テーブルロック whereの条件は、queueのだいたい全部が対象 (未実行のqueueが対象なので) →未実行jobが増えるとupdate時間が延びる →実行権取得に時間がかかり、処理速度の低下
44.
地獄への急行列車 処理速度が低下し 処理速度 <
増加速度 になる →未実行jobが増加しさらに処理速度が遅く →無限に遅くなる負のループに
45.
地獄への急行列車 処理速度が低下し 処理速度 <
増加速度 になる →未実行jobが増加しさらに処理速度が遅く →無限に遅くなる負のループに 処理のほとんどがupdate待ち →並列数を増やしても待ってるworker増えるだけ
46.
地獄への急行列車 処理速度が低下し 処理速度 <
増加速度 になる →未実行jobが増加しさらに処理速度が遅く →無限に遅くなる負のループに 処理のほとんどがupdate待ち →並列数を増やしても待ってるworker増えるだけ よって打つ手がなくなる
47.
😇 😇 😇
48.
最大のボトルネックに 新規ユーザ登録や既存ユーザの行動に応じて、 非同期のjobが作られる →ユーザ数が増えるとjobが詰まりやすくなる
49.
最大のボトルネックに 新規ユーザ登録や既存ユーザの行動に応じて、 非同期のjobが作られる →ユーザ数が増えるとjobが詰まりやすくなる サービスが成長すると障害が起きる
50.
😱なんとかせねば😱 その場は緊急対応で乗り切った
51.
大移行時代
52.
非同期処理の整理 何も考えずにdelayしていたので、 そもそもdelayを使って何をしているかを整理
53.
非同期処理の整理 何も考えずにdelayしていたので、 そもそもdelayを使って何をしているかを整理 • 巨大な処理 対象データが多い 複雑な処理をしている • 複数サービスとのデータ連携
54.
非同期処理の整理 何も考えずにdelayしていたので、 そもそもdelayを使って何をしているかを整理 • 巨大な処理 対象データが多い 複雑な処理をしている • 複数サービスとのデータ連携
55.
巨大な処理
56.
巨大な処理 クリティカルかどうかで場合分け • クリティカル • ユーザ作成時の初期化処理 •
再実行が難しい処理 • クリティカルではないもの • フォロー数の再計算 • 検索用キャッシュのアップデート • 簡単に再実行可能なやつ
57.
巨大な処理 重要度に応じて処理わけ • クリティカル • 信頼度が重要なので引き続きdelayed_job •
クリティカルではないもの • 後からの再実行が容易 • 基本的に別バックエンドへ移動 • delayed_jobのjob数を減らす
58.
バックエンド選定 delayed_jobからの変更先を選定 gemの安定度や経験等を元に以下の2つが候補に • sidekiq • resque
59.
バックエンド選定 delayed_jobからの変更先を選定 gemの安定度や経験等を元に以下の2つが候補に • sidekiq • resque
60.
sidekiq redisをバックエンドに使うJob Queue • スレッドベース •
redisなので並列度は上げやすい • リトライ機構あり 他のmicroserviceで採用していたり、 社内に経験者がいる的なのでこれ
61.
sidekiq 移動が簡単で、大量にjobが発行されるものから sidekiqを利用するように変更していく たまたまActiveJobを使っていなかったので、 delayed_jobをActiveJob(+sidekiq)に書き換える (手動で1つずつ)
62.
😆
63.
ここまでのまとめ • 巨大な処理 • クリティカルなもの •
安全なバックエンド ( delayed_job ) • クリティカルでは無いもの • 並列処理に問題がないもの( sidekiq ) • delayed_jobのjob数増加を抑える • 複数サービスへの連携
64.
イベントアーキテクチャ時代
65.
ここからの話 • 巨大な処理 • クリティカルなもの •
安全なバックエンド ( delayed_job ) • クリティカルでは無いもの • 並列処理に問題がないもの( sidekiq ) • delayed_jobのjob数増加を抑える • 複数サービスへの連携
66.
複数サービスへの連携 microserviceではあるサーバの変更に対応して、 別サーバが対応する処理を行うことが頻繁にある ダイエット家庭教師 FiNCモール FiNC アプリ lifelog 法人向けchat ranking
main
67.
複数サービスへの連携 microserviceではあるサーバの変更に対応して、 別サーバが対応する処理を行うことが頻繁にある
68.
複数サービスへの連携 更新時に他サービスに何をさせれば良いのか? を更新側が知る必要があり、結合度が高い
69.
🤔
70.
やってることの図解 Lifelog Ranking StepsCampaign Point Steps Update
71.
イベント駆動アーキテクチャ これはどうもイベント駆動アーキテクチャっぽい クライアントがリクエストを発 行して処理を依頼する代わりに、 クライアントがある事態が起 こったことを通知し、他者が何 をすべきかを知っていることを 期待します。他の誰かに何をす べきかを指示することは決して ありません。 Sam Newman著,佐藤直生監訳,木下哲也訳(2006)『マイクロサービスアーキテクチャ』,オライリージャパン.
72.
複数サービスへの連携 Lifelog Steps Update Event • 条件を満たすと対応するEventを送信
73.
複数サービスへの連携 Lifelog Ranking StepsCampaign Point Steps Update Event • 条件を満たすと対応するEventを送信 •
受け取り側はEventを受信したら処理する
74.
複数サービスへの連携 Lifelog Ranking StepsCampaign Point Steps Update Event • 条件を満たすと対応するEventを送信 •
受け取り側はEventを受信したら処理する 送信側と受信側の結合度が減る
75.
良さそう(o゜▽゜)
76.
具体的な内容
77.
イベント送信 AWSのSNS(Simple Notification Service)を利用 (Pub/Subメッセージングしてくれるサービス) 送る側はSNSにデータを送るだけ Lifelog AWS
SNSSteps Update
78.
イベント受信 AWSのSQS(Simple Queue Service)を利用 (簡単なqueueシステム) Lifelog
Ranking AWS SNS AWS SQSSteps Update
79.
イベント受信 AWSのSQS(Simple Queue Service)を利用 (簡単なqueueシステム) SNSをsubscribeすると、 eventがキューにコピーされる Lifelog
Ranking AWS SNS AWS SQS Steps Update
80.
イベント受信 SNSは複数のSQSに同時にコピーしてくれる 各サービスは自分のSQSを作り、SNSをsubscribe Lifelog Ranking Point AWS SNS AWS
SQS Steps Update Steps Update
81.
イベント受信 あらたにeventを受け取りたい場合も、 SNSをsubscribeすれば良く、送信側の変更は不要 Lifelog Ranking StepsCampaign Point AWS SNS AWS
SQS
82.
性能も良い SQSは • 大量にキューを積んでも遅くならない • 意図的に消さない限り消えない ので安心ヽ(・∀・)ノ
83.
性能も良い SQSは • 大量にキューを積んでも遅くならない • 意図的に消さない限り消えない ので安心ヽ(・∀・)ノ 一度10万ぐらいjobを積んだけど、 並列度は簡単に増やせるので大丈夫だった (delayed_jobなら死んでた)
84.
🍺🍺🍺優勝🍺🍺🍺
85.
…
86.
SNS/SQSには癖がある • 冪等である必要がある • SQSは1回以上取り出す事を保証 •
同じjobが2回実行される場合がある • 実行済みの時、並列実行の時に気をつける • 従量課金 • 送ったデータ数・サイズ課金 • 大量に送りまくる使い方だと課金死
87.
SNS/SQSには癖がある • SNSが遅い • 同リージョンで40msぐらいかかる •
delayed_jobやsidekiqと比べると遅い • もっと早いという噂も聞くので設定かも • 依存設定がAWSのコンソールに集中 • 変更履歴無い • 依存関係がわかりにくい
88.
統一フォーマットが必要 自由に送るとフォーマットが違って実装が大変 ある程度フォーマットを決めてやりとり ダイエット家庭教師 FiNCモール FiNC アプリ lifelog 法人向けchat ranking
main
89.
統一フォーマットが必要 こんな感じのフォーマットを決めて運用
90.
両方移行しないといけない 良さそうだがmicroservice間の通信の事なので、 送信側・受信側共に移行する必要がある Lifelog Ranking AWS SNS
AWS SQS
91.
両方移行しないといけない 良さそうだがmicroservice間の通信の事なので、 送信側・受信側共に移行する必要がある →簡単に移行できないとみんな移行しない Lifelog Ranking AWS SNS
AWS SQS
92.
やりとりはgem化 移行を楽にするために • SNSへ送信 • SQSから取得 •
イベントのフォーマット統一 のためのgemを作った https://github.com/ota42y/rising_dragon
93.
やりとりはgem化 移行を楽にするために • SNSへ送信 • SQSから取得 •
イベントのフォーマット統一 のためのgemを作った https://github.com/ota42y/rising_dragon Lifelog Ranking AWS SNS AWS SQS Steps Update
94.
欠点 <<< 利点 気をつける所はあるが、利点の方が大きい マイクロサービスではかなり良いアーキテクチャ 癖に対してもいくつか対応中 •
イベントをまとめて送りSNS/SQSの費用削減 • AWSの情報を元に依存関係の見える化サービス • 設定ファイルからSNS/SQSの自動設定
95.
まとめ 非同期処理はサーバでは超重要 FiNCでは処理に応じてバックエンドを使い分ける 適切に使い分けると特製をうまく使えてべんり
96.
まとめ • イベントっぽいもの • イベント駆動アーキテクチャ •
SNS/SQS • イベントでは無いもの • クリティカルなもの • 安全なバックエンド • (delayed_job) • クリティカルでは無いもの • 並列処理に問題がないバックエンド • (sidekiq)
98.
おまけ
99.
delayed_jobの障害対応 障害が起きてしまった場合は、 • 手動でDBの行の一部をファイルに書き出す • 書き出した行を削除 •
queueの件数が減るのでまともに動く • queueが減ってきたら待避したのを戻す と、頑張れば何とかなります(つらい)
100.
delayed_jobいつまで使うの いちおうdelayed_jobと使い分けています サービスが1000万ユーザとかになった場合、 delayed_jobの障害が簡単に起きる状態になる なので最終的には全て捨てる事になりそう… (当面は併用が続く)
101.
どこまでイベントにするか イベントはいつ実行されるか確実ではない 同期的に実行したい場合は、 event/sidekiqは使えないので普通にHTTP通信
102.
SQSのFIFOキューは AWS SQSのFIFOキューは https://aws.amazon.com/jp/blogs/news/new-for-amazon-simple-queue-service-fifo-queues-with-exactly- once-delivery-deduplication/ メッセージが送信順に 1
回だけ、重複なく処理さ れることを保証するように設計されています。 というキュー ただ、1秒当たりの最大取得数があるので、 大量に積んだときの処理に不安があり採用見送り (あとTokyoにまだ来てなかった)
103.
会場Q&A
104.
キューの分け方どうしてます Q. キューをどういう基準で使い分けているか? A. ほとんど分けずに一つのキューにしている 1分の処理も1秒の処理も同じキュー そっちの方がリソース管理が容易 毎秒数100積まれるようなものがあり、 そういった問題がありそうなものだけ別キュー
105.
AWS Batch Q. AWS Batchという選択肢は…? A. この問題を早急に直さないとサービス止まりまく るので、最小限の変更ですむような解決法にした 一段落したのでそういったものは検討している
Download