Kumaha urang ngadamel awan FaaS di jero Kubernetes sareng meunang hackathon Tinkoff

Kumaha urang ngadamel awan FaaS di jero Kubernetes sareng meunang hackathon Tinkoff
Dimimitian taun ka tukang, perusahaan urang mimiti ngatur hackathon. Kompetisi sapertos anu munggaran suksés pisan, kami nyerat ngeunaan éta artikel. Hackathon kadua lumangsung dina bulan Pebruari 2019 sareng henteu kurang suksés. Ngeunaan tujuan ngayakeun anu terakhir henteu lami pisan kuring nulis pangatur.

Para pamilon dibéré tugas anu rada pikaresepeun kalayan kabébasan lengkep dina milih tumpukan téknologi pikeun palaksanaanna. Ieu diperlukeun pikeun nerapkeun platform-nyieun kaputusan pikeun deployment merenah tina fungsi nyetak customer nu bisa digawekeun ku aliran gancang aplikasi, tahan beban beurat, sarta sistem sorangan gampang scalable.

Tugas téh non-trivial sarta bisa direngsekeun ku sababaraha cara, sakumaha kami yakin dina mangsa démo tina presentasi ahir proyék pamilon '. Aya 6 tim 5 urang di hackathon, sadaya pamilon ngagaduhan proyék anu saé, tapi platform kami janten anu paling kompetitif. Kami gaduh proyék anu pikaresepeun pisan, anu kuring badé ngobrolkeun dina tulisan ieu.

Solusi kami nyaéta platform dumasar kana arsitéktur Tanpa Server di jero Kubernetes, anu ngirangan waktos anu diperyogikeun pikeun ngahasilkeun fitur anyar. Hal ieu ngamungkinkeun analis nulis kode dina lingkungan merenah pikeun aranjeunna sarta nyebarkeun kana produksi tanpa partisipasi insinyur sarta pamekar.

Naon nyetak

Tinkoff.ru, sapertos seueur perusahaan modéren, gaduh skor palanggan. Skor nyaéta sistem penilaian palanggan dumasar kana métode statistik analisis data.

Salaku conto, hiji klien tos ka kami kalayan pamundut pikeun ngaluarkeun injeuman anjeunna, atanapi muka rekening pangusaha individu sareng kami. Upami urang ngarencanakeun ngaluarkeun pinjaman, maka urang kedah ngira-ngira solvency na, sareng upami akunna mangrupikeun pengusaha individu, maka urang kedah yakin yén klien moal ngalaksanakeun transaksi curang.

Dasar pikeun nyandak kaputusan sapertos kitu nyaéta modél matematika anu nganalisis data tina aplikasi sorangan sareng data tina panyimpenan urang. Salian nyetak, métode statistik sarupa ogé bisa dipaké dina layanan generating rekomendasi individu pikeun produk anyar pikeun klien kami.

Métode penilaian sapertos kitu tiasa nampi rupa-rupa data input. Sareng di sawatara titik urang tiasa nambihan parameter énggal kana input, anu, dumasar kana hasil analisa data sajarah, bakal ningkatkeun laju konvérsi ngagunakeun jasa éta.

Urang nyekel kabeungharan data ngeunaan hubungan customer, sarta volume informasi ieu terus tumuwuh. Pikeun nyetak tiasa dianggo, ngolah data ogé ngabutuhkeun aturan (atanapi modél matematika) anu ngamungkinkeun anjeun gancang mutuskeun saha anu bakal nyatujuan aplikasi, saha anu nolak, sareng saha anu nawiskeun sababaraha produk deui, ngira-ngira minat poténsialna.

Pikeun tugas di leungeun, urang geus ngagunakeun sistem-nyieun kaputusan husus IBM WebSphere ILOG JRules BRMS, nu, dumasar kana aturan diatur ku analis, technologists sarta pamekar, mutuskeun mun approve atawa nolak hiji produk perbankan husus ka klien nu.

Aya seueur solusi anu siap-siap di pasar, boh modél nyetak sareng sistem-nyieun kaputusan sorangan. Kami nganggo salah sahiji sistem ieu di perusahaan kami. Tapi bisnis ieu ngembang, diversifying, duanana jumlah klien tur jumlah produk ditawarkeun na ngaronjat, sarta babarengan jeung ieu, gagasan anu muncul dina kumaha carana ngaronjatkeun prosés-nyieun kaputusan aya. Pasti jalma-jalma anu damel sareng sistem anu tos aya seueur ideu kumaha cara ngajantenkeun langkung saderhana, langkung saé, langkung merenah, tapi kadang ideu ti luar aya mangpaatna. The New Hackathon diayakeun kalawan tujuan pikeun ngumpulkeun gagasan sora.

