Me çawa ewr FaaS di hundurê Kubernetes de çêkir û Hackathon Tinkoff qezenc kir

Me çawa ewr FaaS di hundurê Kubernetes de çêkir û Hackathon Tinkoff qezenc kir
Ji sala borî ve, pargîdaniya me dest bi organîzekirina hackathon kir. Pêşbaziya yekem a bi vî rengî pir serketî bû, me li ser wê nivîsî gotara. Hackathona duyemîn di Sibata 2019-an de pêk hat û ne kêmî serfiraz bû. Di derbarê armancên girtina ya paşîn de ne ewqas demek berê nivîsand organîzator.

Ji beşdaran re bi azadîyek bêkêmasî di hilbijartina stûnek teknolojiyê de ji bo pêkanîna wê peywirek balkêş hate dayîn. Pêwîst bû ku platformek biryargirtinê ji bo bicîhkirina hêsan a fonksiyonên tomarkirina xerîdar ku bikaribe bi herikîna bilez a serîlêdanan re bixebite, li ber barên giran bisekine, û pergal bixwe jî bi hêsanî berbelav bû.

Erk ne hindik e û dikare bi gelek awayan were çareser kirin, wekî ku em di dema pêşandana pêşandanên dawîn ên projeyên beşdaran de pê bawer bûn. Di hackathonê de 6 tîm ji 5 kesan pêk dihat, hemû beşdaran projeyên baş hebûn, lê platforma me derket holê ku ya herî reqabetê ye. Projeyek me ya pir balkêş heye, ku ez dixwazim di vê gotarê de behsa wê bikim.

Çareseriya me platformek e ku li ser bingeha mîmariya Serverless di hundurê Kubernetes de ye, ku dema ku hewce dike ku taybetmendiyên nû bîne hilberînê kêm dike. Ew rê dide analîstan ku kodê li hawîrdorek ji wan re xweş binivîsin û bêyî beşdariya endezyar û pêşdebiran wê di hilberînê de bi cih bikin.

Çi gol dike

Tinkoff.ru, mîna gelek pargîdaniyên nûjen, xwedan xalên xerîdar e. Scoring pergalek nirxandina xerîdar e ku li ser bingeha rêbazên statîstîkî yên analîzkirina daneyê ye.

Mînakî, xerîdarek bi daxwazek ji me re vedigere ku em jê re deyn bidin, an jî hesabek karsaziyek kesane bi me re veke. Ger em plan dikin ku deynek jê re bidin, wê hingê pêdivî ye ku em deyndariya wî binirxînin, û heke hesab karsaziyek kesane be, wê hingê divê em pê ewle bin ku xerîdar dê danûstendinên xapînok neke.

Bingeha girtina biryarên weha modelên matematîkî ne ku hem daneyên ji serîlêdanê bixwe û hem jî daneyên ji hilanîna me analîz dikin. Digel jimartinê, rêbazên statîstîkî yên wekhev jî dikarin di karûbarê çêkirina pêşniyarên kesane yên ji bo hilberên nû yên ji bo xerîdarên me de werin bikar anîn.

Rêbaza nirxandinek weha dikare cûrbecûr daneyên têketinê qebûl bike. Û di demekê de em dikarin pîvanek nû li têketinê zêde bikin, ku, li ser bingeha encamên analîzên li ser daneyên dîrokî, dê rêjeya veguherîna karanîna karûbarê zêde bike.

Em di derbarê têkiliyên xerîdar de gelek daneyan digirin, û qebareya vê agahiyê her ku diçe zêde dibe. Ji bo ku drav bixebite, pêvajokirina daneyê di heman demê de rêgez (an modelên matematîkî) jî hewce dike ku dihêle hûn zû biryar bidin ka kê serîlêdanek pejirand, kê red bike, û kî çend hilberên din pêşkêşî bike, berjewendiya potansiyela wan binirxîne.

Ji bo karê di dest de, em berê pergalek biryargirtinê ya pispor bikar tînin IBM WebSphere ILOG JRules BRMS, ya ku, li ser bingeha qaîdeyên ku ji hêla analyst, teknolog û pêşdebiran ve hatî destnîşan kirin, biryar dide ka meriv hilberek bankingê ya taybetî ji xerîdar re erê bike an red bike.

