SlideShare una empresa de Scribd logo
1 de 31
Descargar para leer sin conexión
webboxio
http://webbox.io
Rack Uygulamalarını
NginX ve Unicorn’la
Koşturma
Uğur “vigo” Özyılmazel
webBox.io kurucu ortağı, Yazılım Geliştirici

https://twitter.com/vigobronx
https://github.com/vigo
http://ugur.ozyilmazel.com
https://speakerdeck.com/vigo
Ruby için web sunucusu
arayüzüdür.
RESPONSE ve REQUEST için
http wrapper’dır.
Web sunucusu ve Ruby’nin
kolay iletişim kurmasını sağlar
Ara katmanlar yardımıyla
ekstra kolaylıklar sağlar
Ruby Uygulama

Web Sunucusu
{ Sinatra, Rails, Ramaze … }

Ruby Uygulama

{ Middleware }

Web Sunucusu

{ Mongrel, WEBrick, CGI, Thin … }
`call` metoduna cevap veren
Ruby nesnesi yeterlidir!
return [
status,
headers,
body
]
Basit bir Rack uygulaması

require 'rack'

!
class MyApplication
def call(env)
h = {"Content-Type" => "text/html; charset=utf-8"}
[200, h, ["Merhaba Dünya"]]
end
end

!
run MyApplication.new
Rack Handlers *

Web Sunucusu

