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
410
業務が効率よく進む コミュニケーションから生じる信頼性
saicologic
0
930
アンケートの回答データに機械学習(感情分析)を活用した事例紹介
saicologic
0
3.3k
Other Decks in Technology
See All in Technology
株式会社EventHub・エンジニア採用資料
eventhub
0
4.3k
AI Agent時代なのでAWSのLLMs.txtが欲しい!
watany
2
160
ソフトウェアエンジニアと仕事するときに知っておいたほうが良いこと / Key points for working with software engineers
pinkumohikan
1
140
設計を積み重ねてシステムを刷新する
sansantech
PRO
0
130
Two Blades, One Journey: Engineering While Managing
ohbarye
3
730
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
27
14k
Apache Iceberg Case Study in LY Corporation
lycorptech_jp
PRO
0
250
Windows の新しい管理者保護モード
murachiakira
0
190
白金鉱業Meetup Vol.17_あるデータサイエンティストのデータマネジメントとの向き合い方
brainpadpr
7
990
デスクトップだけじゃないUbuntu
mtyshibata
0
600
PHPカンファレンス名古屋-テックリードの経験から学んだ設計の教訓
hayatokudou
2
530
Cracking the Coding Interview 6th Edition
gdplabs
14
28k
Featured
See All Featured
How to train your dragon (web standard)
notwaldorf
91
5.9k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
7.1k
Building a Scalable Design System with Sketch
lauravandoore
461
33k
What's in a price? How to price your products and services
michaelherold
244
12k
Designing for humans not robots
tammielis
250
25k
It's Worth the Effort
3n
184
28k
Embracing the Ebb and Flow
colly
84
4.6k
The World Runs on Bad Software
bkeepers
PRO
67
11k
Being A Developer After 40
akosma
89
590k
Navigating Team Friction
lara
183
15k
Art, The Web, and Tiny UX
lynnandtonic
298
20k
The Language of Interfaces
destraynor
156
24k
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 オーソライザー)
ご清聴ありがとうございました。