Kodėl vienišas turi būti dislokuotas su Nginx?

Norėčiau sužinoti skirtumą tarp Nginx ir Unicorn. Kiek aš suprantu, „Nginx“ yra žiniatinklio serveris, o „Unicorn“ yra „Ruby HTTP“ serveris.

Kadangi „Nginx“ ir „Unicorn“ gali tvarkyti HTTP užklausas, koks yra poreikis naudoti „Nginx“ ir „Unicorn“ programų derinį „RoR“?

121
05 янв. loganathan yra nustatytas sausio 05 2012-01-05 12:00 '12 12:00 val. 2012-01-05 12:00
@ 4 atsakymai

Nginx
2019

62
05 янв. atsakymas duotas Pratik 05 jan. 2012-01-05 12:07 '12 12:07 2012-01-05 12:07

„Nginx“ yra švarus žiniatinklio serveris, skirtas aptarnauti statinį turinį ir (arba) peradresuoti užklausą į kitą lizdą prašymo apdorojimui.

Unicorn yra žiniatinklio serverio stovas, skirtas tik „Rack“ programai, kuri paprastai sukuria dinamišką turinį. Rack programos taip pat gali tarnauti statiniam turiniui, bet yra mažiau efektyvios nei daugelis kitų tradicinių žiniatinklio serverių.

Dauguma „RoR“ nustatymų naudoja tiek tradicinių žiniatinklio serverių, tiek „Rack“ serverių derinį, kad galėtų geriausiai panaudoti savo galimybes. Nginx neįtikėtinai greitai nukreipia užklausą balansuodama tarpinį serverį ir tarnauja statiniam turiniui. Unicornas gali apdoroti HTTP antraštes ir subalansuoti gaunamus Ruby prašymus.

80
06 янв. atsakymas pateikiamas Nick 06 jan. 2012-01-06 07:21 '12, 07:21 AM 2012-01-06 07:21

Šis atsakymas papildo kitus ir paaiškina, kodėl vienaragis turi nginx prieš jį.

Tl; DR. Priežastis Unicorn paprastai dislokuojama su atvirkštinio proxy serveriu, pvz., „Nginx“, nes jos kūrėjai sąmoningai ją sukūrė ir kompromisą sudarė paprastumas.

Visų pirma, negalėsite dislokuoti vienaragio be atvirkštinio proxy. Tačiau tai nebūtų labai gera idėja; pažiūrėkite, kodėl.

Unicornas vadovaujasi „Unix“ filosofija, kuri turėtų daryti vieną dalyką ir tai padaryti gerai, ir tai tarnauja mažai latentiniams klientams (matysime, ką tai reiškia vėliau). Tas faktas, kad „Unicorn“ skirtas mažai latentiniams klientams, taip pat reiškia, kad jis nėra labai geras su lėtai dideliais latentiniais klientais, o tai yra tiesa. Tai vienas iš Unicorno trūkumų, jame atsiranda atvirkštinis proxy: jis sėdi prieš Unicorną ir rūpinasi šiais lėtais klientais (mes pamatysime, kaip vėliau).

Laimei, toks atvirkštinis proxy jau yra ir vadinamas nginx .

Sprendimas apdoroti tik greitus klientus žymiai supaprastina „Unicorn“ dizainą ir leidžia žymiai supaprastinti ir sumažinti kodo bazę dėl kai kurių papildomų diegimo departamento sudėtingumo (t.y. be „Unicorn“ taip pat turite įdiegti „nginx“).

Alternatyvus sprendimas gali būti sukurti vienaragį taip, kad jam nereikėtų atvirkštinio proxy. Tačiau tai reiškia, kad ji turės įgyvendinti papildomas funkcijas, kad padarytų viską, ką nginx daro dabar, o tai lemia sudėtingesnį kodo bazę ir daugiau inžinerinių pastangų.

Vietoj to, jos kūrėjai nusprendė naudoti esamą programinę įrangą, kuri buvo išbandyta mūšiui ir yra labai gerai suprojektuota, kad nebūtų švaistoma laiko ir energijos problemoms, kurias jau išsprendė kita programinė įranga.

Tačiau leiskite gauti techninę informaciją ir atsakyti į jūsų klausimą:

Kodėl Unicorn reikia dislokuoti su nginx?

Kai kurios pagrindinės priežastys:

„Unicorn“ klientams naudoja blokavimo I / O operacijas

Remiantis atvirkštiniu proxy, Unicorn nereikia naudoti blokavimo I / O. Vietoj to, jis gali naudoti blokavimo I / O, kuris yra savaime supaprastintas ir paprastesnis programuotojui.

Taip pat kaip DESIGN dokumentas sako:

[Naudojant I / O blokavimą] galite naudoti paprastesnį kodo kelią Ruby vertėjas ir mažiau sistemos skambučių.

Tačiau tai taip pat turi tam tikrų pasekmių:

