Submit Search
Upload
golang.tokyo #6 (in Japanese)
•
3 likes
•
8,377 views
Yuichi Murata
Follow
issues we have experienced and lessons learned while building large scale microservices.
Read less
Read more
Engineering
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 21
Download now
Download to read offline
Recommended
例外設計における大罪
例外設計における大罪
Takuto Wada
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
async/await のしくみ
async/await のしくみ
信之 岩永
Recommended
例外設計における大罪
例外設計における大罪
Takuto Wada
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
async/await のしくみ
async/await のしくみ
信之 岩永
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
日本語テストメソッドについて
日本語テストメソッドについて
kumake
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
ota42y
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
SLOのすすめ
SLOのすすめ
Takeo Sawada
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
mametter
More Related Content
What's hot
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Yasuhiro Mawarimichi
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
Masahito Zembutsu
脱RESTful API設計の提案
脱RESTful API設計の提案
樽八 仲川
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
Tetsutaro Watanabe
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
Twitterのsnowflakeについて
Twitterのsnowflakeについて
moai kids
Docker Tokyo
Docker Tokyo
cyberblack28 Ichikawa
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Akihiro Kuwano
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
Ryuji Tsutsui
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
mganeko
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
naoki koyama
日本語テストメソッドについて
日本語テストメソッドについて
kumake
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
増田 亨
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Koichi Tanaka
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
ota42y
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
増田 亨
What's hot
(20)
WebSocket / WebRTCの技術紹介
WebSocket / WebRTCの技術紹介
Dockerfileを改善するためのBest Practice 2019年版
Dockerfileを改善するためのBest Practice 2019年版
脱RESTful API設計の提案
脱RESTful API設計の提案
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
初心者向けMongoDBのキホン!
初心者向けMongoDBのキホン!
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Twitterのsnowflakeについて
Twitterのsnowflakeについて
Docker Tokyo
Docker Tokyo
AWSのログ管理ベストプラクティス
AWSのログ管理ベストプラクティス
Python 3.9からの新定番zoneinfoを使いこなそう
Python 3.9からの新定番zoneinfoを使いこなそう
MediaRecorder と WebM で、オレオレ Live Streaming
MediaRecorder と WebM で、オレオレ Live Streaming
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
新たなgitのブランチモデル「Git Feature Flow」!Git Flow,Git Hub Flow,Git Lab Flowを超えれるか?
日本語テストメソッドについて
日本語テストメソッドについて
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
ドメイン駆動設計のためのオブジェクト指向入門
ドメイン駆動設計のためのオブジェクト指向入門
やはりお前らのMVCは間違っている
やはりお前らのMVCは間違っている
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
ruby-ffiについてざっくり解説
ruby-ffiについてざっくり解説
ドメイン駆動設計 ( DDD ) をやってみよう
ドメイン駆動設計 ( DDD ) をやってみよう
Viewers also liked
SLOのすすめ
SLOのすすめ
Takeo Sawada
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
mametter
Spiderストレージエンジンの使い方と利用事例 他ストレージエンジンの紹介
Spiderストレージエンジンの使い方と利用事例 他ストレージエンジンの紹介
Kentoku
AWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグ
Amazon Web Services Japan
AndApp開発における全て #denatechcon
AndApp開発における全て #denatechcon
DeNA
ScalaからGoへ
ScalaからGoへ
James Neve
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Spark Summit
What’s New in Amazon Aurora
What’s New in Amazon Aurora
Amazon Web Services
Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from Happening
Amazon Web Services
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Amazon Web Services
神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)
guregu
MongoDBの可能性の話
MongoDBの可能性の話
Akihiro Kuwano
Blockchain on Go
Blockchain on Go
Seiji Takahashi
Microservices at Mercari
Microservices at Mercari
Google Cloud Platform - Japan
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
KEISUKE KONISHI
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
Tim Burks
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
Takuya Ueda
So You Wanna Go Fast?
So You Wanna Go Fast?
Tyler Treat
Solving anything in VCL
Solving anything in VCL
Fastly
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Bret McGowen - NYC Google Developer Advocate
Viewers also liked
(20)
SLOのすすめ
SLOのすすめ
An introduction and future of Ruby coverage library
An introduction and future of Ruby coverage library
Spiderストレージエンジンの使い方と利用事例 他ストレージエンジンの紹介
Spiderストレージエンジンの使い方と利用事例 他ストレージエンジンの紹介
AWS X-Rayによるアプリケーションの分析とデバッグ
AWS X-Rayによるアプリケーションの分析とデバッグ
AndApp開発における全て #denatechcon
AndApp開発における全て #denatechcon
ScalaからGoへ
ScalaからGoへ
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
Apache Spark Streaming + Kafka 0.10 with Joan Viladrosariera
What’s New in Amazon Aurora
What’s New in Amazon Aurora
Operations: Production Readiness Review – How to stop bad things from Happening
Operations: Production Readiness Review – How to stop bad things from Happening
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
Streaming Data Analytics with Amazon Redshift and Kinesis Firehose
神に近づくx/net/context (Finding God with x/net/context)
神に近づくx/net/context (Finding God with x/net/context)
MongoDBの可能性の話
MongoDBの可能性の話
Blockchain on Go
Blockchain on Go
Microservices at Mercari
Microservices at Mercari
Swaggerでのapi開発よもやま話
Swaggerでのapi開発よもやま話
Fast and Reliable Swift APIs with gRPC
Fast and Reliable Swift APIs with gRPC
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
メルカリアッテの実務で使えた、GAE/Goの開発を効率的にする方法
So You Wanna Go Fast?
So You Wanna Go Fast?
Solving anything in VCL
Solving anything in VCL
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Google Home and Google Assistant Workshop: Build your own serverless Action o...
Similar to golang.tokyo #6 (in Japanese)
MTプラグイン入門以前
MTプラグイン入門以前
Hiroshi Yamato
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
Atsushi Tadokoro
スクラム初心者セッション.pdf
スクラム初心者セッション.pdf
Hideo Kashioka
Scrum"再"入門
Scrum"再"入門
You&I
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
陽一 滝川
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
schoowebcampus
CodingTips+ 基礎編
CodingTips+ 基礎編
Yusuke Ito
クロスプラットフォームはまだ早い!既存のアプリをクロスプラットフォームっぽくする方法
クロスプラットフォームはまだ早い!既存のアプリをクロスプラットフォームっぽくする方法
Hiroki Yata
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
Kotaro Ogino
20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX
Takahito Miyamoto
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
schoowebcampus
アジャイルマニフェストから見るインセプションデッキ
アジャイルマニフェストから見るインセプションデッキ
You&I
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
SFDG ROOKIES
ワークショップ 明日からはじめるアジャイル
ワークショップ 明日からはじめるアジャイル
ESM SEC
What Does “Open source” and “Community driven” Mean for Moodle Development?
What Does “Open source” and “Community driven” Mean for Moodle Development?
Moodle
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
Yuta Tonegawa
The Essential Guide To Entrepreneurship
The Essential Guide To Entrepreneurship
Takayuki Yamazaki
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
Masaki NIWA
Intalio japan special cloud workshop
Intalio japan special cloud workshop
Daisuke Sugai
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Takayuki Shimizukawa
Similar to golang.tokyo #6 (in Japanese)
(20)
MTプラグイン入門以前
MTプラグイン入門以前
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
BNN CAMP vol.3 インタラクションデザインの現在―プログラミング初心者のためのopenFrameworks入門 1
スクラム初心者セッション.pdf
スクラム初心者セッション.pdf
Scrum"再"入門
Scrum"再"入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
とりあえず30分でひととおり分かった気にはなれるアジャイル入門
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
CodingTips+ 基礎編
CodingTips+ 基礎編
クロスプラットフォームはまだ早い!既存のアプリをクロスプラットフォームっぽくする方法
クロスプラットフォームはまだ早い!既存のアプリをクロスプラットフォームっぽくする方法
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
【DevLOVE現場甲子園2013】Software Engineer in Test @ 楽天の検索基盤の現場
20190524_WindowsユーザのためのSalesforce DX
20190524_WindowsユーザのためのSalesforce DX
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
「非エンジニア向け 初めてのプログラミング体験講座」@CodeCamp
アジャイルマニフェストから見るインセプションデッキ
アジャイルマニフェストから見るインセプションデッキ
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
【Devsumi2019】開発者に贈るSalesforceプラットフォーム概論と最新動向
ワークショップ 明日からはじめるアジャイル
ワークショップ 明日からはじめるアジャイル
What Does “Open source” and “Community driven” Mean for Moodle Development?
What Does “Open source” and “Community driven” Mean for Moodle Development?
Hour of-code-2016冬-シンポジウム
Hour of-code-2016冬-シンポジウム
The Essential Guide To Entrepreneurship
The Essential Guide To Entrepreneurship
ユーザ・デザイナーから見たPlone CMSのアピールポイント
ユーザ・デザイナーから見たPlone CMSのアピールポイント
Intalio japan special cloud workshop
Intalio japan special cloud workshop
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
golang.tokyo #6 (in Japanese)
1.
初めて で大規模 を作り得 た教訓 golang.tokyo #6
2.
■ この発表では golang
で大規模な Microservices 構成のシステム -- AndApp -- を作った時に得た教訓をつらつらと語っていきます ⁃ 成功談というよりむしろ失敗談の話と、そこから得た教訓の話をしていき ます ⁃ 初めて golang 開発にチャレンジする人たちの参考になれば ■ 初めて Golang を使い、手探りで作り上げていった部署の話を聞いて「あるあ る」も「ないない」もお楽しみいただければと思います
3.
の基本構成 アーキテクチャ ■ ■ ■ より
4.
教訓 フレームワークに拘らない ■ 新規プラットフォームの立ち上げにあたりテクノロジースタックを刷新 ⁃
を基本構成に ⁃ メンバーの開発経験は主に オンプレミス ■ のベストプラクティスを調査 ⁃ まずフレームワークを調査し始める ⁃ 他の言語におけるフレームワークの成功体験 ⁃ チーム開発でもコードに統一感がでるし ⁃ 言語に熟練していない人でも「それなり」に書けるし ⁃ ↑ 部署として に初挑戦するだけにこれが重要だった
5.
で始めた 開発 ■ 当時特に話題性のあったフレームワーク ■
良かった点 ⁃ シンプルで扱いやすかった ⁃ とのインテグレーションもサンプルにあった ⁃ 問題 • から を派生させ回避 • の一貫性をキープ ■ 困ったところ ⁃ ワイルドカードパスを共有したルーティング問題 • 例えば以下のようなエントリーでコンフリクトが発生する • 例 ⁃ ⁃ • が内部で利用する の制限 gin.Context (App Engine) context.Context派生
6.
一部で を導入し始める ■ に続いて話題性のあったフレームワーク ■
良かった点 ⁃ ワイルドカードパスを共有したルーティングが可能 ⁃ 特に アプリ系のコンポーネント開発が捗る ■ 困った点 ⁃ 設計がガリガリ書き換わる ⁃ のリリースノートにて • • コンテキストの派生が不可能に… ⁃ 一時、作者が別の フレームワークの開発に勤しむ • の開発やめるの…? ■ その他困ったこと ⁃ と の両対応 結果 は 対応を諦め のまま使う。新規のコンポーネントではなるべく を使わない流れに
7.
そもそも でフレームワークに拘ることはない ■ 洗練された
パッケージがある ⁃ で事足りるのであればそれでもよい ⁃ 実際いくつかのコンポーネントは で作っている ⁃ など足りない部分は都度ライブラリで補完していけばよい ■ は言語仕様がシンプルかつ がある ⁃ フレームワークに乗らなくてもコーディングスタイルは似てくる ■ ウェブアプリケーションフレームワークに乗っかるのであれば運命を共にする覚 悟で ■ で が パッケージに取り込まれたことで またひと波ありそう フレームワークに拘らない、振り回されない!
8.
教訓 を尊重する ■ 独自エラー型の使い方でハマった話 ■
独自 型の使い方でハマった話 ■ は として使おう
9.
独自のエラー型を定義 ■ 独自のエラー型を定義して利用することに ■ 一般的な
関数の戻り値は インタフェース ■ しかし我々は独自のエラー型に寄せることにした ⁃ なぜなら インタフェースからのキャストが面倒だから ⁃ すべての関数の戻り値を寄せてしまえばいいと思っていた
10.
思わぬ盲点 ■ 以下のコードはうまく動かない。なぜか
11.
には型があるの罠 ■ の型問題 ■ インタフェースと独自エラー型を混在した時に発生 ⁃
すべてを独自エラー型に寄せきれないケースが存在する • 例 などのサードパーティ関数 ■ 素直に他の関数にならって インタフェースに統一すれば良かった ■ キャストがめんどくさい問題は便利関数でどうにでもなる ⁃ 例 独自のエラー型を作っても良いが標準の インタフェースを尊重すべし
12.
独自のコンテキスト型を定義 ■ 独自のコンテキスト型においても似たような失敗 ⁃ リクエストスコープの値を簡単に取れるよう
を定義 ⁃ アプリケーションで引き回すのを ではなく に寄せ た ■ きちんとコンテキストを派生させていれば問題なさそうに思えるが… ■ 例えば以下の様なコードを書く時に困る gin.Context (App Engine) context.Context 派生 MyContext 派生 context.Context 型になってしまうため、 *MyContext 型の関数に渡せなくなってしまう
13.
は として扱おう ■ の定義されたものは積極的に
で扱うべし ⁃ 標準ライブラリや他のライブラリとの連携がシンプルになる ⁃ の活用によってテストが楽になるという副次的な効果もある
14.
教訓 は遅い ■ 皆さん
バリデーションどうしていますか? ⁃ 弊社では を利用 ■ での として以下が候補に上がった ⁃ • で行くと一番メジャーなバリデータ • 動的に を読み込みながらバリデーションしていく ⁃ • 国産 • のバリデーションコードを生成
15.
■ 以下の理由により を選択 ⁃
スキーマを複数分割したかった ⁃ スキーマをローカルファイルから読み込みたかった ■ この要件を容易に満たしてくれたのが 複数のスキーマを読み込むため を選択
16.
パフォーマンステストで問題発覚 ■ 予想以上にアプリケーションの動作が遅いことが発覚 ■ 調査の結果バリデーションの有無でパフォーマンスに顕著な差が出ることがわ かった ⁃
バリデータあり • ⁃ バリデータなし • ■ を使って のテストスイートを実行した結果を解析 ⁃ の 時間が 動的にスキーマを解析する部分にくわ れていることが発覚
17.
何が問題だったのか ■ 氏による へのチューニングの数々 ■
チューニング マッチのキャッシュ ⁃ オリジナル版はパースのたびに コンパイルしていた… ⁃ コンパイル結果のキャッシュを導入 ■ チューニング 多用部のロジックチューニング ⁃ 動的にスキーマを解析する部分が を多用していた ⁃ これはどうしようも無かったのでロジックのムダをとことん省いた ■ 最終的に約 倍の改善に成功 ■ そもそも で頑張ればさらに段違いの結果に オリジナル版 7280 msec チューニング1 3340 msec チューニング1 + チューニング 2 2700 msec
18.
に関わらず 気をつけないといけないもの ■ などコスト高の操作を意識する ⁃
特に動的言語になれていると の操作は甘く見がち ⁃ ライブラリを選定する際にもこの観点は持っておくべき ■ 正直 であれば をつかってバリデーションするぐらい楽勝だ ろうという過信もあった は重い!
19.
教訓 非対称暗号は遅い ■ において肝となる認証・認可 ⁃
を活用している ⁃ 内部通信用のトークンには対象鍵を ■ 非対称鍵の署名が重い事が発覚 ⁃ と比べ の が貧弱 ⁃ をみているとちらほら ⁃ 最近の では改善されているかも 追記 あんまりだった ■ を使った のバインディングも存在する ⁃ こちらの利用も検討したが のサンドボックス環境の都合で利用 はできなかった ■ 対処 ⁃ 非対称鍵の署名処理を行う を外出しして回避 対象鍵によるトークンの署名時間 0.37 msec 非対称鍵によるトークンの署名時間 486.98 msec
20.
参考 ベンチマーク ● RSA256 ●
100 回 JWT Claim を署名
21.
結論 ■ 本発表では初めての大規模 開発によって得た教訓について話した ⁃
教訓 フレームワークに拘らない ⁃ 教訓 を尊重する ⁃ 教訓 は重い ⁃ 教訓 非対称暗号は遅い ■ 困ったときには の哲学に帰りシンプルなプローチを取る ■ を過信せずパフォーマンスに気を配れ
Download now