"Новыя Быліны". Для dev, ops і дапытлівых людзей

"Новыя Быліны". Для dev, ops і дапытлівых людзей

Па шматлікіх просьбах чытачоў пачынаецца вялікі цыкл артыкулаў аб ужыванні тэхналогіі бессерверных вылічэнняў для распрацоўкі рэальнага прыкладання. У гэтым цыкле будзе разгледжана распрацоўка прыкладання, тэсціраванне і пастаўка канчатковым карыстальнікам з выкарыстаннем сучасных сродкаў: мікрасэрвіснай архітэктуры прыкладання (у serverless варыянце, на базе OpenFaaS), кластара кубернеты для разгортвання прыкладання, базы дадзеных MongoDB, арыентаванай на хмарныя кластарызацыю і прымяненне, а таксама хмарнай шыны НАТС. Прыкладанне рэалізуе гульню «Быліны», адзін з варыянтаў папулярнай салоннай гульні «Мафія».

Што такое «Быліны»?

Гэта варыянт гульні "Мафія", яна ж "Werewolf". У яе аснове камандная гульня, пры якой удзельнікі павінны крок за крокам даведацца, хто ёсць хто, і паспрабаваць выйграць. Нажаль, пры гульні па сетцы знікае такі важны складнік гульні, як асабістае ўзаемадзеянне, а правілы класічнай «Мафіі» досыць простыя, таму для больш нелінейнага і цікавага гульнявога працэсу звычайна дадаюцца іншыя персанажы, але ў цэлым захоўваюцца асноўныя рысы арыгінальнай «Мафіі», напрыклад, змена дня і ночы, хады толькі ўначы, а таксама саюзы паміж удзельнікамі. Таксама важным адрозненнем гульні па сетцы з'яўляецца тое, што вядучы (ён жа Майстар гульні, Казачнік) гэта звычайна кампутарная праграма.

Апісанне гульні

Правілы гульні, якую я хачу рэалізаваць, узяты са старога irc-бота, якога я захаваў у асабістым архіве гадоў 10 таму. У «Былін» ёсць перадгісторыя, якой пачынаецца кожная гульня:

У трыдзевятым царстве, у трыдзесятай дзяржаве, за сям'ю морамі, жылі сабе пажывалі некалькі вёсачак, а ў іх Добрыя малайцы и Чырвоныя дзяўчыны. Сеялі яны хлеб, ды хадзілі ў навакольны лясок у грыбы і ягады... І працягвалася так з веку ў век, пакуль страшная катастрофа не патрэсла Зямлю і не стала зло распаўзацца па свеце! Ночы зрабіліся доўгія і халодныя, а цемры шнырылі па лесе і забрыдалі ў вёску нядобрыя і страшныя пачвары. Прыляцеў аднекуль Змей Гарыныч і панадзіўся красці Чырвоных дзяўчат ды адбіраць усё каштоўнае ў сялян. Шкодная і прагная Баба-Яга, якая прыляцела на ступе з далёкіх лясоў, збянтэжыла розум жыхароў, і нават сёй-той кінуў рамяство і пайшоў у лес разбойнічаць, пазбіваў там хеўру. Ліхадзеі сустрэлі Лёшага, Які ўмеў ператварацца ў дрэвы ды кусты, ён стаў сачыць за мірнымі сялянамі і служыць разбойнікам, вынюхваючы, не ці ладзяць чаго Добры малайцы для збавення сваіх селішчаў ад паскуддзя. Добрыя малайцы і Чырвоныя дзяўчыны, якія стаміліся ад набегаў Разбойнікаў, ды жудасных смерцяў ад рук страшнага Ліха Аднавокага, сабралі золата і запрасілі з суседняга горада вядомага змагара Івана-Царэвіча, які паабяцаў пазбавіць вёску ад разбойнікаў На паляне ў лесе Іван выратаваў ад немінучай гібелі Шэрага Ваўка, які трапіў у яму-пастку Разбойнікаў. Узамен Воўк паабяцаў паведамляць Царэвічу пра рознае лясное паскуддзе. Міма праязджала вядомая лекарка Васіліса Прамудрая, а калі ўбачыла бяду - засталася выходжваць жыхароў, якія пацярпелі ад нападаў хвацкіх. За лесам з'явіўся чорны палац, у якім, па чутках, пасяліўся. Кашчэй Несмяротны, кожную ноч ён наведваўся ў вёскі і зачароўваў Добрых Малайцоў і Чырвоных Дзяўчат, каб яны не смелі не паслухацца яго загаду, усё рабілі так, як ён скажа. А ў Знежывелым Лесе пасяліўся Кот-Баюн, і кожны, хто яго сустракаў, засынаў мёртвым сном пасля яго казак або гінуў ад яго жалезных кіпцюроў.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Трыдзевятае царства

