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
saicologic
July 07, 2022
Technology
230
0
Share
Goのアプリケーションをトレース して劇的に改善した話
saicologic
July 07, 2022
More Decks by saicologic
See All by saicologic
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォーマンスでサーバレスな マイクロサービスの開発と運用
saicologic
0
1k
Other Decks in Technology
See All in Technology
Cortex Codeのコスト見積ヒントご紹介
yokatsuki
0
150
AI駆動開発で生産性を追いかけたら、行き着いたのは品質とシフトレフトだった
littlehands
0
310
ハーネスエンジニアリング入門
knishioka
0
110
生成AIはソフトウェア開発の革命か、ソフトウェア工学の宿題再提出なのか -ソフトウェア品質特性の追加提案-
kyonmm
PRO
2
830
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
5
2k
ServiceNow Knowledge 26 の歩き方
manarobot
0
330
[Scram Fest Niigata2026]Quality as Code〜AIにQAの思考を再現させる試み〜
masamiyajiri
1
200
AIの揺らぎに“コシ”を与える階層化品質設計
ickx
0
210
「誰一人取り残されない」 AIエージェント時代のプロダクト設計思想 Product Management Summit 2026
mizushimac
1
2.8k
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
7.9k
AI時代に越境し、 組織を変えるQAスキルの正体 / QA Skills for Transforming an Organization
mii3king
5
3.6k
独断と偏見で試してみる、 シングル or マルチエージェント どっちがいいの?
shichijoyuhi
1
240
Featured
See All Featured
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
140
How to build a perfect <img>
jonoalderson
1
5.5k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.7k
How to Ace a Technical Interview
jacobian
281
24k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
0
220
Design in an AI World
tapps
1
210
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
100
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
The Cult of Friendly URLs
andyhume
79
6.9k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
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 オーソライザー)
ご清聴ありがとうございました。