Li ser sûkê gelek çareseriyên amade hene, hem modelên dengdanê û hem jî pergalên biryargirtinê bixwe. Em yek ji van pergalan di pargîdaniya xwe de bikar tînin. Lê karsazî mezin dibe, cihêreng dibe, hem jimara xerîdar û hem jî hejmara hilberên pêşkêşkirî zêde dibin, û digel vê yekê, raman derdikevin holê ka meriv çawa pêvajoya biryargirtinê ya heyî baştir dike. Bê guman mirovên ku bi pergala heyî re dixebitin gelek raman hene ku meriv wê çawa hêsan, çêtir, rehettir bike, lê carinan ramanên ji derve bikêr in. Hackathona Nû bi armanca berhevkirina ramanên dengdar hate organîzekirin.

Karî

Hackathon di 23ê Sibatê de hat lidarxistin. Ji beşdaran re peywirek şer hate pêşkêş kirin: pêşxistina pergalek biryargirtinê ku diviyabû çend mercan pêk bîne.

Ji me re hate gotin ku pergala heyî çawa dixebite û di dema xebata wê de çi zehmetî derdikevin, û her weha divê platforma pêşkeftî çi armancên karsaziyê bişopîne. Pêdivî ye ku pergal ji bo pêşdebirina qaîdeyan demek zû-bazarê hebe da ku koda xebatê ya analîstan bi zûtirîn dem têkeve hilberînê. Û ji bo herikîna hatina serlêdanan, divê dema biryargirtinê bi kêmî ve bimeşe. Di heman demê de, pergala ku hatî pêşve xistin pêdivî ye ku xwedan kapasîteyên xaç-firotinê be da ku fersendê bide xerîdar ku hilberên pargîdaniya din bikire heke ew ji hêla me ve têne pejirandin û berjewendiya potansiyel ji xerîdar re hebe.

Eşkere ye ku ne mimkûn e ku meriv di şevekê de projeyek amade-dervekirinê binivîsîne ku bê guman dê têkeve hilberînê, û pir dijwar e ku meriv tevahiya pergalê veşêre, ji ber vê yekê ji me hat xwestin ku bi kêmî ve beşek ji wê bicîh bînin. Gelek hewcedariyên ku divê prototîp têr bike hatin damezrandin. Mimkun bû ku hem hewl bidin ku hemî hewcedariyên bi tevahî vehewînin, hem jî bi hûrgulî li ser beşên takekesî yên platforma ku têne pêşve xistin bixebitin.

Di derbarê teknolojiyê de, ji hemî beşdaran re azadiya bêkêmasî ya hilbijartinê hate dayîn. Mimkun bû ku meriv her têgeh û teknolojiyê bikar bîne: Veguhastina daneyê, fêrbûna makîneyê, çavkaniya bûyerê, daneyên mezin û yên din.

Çareseriya me

Piştî hûrguliyek piçûk, me biryar da ku çareseriyek FaaS dê ji bo temamkirina peywirê îdeal be.

Ji bo vê çareseriyê, pêdivî bû ku çarçoveyek bê Server guncan were dîtin da ku qaîdeyên pergala biryargirtinê ya ku hatî pêşve xistin bicîh bîne. Ji ber ku Tinkoff bi çalak Kubernetes ji bo rêveberiya binesaziyê bikar tîne, me li ser bingeha wê li gelek çareseriyên amade nihêrî; ez ê paşê ji we re bêtir li ser wê bibêjim.

Ji bo ku çareseriya herî bi bandor bibînin, me li hilbera ku bi çavên bikarhênerên wê ve hatî pêşve xistin mêze kir. Bikarhênerên sereke yên pergala me analîstên ku di pêşkeftina qaîdeyê de beşdar in. Pêdivî ye ku qaîdeyên li ser serverê werin bicîh kirin, an jî, wekî ku di doza me de, di ewr de, ji bo biryara paşîn werin bicîh kirin. Ji perspektîfa analîstek, karûbar bi vî rengî xuya dike:

  1. Analîst li ser bingeha daneyên ji wargehê skrîpt, rêgez, an modelek ML dinivîse. Wekî beşek ji hackathon, me biryar da ku Mongodb bikar bînin, lê bijartina pergala hilanîna daneyê li vir ne girîng e.
  2. Piştî ceribandina qaîdeyên pêşkeftî yên li ser daneyên dîrokî, analîst koda xwe li panela rêveberiyê bar dike.
  3. Ji bo piştrastkirina guhertoyê, hemî kod dê biçin depoyên Git.
  4. Bi navgîniya panela rêveberiyê ve dê gengaz be ku kodê di ewr de wekî modulek fonksiyonel a Serverê ya cihêreng were bicîh kirin.

