SlideShare une entreprise Scribd logo
1  sur  27
Télécharger pour lire hors ligne
Nginx Unitを試してみた話
Nginx Unitってなに?
・NGINX社製 軽量アプリケーションサーバ。
・RESTful APIやJSON経由でサービス無停止でリアルタイムに設定変更が出来
る。
・1つのサーバに複数の言語の実行系や同一言語の複数バージョンの実行系を搭
載出来る。
・4月に正式版リリース
・最新バージョンは1.1
Nginx Unitってなに?
Nginx Unitってなに?
Nginx Unitってなに?
Nginx Unitってなに?
今後の予定
・SSL/TLSとHTTP/2のサポート
・Node.jsのサポート
・Javaサポート
CentOS: yum install unit
インストール
※その他詳細はWebで!
Ubuntu: apt-get install unit
Source Code: ./configure
make
make install
起動方法
ubuntu / centos : systemctl start unitd
source : unitd --log /var/log/unitd.log --pid /run/unitd.pid
設定方法
curl -X PUT -d @php_config.json --unix-socket control.unit.sock http://localhost/
{
"listeners": {
"*:80": {
"application": "hello_php"
}
},
"applications": {
"hello_php": {
"type": "php",
"processes": 10,
"root": "/var/www/php/",
"index": "index.php"
}
}
}
設定方法
※その他詳細はWebで!
設定確認:curl --unix-socket control.unit.sock http://localhost/
設定削除:
curl -X DELETE --unix-socket control.unit.sock 'http://localhost/config/listeners/*:80'
curl -X DELETE --unix-socket control.unit.sock 'http://localhost/config/applications/hello_php'
デモやります
ベンチマークとってみた
ベンチマーク
従来の方式(Nginx+php-fpm、Nginx+wsgi等)とNginx Unit
でどれくらい性能差があるか確認してみた。
ベンチマーク
・実行環境
macbook + vagrant + virtualboxで立てたUbuntu16.04
CPU2コア、メモリ1GB
・同じmac上で立てたCentOS7からApacheBenchを実行
ab -n <総リクエスト数> -c <同時リクエスト数><URL>
実行したコマンド:ab -n 100000 -c 100 http://xxxxxx
見る値:Requests per second(1秒で処理できるリクエスト数)(数値が高い方が好ましい)
Time per request(1リクエストの平均処理時間)(数値が低い方が好ましい)
NginxとNgnix Unitのプロセス数
Nginx : worker_processes 2;
Nginx Unit : "processes": 2
ベンチマークとる組み合わせ
・従来方式(Nginx+php-fpmなど)
・Nginx + Nignx Unit (Nginxをフロントでプロキシ)
・Nginx Unit単体
PHP
従来方式:Nginx + php-fpm
PHPコード
<?php
echo 'PHP Hello,World!';
?>
PHP ベンチ結果
Nginx + php-fpm Nginx + Nginx Unit Nginx Unit
Requests per second 4889.25 [#/sec] 3700.67 [#/sec] 5051.71 [#/sec]
Time per request 0.205 [ms] 0.270 [ms] 0.198 [ms]
Python
従来方式:Nginx + uWSGI
Pythonコード
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Python Hello World"]
Python ベンチ結果
Nginx + uWSGI Nginx + Nginx Unit Nginx Unit
Requests per second 4435.80 [#/sec] 4109.40 [#/sec] 5293.54 [#/sec]
Time per request 0.225 [ms] 0.243 [ms] 0.189 [ms]
Ruby
従来方式:Nginx + unicorn + rails
Rubyコード
require 'rubygems'
require 'sinatra/base'
class HelloApp < Sinatra::Base
get '/hello' do
'Ruby Hello World!'
end
end
run HelloApp
Ruby ベンチ結果
Nginx + unicorn+rails Nginx + Nginx Unit Nginx Unit
Requests per second 2497.55 [#/sec] 2538.71 [#/sec] 3604.32 [#/sec]
Time per request 0.400 [ms] 0.394 [ms] 0.277 [ms]
Go
従来
package main
import (
"fmt"
"net"
"net/http"
"net/http/fcgi"
)
func handler(w http.ResponseWriter, r
*http.Request) {
fmt.Fprintf(w, "Go Hello, World!")
}
func main() {
l, err := net.Listen("tcp", "127.0.0.1:9000")
if err != nil {
return
}
http.HandleFunc("/go", handler)
fcgi.Serve(l, nil)
}
package main
import (
"fmt"
"net/http"
"nginx/unit"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r
*http.Request) {
fmt.Fprintf(w, "Go Hello World")
})
unit.ListenAndServe(":9000", nil)
}
Nginx Unit
Go ベンチ結果
Nginx + go Nginx + Nginx Unit Nginx Unit
Requests per second 2565.68 [#/sec] 3133.33 [#/sec] 5255.99 [#/sec]
Time per request 0.390 [ms] 0.319 [ms] 0.190 [ms]
Requests per second
Time per request
まとめ
・環境構築が簡単。
・複数言語、複数バージョンをテストする環境
を作りたいときにはいいかも。
・性能はそこそこいいみたいだけど、安定性が
気になるところ。

Contenu connexe

Tendances

WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すTakaya Saeki
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みHiroshi Tokumaru
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Preferred Networks
 
Githubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようGithubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようShingo Omura
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Akihiro Suda
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれKumazaki Hiroki
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
Datadog による Container の監視について
Datadog による Container の監視についてDatadog による Container の監視について
Datadog による Container の監視についてMasaya Aoyama
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsYoshifumi Kawai
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使うKazuhiro Suga
 
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行gree_tech
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugItsuki Kuroda
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理torisoup
 
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較Yoshitaka Kawashima
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説貴仁 大和屋
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようShuto Suzuki
 

Tendances (20)

WebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話すWebAssemblyのWeb以外のことぜんぶ話す
WebAssemblyのWeb以外のことぜんぶ話す
 
nginx入門
nginx入門nginx入門
nginx入門
 
セキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試みセキュアコーディング方法論再構築の試み
セキュアコーディング方法論再構築の試み
 
Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦Kubernetesによる機械学習基盤への挑戦
Kubernetesによる機械学習基盤への挑戦
 
Githubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみようGithubを使って簡単に helm repoを公開してみよう
Githubを使って簡単に helm repoを公開してみよう
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
Datadog による Container の監視について
Datadog による Container の監視についてDatadog による Container の監視について
Datadog による Container の監視について
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
入門!Jenkins
入門!Jenkins入門!Jenkins
入門!Jenkins
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
DockerコンテナでGitを使う
DockerコンテナでGitを使うDockerコンテナでGitを使う
DockerコンテナでGitを使う
 
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
コードの自動修正によって実現する、機能開発を止めないフレームワーク移行
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
フロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjugフロー効率性とリソース効率性について #xpjug
フロー効率性とリソース効率性について #xpjug
 
Observableで非同期処理
Observableで非同期処理Observableで非同期処理
Observableで非同期処理
 
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
 
Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説Prometheus入門から運用まで徹底解説
Prometheus入門から運用まで徹底解説
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 

Similaire à Nginx Unitを試してみた話

ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefnpsg
 
Openshift NGINX Kubernetes (Japanese Webinar)
Openshift NGINX Kubernetes (Japanese Webinar)Openshift NGINX Kubernetes (Japanese Webinar)
Openshift NGINX Kubernetes (Japanese Webinar)NGINX, Inc.
 
大規模環境のOpenStack アップグレードの考え方と実施のコツ
大規模環境のOpenStackアップグレードの考え方と実施のコツ大規模環境のOpenStackアップグレードの考え方と実施のコツ
大規模環境のOpenStack アップグレードの考え方と実施のコツTomoya Hashimoto
 
Ubuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStackUbuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStackVirtualTech Japan Inc.
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介Etsuji Nakai
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch UsecasesSakiko Kawai
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825hiro345
 
NGINX製品の最新機能アップデート情報
NGINX製品の最新機能アップデート情報NGINX製品の最新機能アップデート情報
NGINX製品の最新機能アップデート情報NGINX, Inc.
 
2016 1102 EnOcean Alliance Japan Event
2016 1102 EnOcean Alliance Japan Event2016 1102 EnOcean Alliance Japan Event
2016 1102 EnOcean Alliance Japan EventAtomu Hidaka
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングRansui Iso
 
クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介
クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介
クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介Fuminobu Takeyama
 
Webサーバ勉強会#4
Webサーバ勉強会#4Webサーバ勉強会#4
Webサーバ勉強会#4oranie Narut
 

Similaire à Nginx Unitを試してみた話 (20)

ネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chefネットワークエンジニアのための Puppet / Chef
ネットワークエンジニアのための Puppet / Chef
 
Case study puppet
Case study puppetCase study puppet
Case study puppet
 
Openshift NGINX Kubernetes (Japanese Webinar)
Openshift NGINX Kubernetes (Japanese Webinar)Openshift NGINX Kubernetes (Japanese Webinar)
Openshift NGINX Kubernetes (Japanese Webinar)
 
大規模環境のOpenStack アップグレードの考え方と実施のコツ
大規模環境のOpenStackアップグレードの考え方と実施のコツ大規模環境のOpenStackアップグレードの考え方と実施のコツ
大規模環境のOpenStack アップグレードの考え方と実施のコツ
 
OpenStack Icehouse構築手順書
OpenStack Icehouse構築手順書OpenStack Icehouse構築手順書
OpenStack Icehouse構築手順書
 
Ubuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStackUbuntu OpenStack Installer を使った1Node OpenStack
Ubuntu OpenStack Installer を使った1Node OpenStack
 
OpenStack構築手順書 Juno版
OpenStack構築手順書 Juno版OpenStack構築手順書 Juno版
OpenStack構築手順書 Juno版
 
Xen Nic
Xen NicXen Nic
Xen Nic
 
環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介環境構築自動化ツールのご紹介
環境構築自動化ツールのご紹介
 
Lagopus Switch Usecases
Lagopus Switch UsecasesLagopus Switch Usecases
Lagopus Switch Usecases
 
Nseg20120825
Nseg20120825Nseg20120825
Nseg20120825
 
Disaggregated Junos Software Infrastructure
Disaggregated Junos Software InfrastructureDisaggregated Junos Software Infrastructure
Disaggregated Junos Software Infrastructure
 
NGINX製品の最新機能アップデート情報
NGINX製品の最新機能アップデート情報NGINX製品の最新機能アップデート情報
NGINX製品の最新機能アップデート情報
 
2016 1102 EnOcean Alliance Japan Event
2016 1102 EnOcean Alliance Japan Event2016 1102 EnOcean Alliance Japan Event
2016 1102 EnOcean Alliance Japan Event
 
20230128.pptx
20230128.pptx20230128.pptx
20230128.pptx
 
PyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミングPyQtではじめるGUIプログラミング
PyQtではじめるGUIプログラミング
 
lilo.linux.or.jp の話
lilo.linux.or.jp の話lilo.linux.or.jp の話
lilo.linux.or.jp の話
 
クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介
クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介
クラウドインフラのゲスト OS は openSUSE で—今までの&新しい openSUSE 活用法の紹介
 
Webサーバ勉強会#4
Webサーバ勉強会#4Webサーバ勉強会#4
Webサーバ勉強会#4
 
20030712
2003071220030712
20030712
 

Nginx Unitを試してみた話