Як ужо відаць, гульцы дзеляцца на некалькі груп:

  • мірныя жыхары (Добры Малайцы, Красны Дзявіцы, Іван-Царэвіч, Шэры Воўк і Васіліса Прамудрая)
  • разбойнікі (уласна разбойнікі, а таксама Баба-Яга і Лёшы)
  • незалежныя (Змей-Гарыныч, Ліха Аднавокае, Царэўна-Жаба, Кашчэй Бессмяротны, Кот-Баюн)

Мэта гульні, як было сказана вышэй, застацца ў жывых і перамагчы. Праціўнікі павінны так ці інакш пакінуць гульню, а незалежным гэтак жа варта застацца ў жывых да канца гульні. У гульні ёсць золата, своеасаблівая гульнявая валюта, якую гульцы зарабляюць толькі ўнутры гульні. Якія выйграюць атрымліваюць золата. Чым больш золата, тым вышэй рэйтынг гульца.

Спынюся крыху падрабязней на апісанні персанажаў.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Добры Малайчына

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Чырвоная Дзяўчына

Добры Малайчына и Чырвоная Дзяўчына - Самая масавая і асноўная роля ў гульні. Гэта мірныя жыхары, якія па начах спяць, а ўдзень працуюць. Уначы на ​​іх нападае хтосьці з разбойнікаў, Змей Гарыныч і іншыя ролі, а Васіліса Прамудрая іх лечыць. З некаторай, невялікай верагоднасцю Добры малайчына або Чырвоная дзяўчына могуць перажыць напад без шкоды (магчыма, страціўшы пры гэтым золата), аднак пры гэтым усё пазнаюць псеўданім гульца наступным жа днём пасля нападу абароны. Уначы гэтыя гульцы не робяць якіх-небудзь хадоў, а аналізуюць гульнявую сітуацыю, зыходзячы з паведамленняў у гульнявым чаце. Днём жа гэтыя гульцы вырашаюць шляхам галасавання, хто з іх не з'яўляецца Добрым малайцом або Чырвонай дзяўчынай. Гулец, за якога прагаласавала большасць іншых гульцоў, сыходзіць з гульні, астатнія атрымліваюць або губляюць золата. Калі гульцы не выбралі каго-небудзь большасцю галасоў, ніхто з гульцоў не будзе пакараны.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Іван-Царэвіч

Іван-Царэвіч - Першапачаткова ананімны абаронца мірных жыхароў. Па начах правярае ролі іншых гульцоў, бо ведае толькі аднаго свайго саюзніка - Шэрага Ваўка. Пры непасрэдным удзеле Шэрага Ваўка (які таксама можа правяраць ролі іншых гульцоў) Іван-Царэвіч, замест праверкі, уначы можа забіць іншага персанажа. Калі ў выніку праверкі Іван-Царэвіч бачыць ролю Добрага Малайца або Чырвонай Дзяўчыны ў гульца, то можа запрасіць іх да сябе і пазнаёміць з Шэрым Ваўком і іншымі Добрымі Малайцамі і Чырвонымі Дзяўчатамі. Івану можа перашкодзіць Царэўна-Жаба, якая яго можа ўначы спакусіць, пры гэтым не выдаючы яго ролі іншым гульцам днём. Калі Іван сам выявіць Царэўну-Жабу, то можа ёй прапанаваць далучыцца да мірных жыхароў, аднак калі Царэўна адмовіць, яна гіне ад рукі Івана. Змей-Гарыныч таксама можа перашкаджаць праверкам Івана-Царэвіча, але, у адрозненне ад Царэўны-Жабы, днём ён раскажа астатнім гульцам, хто з іх - Іван-Царэвіч. Днём Іван-Царэвіч нічым не адрозніваецца ад іншых Добрых Малайцоў.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Шэры Воўк

