Submit Search
Upload
golang.tokyo #6 (in Japanese)
•
3 likes
•
8,375 views
Yuichi Murata
Follow
issues we have experienced and lessons learned while building large scale microservices.
Read less
Read more
Engineering
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
Akihiro Kuwano
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
例外設計における大罪
例外設計における大罪
Takuto Wada
Recommended
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
実環境にTerraform導入したら驚いた
実環境にTerraform導入したら驚いた
Akihiro Kuwano
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
Masahito Zembutsu
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
Takuto Wada
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
Takafumi ONAKA
人生がときめくAPIテスト自動化 with Karate
人生がときめくAPIテスト自動化 with Karate
Takanori Suzuki
例外設計における大罪
例外設計における大罪
Takuto Wada
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
アジャイル×テスト開発を考える
アジャイル×テスト開発を考える
yasuohosotani
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
テスト計画セッション
テスト計画セッション
Tomoaki Fukura
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
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
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Yusuke Kagata
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
pospome
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
Yoshinori Matsunobu
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
kwatch
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
アジャイル×テスト開発を考える
アジャイル×テスト開発を考える
yasuohosotani
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
増田 亨
テスト計画セッション
テスト計画セッション
Tomoaki Fukura
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
TaishiYamada1
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
disc99_
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
Kohei Tokunaga
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
Masahiro Nishimi
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
土岐 孝平
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
What's hot
(20)
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
テストコードの DRY と DAMP
テストコードの DRY と DAMP
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
Goのサーバサイド実装におけるレイヤ設計とレイヤ内実装について考える
ソーシャルゲームのためのデータベース設計
ソーシャルゲームのためのデータベース設計
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
DBスキーマもバージョン管理したい!
DBスキーマもバージョン管理したい!
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
アジャイル×テスト開発を考える
アジャイル×テスト開発を考える
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
ドメイン駆動設計 基本を理解する
ドメイン駆動設計 基本を理解する
テスト計画セッション
テスト計画セッション
継承やめろマジやめろ。 なぜイケないのか 解説する
継承やめろマジやめろ。 なぜイケないのか 解説する
マイクロサービスバックエンドAPIのためのRESTとgRPC
マイクロサービスバックエンドAPIのためのRESTとgRPC
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
デキるプログラマだけが知っているコードレビュー7つの秘訣
デキるプログラマだけが知っているコードレビュー7つの秘訣
これからSpringを使う開発者が知っておくべきこと
これからSpringを使う開発者が知っておくべきこと
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
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