Daneyên destpêkê yên ji xerîdaran divê di nav karûbarek zengînkirina pispor re derbas bibin ku ji bo ku daxwaza destpêkê bi daneyên ji depoyê dewlemend bike hatiye çêkirin. Girîng bû ku vê karûbarê bi vî rengî were bicîh kirin ku ew ê bi depoyek yekane re bixebite (ku analîst dema ku rêgezan pêşdixe daneyan jê digire) da ku avahiyek daneya yekgirtî biparêze.

Beriya hackathonê jî, me biryar da ku çarçoveya Serverless ku em ê bikar bînin. Îro li ser sûkê gelek teknolojiyên ku vê nêzîkbûnê bicîh dikin hene. Di nav mîmariya Kubernetes de çareseriyên herî populer Fission, Open FaaS û Kubeless in. Heta hene gotara baş bi danasîna wan û analîza berawirdî.

Piştî ku em hemî erênî û neyînî nirxand, me hilbijart Fissiation. Vê çarçoweya Serverless ji bo birêvebirinê pir hêsan e û hewcedariyên peywirê pêk tîne.

Ji bo ku hûn bi Fission re bixebitin, hûn hewce ne ku du têgehên bingehîn fam bikin: fonksiyon û hawîrdor. Fonksiyon perçeyek kodê ye ku bi yek ji zimanên ku jê re hawîrdorek Fission heye hatî nivîsandin. Lîsteya hawîrdorên ku di vê çarçoveyê de hatine bicihkirin Python, JS, Go, JVM û gelek ziman û teknolojiyên din ên populer hene.

Fission di heman demê de karibe fonksiyonên ku li çend pelan hatine dabeş kirin, di nav arşîvek de pêş-pakkirî pêk bîne. Operasyona Fission di komek Kubernetes de ji hêla podên pispor ve, yên ku ji hêla çarçoveyek bixwe ve têne rêve kirin ve tête peyda kirin. Ji bo ku hûn bi pêlên komê re têkilî daynin, pêdivî ye ku her fonksiyonek riya xwe were veqetandin, û hûn dikarin di doza daxwazek POST de parametreyên GET derbas bikin an laşê daxwaz bikin.

Wekî encamek, me plan kir ku em çareseriyek bi dest bixin ku dê rê bide analîstan ku bêyî tevlêbûna endezyar û pêşdebiran rêzikên pêşkeftî bicîh bikin. Nêzîkatiya diyarkirî di heman demê de hewcedariya pêşdebiran ku koda analîstê li zimanek din ji nû ve binivîsin jî ji holê radike. Mînakî, ji bo pergala biryargirtinê ya heyî ku em bikar tînin, divê em bi teknolojiyên pir pispor û zimanên qaîdeyan binivîsin, ku çarçoweya wan pir kêm e, û di heman demê de bi servera serîlêdanê ve girêdayîyek xurt heye, ji ber ku hemî pêşnumayên qaîdeyên bankê di yek hawîrdorê de têne belav kirin. Wekî encamek, ji bo bicîhkirina qaîdeyên nû, pêdivî ye ku tevahiya pergalê were berdan.

Di çareseriya meya pêşniyarkirî de, ne hewce ye ku qaîdeyên serbest werin berdan; kod dikare bi klîkek bişkojkê bi hêsanî were saz kirin. Di heman demê de, rêveberiya binesaziyê li Kubernetes dihêle hûn li ser barkirin û pîvandinê nefikirin; Pirsgirêkên weha li derveyî qutiyê têne çareser kirin. Û karanîna depoyek daneya yekane hewcedariya berhevdana daneyên rast-dem-ê bi daneyên dîrokî re ji holê radike, ku ev karê analîstê hêsan dike.

