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
Report
Share
Report
Share
1 of 21
Download now
Download to read offline
Recommended
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
Recommended
GoによるWebアプリ開発のキホン
GoによるWebアプリ開発のキホン
Akihiko Horiuchi
分散トレーシング技術について(Open tracingやjaeger)
分散トレーシング技術について(Open tracingやjaeger)
NTT Communications Technology Development
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
Hiroshi Tokumaru
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
Shota Shinogi
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
Atsushi Nakamura
PHPからgoへの移行で分かったこと
PHPからgoへの移行で分かったこと
gree_tech
ドメインオブジェクトの見つけ方・作り方・育て方
ドメインオブジェクトの見つけ方・作り方・育て方
増田 亨
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
Mitsutoshi Kiuchi
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
日本語テストメソッドについて
日本語テストメソッドについて
kumake
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
dcubeio
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
正しいものを正しくつくる
正しいものを正しくつくる
toshihiro ichitani
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
Yuji Otani
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
Satoshi Takayanagi
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
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
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
日本マイクロソフト株式会社
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
増田 亨
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
BIGLOBE Inc.
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
Masahito Zembutsu
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
都元ダイスケ Miyamoto
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
Yoshiki Nakagawa
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
Takuya Ueda
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
Mitsutoshi Kiuchi
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
Koichiro Matsuoka
日本語テストメソッドについて
日本語テストメソッドについて
kumake
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
dcubeio
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
infinite_loop
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
増田 亨
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
infinite_loop
正しいものを正しくつくる
正しいものを正しくつくる
toshihiro ichitani
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
Yuji Otani
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
Satoshi Takayanagi
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
増田 亨
What's hot
(20)
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
【BS13】チーム開発がこんなにも快適に!コーディングもデバッグも GitHub 上で。 GitHub Codespaces で叶えられるシームレスな開発
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計 失敗したことと成功したこと
ドメイン駆動設計 失敗したことと成功したこと
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マイクロサービス時代の認証と認可 - AWS Dev Day Tokyo 2018 #AWSDevDay
マルチテナントのアプリケーション実装〜実践編〜
マルチテナントのアプリケーション実装〜実践編〜
オススメの標準・準標準パッケージ20選
オススメの標準・準標準パッケージ20選
(2017.6.9) Neo4jの可視化ライブラリまとめ
(2017.6.9) Neo4jの可視化ライブラリまとめ
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
日本語テストメソッドについて
日本語テストメソッドについて
Go初心者がGoでコマンドラインツールの作成に挑戦した話
Go初心者がGoでコマンドラインツールの作成に挑戦した話
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
ドメイン駆動設計という設計スタイル
ドメイン駆動設計という設計スタイル
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
ソーシャルゲーム案件におけるDB分割のPHP実装
ソーシャルゲーム案件におけるDB分割のPHP実装
正しいものを正しくつくる
正しいものを正しくつくる
Redis勉強会資料(2015/06 update)
Redis勉強会資料(2015/06 update)
他社製品と比較した際のAuth0のいいところ
他社製品と比較した際のAuth0のいいところ
ドメイン駆動設計 本格入門
ドメイン駆動設計 本格入門
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