Wéi mir Cloud FaaS bannent Kubernetes gemaach hunn an den Tinkoff Hackathon gewonnen hunn

Wéi mir Cloud FaaS bannent Kubernetes gemaach hunn an den Tinkoff Hackathon gewonnen hunn
Vum leschte Joer un huet eis Firma ugefaang Hackathons ze organiséieren. Déi éischt esou Concours war ganz erfollegräich, mir geschriwwen doriwwer an Artikel. Den zweeten Hackathon huet am Februar 2019 stattfonnt a war net manner erfollegräich. Iwwer d'Ziler vun der leschter net sou laang virun ze halen geschriwwen Organisateur.

D'Participanten kruten eng zimlech interessant Aufgab mat voller Fräiheet beim Choix vun engem Technologiestack fir seng Ëmsetzung. Et war néideg fir eng Entscheedungsplattform ze implementéieren fir eng bequem Ausbreedung vu Client Scoring Funktiounen, déi mat engem schnelle Flux vun Uwendungen funktionnéiere kënnen, schwéier Laaschten ausstoen, an de System selwer war liicht skalierbar.

D'Aufgab ass net-trivial a kann op vill Manéiere geléist ginn, wéi mir während der Demonstratioun vun der Finale Presentatioun vun de Projete vun de Participanten iwwerzeegt waren. Um Hackathon waren 6 Equippe vu 5 Leit, all Participanten haten gutt Projeten, mee eis Plattform huet sech déi kompetitivst gewisen. Mir hunn e ganz interessante Projet, iwwer deen ech gären an dësem Artikel schwätzen.

Eis Léisung ass eng Plattform baséiert op Serverless Architektur bannent Kubernetes, déi d'Zäit reduzéiert déi et brauch fir nei Features an d'Produktioun ze bréngen. Et erlaabt Analysten Code ze schreiwen an engem Ëmfeld bequem fir si an et an d'Produktioun ofsetzen ouni d'Participatioun vun Ingenieuren an Entwéckler.

Wat ass Scoring

Tinkoff.ru, wéi vill modern Firmen, huet Client Scoring. Scoring ass e Client Bewäertungssystem baséiert op statistesche Methoden fir Datenanalyse.

Zum Beispill, dréit e Client un eis mat enger Demande him e Prêt auszeginn, oder en individuellen Entrepreneur Kont mat eis opzemaachen. Wa mir plangen him e Prêt ze erausginn, da musse mir seng Solvabilitéit bewäerten, a wann de Kont en individuellen Entrepreneur ass, da musse mir sécher sinn datt de Client keng betrügeresch Transaktiounen mécht.

D'Basis fir sou Entscheedungen ze treffen si mathematesch Modeller déi souwuel d'Daten aus der Applikatioun selwer an d'Daten aus eiser Späichere analyséieren. Zousätzlech zum Scoring kënnen ähnlech statistesch Methoden och am Service benotzt ginn fir individuell Empfehlungen fir nei Produkter fir eis Clienten ze generéieren.

D'Method vun esou enger Bewäertung kann eng Vielfalt vun Inputdaten akzeptéieren. An iergendwann kënne mir en neie Parameter fir den Input addéieren, deen, baséiert op d'Resultater vun der Analyse op historeschen Donnéeën, d'Konversiounsquote vum Gebrauch vum Service erhéijen.

Mir halen e Räichtum vun Daten iwwer Clientsbezéiungen, an de Volume vun dëser Informatioun wiisst konstant. Fir d'Score fir ze schaffen, erfuerdert d'Dateveraarbechtung och Reegelen (oder mathematesch Modeller), déi Iech erlaben séier ze entscheeden wien eng Demande guttgeheescht, wien ze refuséieren, a wien e puer méi Produkter ubidden, hir potenziell Interesse beurteelen.

Fir d'Aufgab op der Hand, benotze mir schonn e spezialiséierten Entscheedungssystem IBM WebSphere ILOG JRules BRMS, déi, baséiert op de Regelen, déi vun Analysten, Technologen an Entwéckler festgeluegt sinn, entscheeden ob e bestëmmte Bankprodukt dem Client zoustëmmen oder refuséieren.