Tiştê ku me girt

Ji ber ku em bi çareseriyek amade (di xeyalên xwe de) hatin hackathonê, ya ku divê em bikin ev bû ku hemî ramanên xwe veguherînin xetên kodê.

Mifteya serkeftinê di her hackathon de amadekarî û plansaziyek baş e. Ji ber vê yekê, yekem tiştê ku me kir ev bû ku biryar da ku mîmariya pergala me ji kîjan modulan pêk were û em ê çi teknolojiyê bikar bînin.

Mîmariya projeya me wiha bû:

Me çawa ewr FaaS di hundurê Kubernetes de çêkir û Hackathon Tinkoff qezenc kir
Ev diagram du xalên têketinê nîşan dide, analîst (bikarhênerê sereke yê pergala me) û xerîdar.

Pêvajoya xebatê bi vî rengî hatiye avakirin. Analîst ji bo modela xwe fonksiyonek qaîdeyê û fonksiyonek dewlemendkirina daneyê pêşdixe, koda xwe di depoyek Git de hilîne, û modela xwe bi navgîniya serîlêdana rêveberê li ewr bi cih dike. Ka em binihêrin ka dê fonksiyona hatî saz kirin çawa were gazî kirin û li ser daxwazên gihîştî yên xerîdar biryar bidin:

  1. Xerîdar formek li ser malperê dadigire û daxwaza xwe ji kontrolker re dişîne. Serlêdanek ku li ser pêdivî ye ku biryarek were girtin têketina pergalê û bi forma xweya orjînal di databasê de tê tomar kirin.
  2. Dûv re, heke hewce be, daxwaza xav ji bo dewlemendkirinê tê şandin. Hûn dikarin daxwaza destpêkê bi daneyan hem ji karûbarên derveyî û hem jî ji hilanînê zêde bikin. Lêpirsîna dewlemendkirî ya encam jî di databasê de tê hilanîn.
  3. Fonksiyona analîstê tê destpêkirin, ku pirsek dewlemendkirî wekî têketinê digire û çareseriyek çêdike, ku ew jî li hilanînê tê nivîsandin.

Me biryar da ku em MongoDB-ê wekî hilanînê di pergala xwe de bikar bînin ji ber hilanîna daneyan-ahengdar a daneyan di forma belgeyên JSON de, ji ber ku karûbarên dewlemendkirinê, tevî daxwaza orîjînal, hemî daneyan bi navgîniya kontrolkerên REST ve berhev kirin.

Ji ber vê yekê, XNUMX demjimêrên me hebûn ku platformê bicîh bikin. Me rol bi rengek serketî belav kir; her endamê tîmê di projeya me de qada xwe ya berpirsiyariyê hebû:

  1. Panelên rêveberiyê yên pêşîn ên ji bo xebata analîstê, bi navgîniya ku ew dikaribû qaîdeyan ji pergala kontrolkirina versiyonê ya nivîsarên nivîskî dakêşand, vebijarkên ji bo dewlemendkirina daneya têketinê hilbijêrin û nivîsarên qaîdeyê serhêl biguhezîne.
  2. Rêvebirê Backend, di nav de REST API ji bo pêş û yekbûna bi VCS re.
  3. Sazkirina binesaziyê li Google Cloud û pêşxistina karûbarek ji bo dewlemendkirina daneyên çavkaniyê.
  4. Modulek ji bo yekkirina serîlêdana rêveberiyê bi çarçoweya Serverless re ji bo bicîhkirina rêgezên paşîn.
  5. Nivîsarên qaîdeyên ji bo ceribandina performansa tevahiya pergalê û berhevkirina analîtîkan li ser sepanên hatinî (biryarên hatine girtin) ji bo xwenîşandana paşîn.

Ka em bi rêzdarî dest pê bikin.

Pêşiya me di Angular 7 de bi karanîna Kit UI ya bankingê hate nivîsandin. Guhertoya paşîn a panela rêveberiyê wiha xuya bû:

