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
Goのアプリケーションをトレース して劇的に改善した話
Search
Satoru Mikami
July 07, 2022
Technology
0
190
Goのアプリケーションをトレース して劇的に改善した話
Satoru Mikami
July 07, 2022
Tweet
Share
More Decks by Satoru Mikami
See All by Satoru Mikami
Offers スタッフエンジニア経験者に聞く 技術だけじゃない スタッフエンジニアに求められるリーダーシップとは
saicologic
0
360
CustomMiddlewareのテストをする方法
saicologic
0
44
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォーマンスでサーバレスな マイクロサービスの開発と運用
saicologic
0
860
スタートアップで エンジニアのマネージメントをする心得_短縮版
saicologic
0
600
組織文化に根ざしたデータ活用の取り組み
saicologic
0
420
業務が効率よく進む コミュニケーションから生じる信頼性
saicologic
0
930
アンケートの回答データに機械学習(感情分析)を活用した事例紹介
saicologic
0
3.3k
Other Decks in Technology
See All in Technology
Snowflakeの開発・運用コストをApache Icebergで効率化しよう!~機能と活用例のご紹介~
sagara
1
430
技術スタックだけじゃない、業務ドメイン知識のオンボーディングも同じくらいの量が必要な話
niftycorp
PRO
0
100
Perlの生きのこり - エンジニアがこの先生きのこるためのカンファレンス2025
kfly8
2
270
急成長する企業で作った、エンジニアが輝ける制度/ 20250227 Rinto Ikenoue
shift_evolve
0
130
Aurora PostgreSQLがCloudWatch Logsに 出力するログの課金を削減してみる #jawsdays2025
non97
1
190
What's new in Go 1.24?
ciarana
1
110
Amazon Aurora のバージョンアップ手法について
smt7174
2
140
依存パッケージの更新はコツコツが勝つコツ! / phpcon_nagoya2025
blue_goheimochi
3
210
入門 PEAK Threat Hunting @SECCON
odorusatoshi
0
150
生成AI×財務経理:PoCで挑むSlack AI Bot開発と現場巻き込みのリアル
pohdccoe
1
630
日経のデータベース事業とElasticsearch
hinatades
PRO
0
230
LINEギフトにおけるバックエンド開発
lycorptech_jp
PRO
0
270
Featured
See All Featured
BBQ
matthewcrist
87
9.5k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
Designing Experiences People Love
moore
140
23k
Practical Orchestrator
shlominoach
186
10k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.1k
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
7
640
Fireside Chat
paigeccino
34
3.2k
Fontdeck: Realign not Redesign
paulrobertlloyd
83
5.4k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
10
1.3k
Why You Should Never Use an ORM
jnunemaker
PRO
55
9.2k
Transcript
Goのアプリケーションをトレース して劇的に改善した話 〜一行に隠された秘密を解く〜 三上 悟
©2021 Voicy, Inc. 自己紹介 三上 悟 Tech Lead at Voicy
(元EM) @saicologic 2020年1月入社 6社目 専門はバックエンドエンジニア 17年目 Goの開発は2021年〜 PHP => Ruby => Node.js => Python => Go 趣味:ゲーム、自転車
©2021 Voicy, Inc. 今日の話 Datadog APM(Application Perfomance Monitoring)
©2021 Voicy, Inc. aはFirebase Authです。
©2021 Voicy, Inc. Firebaseもたまにタイムアウトする APIはユーザー認証が必要なため、Firebaseに問い合わせしている? リトライすればいい?
©2021 Voicy, Inc.
©2021 Voicy, Inc. 認証 if a.needCheckRevoked { idToken, err =
a.VerifyIDTokenAndCheckRevoked(ctx, bearerToken) } else { idToken, err = a.VerifyIDToken(ctx, bearerToken) } 認証の実装見ると、needCheckRevokedはFirebaseに問い合わせするが、 VerifyIDTokenは、Firebaseへの問い合せをおこないません
©2021 Voicy, Inc. 補足:認証 HTTP Header { "Authorization": "Bearer xxxxxx"
} xxxxxxは、JWT(JSON Web Token) JWT=bearerTokenの中身です。
©2021 Voicy, Inc. 補足:JWT https://jwt.io/
©2021 Voicy, Inc. 認証ではないとしたら、 accounts:lookupは一体どこで呼ばれているのだろうか?
©2021 Voicy, Inc. InfoログにUserIDを付与したかった。誰のリクエストが調査できるようにするため。 Firebaseの呼び出しはログのミドルウェアで呼ばれていた。 InjectFirebaseAuthenticator.GetUserFromの中でFirebaseに問い合わせしていました。 修正されていない初期のコードで作った人がいません。普通に動くから見直しが行われなかった。
©2021 Voicy, Inc. 修正点 1. 認証ミドルウェアでContextにUserIDを付与した a. あらかじめユーザー登録するときに、 CustomClaims情報を付与しておくと、 JWTの中にUserID情
報が入れられます。 VerifyIDTokenするとUserID取得できるので、ContextにいれてUserIDを引き 回せます。 2. ログのミドルウェアでContextからUserIDを取得して使う 呼び出し順番 ・UnaryServerInterceptor(auth.Authenticate) ・LoggerUnaryServerInterceptor(logger)
©2021 Voicy, Inc. 改善結果 Firebaseの問い合わせが不要になり、全体で 200ms早くなった
©2021 Voicy, Inc. 学び ・JWTの仕組みを知ればFirebaseに問い合わせなくても、必要な情報が取得できる ・Datadog APMを入れると、どこでどれくらいの時間がかかったかわかる ・GoのContextを使えば値を引き回せる。例えばログに情報を付与する用途に使える ・ミドルウェアの処理は全てのAPIに影響するので不要な処理がないか見直そう その他
・JWT検証はアプリ側より、API Gateway側で行うほうが良い (例:Amazon API GatewayのJWT オーソライザー)
ご清聴ありがとうございました。