KÄ tika izveidota hakeru spÄles aizmugure par servera iznÄ«cinÄÅ”anu
MÄs turpinÄm jums stÄstÄ«t, kÄ tika organizÄts mÅ«su lÄzera kvests ar servera iznÄ«cinÄÅ”anu. SÄciet ar iepriekÅ”Äjo raksts par uzdevuma risinÄÅ”anu.
KopumÄ spÄles aizmugurÄ bija 6 arhitektÅ«ras vienÄ«bas, kuras mÄs analizÄsim Å”ajÄ rakstÄ:
SpÄļu entÄ«tiju aizmugure, kas bija atbildÄ«gas par spÄļu mehÄnismiem
AizmugursistÄma un vietÅu datu apmaiÅas kopne VPS
TulkotÄjs no aizmugursistÄmas pieprasÄ«jumiem (spÄles elementiem) uz Arduino un aparatÅ«ru uz vietas
Arduino, kas bija atbildÄ«gs par releju vadÄ«bu, saÅÄma komandas no tulka un veica faktisko darbu
FaktiskÄs ierÄ«ces: ventilators, vÄ«tnes, stÄvlampas utt.
Frontend - pati Falcon vietne, no kuras spÄlÄtÄji kontrolÄja ierÄ«ces
Iziesim cauri katram no tiem.
SpÄļu entÄ«tiju aizmugure
AizmugursistÄma tika ieviesta kÄ pavasara sÄknÄÅ”anas lietojumprogramma: tai bija vairÄki atpÅ«tas kontrolieri, tÄ«mekļa ligzdas galapunkts un pakalpojumi ar spÄles loÄ£iku.
Bija tikai trīs kontrolieri:
Megatrons. PaÅ”reizÄjÄ Megatron lapa tika nosÅ«tÄ«ta, izmantojot GET pieprasÄ«jumus: pirms un pÄc strÄvas ieslÄgÅ”anas. LÄzers izÅ”Äva caur POST pieprasÄ«jumu.
Tildes lapu kartÄÅ”ana, lai tÄs tiktu apkalpotas pÄc lapas nosaukuma. Tilde eksportam ražo lapas nevis ar oriÄ£inÄlajiem nosaukumiem, bet gan ar iekÅ”Äjo ID un atbilstÄ«bas informÄciju.
Websocket galapunkts tika izmantots, lai kontrolÄtu sÄ«krÄ«kus: lampas, vÄ«tnes un burtus. Tika izvÄlÄts, lai visiem spÄlÄtÄjiem sinhroni parÄdÄ«tu paÅ”reizÄjo ierÄ«ces statusu: vai tÄ ir ieslÄgta vai izslÄgta, aktÄ«va vai nÄ, kÄda burta krÄsa Å”obrÄ«d deg uz sienas. Lai nedaudz apgrÅ«tinÄtu lÄzera ieslÄgÅ”anas uzdevumu, vÄ«tnei un lÄzeram pievienojÄm autorizÄciju ar to paÅ”u pieteikumvÄrdu un paroli admin/admin.
SpÄlÄtÄji to varÄja pÄrbaudÄ«t, ieslÄdzot vÄ«tni, un atkÄrtot to paÅ”u ar lÄzeru.
IzvÄlÄjÄmies tik triviÄlu pieteikÅ”anÄs-paroles pÄri, lai nemocÄ«tu spÄlÄtÄjus ar lieku atlasi.
Lai padarÄ«tu uzdevumu nedaudz interesantÄku, kÄ ierÄ«Äu identifikatori telpÄ tika izmantoti objektu ID no mongodb.
ObjectId satur laikspiedolu: divas nejauÅ”as vÄrtÄ«bas, no kurÄm viena tiek Åemta, pamatojoties uz ierÄ«ces identifikatoru, bet otra, pamatojoties uz procesa pid, kas to Ä£enerÄ, un skaitÄ«tÄja vÄrtÄ«bu. Identifikatorus gribÄju uztaisÄ«t ar regulÄriem intervÄliem un ar dažÄdiem pid procesiem, bet ar kopÄju skaitÄ«tÄju, lai lÄzerierÄ«ces identifikatora izvÄle bÅ«tu interesantÄka. TomÄr beigÄs visi sÄka ar identifikatoriem, kas atŔķīrÄs tikai ar skaitÄ«tÄja vÄrtÄ«bu. Tas, iespÄjams, padarÄ«ja Å”o darbÄ«bu pÄrÄk vienkÄrÅ”u un neprasa objekta ID struktÅ«ras analÄ«zi.
TulkotÄjs no aizmugursistÄmas pieprasÄ«jumiem
Python skripts, kurÅ” strÄdÄja pie taimeriem un pÄrveidoja tos no spÄļu abstrakcijÄm fiziskÄ modelÄ«. PiemÄram, āieslÄgt stÄvlampuā ā āieslÄgt releju N2ā.
Skripts ir savienots ar RabbitMQ rindu un pÄrsÅ«tÄ«ja pieprasÄ«jumus no rindas uz Arduino. TajÄ tika Ä«stenota arÄ« paralÄlÄs gaismas pÄrslÄgÅ”anas loÄ£ika: kopÄ ar dažÄm ierÄ«cÄm tika ieslÄgta gaisma uz tÄm, piemÄram, kad Megatron sÄkotnÄji tika piegÄdÄta strÄva, tas tika izgaismots ar skatuves gaismu. Gaismas dizains visas ainas kinematogrÄfijai ir atseviŔķs stÄsts par mÅ«su projekta lÄ«dzproducenta un iestudÄjuma dizainera Iļjas Serova lielisko darbu, un par to pastÄstÄ«sim atseviÅ”Ä·Ä ierakstÄ.
TulkotÄjs bija arÄ« atbildÄ«gs par smalcinÄtÄja palaiÅ”anas loÄ£iku, izmantojot taimeri un attÄla pÄrsÅ«tÄ«Å”anu uz televizoru: taimeris smalcinÄtÄja palaiÅ”anai, kliedzoÅ”a kapibara, reklÄma spÄles beigÄs.
KÄ tika strukturÄta Megatron marÄ·iera Ä£enerÄÅ”anas loÄ£ika
PÄrbaudes Å”Äviens
Ik pÄc 25 sekundÄm tika Ä£enerÄts jauns marÄ·ieris, un to varÄja izmantot, lai ieslÄgtu lÄzeru uz 10 sekundÄm ar jaudu 10/255. Saite uz github ar Megatron kodu.
PÄc tam lÄzers atdzisa 1 minÅ«ti ā Å”ajÄ laikÄ tas nebija pieejams un nepieÅÄma jaunus Å”Ävienu pieprasÄ«jumus.
Ar Å”o spÄku nepietika, lai izdegtu cauri virvei, taÄu jebkurÅ” spÄlÄtÄjs varÄja izÅ”aut Megatronu un redzÄt lÄzera staru darbÄ«bÄ.
Lai Ä£enerÄtu marÄ·ieri, tika izmantots MD5 jaukÅ”anas algoritms. Un shÄma izdevÄs MD5 no MD5 + skaitÄ«tÄjs + noslÄpums par kaujas žetonu un bez noslÄpuma par pÄrbaudes žetonu.
MD5 ir atsauce uz komerciÄlu projektu, ko paveica mÅ«su aizmugure PÄvels. Tikai pirms pÄris gadiem Å”ajÄ projektÄ tika izmantots MD5, un, kad viÅÅ” projekta arhitektam teica, ka tas ir novecojis Å”ifrÄÅ”anas algoritms, viÅi sÄka izmantot MD5 no MD5. TÄ kÄ mÄs nolÄmÄm izveidot maksimÄli noob projektu, viÅÅ” visu atcerÄjÄs un nolÄma sniegt nelielu atsauci.
Kaujas Å”Äviens
Megatron kaujas režīms ir 100% lÄzera jauda ar 3 vatiem. Tas ir pietiekami 2 minÅ«tes, lai izdegtu cauri virvei, kas noturÄja svaru, salauztu akvÄriju un appludinÄtu serveri ar Å«deni.
MÄs atstÄjÄm dažus mÄjienus par projekta Github: proti, marÄ·iera Ä£enerÄÅ”anas kodu, no kura varÄja saprast, ka testa un kaujas marÄ·ieri tiek Ä£enerÄti, pamatojoties uz vienu un to paÅ”u skaitÄ«tÄja indikatoru. Kaujas žetona gadÄ«jumÄ papildus skaitÄ«tÄja vÄrtÄ«bai tiek izmantota arÄ« sÄls, kas gandrÄ«z pilnÄ«bÄ ir atstÄta Ŕīs bÅ«tÄ«bas maiÅas vÄsturÄ, izÅemot pÄdÄjos divus varoÅus.
Zinot Å”os datus, bija iespÄjams Ŕķirot pÄdÄjos 2 sÄls simbolus un faktiski uzzinÄt, ka tam tika izmantoti skaitļi no Lost, kas pÄrveidoti heksadecimÄlajÄ sistÄmÄ.
PÄc tam spÄlÄtÄjiem bija jÄnoÄ·er skaitÄ«tÄja vÄrtÄ«ba (analizÄjot testa žetonu) un jÄÄ£enerÄ kaujas marÄ·ieris, izmantojot nÄkamo skaitÄ«tÄja vÄrtÄ«bu un iepriekÅ”ÄjÄ solÄ« atlasÄ«to sÄli.
SkaitÄ«tÄjs vienkÄrÅ”i palielinÄjÄs ar katru testa Å”Ävienu un ik pÄc 25 sekundÄm. MÄs par to nekur nerakstÄ«jÄm, tam vajadzÄja bÅ«t nelielam spÄles pÄrsteigumam.
Captcha mijiedarbības pakalpojums
SpÄļu pasaulÄ Å”Ä« bija tÄ pati captcha, kas bija jÄielÄdÄ, lai ieslÄgtu ventilatoru un atvÄrtu tÄfeli ar mÄjienu. Blakus kamerai atradÄs portatÄ«vais dators ar slodzes uzraudzÄ«bu.
ApkalpoÅ”ana Es aprÄÄ·inÄju, ko parÄdÄ«t uzraudzÄ«bÄ kÄ paÅ”reizÄjo slodzi: temperatÅ«ru un CPU ventilatoru. Metrika tika pÄrsÅ«tÄ«ta uz laika bÄzes datu bÄzi, un to izveidoja grafana.
Ja pÄdÄjo 5 sekunžu laikÄ tika saÅemti vairÄk nekÄ 50 pieprasÄ«jumi parÄdÄ«t captcha, tad slodze palielinÄjÄs par fiksÄtu + nejauÅ”u soļu skaitu. AprÄÄ·ins bija tÄds, ka 100% slodzi var sasniegt divÄs minÅ«tÄs.
PatiesÄ«bÄ servisÄ bija vairÄk loÄ£ikas, nekÄ tika parÄdÄ«ts pÄdÄjÄ spÄlÄ: novietojÄm monitoru tÄ, lai bÅ«tu redzama tikai CPU ventilatora rotÄcija.
Kvesta sÄkumÄ viÅi vÄlÄjÄs atstÄt Grafan pieejamu no Falcon vietnes. Bet tajÄ bija arÄ« atspÄriena metrika no aizmugursistÄmas lietojumprogrammas pÄrskata, kuru mums nebija laika notÄ«rÄ«t, tÄpÄc mÄs nolÄmÄm bloÄ·Ät piekļuvi tai. Un tas ir pareizi - pat kvesta sÄkumÄ daži spÄlÄtÄji uzminÄja, ka lietojumprogramma ir rakstÄ«ta springboot ietvaros, un pat izraka dažu pakalpojumu nosaukumus.
Hostings un datu kopne
RÄ«ks informÄcijas pÄrsÅ«tÄ«Å”anai no aizmugursistÄmas uz vietni, VPS serveri, kurÄ darbojÄs RabbitMQ.
AizmugursistÄma un datu kopne tika ieslÄgta mÅ«su VPS. TÄ jauda bija pielÄ«dzinÄma datoram, ko redzÄjÄt ekrÄnÄ: 2 kodolu VPS ar diviem gigabaitiem RAM. Tarifs tika iekasÄts par resursiem, jo āāmaksimÄlÄ slodze bija plÄnota tikai dažas dienas - tÄ dara mÅ«su klienti, kuri plÄno VPS ielÄdÄt uz Ä«su laiku. Tad izrÄdÄ«jÄs, ka slodze ir lielÄka, nekÄ gaidÄ«jÄm, un fiksÄts tarifs bÅ«tu izdevÄ«gÄk. Ja veicat uzdevumu, izvÄlieties lÄ«nijas tarifus turbo.
Lai aizsargÄtu serveri no DDoSa, mÄs izmantojÄm Cloudflare.
Ir vÄrts teikt, ka VPS visu izturÄja godam.
Arduino, kas bija atbildÄ«gs par releju vadÄ«bu, saÅÄma komandas no tulka un veica faktisko darbu
Tas vairÄk ir nÄkamÄ raksta tÄma par projekta aparatÅ«ras daļu: aizmugursistÄma vienkÄrÅ”i nosÅ«tÄ«ja pieprasÄ«jumus ieslÄgt konkrÄtu releju. TÄ notika, ka aizmugursistÄma zinÄja gandrÄ«z visas entÄ«tijas, un tÄs pieprasÄ«jumi izskatÄ«jÄs kÄ āieslÄgt Å”o entÄ«tijuā. MÄs to darÄ«jÄm vietnes agrÄ«nai pÄrbaudei (mÄs vÄl nebijÄm salikuÅ”i visus Arduino un relejus), beigÄs visu atstÄjÄm tÄ.
Frontend
MÄs Ätri izveidojÄm vietni tildÄ, tas aizÅÄma vienu darba dienu un ietaupÄ«ja mÅ«su budžetÄ 30 tÅ«kstoÅ”us.
SÄkotnÄji mÄs domÄjÄm vienkÄrÅ”i eksportÄt vietni un pievienot trÅ«kstoÅ”Äs loÄ£ikas, taÄu mÄs saskÄrÄmies ar lietoÅ”anas noteikumiem, kas aizliedza to darÄ«t.
MÄs nebijÄm gatavi pÄrkÄpt licenci, tÄpÄc bija divas iespÄjas: visu realizÄt paÅ”iem vai sazinÄties tieÅ”i ar Tildi, runÄt par projektu un lÅ«gt atļauju mainÄ«t kodu.
IzvÄlÄjÄmies otro variantu un viÅi ne tikai pusceÄ¼Ä mÅ«s sagaidÄ«ja, bet pat iedeva gada bezmaksas biznesa kontu, par ko esam viÅiem ļoti pateicÄ«gi. Bija ļoti neÄrti parÄdÄ«t viÅiem Sokol vietnes dizainu.
RezultÄtÄ mÄs pievienojÄm js loÄ£iku priekÅ”galam, lai nosÅ«tÄ«tu pieprasÄ«jumus uz elementÄrÄm ierÄ«cÄm, un nedaudz mainÄ«jÄm pogu stilus spÄļu elementu ieslÄgÅ”anai un izslÄgÅ”anai.
MÄjas lapas dizains
MeklÄjumu vÄsture, kas ir atseviŔķas nodaļas vÄrta.
MÄs vÄlÄjÄmies izveidot ne tikai vecmodÄ«gu vietni, bet arÄ« absolÅ«ti pretÄ«gu, kas pÄrkÄpj visus dizaina pamatnoteikumus. TajÄ paÅ”Ä laikÄ bija svarÄ«gi saglabÄt ticamÄ«bu: tai nebija jÄpÄrtrauc ENT stÄsts, jÄdemonstrÄ autora pretenciozitÄte, un spÄlÄtÄjiem bija jÄtic, ka Å”Äda vietne varÄtu pastÄvÄt un pat piesaistÄ«t klientus. Un viÅÅ” to atnesa! KamÄr spÄle norisinÄjÄs, ar mums divas reizes sazinÄjÄs, lai izveidotu tÄ«mekļa vietnes.
SÄkumÄ dizainu veidoju pati, cenÅ”oties iekļaut vairÄk gifu un spÄ«dÄ«gu elementu. Bet mans 10 gadus vecais dizaineris vÄ«rs paskatÄ«jÄs pÄr plecu un noraidÄ«ja to kÄ āpÄrÄk labuā. Lai pÄrkÄptu dizaina noteikumus, tie ir jÄzina.
PastÄv vairÄkas krÄsu kombinÄcijas, kas izraisa ilgstoÅ”u riebuma sajÅ«tu: zaÄ¼Ä un sarkanÄ vienÄda bagÄtÄ«ba, pelÄka un rozÄ, zila plus brÅ«na. BeigÄs izŔķīrÄmies par pamatkrÄsu sarkano un zaļo kombinÄciju, pievienojÄm gifus ar kaÄ·i un no fonda fotoattÄla atlasÄ«jÄm 3-4 paÅ”a Sokolova fotogrÄfijas. Man bija tikai dažas prasÄ«bas: pusmūža vÄ«rietis, Ä£Ärbies pÄris izmÄru pÄrÄk lielÄ uzvalkÄ un pozÄ āprofesionÄlÄ studijas fotosesijÄā. PÄrbaudÄ viÅi to parÄdÄ«ja draugiem un jautÄja: "KÄ jums tas patÄ«k?"
Dizaina izstrÄdes procesÄ manam vÄ«ram ik pÄc pusstundas bija jÄiet apgulties, helikopters sÄka lidot. Pasha mÄÄ£inÄja atvÄrt izstrÄdÄtÄja konsoli lielÄkajai daļai ekrÄna, kamÄr viÅÅ” pabeidza priekÅ”pusi - lai aizsargÄtu acis.
FaktiskÄs ierÄ«ces
Ventilatori un gaismas tika montÄti caur cietvielu relejiem, lai tie uzreiz neieslÄgtos ar pilnu jaudu - lai jauda pieaugtu paralÄli uzraudzÄ«bai.
Bet par to mÄs runÄsim nÄkamajÄ ierakstÄ, par spÄles aparatÅ«ras daļu un vietnes faktisko uzbÅ«vi.
Sekojiet līdzi!
Citi raksti par servera iznÄ«cinÄÅ”anas meklÄjumiem