Контролна листа продукције Ултимате Ноде.јс

Да ли радите ову ствар са Нодеом у производњи? Погледајмо неке уобичајене грешке које људи чине покрећући Ноде у производњи (долазе директно из мојих властитих пројеката - попут цодедамн-а) и како их могу ублажити.

Ово можете користити као контролну листу у производњи када размештате апликације Ноде. Будући да је ово чланак који је спреман за продукцију , многи од њих се неће применити када развијате апликације на локалном систему.

Покрени чвор у моду кластера / одвојених процеса чворова

Запамтите да је Ноде једнонитни. Много тога (попут ХТТП захтева и читање / уписивање система датотека) може делегирати ОС-у који њиме рукује у вишенитном окружењу. Али ипак, код КОЈИ ВИ напишете, логика апликације, увек ради у једној нити.

Извођењем у једној нити, ваш Ноде процес је увек ограничен на само једно језгро на вашој машини. Дакле, ако имате сервер са више језгара, губите рачунарску снагу која покреће Ноде само једном на вашем серверу.

Шта значи „само једном покренути Ноде“? Видите, оперативни системи имају уграђен планер који је одговоран за то како се извршавање процеса распоређује кроз ЦПУ машине. Када покренете само 2 процеса на машини са два језгра, ОС утврђује да је најбоље оба процеса покретати на одвојеним језгрима како бисте исциједили максималне перформансе.

Слична ствар треба да се уради са Ноде-ом. У овом тренутку имате две могућности:

  1. Покрени Ноде у моду кластера - Режим кластера је архитектура која долази у сам Ноде. Једноставним речима, Ноде раставља више сопствених процеса и дистрибуира оптерећење кроз један главни процес.
  2. Покрени Ноде процесе независно - Ова опција се мало разликује од горе наведене у смислу да сада немате главни процес који контролише подређене Ноде процесе. То значи да ће се, када генеришете различите Ноде процесе, покретати потпуно независно један од другог. Нема заједничке меморије, нема ИПЦ-а, нема комуникације, нада.

Према одговору на стацковерфлов, овај други (тачка 2) има много боље резултате од првог (тачка 1), али је мали трик за подешавање.

Зашто? Будући да у апликацији Ноде не постоји само логика апликације, већ готово увек када постављате сервере у Ноде коду морате да повежете портове. А једна база кодова апликације не може два пута повезати исти порт на истом ОС-у.

Међутим, овај проблем је лако отклонити. Варијабле окружења, Доцкер-ови контејнери, НГиНКС фронтенд проки и тако даље су нека од решења за ово.

Ограничите своје крајње тачке

Будимо реални. Немају сви на свету најбоље намере за вашу архитектуру. Свакако, нападе попут ДДоС-а једноставно је врло сложено ублажити, па чак и дивови попут ГитХуб-а падну кад се тако нешто догоди.

Али најмање што можете да урадите је да спречите киддие-а скрипта да вам сруши сервер само зато што имате скупу АПИ крајњу тачку изложену на вашем серверу без икаквог ограничења брзине.

Ако користите Екпресс са Ноде-ом, постоје 2 прелепа пакета која беспрекорно раде како би оценили ограничени саобраћај на слоју 7:

  1. Екпресс Рате Лимит - //ввв.нпмјс.цом/пацкаге/екпресс-рате-лимит
  2. Екпресс Слов Довн - //ввв.нпмјс.цом/пацкаге/екпресс-слов-довн

Екпресс Слов Довн заправо додаје поступно кашњење вашим захтевима уместо да их испушта. На овај начин легитимни корисници, ако случајно ДДоС-у (супер активност кликом на дугмад ту и тамо), једноставно се успоравају и нису ограничени.

С друге стране, ако постоји скрипта-киддие која покреће скрипте за уклањање сервера, Екпресс лимитер брзине надгледа и ограничава брзину тог одређеног корисника, у зависности од корисничке ИП адресе, корисничког налога или било чега другог што желите.

Ограничење брзине могло би се (требало би!) Применити и на слој 4 (слој 4 значи блокирање саобраћаја пре него што се открије његов садржај - ХТТП) путем ИП адресе. Ако желите, можете да подесите НГиНКС правило које блокира саобраћај на слоју 4 и одбија поплаву промета који долази са једне ИП адресе, чиме штеди ваше серверске процесе од преоптерећења.

Користите фронтенд сервер за ССЛ прекид