Tugas

Hackathon dilaksanakeun dina 23 Pebruari. Pamilon ditawarkeun tugas tempur: ngamekarkeun sistem-nyieun kaputusan anu kudu minuhan sababaraha kaayaan.

Kami disarioskeun kumaha fungsi sistem anu aya sareng kasusah naon anu timbul nalika operasina, kitu ogé tujuan bisnis naon anu kedah dilaksanakeun ku platform anu dikembangkeun. Sistim nu kudu boga waktu-ka-pasar gancang pikeun aturan ngembang ambéh kode kerja analis meunang kana produksi gancang-gancang. Sareng pikeun aliran aplikasi anu bakal datang, waktos pengambilan kaputusan kedah sakedik. Ogé, sistem anu dikembangkeun kedah gaduh kamampuan cross-sell supados masihan kasempetan ka klien mésér produk perusahaan sanés upami aranjeunna disatujuan ku kami sareng gaduh poténsi kapentingan ti klien.

Ieu jelas yén teu mungkin nulis hiji proyék siap-to-release sapeuting nu pasti bakal balik kana produksi, sarta éta rada hese nutupan sakabéh sistem, jadi kami dipenta pikeun nerapkeun sahenteuna bagian tina eta. Sajumlah sarat ditetepkeun yén prototipe kedah nyugemakeun. Ieu mungkin pikeun nyobaan duanana pikeun nutupan sakabéh sarat dina entirety maranéhanana, sarta digawé di jéntré dina bagian individu tina platform keur dimekarkeun.

Sedengkeun pikeun téknologi, sakabéh pamilon dibéré kabébasan pilihan lengkep. Éta mungkin ngagunakeun konsép sareng téknologi naon waé: Data streaming, mesin diajar, sumber acara, data gedé sareng anu sanésna.

Solusi urang

Saatos brainstorming saeutik, urang mutuskeun yén solusi FaaS bakal idéal pikeun ngalengkepan tugas.

Pikeun solusi ieu, peryogi milarian kerangka Serverless anu cocog pikeun ngalaksanakeun aturan sistem pembuatan kaputusan anu dikembangkeun. Kusabab Tinkoff aktip ngagunakeun Kubernetes pikeun manajemén infrastruktur, kami ningali sababaraha solusi anu siap-siap dumasar kana éta; Kuring bakal nyarioskeun ka anjeun langkung seueur ngeunaan éta engké.

Pikeun milarian solusi anu paling efektif, kami ningali produk anu dikembangkeun ku panon panggunana. Pamaké utama sistem kami nyaéta analis aub dina pangwangunan aturan. Aturan kudu disebarkeun ka server, atawa, sakumaha dina kasus urang, deployed dina awan, pikeun kaputusan-pembuatan saterusna. Tina sudut pandang analis, alur kerja sapertos kieu:

  1. Analis nyerat naskah, aturan, atanapi modél ML dumasar kana data tina gudang. Salaku bagian tina hackathon, kami mutuskeun pikeun ngagunakeun Mongodb, tapi pilihan sistem panyimpen data henteu penting di dieu.
  2. Saatos nguji aturan anu dikembangkeun dina data sajarah, analis unggah kode na ka panel admin.
  3. Pikeun mastikeun vérsi, sadaya kode bakal angkat ka repositori Git.
  4. Ngaliwatan panel admin bakal mungkin pikeun nyebarkeun kode dina awan salaku modul Serverless fungsi misah.

Data awal ti klien kudu ngaliwatan layanan Pengayaan husus dirancang enrich pamundut awal jeung data ti gudang. Penting pikeun nerapkeun jasa ieu ku cara anu bakal tiasa dianggo sareng gudang tunggal (ti mana analis nyandak data nalika ngembangkeun aturan) pikeun ngajaga struktur data ngahiji.

Malah sateuacan hackathon, urang mutuskeun dina kerangka Serverless anu bakal kami anggo. Kiwari, aya cukup loba téknologi dina pasaran anu nerapkeun pendekatan ieu. Solusi anu paling populér dina arsitektur Kubernetes nyaéta Fission, Open FaaS sareng Kubeless. Malah aya artikel alus kalawan pedaran maranéhanana sarta analisis komparatif.