Me çawa ewr FaaS di hundurê Kubernetes de çêkir û Hackathon Tinkoff qezenc kir
Ji ber ku dem hindik bû, me hewl da ku tenê fonksiyona sereke bicîh bînin. Ji bo bicîhkirina fonksiyonek di koma Kubernetes de, pêdivî bû ku bûyerek (karûbarek ku pêdivî ye ku rêgezek di ewrê de were bicîh kirin) û koda fonksiyonê ya ku mantiqa biryardanê pêk tîne hilbijêrin. Ji bo her danîna qaîdeyek ji bo karûbarê hilbijartî, me qeydek vê bûyerê nivîsand. Di panela rêveberiyê de hûn dikarin têketinên hemî bûyeran bibînin.

Hemî koda fonksiyonê di depoyek Git-a dûr de hate hilanîn, ku di heman demê de pêdivî bû ku di panela rêveberiyê de were danîn. Ji bo guhertoya kodê, hemî fonksiyon di şaxên cihêreng ên depoyê de hatin hilanîn. Panela rêveberiyê di heman demê de şiyana çêkirina verastkirinên nivîsarên nivîskî peyda dike, ji ber vê yekê berî ku hûn fonksiyonek hilberandinê bicîh bikin, hûn ne tenê dikarin koda nivîskî kontrol bikin, lê di heman demê de guhertinên pêwîst jî bikin.

Me çawa ewr FaaS di hundurê Kubernetes de çêkir û Hackathon Tinkoff qezenc kir
Digel fonksiyonên qaîdeyan, me di heman demê de şiyana dewlemendkirina hêdî hêdî daneyên çavkaniyê bi karanîna fonksiyonên Zehfkirinê jî bicîh kir, koda ku di heman demê de skrîptên ku tê de gengaz bû ku biçin depoya daneyê, gazî karûbarên sêyemîn bikin û hesabên pêşîn pêk bînin. . Ji bo ku çareseriya xwe nîşan bide, me nîşana zodiacê ya xerîdar ku daxwaz hiştiye hesab kir û operatorê xweya mobîl bi karanîna karûbarek REST-ya sêyemîn destnîşan kir.

Piştgiriya platformê di Java de hate nivîsandin û wekî serîlêdana Spring Boot hate bicîh kirin. Me di destpêkê de plan kir ku em Postgres bikar bînin da ku daneyên rêveberê hilînin, lê, wekî beşek ji hackathon, me biryar da ku em xwe bi H2-yek hêsan sînordar bikin da ku wext xilas bikin. Li ser piştê, entegrasyona bi Bitbucket re ji bo guhertoya fonksiyonên dewlemendkirina pirsê û nivîsarên qaîdeyê hate bicîh kirin. Ji bo entegrasyonê bi depoyên Git-ê yên dûr, me bikar anî Pirtûkxaneya JGit, ku cûreyek pêça li ser fermanên CLI-yê ye, ku dihêle hûn bi karanîna navgînek nermalava hêsan her rêwerzên git-ê bicîh bikin. Ji ber vê yekê me du depoyên cihêreng ên ji bo fonksiyon û rêzikên dewlemendkirinê hebûn, û hemî senaryo li pelrêçan hatin dabeş kirin. Bi navgîniya UI-yê ve gengaz bû ku meriv peywira herî dawî ya skrîptek şaxek kêfî ya depoyê hilbijêrin. Dema ku bi navgîniya panela rêveberiyê ve di kodê de guheztin çêdibe, peywirên koda guhertî di depoyên dûr de hatine afirandin.

Ji bo bicihanîna fikra me, pêwîstiya me bi binesaziya guncaw hebû. Me biryar da ku koma xweya Kubernetes di ewrê de bi cih bikin. Hilbijartina me Google Cloud Platform bû. Çarçoveya bê servera Fission li ser komek Kubernetes hate saz kirin, ku me li Gcloud bicîh kir. Di destpêkê de, karûbarê dewlemendkirina daneya çavkaniyê wekî serîlêdanek Java-ya veqetandî ya ku di Podek di hundurê koma k8s de hatî pêçandî hate bicîh kirin. Lê piştî xwenîşandanek pêşîn a projeya me di nîvê hackathonê de, ji me re hate pêşniyar kirin ku karûbarê Zehfkirinê maqûltir bikin da ku fersendê peyda bikin ku em hilbijêrin ka meriv çawa daneya xav a serîlêdanên hatî dewlemendtir bike. Û me neçar ma ku karûbarê dewlemendkirinê jî bê Server bikin.

