Nos iterum transcriptum relationis colloquii publici iuris faceremus 2016, quod in Skolkovo prope Moscuam die 7 mensis Novembris anno 8-XNUMX proximo gestum est. explicans quomodo NGINX functionality cum OpenResty et Lua extendatur.
Salve omnes, nomen meum Vladimir Protasov, Parallelis laboro. De me pauca dicam. scripturae meae partes tres in codice vitae consumo. Factus sum programmator ad nucleum in sensu litterali: interdum in somnis video codicem. Quarta vitae progressio est industrialis, codicem scripto qui recta ad productionem accedit. Codicem quem quidam uteris sed eum non cognoscunt.
Sic intellige quam malum sit. Cum paulo junior essem, veni et has duas databases terabytas datas. Summum onus est hic pro omnibus nunc. Ad colloquia accessi et quaesivi: “Guys, dic mihi, tibi magna data est, omnia refrigerant? Quot bases habes ibi? Responderunt mihi: “C gigabyten habemus”. Dixi: "Frigus, 100 gigabytes!" Et cogitabam apud me quomodo observarem vultum meum immisso. Putas, ita, guys sunt refrigerant, et tunc revertimini et tynkker cum his multi-terabyte databases. Idque juniorem esse. Putasne quis ictus sit?
Scio plus quam XX linguas programmandi. Hoc habui ut instar sicco quod laboravi. Codicem tibi dant in Erlang, C, C++, Lua, Python, Ruby, aliud, et omnia secanda habes. In communi, i, ad. Numerum accuratum computare non potuit, alicubi autem numerus circiter XX amissus est.
Cum omnes praesentes sciunt quid sit Parallelis et quid agimus, non loqui quomodo nos refrigimus et quid agimus. Modo dicam tibi nos habere XIII officia circum orbem terrarum, plus quam trecentos operarios, progressionem Moscuae, Tallinnae et Melitae. Si vis, potes eam capere et Melitam si frigus est in hieme et debes tuum dorsum calefacere.
Speciatim, in Pythone 2. Dicasterii noster scribit XNUMX. In negotiis sumus et tempus non habemus ad artes fabricandas celeberrimas, sic patimur. Django utimur, quia omnia habet, et quod superfluum erat cepimus et abiecimus. Item MySQL, Redis et NGINX. Multa etiam alia frigida sunt. MongoDB habemus, lepores habemus discurrentes, omnia habemus - sed mea non est, et id non facio.
OpenResty
de me dixi. Let's figure out what I'm going to talk about today:
- Quid est OpenResty et quid est comedi cum?
- Cur aliam rotam reinvent cum Python, NodeJS, PHP, Ite et aliae res frigidae quae omnibus gaudent?
- Et pauca e vita. Multum habui fama secare quod me 3,5 horas tulit, pauca exempla erunt.
OpenResty NGINX est. Gratias ei habemus plenam armaturam telam incertam quae bene scripta est et celeriter operatur. NGINX in productione uti maxime puto. Nostis omnes ieiunium et frigus. Synchroni I/O in eo refrigeraverunt, ideo nihil opus cycli, sicut in Pythone fecerunt. Gevent frigus est, magnum, sed si scribis C codicem et aliquid siet, tum cum Gevent insanis debugging eam. Expertus sum: duos dies integros cepit ut instare quod ibi erravit. Si quis per aliquot septimanas circum non foderat, quaestionem invenisset, scripsit in interreti, et Google eam non invenerat, tunc plane deliraremus.
NGINX iam facta caching et static contenta est. Curare non debes quomodo hoc humaniter facias, ut alicubi non tardes, ne alicubi descriptores perdas. Nginx commodissimum est ad explicandam, cogitare non debes quid accipias - WSGI, PHP-FPM, Gunicorn, Unicornis. Nginx inauguratus est, admins datus, cum eo laborare norunt. Nginx processuum petitiones modo exstructa. De hoc paulo post dicam. In summa, tempus habet quando iustam petitionem accepit, quando processit, et cum contentus utenti ministravit.
Nginx frigus est, sed una quaestio est: satis flexibilis non est, etiam omnibus notis frigidis quae guys in config inculcata sunt, quamvis id quod configurari potest. Haec virtus non sufficit. Quam ob rem guys ex Taobao iam pridem, ut videtur, octo annos abhinc Luam in eam aedificaverunt. Quid dat?
- magnitudine. parva res est. LuaJIT circiter 100-200 chiliocteta memoriae supra caput et minimam supra caput facit.
- celeritas. Interpres LuaJIT in multis adiunctis prope C est, in quibusdam adiunctis amittit Javam, in aliis peragit. Aliquamdiu status artis existimatus est, frigidior JIT compilator. Nunc sunt frigidiores, sed valde graves, exempli gratia idem V8. Aliqui interpretes JS et Java HotSpot in aliquibus punctis velociores sunt, in aliquibus tamen locis amittunt.
- Securus discere. Si basim, inquam, codicem Perl, et Cras non es, programmatores Perl non invenies. Quia non sunt, omnia adempta sunt, eaque longa ac difficilis doctrina est. Si quid aliud programmatores voles, eos etiam retractare vel invenire potes. In Luae omnia simplicia. Quilibet junior Luam in tribus diebus discere potest. Duabus horis me cepit ut instare eum. Post duas horas iam in productione codicem scribebam. Post dies circiter octo continuo profectus est ad productionem et discessit.
Quam ob rem sic videtur:

Nulla sit amet elit est. OpenResty fasciculum modulorum tam luash quam machinam collegit. Et omnia parata habes - inexplicabilis et laborans.
exempla
Satis de lyrics, in codicem transeamus. Hic est paulo salve mundo:

Quid ibi? Hic est locus Engines. Nos non solliciti sumus, nostram fusionem non scribimus, non unam aliquam paratam accipimus - in NGINX iam habemus, vitam bonam et desidiosam vivimus.
content_by_lua_block truncus est qui dicit nos contentos esse scripto Luae utentes. Nos accipere machinas variabilis remote_addr et ponet eam in string.format. Hoc idem est quod sprintfmodo in Lua, modo recte. et clienti damus.
Quam ob rem hoc tibi videndum est;

Sed ad rerum naturam revertamur. Nemo explicatur ad productionem Salve Mundi. Applicatio nostra plerumque ad datorum datorum vel alibi accedit ac frequentius responsionem expectat.

Sedet justo et exspectet. Etiam non ipsum. Cum 100.000 users veniant, difficillimum nobis est. Simplex igitur applicatione utamur exemplo. Picturas exspectabimus, exempli gratia, felium. Sed non solum quaesita, keywords dilatabimus et, si user quaesivit "catulas", feles, furfures feles reperiemus, et sic porro. Primum, opus est ut in backend petitionem data. Hoc sic videtur:

Duae lineae tibi permittunt parametri excipere GET, nulla inpedimenta. Deinde dicamus, ex database cum signo pro keyword et extensione, hanc informationem obtinemus utens interrogatione regulari SQL. Simplex est. Hoc sic videtur:

Connectens bibliothecam resty.mysqlquam iam habemus in ornamento. Non opus est ut omnia inaugurare, omnia parata sunt. Indicamus quomodo coniungere et SQL interrogationem facere:

Hic parum FORMIDULOSUS est, sed opera omnia. Hic 10 modus est. 10 entries evellemus, ignavi sumus, plura ostendere nolumus. Oblitus sum modum in SQL.
Deinde imagines pro omnibus quaestionibus invenimus. Fasciculum petitionum colligimus et mensam Luam vocatam implemus reqset faciemus ngx.location.capture_multi.