Sanggeus timbangan sagala pro jeung kontra, urang milih Édisi. Kerangka Serverless ieu cukup gampang pikeun ngatur sareng nyumponan sarat tugas.

Pikeun damel sareng Fission, anjeun kedah ngartos dua konsép dasar: fungsi sareng lingkungan. Fungsi nyaéta sapotong kode anu ditulis dina salah sahiji basa anu aya lingkungan Fission. Daptar lingkungan anu dilaksanakeun dina kerangka ieu kalebet Python, JS, Go, JVM sareng seueur basa sareng téknologi populér sanés.

Fisi ogé mampuh ngajalankeun fungsi dibagi kana sababaraha file, tos rangkep kana arsip. Operasi Fission dina klaster Kubernetes dipastikeun ku pods khusus, anu diurus ku kerangka sorangan. Pikeun berinteraksi sareng klaster pods, unggal fungsi kudu ditugaskeun jalur sorangan, jeung nu bisa lulus GET parameter atawa pamundut awak dina kasus pamundut POST.

Hasilna, urang rencanana pikeun ménta solusi anu bakal ngidinan analis nyebarkeun naskah aturan dimekarkeun tanpa partisipasi insinyur sarta pamekar. Pendekatan anu dijelaskeun ogé ngaleungitkeun kabutuhan pamekar pikeun nulis ulang kode analis kana basa sanés. Contona, pikeun sistem-nyieun kaputusan ayeuna urang ngagunakeun, urang kudu nulis aturan dina téhnologi jeung basa kacida husus, ruang lingkup nu pisan kawates, sarta aya ogé gumantungna kuat dina server aplikasi, sabab sagala draf aturan bank. anu deployed dina lingkungan tunggal. Hasilna, pikeun nyebarkeun aturan anyar perlu ngaleupaskeun sakabéh sistem.

Dina solusi anu diusulkeun kami, henteu kedah ngaluarkeun aturan; kodeu tiasa gampang disebarkeun ku ngaklik tombol. Ogé, manajemén infrastruktur di Kubernetes ngamungkinkeun anjeun henteu mikirkeun beban sareng skala; masalah sapertos kitu direngsekeun kaluar tina kotak. Jeung pamakéan gudang data tunggal eliminates kudu ngabandingkeun data real-time jeung data sajarah, nu simplifies karya analis urang.

Naon urang meunang

Kusabab urang sumping ka hackathon kalayan solusi anu siap-siap (dina implengan urang), sadaya anu urang kedah laksanakeun nyaéta ngarobih sadayana pikiran urang kana garis kode.

Konci pikeun kasuksésan dina hackathon naon waé nyaéta persiapan sareng rencana anu ditulis kalayan saé. Ku alatan éta, hal kahiji anu urang laksanakeun nyaéta mutuskeun modul naon arsitéktur sistem kami bakal diwangun sareng téknologi naon anu bakal kami anggo.

Arsitéktur proyék kami nyaéta kieu:

Kumaha urang ngadamel awan FaaS di jero Kubernetes sareng meunang hackathon Tinkoff
Diagram ieu nunjukkeun dua titik éntri, analis (pamaké utama sistem kami) sareng klien.

Prosés gawé téh terstruktur kawas kieu. Analis ngamekarkeun fungsi aturan jeung fungsi pengayaan data pikeun model na, nyimpen kode na di gudang Git, sarta deploys model na ka awan ngaliwatan aplikasi administrator. Hayu urang nganggap kumaha fungsi deployed bakal disebut jeung nyieun kaputusan on requests asup ti klien:

  1. Klién ngeusian formulir dina situs wéb sareng ngirimkeun pamundutna ka controller. Aplikasi dimana kaputusan kedah dilakukeun sumping ka input sistem sareng kacatet dina pangkalan data dina bentuk aslina.
  2. Salajengna, pamundut atah dikirim pikeun pengayaan, upami diperlukeun. Anjeun tiasa nambihan pamundut awal ku data tina jasa éksternal sareng tina panyimpenan. query enriched hasilna ogé disimpen dina database.
  3. Fungsi analis dibuka, nu nyokot query enriched salaku input sarta ngahasilkeun solusi, nu ogé ditulis ka gudang.

Kami mutuskeun pikeun ngagunakeun MongoDB salaku panyimpen dina sistem kami kusabab panyimpen data berorientasi dokumen dina bentuk dokumén JSON, sabab jasa pengayaan, kalebet pamundut asli, ngahijikeun sadaya data ngalangkungan REST Controllers.