Шэры Воўк - памочнік Івана-Царэвіча, чый востры нюх дапамагае Івану знайсці іншых Добрых Малайцоў і Чырвоных Дзяўчын. Шэры Воўк кажа гэтым гульцам, хто Іван-Царэвіч, а таксама паведамляе пра іншых гульцоў з ролямі Добрых Малайцоў і Чырвоных Дзяўчын. Калі Воўк выявіць разбойніка ці іншага суперніка, ён неадкладна паведамляе аб гэтым Івану-Царэвічу, каб той на наступную ноч прыняў меры. Калі на Ваўка нападзе Царэўна-Жаба, ён ператвараецца ў звычайнага Добрага малайца і не можа праверыць каго-небудзь, а Царэўна не даведаецца, што насамрэч гэта быў Шэры Воўк, бо Воўк уначы не спіць. Аднак сам Воўк пры гэтым днём даведаецца, хто з гульцоў — Царэўна-Жаба, і можа паспрабаваць схіліць астатніх Добрых Малайцоў і Чырвоных Дзяўчат, якіх прывёў да Івана-Царэвіча, галасаваць за пакаранне Царэўны-Жабы. Таксама на наступную ноч можа паспрабаваць ананімна схіліць Царэўну-Жабу на бок мірных жыхароў, каб яна не чапала нікога з іх. Воўк уначы можа ахвяраваць сабой, каб выратаваць Івана-Царэвіча ці Васілісу Прамудрую, калі ён мяркуе, што тыя раптам патрапяць пад удар разбойнікаў, ці ж былі замбаваныя Кашчэем (у Ваўка прыроджаны імунітэт да чараў Кашчэя), але Воўк пасля самаахвяравання выбывае з гульні.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Васіліса Прамудрая

Васіліса Прамудрая - Іграе за мірных жыхароў, аднак яны пра яе не ведаюць, паколькі Васіліса вельмі сціплая. Таксама Васіліса Прамудрая, калі лечыць, не задае пытанняў і як добры доктар лечыць усіх запар. Але калі яе лекі вып'е Кашчэй, Ліха ці Лёшы — не жыць ім даўжэй за адзін дзень, паколькі Васіліса лечыць толькі людзей. Змею Гарынычу ці Кату-Баюну лекі Васілісы Прамудрай таксама не дапамогуць, але і шкоды не прынясуць. Таксама Васілісу ноччу не чапае Кот-Баюн, паколькі за травой лячэбнымі Васіліса ў Знежывелы Лес не ходзіць. Акрамя таго жаночыя чары Царэўны-Жабы на Васілісу не дзейнічаюць. Калі яе пацыента паспрабуюць забіць двойчы, медыцына апынецца нямоглая. Васіліса не выратуе і ад магічных атак, напрыклад ад праклёну Ліхам. Днём Васіліса паводзіць сябе як Чырвоная Дзяўчына, і толькі мімалётны, злёгку сумны погляд можа трошкі намякнуць, што яна лепшы лекар у Трыдзевятым царстве.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
разбойнік

разбойнікі, у адрозненне ад усіх папярэдніх роляў, ведаюць адзін аднаго, паколькі жывуць у адным Логаве, а таксама ведаюць Лёшага і Бабу-Ягу, таму могуць дзейнічаць узгоднена адразу з першага ходу. Але толькі Верхавод хеўры выконвае дзеянні па начах і не галасуе днём, пакуль астатнія Разбойнікі старанна прыкідваюцца Добрымі Малайцамі і Чырвонымі Дзяўчатамі. Калі Верхавод выбывае з гульні па якім-небудзь чынніку, яго месца тут жа займае адзін з пакінутых Разбойнікаў. У першую чаргу, Разбойнікі імкнуцца вывесці са строю Івана-Царэвіча, пакуль той не сабраў дастаткова сіл з Добрых Малайцоў і Чырвоных Дзяўчат для актыўнага супрацьстаяння Разбойнікам днём.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
лясун

