Enviar pesquisa
Carregar
lua_nginx_module JSON-RPC 2.0 Batch Request
•
11 gostaram
•
7,049 visualizações
mosa siru
Seguir
nginx luaでJSON-RPC 2.0 Batch Requestを実装して地雷踏んだ話
Leia menos
Leia mais
Tecnologia
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 37
Baixar agora
Baixar para ler offline
Recomendados
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
Shuichi Yukimoto
nginxの紹介
nginxの紹介
Takashi Takizawa
フィードフォースと AWS と私
フィードフォースと AWS と私
a know
Webサーバ勉強会#4
Webサーバ勉強会#4
oranie Narut
My sqlとplugin
My sqlとplugin
techtalkdwango
GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例
Fumihiko Shiroyama
Nginx勉強会
Nginx勉強会
Yuji Otani
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
さくらインターネット株式会社
Recomendados
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
Shuichi Yukimoto
nginxの紹介
nginxの紹介
Takashi Takizawa
フィードフォースと AWS と私
フィードフォースと AWS と私
a know
Webサーバ勉強会#4
Webサーバ勉強会#4
oranie Narut
My sqlとplugin
My sqlとplugin
techtalkdwango
GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例
Fumihiko Shiroyama
Nginx勉強会
Nginx勉強会
Yuji Otani
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
さくらインターネット株式会社
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
真乙 九龍
Using ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixiv
Shunsuke Michii
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらインターネット株式会社
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
Aya Komuro
ConoHaオブジェクトストレージ 利用ケース
ConoHaオブジェクトストレージ 利用ケース
Junichi Noda
LocalStack
LocalStack
chibochibo
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
Daisuke Ikeda
松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入
matsumoto_katsuhiko
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解する
Hironobu Saitoh
MSPとしてのオペチー向けReadOnly IAMポリシー
MSPとしてのオペチー向けReadOnly IAMポリシー
Makoto Miida
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
ロフト くん
WordBench千葉「レベル別Nginx活用法」
WordBench千葉「レベル別Nginx活用法」
Endoh Shingo
WordBeach 2012
WordBeach 2012
Masaki Takeda
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Masahiro Nagano
Osc2012.dbに行ってきました
Osc2012.dbに行ってきました
Masaru Kobashigawa
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
Masahiro Haraoka
Go, memcached, microservices
Go, memcached, microservices
mosa siru
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Mais conteúdo relacionado
Mais procurados
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
真乙 九龍
Using ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixiv
Shunsuke Michii
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらインターネット株式会社
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
Aya Komuro
ConoHaオブジェクトストレージ 利用ケース
ConoHaオブジェクトストレージ 利用ケース
Junichi Noda
LocalStack
LocalStack
chibochibo
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
Masahiro Nagano
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
Daisuke Ikeda
松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入
matsumoto_katsuhiko
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
Masahiro Nagano
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解する
Hironobu Saitoh
MSPとしてのオペチー向けReadOnly IAMポリシー
MSPとしてのオペチー向けReadOnly IAMポリシー
Makoto Miida
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
ロフト くん
WordBench千葉「レベル別Nginx活用法」
WordBench千葉「レベル別Nginx活用法」
Endoh Shingo
WordBeach 2012
WordBeach 2012
Masaki Takeda
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Masahiro Nagano
Osc2012.dbに行ってきました
Osc2012.dbに行ってきました
Masaru Kobashigawa
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
Daisuke Ikeda
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
Masahiro Haraoka
Mais procurados
(20)
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
Using ngx_lua / lua-nginx-module in pixiv
Using ngx_lua / lua-nginx-module in pixiv
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
恐るべきApache, Web勉強会@福岡
恐るべきApache, Web勉強会@福岡
ConoHaオブジェクトストレージ 利用ケース
ConoHaオブジェクトストレージ 利用ケース
LocalStack
LocalStack
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
ISUCONの勝ち方 YAPC::Asia Tokyo 2015
社内向けTech Talk資料~Fluentdの基本紹介~
社内向けTech Talk資料~Fluentdの基本紹介~
松本克彦 ピグにおけるリアルタイムランキングの導入
松本克彦 ピグにおけるリアルタイムランキングの導入
Mackerel & Norikra mackerel meetup #4 LT
Mackerel & Norikra mackerel meetup #4 LT
パブリッククラウドConoHaを使ってOpenStack APIを理解する
パブリッククラウドConoHaを使ってOpenStack APIを理解する
MSPとしてのオペチー向けReadOnly IAMポリシー
MSPとしてのオペチー向けReadOnly IAMポリシー
OpenShift from Easy way to Hard ? Way
OpenShift from Easy way to Hard ? Way
WordBench千葉「レベル別Nginx活用法」
WordBench千葉「レベル別Nginx活用法」
WordBeach 2012
WordBeach 2012
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Gazelle & CPAN modules for performance. Shibuya.pm Tech Talk #17 LT
Osc2012.dbに行ってきました
Osc2012.dbに行ってきました
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
クラウド環境向けZabbixカスタマイズ紹介(第5回Zabbix勉強会)
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
EC2でNginxを使ってみよう JAWS大阪第9回勉強会資料
Destaque
Go, memcached, microservices
Go, memcached, microservices
mosa siru
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
mosa siru
Elasticsearch for Hackadoll
Elasticsearch for Hackadoll
mosa siru
ニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービス
mosa siru
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
mosa siru
Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)
mosa siru
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
mosa siru
How we built Lingr - ITpro Challenge Presentation
How we built Lingr - ITpro Challenge Presentation
Kenn Ejima
テストの自動化を考える前に
テストの自動化を考える前に
bleis tift
Rails の自動読み込みを支える技術
Rails の自動読み込みを支える技術
Tomohiko Himura
EVOLVE`13 Keynote: Scrambled Eggs
EVOLVE`13 Keynote: Scrambled Eggs
Roy Fielding
SimpleとEasyの選択
SimpleとEasyの選択
disc99_
Perl Dancer for Python programmers
Perl Dancer for Python programmers
xSawyer
クロスドメインアクセスを理解してWeb APIを楽しく使おう
クロスドメインアクセスを理解してWeb APIを楽しく使おう
kitfactory
Bitbucketを活用したコードレビュー改善事例
Bitbucketを活用したコードレビュー改善事例
Kosuke Ito
Lean & Agile ♥ UX Design
Lean & Agile ♥ UX Design
Lukas Fittl
今日から始めるDigitalOcean
今日から始めるDigitalOcean
Masahito Zembutsu
JavascriptでもTestがしたい!
JavascriptでもTestがしたい!
洋一郎 櫻井
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Ryo Nakamaru
Golang入門
Golang入門
Yukihiro Kitazawa
Destaque
(20)
Go, memcached, microservices
Go, memcached, microservices
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
Elasticsearch for Hackadoll
Elasticsearch for Hackadoll
ニュースパスのクローラーアーキテクチャとマイクロサービス
ニュースパスのクローラーアーキテクチャとマイクロサービス
捗るリコメンドシステムの裏事情(ハッカドール)
捗るリコメンドシステムの裏事情(ハッカドール)
Twitter SmartList (第5回若手webエンジニア交流会)
Twitter SmartList (第5回若手webエンジニア交流会)
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
コミュニティ分類アルゴリズムの高速化とソーシャルグラフへの応用
How we built Lingr - ITpro Challenge Presentation
How we built Lingr - ITpro Challenge Presentation
テストの自動化を考える前に
テストの自動化を考える前に
Rails の自動読み込みを支える技術
Rails の自動読み込みを支える技術
EVOLVE`13 Keynote: Scrambled Eggs
EVOLVE`13 Keynote: Scrambled Eggs
SimpleとEasyの選択
SimpleとEasyの選択
Perl Dancer for Python programmers
Perl Dancer for Python programmers
クロスドメインアクセスを理解してWeb APIを楽しく使おう
クロスドメインアクセスを理解してWeb APIを楽しく使おう
Bitbucketを活用したコードレビュー改善事例
Bitbucketを活用したコードレビュー改善事例
Lean & Agile ♥ UX Design
Lean & Agile ♥ UX Design
今日から始めるDigitalOcean
今日から始めるDigitalOcean
JavascriptでもTestがしたい!
JavascriptでもTestがしたい!
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Dockerを使ったローカルでの開発から本番環境へのデプロイまで
Golang入門
Golang入門
Semelhante a lua_nginx_module JSON-RPC 2.0 Batch Request
gRPC入門
gRPC入門
ssuser0f153f
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
zuya
ニコニコニュースと全文検索
ニコニコニュースと全文検索
techtalkdwango
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
洵貴 佐川
俺とAngular JS 2
俺とAngular JS 2
Masayuki KaToH
Backlogでの Perlのつかいかた
Backlogでの Perlのつかいかた
Ryuzo Yamamoto
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
mganeko
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa
Takahiro Tsuchiya
Observability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
Taiki
grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11
Yutaka Tachibana
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
Masashi Shibata
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
Akihiro Kuwano
ネットワークAPI のあれこれ (ENOG37)
ネットワークAPI のあれこれ (ENOG37)
Kentaro Ebisawa
Thin Server Architectureでブログ作った #ikam
Thin Server Architectureでブログ作った #ikam
Toshiaki Maki
Isomorphic web development with scala and scala.js
Isomorphic web development with scala and scala.js
TanUkkii
gRPC と nginx による HTTP/2 サービスメッシュ構築
gRPC と nginx による HTTP/2 サービスメッシュ構築
Kazuki Ogiwara
Zabbix API
Zabbix API
Shuhei Hayashibara
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
AdvancedTechNight
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
Microsoft Tech Summit 2017
RESTful Webサービス
RESTful Webサービス
Kentaro Inomata
Semelhante a lua_nginx_module JSON-RPC 2.0 Batch Request
(20)
gRPC入門
gRPC入門
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
ニコニコニュースと全文検索
ニコニコニュースと全文検索
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
REST API、gRPC、GraphQL 触ってみた【2023年12月開催勉強会資料】
俺とAngular JS 2
俺とAngular JS 2
Backlogでの Perlのつかいかた
Backlogでの Perlのつかいかた
WebRTC SFU mediasoup sample
WebRTC SFU mediasoup sample
楽ちんユーザー認証付Spa
楽ちんユーザー認証付Spa
Observability, Service Mesh and Microservices
Observability, Service Mesh and Microservices
grpc-gateway を試してみた fukuoka.go#11
grpc-gateway を試してみた fukuoka.go#11
Webフレームワークを作ってる話 #osakapy
Webフレームワークを作ってる話 #osakapy
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
ネットワークAPI のあれこれ (ENOG37)
ネットワークAPI のあれこれ (ENOG37)
Thin Server Architectureでブログ作った #ikam
Thin Server Architectureでブログ作った #ikam
Isomorphic web development with scala and scala.js
Isomorphic web development with scala and scala.js
gRPC と nginx による HTTP/2 サービスメッシュ構築
gRPC と nginx による HTTP/2 サービスメッシュ構築
Zabbix API
Zabbix API
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
[Japan Tech summit 2017] DEP 005
[Japan Tech summit 2017] DEP 005
RESTful Webサービス
RESTful Webサービス
Mais de mosa siru
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)
mosa siru
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
mosa siru
KYC and identity on blockchain
KYC and identity on blockchain
mosa siru
マイニングプールの収益配分と攻撃手法
マイニングプールの収益配分と攻撃手法
mosa siru
Payment Channel Introduction
Payment Channel Introduction
mosa siru
how to make twitter list automatically
how to make twitter list automatically
mosa siru
Mais de mosa siru
(6)
LayerXのQAチームで目指したい動き方 (社内資料)
LayerXのQAチームで目指したい動き方 (社内資料)
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
KYC and identity on blockchain
KYC and identity on blockchain
マイニングプールの収益配分と攻撃手法
マイニングプールの収益配分と攻撃手法
Payment Channel Introduction
Payment Channel Introduction
how to make twitter list automatically
how to make twitter list automatically
Último
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
Último
(9)
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
lua_nginx_module JSON-RPC 2.0 Batch Request
1.
nginx luaでJSON-RPC batch requestを実装して地雷踏んだ話 2016/02/08
@mosa_siru 1
2.
@mosa_siru 2
3.
@mosa_siru (もさ) • ボンバーマン極めてる人 •
2013-2015 DeNA • Mobage 3rd party API運用 • ハッカドール新規開発(サーバーサイド) • 2015- Gunosy • 広告運用、新規事業開発 3
4.
今日の内容 4
5.
今日の内容 • JSON-RPCの紹介 • JSON-PRCって? •
JSON-RPC Batch Requestが便利! • lua_nginx_moduleでBatch Request実装した話 • 地雷踏んだ話 5
6.
JSON-RPCって? 6
7.
JSON-PRC • とってもシンプルなRPCプロトコル • リクエストもレスポンスも全部指定のJSON形 式でやろうぜ! •
多数の言語でサーバー・クライアント共にフ レームワーク化やライブラリ化されている 7
8.
Example(1) 8 Request {"jsonrpc": "2.0", "method":
"subtract", "params": [5, 2], "id": 1} {"jsonrpc": "2.0", "result": 3, "id": 1} Response
9.
Example(2) 9 Request {"jsonrpc": "2.0", "method":
"getUser", "params": { "user_id": 1 }, "id": 1} {"jsonrpc": "2.0", "result": {"name": "mosa", "email": "mosa@hogefuga.com"}, "id": 1 Response
10.
JSON-PRC • とってもシンプル! • 特定のmethodにパラメータつきで1つの単純なリクエスト を送って、1つのレスポンスをもらう •
外部に公開するAPIでもない限り、URI設計や冪等性とか 色々気にしないといけないRestFulよりも扱いやすい • 大抵のネイティブアプリとサーバーAPI間の通信、 Internal APIなどはこれで十分 10
11.
Batch Request Example 11 Request [ {"jsonrpc":
"2.0", "method": "subtract", "params": [5, 2], "id": 1}, {"jsonrpc": "2.0", "method": "getUser", "params": { "user_id": 1 }, "id": 2} ] [ {"jsonrpc": "2.0", "result": 3, "id": 1}, {"jsonrpc": "2.0", "result": {"name": "mosa", "email": "mosa@hogefuga.com"}, "id": 2} ] Response
12.
Batch Request • 複数のリクエストを一気に送って、一気にレ スポンスがもらえるプロトコル •
JSON Arrayで送ってJSON Arrayで返る 12 • 仕様上、送ったArrayの順番通りにレスポンスが並ぶこ とは保証されない => 識別子として "id"のkeyをclientは見るべき
13.
Batch Requestのメリット • リクエスト数を減らすことができる •
APIの設計がシンプルになる(1つのリソースに対して1つ 作っておけば良く、UIを気にしなくて良い) • クライアント側で、複数のAPIのレスポンスを待ったハンド リングがシンプルにできる • 「2つのAPIの結果を待たないと描画してはいけない」 • 「どれかがこけた場合は全体をエラーにする」 13
14.
Batch Requestのデメリット • 重い処理に引きずられる •
処理に10秒かかるリクエストA • 処理に1秒かかるリクエストB • A,BをBatch Requestにすると、最低10秒かか る 14
15.
Batch Requestは どう実装すべきか 15
16.
実装(1) フレームワークで行う フレームワーク側で、for loop
でそれぞれ順番 に処理し、全て終わったらまとめてレスポンス を生成する 16
17.
実装(1) フレームワークで行う 17 • 既存のフレームワーク実装はだいたいこれ。 •
10個分のbatch requestを投げたら処理に10倍 時間がかかることになり、イケてない • 並列でそれぞれのスレッド(プロセス)が処理す るのが理想だが、言語によっては複雑な実装 になる
18.
実装(2) Proxy serverをたてる proxyがJSON
Arrayのそれぞれに対し、非同期 で並列にバックエンドのJSON-RPCサーバーに リクエストを投げ、全て返ってきたら1つにまと めてレスポンスを生成する
19.
実装(2) Proxy serverをたてる 19 •
管理コンポーネントが増えるので、運用の複雑さが増 す • 異常が起きた場合、どの経路で死んだのか多数のロ グを漁ることになる • proxy serverの台数管理も考えないといけない • single requestも考えると、appへのreverse proxy設定 をnginxとproxyで二重管理することになりうる
20.
実装(3) nginxで行う nginxのレイヤーでbatch requestはバラしてし まう (2)のproxyの役割をluaが担当 20
21.
実装(3) nginxで行う 21 • backendのJSON-RPC
APIはsingle requestさえ捌ければ良 く、サーバー言語に依らずこの構成が取ることができる • 管理コンポーネントも増えない • イベントドリブンなnginxの性質を活かし、ノンブロッキング (=backendの処理を待たない)並列なbatch requestを簡単に 実装することができる • single requestも同じnginxで捌けるので、reverse proxy設定 が二重管理にならない
22.
というわけで nginx + luaで実装した話 22
23.
library化しました 23 https://github.com/mosasiru/lua-resty-jsonrpc- batch 簡単に、batch requestが並列にノンブロッキン グに実装できます。
24.
24
25.
Basic Usage解説 25 • /api
が裏側のJSON-RPC APIに投げる(single request用) • /api/batch がbatch requestを分解し、 /api に subrequest (処理を移譲) • 内部的には、lua_nginx_moduleの localtion.capture_multi を利用しています
26.
26
27.
Advanced Usage解説 27 • でかいArrayが来ると攻撃になるので、最大サイズを10とする •
subrequestの処理時間をnginx access logに入れるために、 nginx変数に値を入れている • ライブラリに用意されたフックポイントを利用している • 「jsonrpc "substract" methodは /jsonrpc/method/substract のパスで受けたい」など、動的なlocationに対応している • というわけで、色々拡張できるようになっています
28.
運用可能なの? 28
29.
subrequest の調査 29 • 事前にかなりの検証をした
(CentOS 6.2, ngx_openresty1.7.10.1) • lua実行中にnginx reloadされるとどうなるか? • subrequest実行中にnginx reloadされるとどうなるか? • luaでエラーになるとどうなるか? • upstreamでエラーになるとどうなるか? • upstreamがtimeoutするとどうなるか? • client timeoutするとどうなるか?
30.
subrequest の調査 30 • 検証の結果、以下に気をつければ問題ないことがわかる •
アクセスログにsubrequestの情報を盛り込むべき • luaエラー時にハンドリングできるようlua pcallを利用するべき • nginx reloadは問題なく可能! • subrequest upstreamで刺さる分には影響ない • luaで刺さるとnginx workerプロセスごと刺さる(がくぶる • upstreamのレスポンスサイズがproxy buffersを超え、proxy_max_temp_file_size も超えるかOFFにしていると応答が返らない (しかしnginx workerプロセスは刺さらない)
31.
導入してみた 31
32.
問題なくリクエストを捌ける、 が… 32 • 数万req/min を余裕で1台で捌けるが •
なぜか徐々にリークするメモリー • なぜか時々出るソケットリークエラー • そしてソケット開けなくなって死ぬ [alert] 15248#0: open socket #123 left in connection 456
33.
とりあえず 定期reloadする運用… 33
34.
調査の結果 34 upstreamのレスポンスサイズがproxy buffersを超え、 proxy_max_temp_file_size も超えるかOFFにしていると 応答が返らない(ただしworkerプロセスはブロックされ ない) •
とあるAPIにてこれが起きていた。 • このときソケットを閉じ忘れるようだ • メモリも開放されないようだ
35.
コードとか読むかんじ 35 upstreamのレスポンスサイズがproxy buffersを 超え、proxy_max_temp_file_size も超えたとき •
single request: bufferingしないで直接 upstream =>clientにwriteしてくれる • subrequest: 全部bufferingしようとして死ぬ
36.
subrequest利用時には proxy_buffersを 適切に上げる運用にしましょう 36
37.
おわり 37
Baixar agora