Praemittuntur omnes petitiones parallelae, et responsa nobis reddita sunt. Tempus operativum aequale est responsioni tempore tardissimo. Si omnes sagittarii in secundo millium secundorum numero sumus, et centum petitiones misimus, responsum in 50 milliseconds accipiemus.
Cum pigri sumus nec scribere HTTP ac cachinnare velis, feremus NGINX omnia nobis. Sicut vidisti, petitio facta est url/fetchhic est:

Nos eam simplicem proxy_passindicamus ubi cache, facere et omnia nobis operantur.
Sed hoc parum est, adhuc notitias usori dare oportet. Idea simplicissima est omnia in JSON videre, facile in duas lineas. damus Content-Type, damus JSON.
Sed alia est difficultas: user non vult legere JSON. Vivamus at lacus eget ante tincidunt tincidunt. Interdum non primo hoc facere volumus. Et SEO artifices dicent quod si picturas quaerimus, illis non refert. Et si eis aliqua argumenta demus, tormenta quaesita nostra nihil indicent.
Quid faciendum est? Utique dabimus usorem HTML. Non comme il faut generare per manus, sic uti volumus template. Est bibliothecam hanc lua-resty-template.

Tres litteras FORMIDULOSUS fortasse vidisti OPM. OpenResty venit cum sua sarcina procurator, per quem fasciculum diversorum modulorum imprimis instituere potes. lua-resty-template. This is a simple template engine, similar to Django templates. Ibi codicem scribere potes et substitutionem variabilem praestare.
Quam ob rem omnia sic intuebuntur;

Datam cepimus et fecimus Formulam, iterum in duas lineas. Felis usor est, ille feles accepit. Petentibus dilatavimus, etiam pilum in catulis recipimus. Nescis, fortasse hoc ipsum quaereret, sed petitionem suam recte enuntiare non potuit.
Omnia refrigerant, sed in evolutione sumus nec adhuc usoribus ostendere volumus. Auctoritate faciamus. Facere hoc inspiciamus quomodo NGINX petitionem in OpenResty verbis tractat:
- Primum tempus - aditumCum usor advenit, eum per capita, per IP oratio, aliaque notitia inspeximus. Statim abscindere possumus, si id non placet. Hoc pro concessione adhiberi potest, vel si petitiones multas accipimus, eas hac aetate facile resecare possumus.
- RESCRIBO. Aliquam petitionem data RESCRIBO.
- content. Contentum usori trademus.
- capitis filter. Nos responsionem capitis restituimus. Si usus
proxy_pass, antequam aliquid capitis usori dare possimus , rescribere . - corpus filter. Mutare corpus possumus.
- stipes — logging. Tigna in elastica investigatione sine additamento tabulas scribere potes.
Auctoritas nostra aliquid simile hoc spectabit:

Addemus hoc illi locationquem supra ximus, codicem sequentem ibi ponemus;

Spectamus videre an signum crustulum habeamus. sin minus, licentiam petimus. Users callidi sunt et coniecturam facere possunt quod signum crustulum egere debent. Unde etiam in Redis ponemus;

Codex operandi cum Redis valde simplex est nec ab aliis linguis diversus est. Simul, omnia input/output, passim, non obstat. Si codicem synchronum scribis, asynchrone laborat. Fere similis gevent, sed bene.

Auctoritate ipsa faciamus:

Dicimus quod corpus petitionis opus est legere. Post argumenta accipimus et es tesserae rationis et tesserae rectae sunt. Si falsa sunt, pro licentia te provocamus. Et si bene, scribe signum in Redis;

Noli oblivisci crustulum apponere, quod etiam duobus lineis factum est:

Exemplum est simplex et speculativum. Sane servitutem non facimus quod homines felium ostendit. Sed quis novit nos. Transeamus igitur quid in productione fieri possit.
- Minimalistic backend. Aliquando nobis opus est ut exigua notitiarum ad tergum rescribas: alicubi opus inserere diem, alicubi necesse est ut indices ostendas, quot usores nunc in situ dic, adnectere calculi vel statisticae. Aliquid ut minima. Quaedam minimae partes facillime effici possunt. Hoc faciet velox, facile et magnum.
- Data preprocessing. Aliquando in pagina nostra vendo immergi volumus, et hanc vendo utendo API petitiones accipimus. Facillime hic facere. Non oneremus tergum nostrum, qui iam sedet et laborat. Colligere potes et hic colligere. Possumus aliquantulum JS vel e con- iungi, illud et praeprocedere aliquid antequam usori detur.
- Facade ad microservice. Hoc quoque casu valde bene me implevit. Antea, apud Tenzor laboravi, societas quae relationes electronicas tractat et praebet renuntiationem circiter dimidium entium legalium ruri. Servitium creavimus, multa ibi facta sunt eadem machinatione utens: fusura, licentia et plura.
OpenResty sicut gluten in micromissionibus tuis adhiberi potest, unicum accessum ad omnia et unum interface praebens. Cum microservices ita scribi possunt ut Node.js hic habes, PHP hic, Python hic, aliquid hic Erlange, intelligimus noluimus eundem codicem ubique rescribere. Ergo, OpenResty in fronte inplenda esse potest. - Statistics and analytics. Solet NGINX in ingressu, et omnes petitiones per eam ingrediuntur. Hoc loco valde commodum est colligere. Statim aliquid computare potes et illud alicubi impone, exempli gratia, Elastica investigatione, Logstash, vel simpliciter scribe ad stipes et alicubi mitte.
- Multi-usore systemata. Pro exemplo, etiam ipsum bonum ludos facere. Hodie in Cape Town, Alexander Gladysh loquetur quomodo cito prototypum lusoribus lusoribus utens OpenResty.
- Request eliquare (WAF). Nunc in usu est ut omnia genera telarum ignium applicationis efficere, multae operae sunt quae eis praebent. Utens OpenResty, te ipsum facere potes applicationes firewall quod simpliciter et facile petitiones sparguntur secundum exigentias tuas. Si Python habes, tunc PHP intelligas certum in te non injiciendum, nisi forte e consolatione uspiam paries. Scis te MySQL et Python habere. Probabiliter facere conentur directorium quoddam traversalium et aliquid datorum injiciendi. Ideo infandum queries cito et vili recta fronte eliquare potes.
- Community. Cum OpenResty in NGINX aedificatur, bonum habet - hoc NGINX communitas. Permagnus est, et honesta pars quaestionum, quae primo iam solvendae sunt communitatis NGINX.
Lua developers. Heri locutus sum cum guys qui hodie in disciplina HighLoad ++ veniebant et audivi solum Tarantool in Lua scriptum esse. Hoc non est verum, multum in Lua scripta sunt. Exempla: OpenResty, Prosody XMPP server, Love2D lusus machinae, Luae in Warcraft et alibi scriptae. Illic es multus of Luae tincidunt, magna et responsive habent communitatem. Omnes meae Luae quaestiones intra paucas horas resolutae sunt. Cum ad electronicas litteras electronicas scribis, intra paucas minutas litteras iam fasciculum responsionum adsunt, quid et quomodo, quid suus quid. Praesent magna. Infeliciter, talis communitas spiritualis ubique non est.
Est GitHub pro OpenResty, ubi fluxum aperire potes si aliquid fractum est. Est index mailing in Google Conciliis, ubi quaestiones generales disserere potes, in Sinica est index epistularum - numquam scis, fortasse Anglice non loqueris, sed Sinenses scis.
results
- Spero me posse significare OpenResty commodam esse compagem per telam formandam.
- Submissa obice habet ingressum, quia signum simile est his quae scribimus, lingua admodum simplex et minimalistica est.
- Asynchronum I/O sine callbacks praebet, noodles non habemus sicut in NodeJS interdum scribere possumus.
- Facile instruere est, cum NGINX necessariis modulis et nostro codice tantum indigemus, omniaque ilicet opera.
- Magna et responsiva communitas.
Quomodo fiat fuso non indicavi, evenit ut longissima fabula.
Спасибо за внимание!

Source: www.habr.com