Et gi vill fäerdeg Léisungen um Maart, souwuel Scoringmodeller an Entscheedungssystemer selwer. Mir benotzen ee vun dëse Systemer an eiser Firma. Awer d'Geschäft wiisst, diversifizéiert, souwuel d'Zuel vun de Clienten wéi och d'Zuel vun de proposéierte Produkter ginn erop, a mat dësem entstinn Iddien wéi een den existente Entscheedungsprozess verbessert. Sécher hunn d'Leit, déi mam existente System schaffen, vill Iddien wéi et méi einfach, besser, méi praktesch ze maachen, awer heiansdo sinn Iddie vu baussen nëtzlech. Den Neie Hackathon gouf organiséiert mam Zil, gutt Iddien ze sammelen.

D'Aufgab

Den Hackathon gouf den 23. Februar ofgehalen. D'Participanten kruten eng Kampfaufgab ugebueden: en Entscheedungssystem z'entwéckelen, deen eng Rei vu Bedéngungen erfëllen muss.

Mir krute gesot wéi de existente System funktionnéiert a wéi eng Schwieregkeete während senger Operatioun entstinn, wéi och wéi eng Geschäftsziler déi entwéckelt Plattform soll verfollegen. De System muss e séieren Zäit-ze-Maart fir Reegelen entwéckelen, sou datt den Aarbechtscode vun Analysten esou séier wéi méiglech an d'Produktioun kënnt. A fir den erakommende Flux vun Uwendungen soll d'Entscheedungszäit op e Minimum tendéieren. Och de System, deen entwéckelt gëtt, muss Cross-Sell-Kapazitéiten hunn, fir dem Client d'Méiglechkeet ze ginn aner Firmeprodukter ze kafen, wa se vun eis guttgeheescht ginn an potenziell Interesse vum Client hunn.

Et ass kloer datt et onméiglech ass e fäerdege Projet iwwer Nuecht ze schreiwen, dee sécher an d'Produktioun geet, an et ass zimlech schwéier de ganze System ze decken, sou datt mir gefrot goufen op d'mannst en Deel dovun ëmzesetzen. Eng Rei Ufuerderunge goufen etabléiert, déi de Prototyp erfëllen muss. Et war méiglech souwuel ze probéieren all Ufuerderungen an hirer Ganzheet ze decken, an am Detail op eenzel Sektioune vun der Plattform ze schaffen, déi entwéckelt gëtt.

Wat d'Technologie ugeet, kruten all Participanten eng komplett Wahlfräiheet. Et war méiglech all Konzepter an Technologien ze benotzen: Datastreaming, Maschinnléieren, Eventsourcing, Big Data an anerer.

Eis Léisung

No e bësse Brainstorming hu mir décidéiert datt eng FaaS Léisung ideal wier fir d'Aufgab ze kompletéieren.

Fir dës Léisung war et néideg e passenden Serverless Kader ze fannen fir d'Regele vum Entscheedungssystem ze implementéieren deen entwéckelt gëtt. Zënter Tinkoff aktiv Kubernetes fir Infrastrukturverwaltung benotzt, hu mir e puer fäerdeg Léisungen op der Basis gekuckt; Ech soen Iech méi spéit méi doriwwer.

Fir déi effektivst Léisung ze fannen, hu mir d'Produkt gekuckt, dat duerch d'Ae vu senge Benotzer entwéckelt gëtt. D'Haaptbenotzer vun eisem System sinn Analysten, déi an der Regelentwécklung involvéiert sinn. D'Regele mussen op de Server ofgesat ginn, oder, wéi an eisem Fall, an der Wollek ofgesat ginn, fir spéider Entscheedungen ze treffen. Aus der Perspektiv vun engem Analyst gesäit de Workflow esou aus:

  1. Den Analyst schreift e Skript, Regel oder ML Modell baséiert op Daten aus dem Lager. Als Deel vum Hackathon hu mir decidéiert Mongodb ze benotzen, awer d'Wiel vum Datespeichersystem ass hei net wichteg.
  2. Nom Test vun den entwéckelte Reegelen iwwer historesch Daten, lued den Analyst säi Code op d'Administratiounspanel erop.
  3. Fir d'Versioun ze garantéieren, geet all Code op Git Repositories.
  4. Duerch den Admin Panel ass et méiglech de Code an der Wollek als separat funktionell Serverless Modul z'installéieren.