Ji bo ku bi Fission re bixebitin, me Fission CLI bikar anî, ku divê li ser Kubernetes CLI were saz kirin. Bicihkirina fonksiyonan di komek k8s de pir hêsan e; hûn tenê hewce ne ku rêyek hundurîn veqetînin û têkevin fonksiyonê da ku rê bidin seyrûsefera hatinê heke gihîştina derveyî komê hewce be. Bicihkirina yek fonksiyonê bi gelemperî ji 10 çirkeyan zêdetir nake.

Pêşandana dawî ya projeyê û kurtkirin

Ji bo ku nîşan bidin ka pergala me çawa dixebite, me formek hêsan li ser serverek dûr xistiye ku hûn dikarin ji bo yek ji hilberên bankê serîlêdanek bişînin. Ji bo daxwazkirinê, pêdivî bû ku hûn destpêkê, dîroka jidayikbûnê û jimara têlefonê binivîsin.

Daneyên ji forma xerîdar çû ser kontrolkerê, ku di heman demê de ji bo hemî qaîdeyên berdest daxwaz şandin, ku berê daneyan li gorî mercên diyarkirî dewlemend kir, û wan di depoyek hevpar de hilanî. Bi tevahî, me sê fonksiyonên ku li ser serîlêdanên hatinî û 4 karûbarên dewlemendkirina daneyê biryar didin, bicîh kirin. Piştî şandina serîlêdanê, xerîdar biryara me wergirt:

Me çawa ewr FaaS di hundurê Kubernetes de çêkir û Hackathon Tinkoff qezenc kir
Digel redkirin an pejirandinê, xerîdar navnîşek hilberên din jî wergirt, daxwazên ku me paralel şandin. Bi vî rengî me di platforma xwe de îhtîmala firotana xaçerê nîşan da.

Bi tevahî 3 hilberên bankê yên xeyalî hene:

  • Krêdî.
  • Toy
  • Dehnê ser mal.

Di dema xwenîşandanê de, me ji bo her karûbarek fonksiyonên amadekirî û skrîptên dewlemendkirinê danîn.

Her qaîdeyek komek daneyên xweya têketinê hewce dike. Ji ber vê yekê, ji bo pejirandina îpotekek, me nîşana zodiacê ya xerîdar hesab kir û vê yekê bi mantiqa salnameya heyvê ve girêda. Ji bo pejirandina pêlîstokek, me kontrol kir ku xerîdar gihîştiye temenê mezin, û ji bo dayîna deynek, me daxwaznameyek ji karûbarê vekirî ya derveyî re şand ji bo destnîşankirina operatorê hucreyê, û biryarek li ser hate girtin.

Me hewl da ku xwenîşandana xwe balkêş û înteraktîf bikin, her kesê ku amade bû dikare biçe forma me û hebûna karûbarên me yên xeyalî ji wan re kontrol bike. Û di dawiya pêşkêşiyê de, me analîtîkên serîlêdanên wergirtî destnîşan kir, ku nîşan dide ka çend kes karûbarê me, hejmara pejirandin û redkirinê bikar anîne.

Ji bo berhevkirina analîtîkên serhêl, me wekî din amûrek BI-ya çavkaniyek vekirî bicîh kir Metabase û ew li yekîneya meya hilanînê xist. Metabase dihêle hûn li ser daneyên ku me eleqedar dikin ekranên analîtîk ava bikin; hûn tenê hewce ne ku pêwendiyek bi databasê re tomar bikin, tabloyan hilbijêrin (di doza me de berhevokên daneyê, ji ber ku me MongoDB bikar anî), û qadên eleqedar ji me re diyar bikin. .

Wekî encamek, me prototîpek baş a platformek biryargirtinê wergirt, û di dema xwenîşandanê de, her guhdarek bi kesane dikare performansa xwe kontrol bike. Çareseriyek balkêş, prototîpek qedandî û xwenîşandanek serketî hişt ku em bi ser bikevin, tevî pêşbaziya bihêz a tîmên din. Ez bawer im ku li ser projeya her tîmê dikare gotarek balkêş jî were nivîsandin.

Source: www.habr.com

Add a comment