Janten, urang ngagaduhan XNUMX jam pikeun nerapkeun platform éta. Kami nyebarkeun peran anu cukup suksés; unggal anggota tim ngagaduhan tanggung jawab masing-masing dina proyék kami:

  1. Panels admin hareup-tungtung pikeun karya analis, ngaliwatan nu anjeunna bisa ngundeur aturan ti sistem kontrol versi tina Aksara ditulis, pilih pilihan pikeun enriching data input sarta ngédit Aksara aturan online.
  2. Admin backend, kalebet REST API pikeun payun sareng integrasi sareng VCS.
  3. Nyetél infrastruktur di Google Cloud sarta ngamekarkeun layanan pikeun enriching data sumber.
  4. Modul pikeun ngahijikeun aplikasi admin sareng kerangka Serverless pikeun panyebaran aturan salajengna.
  5. Skrip aturan pikeun nguji kinerja sakabéh sistem jeung aggregation of analytics on aplikasi asup (keputusan dijieun) pikeun démo final.

Hayu urang ngamimitian dina raraga.

Frontend kami ditulis dina Angular 7 nganggo Kit UI perbankan. Versi ahir panel admin katingali sapertos kieu:

Kumaha urang ngadamel awan FaaS di jero Kubernetes sareng meunang hackathon Tinkoff
Kusabab aya sakedik waktos, urang nyobian nerapkeun ukur fungsionalitas konci. Pikeun nyebarkeun hiji fungsi dina klaster Kubernetes, éta diperlukeun pikeun milih hiji acara (layanan nu aturan kudu deployed dina awan) jeung kodeu fungsi nu implements logika-nyieun kaputusan. Pikeun unggal panyebaran aturan pikeun jasa anu dipilih, kami nyerat log acara ieu. Dina panel admin anjeun tiasa ningali log sadaya kajadian.

Sadaya kode fungsi disimpen dina gudang Git jauh, anu ogé kedah disetél dina panel admin. Pikeun vérsi kodeu, sadaya fungsi disimpen dina cabang anu béda tina gudang. Panel admin ogé nyadiakeun kamampuhan pikeun nyieun pangaluyuan kana Aksara ditulis, ku kituna saméméh deploying hiji fungsi pikeun produksi, anjeun teu ngan bisa pariksa kode ditulis, tapi ogé nyieun parobahan perlu.

Kumaha urang ngadamel awan FaaS di jero Kubernetes sareng meunang hackathon Tinkoff
Salian fungsi aturan, kami ogé ngalaksanakeun kamampuan pikeun laun-laun enrich data sumber nganggo fungsi Pengayaan, kodeu anu ogé skrip dimana anjeun tiasa angkat ka gudang data, nelepon jasa pihak katilu sareng ngalaksanakeun itungan awal. . Pikeun nunjukkeun solusi kami, kami ngitung tanda zodiak klien anu ngantunkeun pamundut sareng nangtukeun operator sélulérna nganggo jasa REST pihak katilu.

Backend platform ieu ditulis dina Java sarta dilaksanakeun salaku aplikasi Spring Boot. Kami mimitina ngarencanakeun ngagunakeun Postgres pikeun nyimpen data admin, tapi, salaku bagian tina hackathon, kami mutuskeun pikeun ngawatesan diri kana H2 saderhana pikeun ngahémat waktos. Dina backend, integrasi jeung Bitbucket dilaksanakeun pikeun versi fungsi pengayaan query jeung skrip aturan. Pikeun integrasi sareng repositori Git jauh, kami nganggo perpustakaan JGit, nu mangrupakeun jenis wrapper leuwih paréntah CLI, ngamungkinkeun Anjeun pikeun ngaéksekusi sagala parentah git ngagunakeun panganteur software merenah. Janten urang ngagaduhan dua repositori anu misah pikeun fungsi sareng aturan pengayaan, sareng sadaya naskah dibagi kana diréktori. Ngaliwatan UI kasebut nyaéta dimungkinkeun pikeun milih komitmen panganyarna tina skrip tina cabang sawenang tina gudang. Nalika nyieun parobahan kode ngaliwatan panel admin, commits kode robah dijieun dina repositories jauh.