{

Mongrel
EventedMongrel
SwiftipliedMongrel
WEBrick
FCGI
CGI
SCGI
LiteSpeed
Thin

Ebb
Fuzed
Glassfish v3
Phusion Passenger
Puma
Rainbows!
Reel
Unicorn
unixrack
uWSGI
Zbatery
Middleware

{

JSON-P
Rack::Protection
Rack::Cache
Rack::Config
Rack::Debug
Rack::RespondTo
Rack::GoogleAnalytics
Rack::Throttle
Rack::LinkedData
Rack::Attack
…
Camping
Coset
Espresso

Ruby Uygulama

+

Halcyon
Mack
Maveric
Merb
Racktools::SimpleApplication
Ramaze
Ruby on Rails
Rum
Sinatra
Sin
Vintage
Waves
Wee
…
HTTP ve Reverse Proxy
sunucusu (Web sunucusu)
Caching ve Load-Balancing
özellikleri bulunuyor
Düşük hafıza kullanımı ve
performanslı olması tercih
sebebi!
Event Driven Architecture

Ana İşlem (Main Process)

İşçi (Worker)

İşçi (Worker)

İşçi (Worker)
Nginx Kurulum

#
$
!
$
$
$
!
#
$

Ubuntu 12.04 <= add-apt-repository
sudo aptitude install python-software-properties
sudo add-apt-repository ppa:nginx/stable
sudo aptitude update
sudo aptitude install nginx
servisi başlatır!
sudo service nginx start
Unicorn
Http Server (Ruby gem’i)
NginX gibi worker’lar kullanıyor
Request’i Unix socket’ine yönlendiriyor
Kendi başına otomatik olarak
worker’ları yumurtluyor ve organize
ediyor!
Kurulum

$ gem install unicorn

Gemfile

source "https://rubygems.org"
gem 'unicorn'
application.rb

# encoding: utf-8
require 'sinatra/base'
!

class MyApplication < Sinatra::Base
get '/' do
"Merhaba Dünya!"
end
end
@dir = “/path/to/tmp/"

!

worker_processes 2
working_directory @dir

unicorn.rb

!

timeout 30
listen "#{@dir}sockets/unicorn.sock", :backlog => 64
pid_file = "#{@dir}pids/unicorn.pid"
old_pid = "#{pid_file}.oldbin"
pid pid_file
stderr_path "#{@dir}log/unicorn.stderr.log"
stdout_path "#{@dir}log/unicorn.stdout.log"
preload_app true

!

before_exec do |server|
ENV['BUNDLE_GEMFILE'] = File.expand_path('../Gemfile', File.dirname(__FILE__))
end

!

before_fork do |server, worker|
if File.exists?(old_pid) && server.pid != old_pid
begin
Process.kill("QUIT", File.read(old_pid).to_i)
rescue Errno::ENOENT, Errno::ESRCH
# pass
end
end
end
nginx.conf
upstream unicorn_mysocket {
server unix:/path/to/tmp/sockets/unicorn.sock
fail_timeout=0;
}

!

server {
server_name localhost;
listen 8080;
root /path/to/project;
client_max_body_size 4G;
keepalive_timeout 5;

!
!

}

location / {
try_files $uri @app;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn_mysocket;
}
nginx.conf
upstream unicorn_mysocket {
server unix:/path/to/tmp/sockets/unicorn.sock
fail_timeout=0;
}

!

server {
server_name localhost;
listen 8080;
root /path/to/project;
client_max_body_size 4G;
keepalive_timeout 5;

!
!

}

location / {
try_files $uri @app;
}
location @app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://unicorn_mysocket;
}
config.ru

# encoding: utf-8
require "rubygems"
require "sinatra"

!

require File.expand_path '../application.rb', __FILE__
run MyApplication

$ bundle exec unicorn -c $PWD/unicorn.rb -D $PWD/config.ru
$ ps aux | grep unicorn
1396

$ kill 1396

worker

master
VİDEO
worker işlemlerinin ölçeklenmesi, işlemci
(CPU) ve hafızayla doğru orantılıdır.
Yavaş istemcilerle (slow-client) NginX gibi
sunucular uğraşmalı unicorn değil!
Ölçeklendirmede asıl düşünülmesi
gereken back-end kısmı unicorn değil!
Kaynaklar
http://rack.github.io/
http://nginx.org/
http://unicorn.bogomips.org/
http://sinatrarb.com
http://vagrantup.com
https://github.com/vigo/owg2013-rack-unicorn-sinatra
http://webbox.io
http://blog.webbox.io
http://twitter.com/webboxio
https://github.com/webBoxio
http://facebook.com/webbox.io
hello@webbox.io

Más contenido relacionado

Similar a Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak

Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisationirfandurmus
 
Mutant Web Applications
Mutant Web ApplicationsMutant Web Applications
Mutant Web Applicationsguest096801
 
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaGirişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaFatih Sokmen
 
WordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerWordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerMustafa UYSAL
 
PHPKonf'15 PHP Uygulamalarını Docker ile Çalıştırmak
PHPKonf'15 PHP Uygulamalarını Docker ile ÇalıştırmakPHPKonf'15 PHP Uygulamalarını Docker ile Çalıştırmak
PHPKonf'15 PHP Uygulamalarını Docker ile ÇalıştırmakBerat Doğan
 
Dspace Migration and Dspace Piwik Integration
Dspace Migration and Dspace Piwik IntegrationDspace Migration and Dspace Piwik Integration
Dspace Migration and Dspace Piwik IntegrationMesut Güngör
 
Rails İle Ağ Uygulamaları Geliştirimi
Rails İle Ağ Uygulamaları GeliştirimiRails İle Ağ Uygulamaları Geliştirimi
Rails İle Ağ Uygulamaları Geliştirimimuarifer
 
Java Web Uygulama Geliştirme
Java Web Uygulama GeliştirmeJava Web Uygulama Geliştirme
Java Web Uygulama Geliştirmeahmetdemirelli
 
Sanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerSanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerOguz Yarimtepe
 
Sanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerSanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerOguz Yarimtepe
 
Javascript - from past to present
Javascript - from past to present Javascript - from past to present
Javascript - from past to present Kubilay TURAL
 
Hürriyet BBS - Tornado (Python Web Framework)
Hürriyet BBS - Tornado (Python Web Framework)Hürriyet BBS - Tornado (Python Web Framework)
Hürriyet BBS - Tornado (Python Web Framework)Selçuk Usta
 
Varnish'i Laravel ile verimli kullanmak
Varnish'i Laravel ile verimli kullanmakVarnish'i Laravel ile verimli kullanmak
Varnish'i Laravel ile verimli kullanmakMusa Avcı
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaHüseyin Mert
 
İstanbulPHP Rails Sunumu
İstanbulPHP Rails SunumuİstanbulPHP Rails Sunumu
İstanbulPHP Rails SunumuSerdar Dogruyol
 
Ozgur Web Catilari Mobil Uygulama Gelistirme
Ozgur Web Catilari Mobil Uygulama GelistirmeOzgur Web Catilari Mobil Uygulama Gelistirme
Ozgur Web Catilari Mobil Uygulama GelistirmeBurak Dede
 
Oracle Golden Gate
Oracle Golden GateOracle Golden Gate
Oracle Golden GateAnar Godjaev
 

Similar a Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak (20)

Javascript Performance Optimisation
Javascript Performance OptimisationJavascript Performance Optimisation
Javascript Performance Optimisation
 
Mutant Web Applications
Mutant Web ApplicationsMutant Web Applications
Mutant Web Applications
 
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android ProgramlamaGirişimciler ve Geliştiriciler için Android - Etkin Android Programlama
Girişimciler ve Geliştiriciler için Android - Etkin Android Programlama
 
WordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli sitelerWordPress ile buyuk olcekli siteler
WordPress ile buyuk olcekli siteler
 
PHPKonf'15 PHP Uygulamalarını Docker ile Çalıştırmak
PHPKonf'15 PHP Uygulamalarını Docker ile ÇalıştırmakPHPKonf'15 PHP Uygulamalarını Docker ile Çalıştırmak
PHPKonf'15 PHP Uygulamalarını Docker ile Çalıştırmak
 
Docker İle Web Hosting
Docker İle Web HostingDocker İle Web Hosting
Docker İle Web Hosting
 
Dspace Migration and Dspace Piwik Integration
Dspace Migration and Dspace Piwik IntegrationDspace Migration and Dspace Piwik Integration
Dspace Migration and Dspace Piwik Integration
 
Rails İle Ağ Uygulamaları Geliştirimi
Rails İle Ağ Uygulamaları GeliştirimiRails İle Ağ Uygulamaları Geliştirimi
Rails İle Ağ Uygulamaları Geliştirimi
 
Java Web Uygulama Geliştirme
Java Web Uygulama GeliştirmeJava Web Uygulama Geliştirme
Java Web Uygulama Geliştirme
 
Sanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - DockerSanallaştırmada Yeni Akım - Docker
Sanallaştırmada Yeni Akım - Docker
 
Sanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: DockerSanallastirmada yeni akim: Docker
Sanallastirmada yeni akim: Docker
 
Rails Istanbul 3 - News
Rails Istanbul 3 - NewsRails Istanbul 3 - News
Rails Istanbul 3 - News
 
Javascript - from past to present
Javascript - from past to present Javascript - from past to present
Javascript - from past to present
 
Hürriyet BBS - Tornado (Python Web Framework)
Hürriyet BBS - Tornado (Python Web Framework)Hürriyet BBS - Tornado (Python Web Framework)
Hürriyet BBS - Tornado (Python Web Framework)
 
Varnish'i Laravel ile verimli kullanmak
Varnish'i Laravel ile verimli kullanmakVarnish'i Laravel ile verimli kullanmak
Varnish'i Laravel ile verimli kullanmak
 
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari OluşturmaSymfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
Symfony2 ve Doctrine ile PostgreSQL'i Kullanarak Performanslı Mimari Oluşturma
 
İstanbulPHP Rails Sunumu
İstanbulPHP Rails SunumuİstanbulPHP Rails Sunumu
İstanbulPHP Rails Sunumu
 
Ozgur Web Catilari Mobil Uygulama Gelistirme
Ozgur Web Catilari Mobil Uygulama GelistirmeOzgur Web Catilari Mobil Uygulama Gelistirme
Ozgur Web Catilari Mobil Uygulama Gelistirme
 
Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi
Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesiAndroid Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi
Android Uygulamaların Tersine Mühendislik Yöntemi ile İncelenmesi
 
Oracle Golden Gate
Oracle Golden GateOracle Golden Gate
Oracle Golden Gate
 

Nginx ve Unicorn'la Rack Uygulamalarını Koşturmak