Svarbiausias punktas 1: Vienaragis neveiksmingas lėtiems klientams

(Dėl paprastumo, mes prisiimame įrengimą su 1 Unicorn darbuotoju)

Kadangi naudojamas I / O blokavimas, vienaragis darbuotojas vienu metu gali tarnauti tik vienam klientui, todėl lėtas klientas (t.y. su lėtą ryšį) užima ilgesnį laiką dirbantį darbuotoją (nei tai darys greitas klientas). Tuo pačiu metu kiti klientai tiesiog laukia, kol darbuotojas vėl taps laisvas (t. Y. Prašymai kaupiasi eilėje).

Norėdami išspręsti šią problemą, prieš „Unicorn“ yra dislokuotas atvirkštinis tarpinis serveris, kuris visiškai buferiuoja gaunamus prašymus ir taikomųjų programų atsakymus, o po to kiekvieną iš jų nedelsdamas siunčia Unicorn ir klientams. Šiuo atžvilgiu galite pasakyti, kad atvirkštinis tarpinis serveris „saugo“ vienaragį nuo lėto tinklo klientų.

Laimei, „Nginx“ yra puikus kandidatas į šį vaidmenį, nes jis skirtas efektyviai valdyti tūkstančius šimtų klientų.

Būtina, kad atvirkštinis tarpinis serveris būtų tame pačiame vietiniame tinkle kaip Unicorn (paprastai toje pačioje fizinėje mašinoje, kuri bendrauja su W / Unicorn per Unix domeno lizdą), todėl tinklo latentinis laikas yra minimalus.

Taigi, toks įgaliotinis veiksmingai atlieka greito kliento vaidmenį, kurį Unicornas ketina aptarnauti pirmiausia, nes jis greitai kreipiasi į Unicorną ir saugo darbuotojus kuo mažiau laiko (palyginti su tuo, kiek laiko klientas padarys ryšys).

# 2 raktas: Vienaragis nepalaiko HTTP / 1.1 gyvos

Kadangi „Unicorn“ naudoja I / O užrakinimą, tai taip pat reiškia, kad ji negali palaikyti HTTP / 1.1 palaikymo funkcijos, nes nuolatiniai ryšiai iš lėto klientų greitai perima visus turimus Unicorn darbuotojus.

Todėl, norėdami naudoti HTTP išsaugojimą, atspėkite, ką: naudojamas atvirkštinis tarpinis serveris.

Kita vertus, „nginx“ gali tvarkyti tūkstančius vienalaikių jungčių, naudodama tik keletą sričių. Taigi, jis neturi lygiagretumo apribojimų, kuriuos turi Unicorn serveris (kurį žymiai riboja darbuotojų procesų skaičius), o tai reiškia, kad ji gali tvarkyti patvarius ryšius. Be to, kaip tai veikia, galima rasti čia .

Štai kodėl nginx priima palaikomus ryšius iš klientų ir prijungia juos prie Unicorno per įprastinius ryšius, paprastai Unix lizdus.

3 punktas: vienaragis nėra labai gerai naudojamas statiniams failams

Vėlgi, statiniai failai yra tai, ką vienaragis gali padaryti, tačiau jis nėra skirtas efektyviam darbui.

Kita vertus, atvirkštiniai pranašumai, tokie kaip nginx, yra daug geresni (t. Y. sendfile(2) ir spartinimas).

Skaityti daugiau

FILOSOFIJOS dokumente yra ir kitų taškų (žr. „Pagerintas veikimas naudojant atvirkštinį prijungimą“).

Taip pat žiūrėkite kai kurias pagrindines „nginx“ funkcijas .

Matome, kad naudojant esamą programinę įrangą (t. Y. „Nginx“) ir vadovaujantis „Unix“ filosofija, „vienintelis dalykas ir tai padaryti“, „Unicorn“ gali sekti paprastesnį projektavimą ir įgyvendinimą, kartu išlaikant efektyvų darbą „Rack“ programose (pvz., „Rails“ taikymas).

Norėdami gauti daugiau informacijos, susisiekite su Unicorn FILOSOPHY ir DESIGN , kurie išsamiau paaiškina Unicorn dizaino pasirinkimą ir kodėl nginx laikomas geru atvirkštine priemone Unicorn.

39
30 апр. atsakymą pateikė Agis . 2016-04-30 15:09 '16 at 15:09 2016-04-30 15:09

„Nginx“ gali būti naudojamas aptarnauti lėtus klientus vienaragio serverio serveryje, nes lėtai veikiantys klientai svaigins vienaragio serverio. „Nginx“ naudojamas kaip proxy buferinis visų užklausų ir atsakymų į lėtus klientus natūra.

Žr. Http://unicorn.bogomips.org/

13
05 янв. Atsakymas pateikiamas bardiir 05 jan. 2012-01-05 12:04 '12 12:04 2012-01-05 12:04

Kiti klausimai apie žymes arba Užduoti klausimą