Déi initial Donnéeë vu Cliente mussen duerch e spezialiséierte Beräicherungsservice passéieren entworf fir déi initial Ufro mat Daten aus dem Lager ze beräicheren. Et war wichteg dëse Service esou ëmzesetzen datt et mat engem eenzege Repository funktionnéiert (aus deem den Analyst Daten hëlt wann Dir Regelen entwéckelt) fir eng vereenegt Datestruktur z'erhalen.

Och virum Hackathon hu mir de Serverless Kader decidéiert dee mir benotze géifen. Haut ginn et zimmlech vill Technologien um Maart déi dës Approche implementéieren. Déi populärste Léisunge bannent der Kubernetes Architektur sinn Fission, Open FaaS a Kubeless. Et gëtt souguer gudden Artikel mat hirer Beschreiwung a komparativer Analyse.

Nodeems mir all d'Virdeeler an Nodeeler ofgewiicht hunn, hu mir gewielt Spär. Dëse Serverless Kader ass zimmlech einfach ze managen an entsprécht den Ufuerderunge vun der Aufgab.

Fir mat Fission ze schaffen, musst Dir zwee Basiskonzepter verstoen: Funktioun an Ëmfeld. Eng Funktioun ass e Stéck Code geschriwwen an enger vun de Sprooche fir déi et e Fission Ëmfeld gëtt. Lëscht vun Ëmfeld an dësem Kader ëmgesat enthält Python, JS, Go, JVM a vill aner populär Sproochen an Technologien.

Fission ass och fäeg Funktiounen auszeféieren opgedeelt a verschidde Dateien, virverpackt an en Archiv. D'Operatioun vu Fission an engem Kubernetes-Cluster gëtt duerch spezialiséiert Pods gesuergt, déi vum Kader selwer geréiert ginn. Fir mat Cluster Pods ze interagéieren, muss all Funktioun seng eege Streck zougewisen ginn, an op déi Dir GET Parameteren passéiere kënnt oder Kierper ufroen am Fall vun enger POST Ufro.

Als Resultat hu mir geplangt eng Léisung ze kréien, déi Analysten erlaabt entwéckelt Regelskripter z'installéieren ouni d'Participatioun vun Ingenieuren an Entwéckler. Déi beschriwwe Approche eliminéiert och d'Notzung fir d'Entwéckler fir den Analystcode an eng aner Sprooch ëmzeschreiwen. Zum Beispill, fir den aktuellen Entscheedungssystem, dee mir benotzen, musse mir Regelen an héich spezialiséiert Technologien a Sproochen schreiwen, den Ëmfang vun deenen extrem limitéiert ass, an et gëtt och eng staark Ofhängegkeet vum Applikatiounsserver, well all Entworf Bankregelen sinn an engem eenzegen Ëmfeld ofgesat. Als Resultat, fir nei Regelen z'installéieren ass et néideg de ganze System ze befreien.

An eiser proposéierter Léisung ass et net néideg Reegelen ze verëffentlechen; de Code kann einfach mat engem Klick op e Knäppchen ofgebaut ginn. Och d'Infrastrukturmanagement a Kubernetes erlaabt Iech net iwwer d'Laascht an d'Skaléierung ze denken; sou Probleemer ginn aus der Këscht geléist. An d'Benotzung vun engem eenzegen Datelager eliminéiert d'Notzung fir Echtzäitdaten mat historeschen Daten ze vergläichen, wat d'Aarbecht vum Analyst vereinfacht.

Wat mir hunn