лясун па начах шпіёніць для Разбойнікаў, паведамляючы ім аб знойдзеных ролях у іх Логаве, але днём не галасуе, паколькі не жыве ў вёсцы. Аднак іншыя гульцы могуць прагаласаваць за Лёшага і, такім чынам, пакараць смерцю яго. Бо Лёшы выхадзец з балот, яго не можа спакусіць Царэўна-Жаба, а калі і паспрабуе, то Лёшы памеціць яе хату, і жыхары вёскі пазнаюць, хто яна такая насамрэч. Не варта Лёшаму баяцца і чар Кашчэя, а вось Васіліса можа загаіць яго да смерці. Калі Кот-Баюн паспрабуе напасці на Лёшага, то рызыкуе пазбавіцца сваіх жалезных кіпцюроў, і прыйдзецца потым Кату ўсыпляць ахвяр адным толькі мурканнем.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Баба-Яга

Баба-Яга гэтак жа працуе разам з Разбойнікамі, па начах чаруе: можа альбо наслаць хваробу на іншых гульцоў, альбо абараніць каго-небудзь з саюзнікаў ад нападу. Яе вядзьмарства нават мацней за праклёны Ліха. Днём Баба-Яга таксама актыўная: таго, хто ў яе пад абаронай, нельга пакараць смерцю нават большасцю галасоў. Аднак запас чароўных карэнняў для дзённай абароны абмежаваны, так што Баба-Яга не можа абараніць каго-небудзь, уключаючы сябе, больш за тры разы за гульню. Пры гэтым днём Баба-Яга прыкідваецца звычайнай Чырвонай Дзяўчынай і галасуе з усімі разам.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Змей-Гарыныч

Змей-Гарыныч па начах лётае над вёскамі, лясамі і балотамі і займаецца рабаваннем, раскрываючы днём ролю абрабаванага. Днём Змей спіць, таму не галасуе, але яго могуць пакараць смерцю большасцю галасоў. Змей вельмі небяспечны для ўсіх, асабліва для Разбойнікаў і Івана-Царэвіча. Змею ўсё роўна, каго рабаваць, але калі яго раскрые Воўк або Лёшы, ён можа стаць каштоўным саюзнікам. Калі забіць Змяя ўначы, можна, з некаторай верагоднасцю, атрымаць вельмі каштоўны прадмет - Змяіную Шкуру, якая абароніць яе ўладальніка адзін раз ад фізічнага нападу.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Ліха Аднавокі

Ліха Аднавокі ноччу забівае ўсіх, хто трапляецца яму на шляху, а каго забіць не можа (Ляшэга, Ката-Баюна, або Змяя Гарыныча) — праклінае, так што любы, хто паспрабуе мець зносіны з праклятым гэтай жа ноччу, памрэ на працягу дня. Сам пракляты пры гэтым таксама гіне, не гіне толькі Кот-Баюн, які проста кладзецца спаць, каб набрацца сіл, прапускаючы ход наступнай ноччу. Выратаваць ад праклёну Ліха можа толькі Баба-Яга. Праклён не дзейнічае і на таго, хто перамог Ката-Баюна: ён, як і Кот, проста кладзецца спаць з пропускам ходу.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Царэўна-Жаба

Царэўна-Жаба не можа перамагчы ў гульні, затое можа зарабіць вельмі шмат грошай, спакушаючы іншых гульцоў па начах. Спакушаны пры гэтым прапускае ход. Жаба не можа спакусіць Васілісу Прамудрую, таксама ёй варта пазбягаць Лёшага, які яе здасць усім на наступны дзень. Калі Іван-Царэвіч або Верхавод Разбойнікаў знойдуць Жабу, то могуць запрасіць на бок мірных жыхароў або Разбойнікаў, пры гэтым Іван не прымае адмовы Жабы, а вось Верхавод не такі пераборлівы. Але Царэўна досыць хітрая, можа стаць падвойным агентам, бо нягледзячы на ​​тое, што яна ў адзіночку не можа перамагчы, - гэта выдатны шанец набраць золата, бо шанцы дацягнуць да канца гульні моцна ўзрастаюць! Днём Царэўна-Жаба прыкідваецца Чырвонай Дзяўчыцай і галасуе з усімі разам.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Кашчэй Несмяротны

