Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
Uploaded by
Shuichi Yukimoto
PDF, PPTX
3,325 views
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
Engineering
◦
Read more
11
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 26
2
/ 26
3
/ 26
4
/ 26
5
/ 26
6
/ 26
7
/ 26
8
/ 26
9
/ 26
10
/ 26
11
/ 26
12
/ 26
13
/ 26
14
/ 26
15
/ 26
16
/ 26
17
/ 26
18
/ 26
19
/ 26
20
/ 26
21
/ 26
22
/ 26
23
/ 26
24
/ 26
25
/ 26
26
/ 26
More Related Content
PPTX
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
by
toshi_pp
PDF
Using ngx_lua / lua-nginx-module in pixiv
by
Shunsuke Michii
PDF
nginxの紹介
by
Takashi Takizawa
PDF
lua_nginx_module JSON-RPC 2.0 Batch Request
by
mosa siru
PDF
Webサーバ勉強会#4
by
oranie Narut
PPTX
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
by
真乙 九龍
PPTX
Nginx勉強会
by
Yuji Otani
PDF
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
by
さくらインターネット株式会社
NginxとLuaを用いた動的なリバースプロキシでデプロイを 100 倍速くした
by
toshi_pp
Using ngx_lua / lua-nginx-module in pixiv
by
Shunsuke Michii
nginxの紹介
by
Takashi Takizawa
lua_nginx_module JSON-RPC 2.0 Batch Request
by
mosa siru
Webサーバ勉強会#4
by
oranie Narut
Zabbixの分散構築~ConoHa VPSでのzabbix server構築~
by
真乙 九龍
Nginx勉強会
by
Yuji Otani
さくらのDockerコンテナホスティング-Arukasの解説とインフラを支える技術(July Tech Festa 2016 『IoTxAIxインフラ時代...
by
さくらインターネット株式会社
What's hot
PDF
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
by
さくらインターネット株式会社
PDF
Nginx バージョンアップ動向(2015/01〜2015/06)
by
Narimichi Takamura
PPTX
OpenShift from Easy way to Hard ? Way
by
ロフト くん
PPTX
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
by
真乙 九龍
PPTX
Java on Azure with Docker container
by
Yoshio Terada
PPTX
はじめての Cloud Foundry: .NET アプリケーションのはじめ方
by
Akihiro Kitada
PDF
Bluemix sign-up
by
YUSUKE MORIZUMI
PDF
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
by
Naoto TAKAHASHI
PDF
Mackerelによる 簡単サーバー管理入門と発展形
by
Shinji Tanaka
PPTX
AWSのElastic BeanstalkでWordPressを 構築レスで導入してみる。
by
Daigou Harada
PDF
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
PPTX
誰にでもできるパフォーマンスチューニング
by
Kiyokazu Kaba
PDF
Reading NATS
by
Katsunori Kawaguchi
PDF
Mackerel & Norikra mackerel meetup #4 LT
by
Masahiro Nagano
PPTX
ZabbixとAWS
by
真乙 九龍
PPTX
Webアプリケーションによる電源管理システムのご紹介
by
npsg
PPTX
Jenkins User Conference 東京 2015
by
Kohsuke Kawaguchi
PDF
Nginx バージョンアップ動向(2015/07〜2015/12)
by
Narimichi Takamura
PDF
Chefで始めるWindows Server構築
by
Takashi Kanai
PDF
Devlove mackerel
by
Daisuke Kasuya
Docker ホスティングサービス 'Arukas' での Mesos + Marathon の活用について(Mesos勉強会)
by
さくらインターネット株式会社
Nginx バージョンアップ動向(2015/01〜2015/06)
by
Narimichi Takamura
OpenShift from Easy way to Hard ? Way
by
ロフト くん
自宅ラック勉強会 2.2 夏のZabbix特別教室 ~構築編~
by
真乙 九龍
Java on Azure with Docker container
by
Yoshio Terada
はじめての Cloud Foundry: .NET アプリケーションのはじめ方
by
Akihiro Kitada
Bluemix sign-up
by
YUSUKE MORIZUMI
GitHubのリポジトリ(32個)を 覗いてみよう。 ただし、READMEだけね
by
Naoto TAKAHASHI
Mackerelによる 簡単サーバー管理入門と発展形
by
Shinji Tanaka
AWSのElastic BeanstalkでWordPressを 構築レスで導入してみる。
by
Daigou Harada
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
by
JustSystems Corporation
誰にでもできるパフォーマンスチューニング
by
Kiyokazu Kaba
Reading NATS
by
Katsunori Kawaguchi
Mackerel & Norikra mackerel meetup #4 LT
by
Masahiro Nagano
ZabbixとAWS
by
真乙 九龍
Webアプリケーションによる電源管理システムのご紹介
by
npsg
Jenkins User Conference 東京 2015
by
Kohsuke Kawaguchi
Nginx バージョンアップ動向(2015/07〜2015/12)
by
Narimichi Takamura
Chefで始めるWindows Server構築
by
Takashi Kanai
Devlove mackerel
by
Daisuke Kasuya
Similar to nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
PDF
Openresty
by
ogawatti
PPTX
NGINX + Ansible Automation Webinar (日本語版)
by
NGINX, Inc.
PDF
20101220 pixiv tech_meeting
by
semind
PDF
Nginx
by
Soichi Takamura
PDF
Ad stirの裏側
by
Seiji Ochiai
PDF
ngx_http_groonga - 全文検索nginx
by
Kouhei Sutou
PDF
NGINX製品の最新機能アップデート情報
by
NGINX, Inc.
PDF
mruby_nginx_module at pyfes 2013.11
by
Tatsuhiko Kubo
PDF
Paa s and oss
by
Yusuke Ando
PDF
あなたの安心を高速に守る Container-based CI
by
Wataru MIYAGUNI
PDF
mruby_nginx_module
by
Tatsuhiko Kubo
PDF
クラウド開発に役立つ OSS あれこれ
by
Masataka MIZUNO
KEY
Real world rails
by
Jun Yokoyama
Openresty
by
ogawatti
NGINX + Ansible Automation Webinar (日本語版)
by
NGINX, Inc.
20101220 pixiv tech_meeting
by
semind
Nginx
by
Soichi Takamura
Ad stirの裏側
by
Seiji Ochiai
ngx_http_groonga - 全文検索nginx
by
Kouhei Sutou
NGINX製品の最新機能アップデート情報
by
NGINX, Inc.
mruby_nginx_module at pyfes 2013.11
by
Tatsuhiko Kubo
Paa s and oss
by
Yusuke Ando
あなたの安心を高速に守る Container-based CI
by
Wataru MIYAGUNI
mruby_nginx_module
by
Tatsuhiko Kubo
クラウド開発に役立つ OSS あれこれ
by
Masataka MIZUNO
Real world rails
by
Jun Yokoyama
More from Shuichi Yukimoto
PDF
Ocif2016_go_web_freamwork
by
Shuichi Yukimoto
PDF
Slackbot_by_OpenWhisk
by
Shuichi Yukimoto
PDF
Softlayer_API_openWhisk
by
Shuichi Yukimoto
PDF
Send grid softlayer_nagoya
by
Shuichi Yukimoto
PDF
Softlayer_bluemix-summit
by
Shuichi Yukimoto
PDF
Softlayer_summit
by
Shuichi Yukimoto
PDF
SendGridを使ってみよう
by
Shuichi Yukimoto
PPTX
Mnu_pbox
by
Shuichi Yukimoto
PDF
Emacs softLayer
by
Shuichi Yukimoto
PDF
Soft layer APIの使い方と実装のポイント
by
Shuichi Yukimoto
PDF
Softlayer勉強会#2
by
Shuichi Yukimoto
PDF
勉強会資料#1
by
Shuichi Yukimoto
PDF
SoftLayerオブジェクトストレージと連携サービスPBOXについて
by
Shuichi Yukimoto
PDF
Pbox on softlayer
by
Shuichi Yukimoto
PDF
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
by
Shuichi Yukimoto
PDF
Object storageを使ってみる
by
Shuichi Yukimoto
PDF
Mnu特許説明スライド
by
Shuichi Yukimoto
PPTX
第2回ビジネスモバイル研究会
by
Shuichi Yukimoto
Ocif2016_go_web_freamwork
by
Shuichi Yukimoto
Slackbot_by_OpenWhisk
by
Shuichi Yukimoto
Softlayer_API_openWhisk
by
Shuichi Yukimoto
Send grid softlayer_nagoya
by
Shuichi Yukimoto
Softlayer_bluemix-summit
by
Shuichi Yukimoto
Softlayer_summit
by
Shuichi Yukimoto
SendGridを使ってみよう
by
Shuichi Yukimoto
Mnu_pbox
by
Shuichi Yukimoto
Emacs softLayer
by
Shuichi Yukimoto
Soft layer APIの使い方と実装のポイント
by
Shuichi Yukimoto
Softlayer勉強会#2
by
Shuichi Yukimoto
勉強会資料#1
by
Shuichi Yukimoto
SoftLayerオブジェクトストレージと連携サービスPBOXについて
by
Shuichi Yukimoto
Pbox on softlayer
by
Shuichi Yukimoto
第2回名古屋SoftLayer勉強会 PBOX on SoftLayer
by
Shuichi Yukimoto
Object storageを使ってみる
by
Shuichi Yukimoto
Mnu特許説明スライド
by
Shuichi Yukimoto
第2回ビジネスモバイル研究会
by
Shuichi Yukimoto
nginx + lua + ObjectStorage ファイルアップロード/ダウンロードの高速化
1.
nginx + lua
+ ObjectStorage ファイルアップロード/ダウンロードの高速化 2014.12.11 Code the Clouds Mix-up Vol.2 株式会社MNU 雪本修一
2.
雪本 修一 Shuichi
Yukimoto 株式会社MNU 代表取締役社長 電気通信大学の認定ベンチャーとして起業。 現在も現役プログラマとしてコードを書いている。 好きな言語はJavaScript,Scheme,Lisp,Python SoftLayerを使い始めて一年ぐらい 弊社はSoftLyerのリフェラルパートナーです。 twitter:@nsas454 facebook:shuichi.yukimoto
3.
今日のお話 • PBOXで実装した技術についてのご紹介
• nginxの拡張モジュールを使ったアップロード とダウンロードの高速化を実現した仕組み • nginxの拡張モジュールの実装方法について
4.
nginx • ロシアのIgor
Sysoev氏によって、1日に5億リ クエストを処理するWebサイトのHTTPサーバー として開発された • 注目されるようになったのは、C10K問題(クラ イアント1万台問題、注2)が叫ばれるようになっ た2000年代後半です
5.
Lua • 動的型付言語
• 高速に動作する • ゲームなどで広く利用されている言語 • インクリメンタルGCで有名 • nginxもluaで実装されているそうです。 • wikipediaより
8.
ファイル フロントエンドバックエンドストレージ nginx
gunicorn object Storage 認証/リクエスト PUT • pboxはnginx + gunicornで構成されているが、 ファイルのアップロード、ダウンロード処理を gunicornでやるのは高コスト • アップロード/ダウンロードには複雑な処理は必要 無いにもかかわらず、gunicornのセッションを専 有するのは良くない!
9.
ファイル フロントエンドバックエンドストレージ nginx
object PUT gunicorn Storage redis tornade LUA PUTリクエスト 認証/ストレージ情報 • nginx拡張でなるべく多くの同時リクエストを 捌きつつ、静的ファイルの送受信を行う
10.
何故nginx拡張を使うのか? • pboxはnginx
+ gunicornで構成されているが、ファ イルのアップロード、ダウンロード処理をgunicorn でやるのは高コスト • アップロード/ダウンロードには複雑な処理は必要 無いにもかかわらず、gunicornのセッションを専有 するのは良くない方法 • nginx拡張でなるべく多くの同時リクエストを捌き つつ、静的ファイルの送受信を行う
11.
nginx + HttpLuaModule
12.
インストール • luajitのインストール
• nginx + HttpLuaModuleのビルド&インストール • 詳細は • http://wiki.nginx.org/HttpLuaModule
13.
nginx.conf • luaモジュールをインストールしたら、専用のディレクティブが使える
• 例えば、content_by_lua_file でcontentフェーズにluaを呼び出すこ とができる。 • 参考: http://wiki.nginx.org/HttpLuaModule#Directives • nginxのフェーズについては http://wiki.nginx.org/Phases を参照 • レスポンス全体をluaで作る場合はcontentフェーズを使う。認証だけ luaを使う場合はaccess_by_lua_file ディレクティブを使用するなど の使い分けを行う。pboxでどうしているかは後述
14.
nginxのフェーズ • nginx
の Phase のうち、Rewrite, Access, Content, Log のフェーズに 対してフックする仕組みを提供
15.
lua-nginx-module が提供 する主なフックの仕組み
• Rewrite Phase • set_by_lua:変数の設定、ヘッダの操作、リダイレクト等が可能 • rewrite_by_lua:Rewrite Phase の最後で実施され、自由度の高い rewrite処理を実現可能 • Access Phase • access_by_lua:自由度の高い認可処理を実現可能 • Content Phase • content_by_lua:コンテンツの生成 • header_filter_by_lua:コンテンツ生成後、header に対するフィルタ処理(書き換えや追加など)に対応 • body_filter_by_lua:コンテンツ生成後、body に対するフィルタ処理 • Log Phase • log_by_lua:ログ処理のタイミングで動作。ここでリクエストの情報を変数にためておくことで、nginx + lua だけで集計の仕組みを作ることも可能
16.
luaで何ができるのか? • 特に重要なのは以下の2つ
• サブリクエスト • tcp/udpソケット通信 • 詳しくは下記で説明
17.
サブリクエスト • ざっくり言えば、他のlocationを呼ぶ機能
• ngx.location.captureを使用する • 一度のリクエストで何回もサブリクエストを 呼ぶことができたりする
18.
tcp/udpソケット通信 • ngx.socket.tcp
/ ngx.socket.udp でソケット通信ができ る。luaの組込ソケットと互換のインターフェイスを持って いるが、内部動作が違うのでかならずこちらを使うこと。 • このソケットはnon-blockで動作し、待ち時間で別のリ クエストを処理してくれる • pboxではこのソケットの上にHTTPプロトコルを実装した lua-resty-httpを使用してObjectStorageとの通信を行っ ている。
19.
アップロード/ダウンロードの概要 • pboxのファイルアップロード/ダウンロードは以下の動作が必要
• 認証:リクエストヘッダで送られてくる認証トークンが正しいかSQL に保存された情報との比較を行う。また、ここでObjectStorageへの url、認証情報を取得する • ObjectStorageへのアップロード/ダウンロード:1で得られた情 報を元に実際にファイルをアップロード/ダウンロードする • (アップロードの場合のみ)SQLへアップロードしたファイルのメ タ情報を保存する:ObjectStorageで管理できない追加情報をpbox 持たせるため、ファイル・ディレクトリの情報はSQL側で持っている
20.
HttpLuaModule • pboxはcontentフェーズでluaを使用し、
• 1. 認証を内部サブリクエスト • 2. オブジェクトストレージへのアクセスにソ ケット • 上記を使用しているが、次のようにする方法も あった(RestfulなAPIのために断念した)。
21.
余談 • ダウンロード:
accessフェーズのみluaで行い、 contentはObjectStorageへプロキシすることも できる(proxy_passディレクティブを使う)。 • アップロード: ObjectStorageへのアップロード 前と後にluaの処理が入る。(またレスポンスは ObjectStorageのものを直接使わず、メタ情報 をjson返したい。)そのため、contentフェーズ をluaで書く。
22.
まとめ • nginxのフェーズの概念は超重要。1つは省力化のため。
アップロードはproxy_passを使うことでluaの記述を 減らすこともできる(pboxではやらないが)。 • もう1つは出来ることが違う。たとえば、accessフェー ズでレスポンスの中身を書き換えることはできない。 logフェーズや、post_actionではluaからサブリクエ ストが使えないなど、フェーズを意識する必要がある。
23.
さいごに • とりあえず、重要な事は2つだけ
• サブリクエスト(ngx.location.capture)はマジ便利 • 100% non-blockingなHTTP通信でObjectStorage へアクセスしてます
24.
Appendix
25.
location /internals {
internal; proxy_pass http://backend; } location ~ /([^/]+)/files/(.*)$ { content_by_lua_file content_file.lua; } nginx.conf
26.
local http =
require "resty.http" local cjson = require "cjson" local user = ngx.var[1] -- location の $1 相当 local path = ngx.var[2] -- location の $2 相当 --- 認証 local res = ngx.location.capture('/internals/auth', { args = { token = token, user=user, path=path }, }) if res.status ~= 200 then ngx.exit(res.status) end --- ObjectStorageへのURL,Tokenを認証時に返してもらう local body = cjson.decode(res.body) local host = body.host local path = body.path local token = body.token --- 通信確立 local httpc = http.new() httpc:connect(host, 80) --- ObjectStorageへGETリクエスト発行 local res, err = httpc:request{ path = path, method = 'GET', headers = {['X-Auth-Token'] = token} } --- レスポンスボディをそのままnginxのレスポンスとして返す local reader = res.body_reader repeat local chunk, err = reader(chunk_size) ngx.say(chunk) until not chunk content_file.lua
Download