Well mir op den Hackathon komm sinn mat enger fäerdeger Léisung (an eise Phantasien), alles wat mir hu misse maachen war all eis Gedanken a Codelinnen ëmsetzen.

De Schlëssel zum Erfolleg bei all Hackathon ass Virbereedung an e gutt geschriwwene Plang. Dofir war dat éischt wat mir gemaach hunn entscheeden aus wéi enge Moduler eis Systemarchitektur besteet aus a wéi eng Technologien mir benotze wäerten.

D'Architektur vun eisem Projet war wéi follegt:

Wéi mir Cloud FaaS bannent Kubernetes gemaach hunn an den Tinkoff Hackathon gewonnen hunn
Dëst Diagramm weist zwee Entréespunkten, den Analyst (den Haaptbenotzer vun eisem System) an de Client.

Den Aarbechtsprozess ass esou strukturéiert. Den Analyst entwéckelt eng Regelfunktioun an eng Dateberäicherungsfunktioun fir säi Modell, späichert säi Code an engem Git Repository, an deployéiert säi Modell an d'Wollek duerch d'Administrateurapplikatioun. Loosst eis betruechten wéi déi ofgebauter Funktioun genannt gëtt an Entscheedungen iwwer erakommen Ufroe vu Clienten treffen:

  1. De Client fëllt e Formulaire op der Websäit aus a schéckt seng Ufro un de Controller. Eng Applikatioun, op där eng Entscheedung getraff muss ginn, kënnt op de Systeminput a gëtt an der Datebank a senger ursprénglecher Form opgeholl.
  2. Als nächst gëtt déi rau Ufro fir d'Beräicherung geschéckt, wann néideg. Dir kënnt déi initial Ufro mat Daten souwuel vun externen Servicer wéi och vun der Späichere ergänzen. Déi resultéierend beräichert Ufro gëtt och an der Datebank gespäichert.
  3. D'Analysefunktioun gëtt gestart, déi eng beräichert Ufro als Input hëlt an eng Léisung produzéiert, déi och op d'Späichere geschriwwe gëtt.

Mir hunn decidéiert MongoDB als Lagerung an eisem System ze benotzen wéinst der dokumentorientéierter Späichere vun Daten a Form vun JSON Dokumenter, well d'Beräicherungsservicer, inklusiv déi ursprénglech Ufro, all Daten duerch REST Controller aggregéiert hunn.

Also hu mir XNUMX Stonnen Zäit fir d'Plattform ëmzesetzen. Mir hunn d'Rollen zimlech erfollegräich verdeelt; all Teammember hat säin eegene Verantwortungsberäich an eisem Projet:

  1. Front-End Admin Panels fir d'Aarbecht vum Analyst, duerch déi hien d'Regele vum Versiounskontrollsystem vu schrëftleche Skripte eroflueden konnt, Optiounen auswielen fir d'Inputdaten ze beräicheren an d'Regelskript online z'änneren.
  2. Backend Admin, dorënner REST API fir d'Front an Integratioun mat VCS.
  3. Infrastruktur a Google Cloud opsetzen an e Service entwéckelen fir Quelldaten ze beräicheren.
  4. E Modul fir d'Integratioun vun der Administratiounsapplikatioun mam Serverless Framework fir spéider Deployment vu Regelen.
  5. Skripte vu Regelen fir d'Performance vum ganze System ze testen an d'Aggregatioun vun der Analytik op erakommen Uwendungen (Entscheedungen getraff) fir d'Finale Demonstratioun.

Loosst eis ufänken an der Rei.

Eis Frontend gouf am Angular 7 geschriwwe mat dem Banking UI Kit. Déi lescht Versioun vum Admin Panel huet sou ausgesinn:

Wéi mir Cloud FaaS bannent Kubernetes gemaach hunn an den Tinkoff Hackathon gewonnen hunn
Well et wéineg Zäit war, hu mir probéiert nëmmen déi Schlësselfunktionalitéit ëmzesetzen. Fir eng Funktioun am Kubernetes Cluster z'installéieren, war et néideg fir en Event ze wielen (e Service fir deen eng Regel an der Wollek agesat muss ginn) an de Code vun der Funktioun déi d'Entscheedungslogik implementéiert. Fir all Détachement vun enger Regel fir de gewielte Service hu mir e Logbuch vun dësem Event geschriwwen. Am Admin Panel kënnt Dir Logbicher vun all Eventer gesinn.