Pikeun ngalaksanakeun ide urang, urang peryogi infrastruktur anu cocog. Kami mutuskeun pikeun nyebarkeun klaster Kubernetes kami dina méga. Pilihan kami nyaéta Google Cloud Platform. Kerangka serverless Fission dipasang dina kluster Kubernetes, anu kami pasang dina Gcloud. Mimitina, layanan pengayaan data sumber dilaksanakeun salaku aplikasi Java misah dibungkus dina Pod jero k8s kluster. Tapi saatos demonstrasi awal proyék kami di tengah hackathon, kami disarankeun pikeun ngajantenkeun jasa Pengayaan langkung fleksibel pikeun masihan kasempetan pikeun milih cara ngabeungharan data atah aplikasi anu asup. Sarta kami teu boga pilihan tapi nyieun ladenan pengayaan ogé Serverless.

Pikeun damel sareng Fission, kami nganggo Fission CLI, anu kedah dipasang dina luhureun Kubernetes CLI. Nyebarkeun fungsi kana klaster k8s cukup saderhana; anjeun ngan ukur kedah napelkeun rute internal sareng asup kana fungsi pikeun ngamungkinkeun lalu lintas asup upami aksés luar kluster diperyogikeun. Nerapkeun hiji pungsi biasana teu butuh leuwih ti 10 detik.

Presentasi ahir proyék sareng nyimpulkeun

Pikeun demonstrate kumaha sistem urang jalan, kami geus nempatkeun formulir basajan dina server jauh dimana anjeun tiasa ngalebetkeun hiji aplikasi pikeun salah sahiji produk bank urang. Pikeun nyuhunkeun, anjeun kedah ngalebetkeun inisial anjeun, tanggal lahir sareng nomer telepon.

Data tina formulir klien indit ka controller, nu sakaligus dikirim requests pikeun sakabéh aturan sadia, sanggeus saméméhna enriched data nurutkeun kaayaan dieusian, sarta disimpen dina gudang umum. Dina total, urang deployed tilu fungsi nu nyieun kaputusan dina aplikasi asup jeung 4 jasa pengayaan data. Saatos ngalebetkeun aplikasi, klien nampi kaputusan kami:

Kumaha urang ngadamel awan FaaS di jero Kubernetes sareng meunang hackathon Tinkoff
Salian panolakan atanapi persetujuan, klien ogé nampi daptar produk anu sanés, pamundut anu kami kirimkeun paralel. Ieu kumaha kami nunjukkeun kamungkinan cross-sale dina platform kami.

Aya total 3 produk bank fiktif anu sayogi:

  • Kiridit.
  • kaulinan
  • KPR.

Salila demonstrasi, kami nyebarkeun fungsi anu disiapkeun sareng naskah pengayaan pikeun tiap jasa.

Unggal aturan merlukeun set sorangan data input. Janten, pikeun nyatujuan hipotik, urang ngitung tanda zodiak klien sareng nyambungkeun ieu sareng logika kalénder lunar. Pikeun nyatujuan cocooan, kami pariksa yén klien parantos ngahontal umur mayoritas, sareng ngaluarkeun pinjaman, kami ngirim pamenta ka jasa kabuka éksternal pikeun nangtoskeun operator sélulér, sareng kaputusan dilakukeun dina éta.

Urang nyobian sangkan démo urang metot sarta interaktif, dulur hadir bisa buka formulir urang jeung pariksa kasadiaan jasa fiksi kami ka aranjeunna. Sareng di ahir presentasi, kami nunjukkeun analitik tina aplikasi anu ditampi, anu nunjukkeun sabaraha jalma anu nganggo jasa kami, jumlah persetujuan, sareng panolakan.

Pikeun ngumpulkeun analitik online, kami ogé nyebarkeun alat BI open source Métabase sarta ngaco ka Unit gudang urang. Metabase ngamungkinkeun anjeun ngawangun layar nganggo analitik dina data anu dipikaresep ku urang; anjeun ngan ukur kedah ngadaptarkeun sambungan kana pangkalan data, pilih tabel (dina kasus kami, kumpulan data, saprak kami nganggo MongoDB), sareng netepkeun widang anu dipikaresep ku kami. .

Hasilna, kami ngagaduhan prototipe anu hadé pikeun platform-nyieun kaputusan, sareng salami demonstrasi, unggal pamiarsa tiasa mariksa kinerjana sacara pribadi. Hiji leyuran metot, prototipe rengse tur demonstrasi suksés diwenangkeun urang meunang, sanajan kompetisi kuat ti tim séjén. Kuring yakin yén hiji artikel metot ogé bisa ditulis dina proyék unggal tim urang.

sumber: www.habr.com

Tambahkeun komentar