Ноде нуди готову подршку за ССЛ руковање са прегледачем помоћу httpsсерверског модула у комбинацији са потребним ССЛ цертификатима.

Али будимо искрени овде, ваша апликација ионако не би требало да се бави ССЛ-ом. То логика апликације не би требало да ради. Ваш Ноде код треба да буде одговоран само за оно што се дешава са захтевом, а не за претходну обраду и накнадну обраду података који улазе и излазе са вашег сервера.

Прекид ССЛ-а односи се на претварање саобраћаја са ХТТПС-а у ХТТП. А за то постоје много бољи алати од Ноде-а. За то препоручујем НГиНКС или ХАПроки. Обе имају доступне бесплатне верзије које завршавају посао и пребацују ССЛ завршетак са Ноде-а.

Користите фронтенд сервер за послуживање статичких датотека

Поново, уместо да користите уграђене методе попут express.staticпослуживања статичких датотека, користите сучелне обрнуте проки сервере попут НГиНКС за послуживање статичких датотека са диска.

Пре свега, НГиНКС то може учинити брже од Ноде-а (јер је направљен од нуле да би то могао учинити само). Али такође пребацује датотеке које послужују из процеса са једним навојем Ноде који би могао користити своје циклусе такта на нечем бољем.

И не само ово - предњи прокси сервери попут НГиНКС могу вам такође помоћи да брже испоручујете садржај помоћу ГЗИП компресије. Такође можете поставити заглавља истека, податке кеш меморије и још много тога, што од Нодеа не бисмо требали очекивати (међутим, Ноде то и даље може учинити).

Конфигуришите руковање грешкама

Правилно руковање грешкама може вас спасити од сати уклањања грешака и покушаја репродукције тешких грешака. На серверу је посебно лако подесити архитектуру за руковање грешкама јер је ви ви покрећете. Препоручујем алате попут Сентри витх Ноде који вас евидентира, извештава и шаље е-пошту кад год се сервер сруши због грешке у изворном коду.

Једном када је то на месту, сада је време да поново покренете сервер када се сруши, тако да цела веб локација не пропада сатима док је ручно поново не преузмете.

За ово можете да користите менаџер процеса као што је ПМ2. Или још боље, користите доцкеризовано окружење контејнера са полисама попут restart: alwaysправилне поставке ограничења меморије и диска.

Постављање Доцкера осигурава да се чак и ако се ваш контејнер изводи у ОМЕ-у, процес поново заврти (што се можда неће догодити у ПМ2 окружењу, јер ОС може убити ПМ2 ако негде у текућем процесу дође до цурења меморије).

Правилно конфигуришите евиденције

Сви одговори леже у дневницима. Хакирање сервера, пад система, сумњиво понашање корисника итд. За то морате бити сигурни да:

  1. Сваки покушај захтева евидентира се са ИП адресом / методом захтева / пута којим се приступа, у основи онолико података колико можете да забележите (осим приватних података попут лозинки и података о кредитној картици, наравно)
  2. То се може постићи пакетом морган
  3. Сетуп фајл ток пријави на производњу уместо конзоле излаз. Ово је брже, лакше је видети и омогућава вам извоз извештаја у мрежне услуге прегледа дневника.
  4. Нису све поруке дневника једнаке тежине. Неки евиденције су ту само за отклањање грешака, а ако су неке присутне, то може указивати на опасност (попут хаковања сервера или неовлашћеног приступа). Користите винстон-логгер за евидентирање различитих нивоа евиденција.
  5. Подесите ротацију дневника тако да не добијете величину евиденције у ГБ након отприлике месец дана, када видите сервер.
  6. ГЗИП датотеке дневника након ротације. Текст је јефтин, врло је сажељив и једноставан за чување. Никада не бисте смели да се суочавате са проблемима са текстуалним евиденцијама све док су компримовани и ако користите сервер са пристојним простором на диску (25 ГБ +).

Закључак

Лако је забележити неколико пракси у производњи које би вам касније могле уштедети сузе и сате отклањања грешака. Обавезно следите ове најбоље праксе и реците ми шта мислите тако што ћете ме поздравити на мојој Твиттер страници.

Ако вам се свидео овај чланак, упознајмо се на друштвеним мрежама. Ево мог Инстаграма и Твитера. Супер сам активан и волео бих да поразговарамо! Хајде да се повежемо.

Мир!

Мехул