All Funktiounscode gouf an engem Remote Git Repository gespäichert, deen och an der Admin Panel gesat gouf. Fir de Code ze Versioun, goufen all Funktiounen a verschiddene Filialen vum Repository gelagert. D'Admin Panel bitt och d'Fäegkeet fir Upassunge fir schrëftlech Scripten ze maachen, sou datt Dir ier Dir eng Funktioun op d'Produktioun ofsetzt, net nëmmen de schrëftleche Code iwwerpréift, awer och déi néideg Ännerungen maachen.

Wéi mir Cloud FaaS bannent Kubernetes gemaach hunn an den Tinkoff Hackathon gewonnen hunn
Zousätzlech zu de Regelefunktiounen hu mir och d'Fäegkeet ëmgesat fir d'Quelldaten graduell mat Hëllef vu Beräicherungsfunktiounen ze beräicheren, de Code vun deem war och Skripte an deenen et méiglech war an d'Datelager ze goen, Drëtt Partei Servicer ze ruffen an virleefeg Berechnungen auszeféieren. . Fir eis Léisung ze demonstréieren, hu mir d'Zeeche vum Zodiac vum Client berechent, deen d'Ufro hannerlooss huet a säi Mobiloperateur mat engem Drëtt-Partei REST-Service bestëmmt huet.

De Backend vun der Plattform gouf op Java geschriwwen an als Spring Boot Applikatioun implementéiert. Mir hunn ufanks geplangt Postgres ze benotzen fir Admindaten ze späicheren, awer als Deel vum Hackathon hu mir beschloss eis op en einfachen H2 ze limitéieren fir Zäit ze spueren. Um Backend gouf d'Integratioun mat Bitbucket fir d'Versioun vun den Ufro-Beräicherungsfunktiounen a Regelskripter ëmgesat. Fir Integratioun mat Remote Git Repositories, hu mir benotzt JGit Bibliothéik, wat eng Aart Wrapper iwwer CLI Kommandoen ass, wat Iech erlaabt all Git-Instruktioune mat enger praktescher Software-Interface auszeféieren. Also hu mir zwee separat Repositories fir Beräicherungsfunktiounen a Reegelen, an all d'Skripte goufen an Verzeichnisser opgedeelt. Duerch d'UI war et méiglech déi lescht Verpflichtung vun engem Skript vun enger arbiträrer Filial vum Repository ze wielen. Wann Dir Ännerunge vum Code duerch den Admin Panel maacht, goufen d'Verpflichtunge vum geännerten Code an Remote Repositories erstallt.

Fir eis Iddi ëmzesetzen, hu mir eng passend Infrastruktur gebraucht. Mir hunn decidéiert eise Kubernetes Cluster an der Wollek z'installéieren. Eis Wiel war Google Cloud Plattform. De Fission-serverlosen Kader gouf op engem Kubernetes-Cluster installéiert, dee mir a Gcloud ofgesat hunn. Am Ufank gouf de Quelldatenberäicherungsservice als eng separat Java Applikatioun implementéiert, déi an engem Pod am k8s Cluster gewéckelt ass. Awer no enger virleeflecher Demonstratioun vun eisem Projet an der Mëtt vum Hackathon, goufe mir empfohlen, den Enrichment Service méi flexibel ze maachen fir d'Méiglechkeet ze wielen, wéi d'Rohdaten vun erakommen Applikatiounen beräichert ginn. A mir hu keng aner Wiel wéi de Beräicherungsservice och Serverlos ze maachen.

