Goliath - неблокуючий(асинхронний) сервер аплікацій написаний мовою Ruby 1.9 з використанням EventMachine.
Кожен HTTP запит Goliath виконує у власному Ruby потоці і базується на технології зворотніх викликів. Це означає, що кожен з процесів може бути легко призупинений і потім відновлений не блокуючи виконання паралельних йому задач.
В чому відмінність Goliath від будь-якого іншого сервера аплікацій, наприклад Thin?
В принципі, обидва використовують EventMachine, але на цьому відмінності закінчуються. Goliath доступний на різних Ruby платформах(MRI, JRuby, Rubinius), використовує іншу бібліотеку для розбору HTTP запитів, підтримує живі (keepalive) та конвеєрні(pipelining) з'єднаяння, та пропонує повністю асинхронне API до вхіднних та вихідних запитів.
В чому полягає відмінність Goliath від Mongrel, Passenger та Unicorn?
Mongrel - потоковий web-сервер, Passenger та Unicorn відгалуджують(fork) окрему віртуальну машину(VM) для кожного запиту. Для порівняння, Goliath запускає єдиний екземпляр Rack аплікації і виконує всі паралельні запити в рамках однієї віртуальної машини, що вимагає значно меншого використання памяті і менших обчислювальних витрат.
Які рекомендації, щодо практиного використання Goliath?
Рекомендовано використовувати Goliath поза HAProxy, Nginx або аналогами. Маючи один процес Goliath ви матимете можливість збалансованої взаємодії кількох єкземплярів вашої аплікації.
Приклад використання
# -*- encoding : utf-8 -*-
require 'goliath'
class Hello < Goliath::API
# перечитувати код після кожного запиту в режимі розробки
use ::Rack::Reloader, 0 if Goliath.dev?
def response(env)
[200, {}, "Світ, привіт!"]
end
end
ruby hello.rb -sv
[97570:INFO] 2011-02-15 00:33:51 :: Starting server on 0.0.0.0:9000 in development mode. Watch out for stones.
Додаткові матеріали
Ну Elixir не є першотравневим жартом :) А от Motion розважав цілий день, ослбливо тупуватим обличчям демонстратора )))