Кашчэй Несмяротны жыве ў сябе замку. Па начах ён ходзіць па навакольных вёсках і замбіруе Добрых Малайцоў і Чырвоных Дзяўчат, якія пераходзяць да яго на службу і беспярэчна выконваюць усе даручэнні. Адмовіўшыся выканаць загад, напрыклад галасаваць днём па-іншаму, чым было сказана Кашчэем, або пісаць паведамленні днём у чаце, калі Кашчэй гэта забараніў, Слуга Кашчэя гіне. Такім чынам, Кашчэй здольны паўплываць на вынікі галасавання днём, хоць сам асабіста не галасуе. Калі Кашчэя заб'юць, усе яго ахвяры таксама гінуць. Васіліса можа вылечыць Слугу Кашчэя, які потым вяртаецца да сваёй зыходнай ролі. У Змея-Гарыныча і Ваўка прыроджаны імунітэт да замбавання, так што Кашчэй пры ўсім жаданні не можа звярнуць іх да сябе на службу. Таксама Воўк можа выратаваць з бяды Івана ці Васілісу, ахвяраваўшы сабой. Выратаваныя Ваўком набывае Ваўчыны імунітэт да замбавання.

"Новыя Быліны". Для dev, ops і дапытлівых людзей
Кот-Баюн

Кот-Баюн жыве ў лесе, па начах палюе. Днём спіць у сябе ў дупле, таму ў галасаванні не ўдзельнічае. Аднак днём яго могуць пакараць смерцю большасцю галасоў. Кот можа атакаваць двума спосабамі: мурчаць - і тады яго ахвяра засынае і не можа хадзіць ноччу, а таксама галасаваць на наступны дзень, - альбо забіваць адразу жалезнымі кіпцюрамі. Атака кіпцюрамі не працуе на Змеі-Гарынычы, а, атакаваўшы Лёшага, Кот і зусім можа застацца без кіпцюроў! Ліха не можа праклясці Ката, які пасля праклёну проста будзе спаць адну ноч. Калі хто здужае Ката-Баюна перамагчы, ад любой хваробы і хваробы, уключаючы праклён Ліха, вылечыцца. Гэтая Котава здольнасць захоўваецца за гульцом да канца гульні. Слугі Кашчэя не могуць днём галасаваць за Ката, але могуць ускосна даведацца, хто Кот, не паведамляючы пра гэта Кашчэю. Кот-Баюн не ўступае ў саюзы з Іванам або Разбойнікамі, так што яны для Ката - першарадная мэта.

выкарыстаныя тэхналогіі

Для напісання гульні я абраў тэхналогію бессерверных вылічэнняў (serverless) на аснове OpenFaaS, паколькі яна досыць простая для арганізацыі гульні, і разам з тым дастаткова развітая, каб пісаць складаныя гульнявыя правілы без залішніх ускладненняў. Таксама я буду выкарыстоўваць кластар Kubernetes, паколькі гэты спосаб разгортвання прыкладанняў дазваляе даволі проста і надзейна атрымаць хуткае разгортванне, магчымасць лёгкага маштабавання. Для стварэння гульнявой логікі можна абыйсціся толькі OpenFaaS, аднак я таксама паспрабую зрабіць Казачніка ў выглядзе асобнага кантэйнера, каб параўнаць складанасць рэалізацыі. У якасці асноўнай мовы праграмавання для мікрасэрвісаў і функцый я абраў Go, паколькі ўжо даўно вывучаю яго ў вольны час на замену Perl, а для ўзаемадзеяння карыстачоў з мікрасэрвісамі і функцыямі будзе выкарыстоўвацца js на аснове нейкага фрэймворка. Аб канчатковым рашэнні я распавяду ў які адпавядае артыкулу цыклу. Для зносін функцый паміж сабой я абраў NATS.io, паколькі ўжо сутыкаўся з ёю раней, і ў яе досыць лёгкая інтэграцыя ў Kubernetes.

анонс

  • Увядзенне
  • Ўстаноўка асяроддзя для распрацоўкі, разбіццё задачы на ​​функцыі
  • Працы над backend
  • Працы над frontend
  • Настройка CICD, арганізацыя тэсціравання
  • Запуск выпрабавальнага сеансу гульні
  • Вынікі

Крыніца: habr.com

Дадаць каментар