Fir mat Fission ze schaffen, hu mir de Fission CLI benotzt, deen uewen op der Kubernetes CLI installéiert muss ginn. Fonctiounen an e k8s Cluster z'installéieren ass zimmlech einfach; Dir musst just eng intern Streck an d'Ingressioun un d'Funktioun zouweisen fir den enkommende Traffic z'erméiglechen wann Zougang ausserhalb vum Cluster gebraucht gëtt. Eng Funktioun z'installéieren dauert normalerweis net méi wéi 10 Sekonnen.

Final Presentatioun vum Projet a Resumé

Fir ze demonstréieren wéi eise System funktionnéiert, hu mir en einfache Formulaire op engem Fernserver gesat, wou Dir eng Demande fir ee vun de Bankprodukter kënnt ofginn. Fir ze froen, musst Dir Är Initialen, Gebuertsdatum an Telefonsnummer aginn.

D'Donnéeën aus der Clientform sinn un de Controller gaangen, deen gläichzäiteg Ufroe fir all verfügbare Reegelen geschéckt huet, déi d'Donnéeën virdru no de spezifizéierte Konditioune beräichert hunn an se an enger gemeinsamer Späichere gespäichert hunn. Am Ganzen hu mir dräi Funktiounen ofgesat, déi Entscheedungen iwwer erakommen Uwendungen a 4 Dateberäicherungsservicer huelen. Nom Ofschloss vun der Demande krut de Client eis Entscheedung:

Wéi mir Cloud FaaS bannent Kubernetes gemaach hunn an den Tinkoff Hackathon gewonnen hunn
Zousätzlech zu Refus oder Genehmegung, krut de Client och eng Lëscht vun anere Produkter, Ufroe fir déi mir parallel geschéckt hunn. Dëst ass wéi mir d'Méiglechkeet vum Cross-Sale an eiser Plattform bewisen hunn.

Et waren am Ganzen 3 fiktiv Bankprodukter verfügbar:

  • Kredit.
  • Toy
  • Prêt.

Wärend der Demonstratioun hu mir virbereet Funktiounen a Beräicherungsskripte fir all Service ofgesat.

All Regel erfuerdert säin eegene Set vun Inputdaten. Also, fir eng Hypothéik z'approuvéieren, hu mir d'Zeeche vum Zodiac vum Client berechent an dëst mat der Logik vum Moundkalenner verbonnen. Fir e Spillsaach z'approuvéieren, hu mir gepréift datt de Client de Majoritéitsalter erreecht huet, a fir e Prêt auszeginn, hu mir eng Ufro un en externen oppene Service geschéckt fir de Cellulaire Bedreiwer ze bestëmmen, an eng Entscheedung gouf doriwwer gemaach.

Mir hu probéiert eis Demonstratioun interessant an interaktiv ze maachen, jidderee konnt sech op eise Formulaire goen an d'Disponibilitéit vun eise fiktiven Servicer fir si kucken. A ganz um Enn vun der Presentatioun hu mir d'Analyse vun den erhalenen Uwendungen demonstréiert, déi gewisen hunn wéi vill Leit eise Service benotzt hunn, d'Zuel vun den Genehmegungen a Refusen.

Fir Analyse online ze sammelen, hu mir zousätzlech en Open Source BI Tool ofgesat Metabase a geschrauft et op eis Späichereenheet. Metabase erlaabt Iech Bildschirmer mat Analytiken op d'Daten ze bauen déi eis interesséieren; Dir musst just eng Verbindung mat der Datebank registréieren, Dëscher auswielen (an eisem Fall Datesammlungen, well mir MongoDB benotzt hunn), a spezifizéieren d'Felder déi eis interesséieren. .

Als Resultat hu mir e gudde Prototyp vun enger Entscheedungsplattform kritt, a während der Demonstratioun konnt all Nolauschterer seng Leeschtung perséinlech iwwerpréiwen. Eng interessant Léisung, e fäerdege Prototyp an eng erfollegräich Demonstratioun hunn eis erlaabt trotz staarker Konkurrenz vun aneren Teams ze gewannen. Ech si sécher datt en interessanten Artikel och iwwer de Projet vun all Team geschriwwe ka ginn.

Source: will.com

Setzt e Commentaire