Hello! Jenengku Pasha Chernyak, aku dadi pangembang utama ing QIWI, lan dina iki aku pengin ngomong babagan sing ora bisa dihindari. Babagan Warisan.
Ayo dadi miwiti karo pitakonan: apa layanan Warisan? Apa layanan warisan minangka layanan sing durung disentuh pangembang sajrone seminggu / wulan / taun? Utawa iku layanan sing ditulis dening programmer kurang pengalaman, contone, dening sampeyan khusus, nanging setahun kepungkur? Lan saiki sampeyan luwih adhem lan luwih berpengalaman. Utawa layanan Warisan minangka layanan sing sampeyan wis mutusake ora bakal ditindakake maneh lan alon-alon nyiapake panggantos kasebut? Ing kasus apa wae, ninggalake layanan kasebut tanpa pengawasan lan ora nganyari minangka bom wektu sing bisa njeblug mengko.
Sadurunge nerusake babagan carane kita ing QIWI nggarap layanan Warisan, aku bakal menehi pitutur marang kowe carane nggawe pesenan menyang layanan ing Dompet. Wis rong taun iki aku wis tanggung jawab kanggo kinerja. Yen ana masalah, dheweke mesthi nelpon aku dhisik. Aku biasane ora duwe syaraf nelpon wong liya ing 11 pm, dadi aku kudu njagong mudhun lan mangerteni kabeh layanan ing domain kita.
Nanging aku, kaya wong liya, seneng turu ing wayah wengi, mula aku nyoba ngatasi eksploitasi: "Guys, kenapa sampeyan nelpon aku?" Kanggo aku nampa jawaban sing cukup laconic kaya "Sapa maneh?" Amarga aku ndandani layanan, lan wong lanang mung ora ngerti sapa sing kudu ditelpon.
Mulane, ing salah siji saka retrospektif saka tim backend Dompet, kita mutusaké sing kita kudu nggawe tandha karo dhaftar layanan kita, microservices lan monoliths dompet, lan sing tanggung jawab kanggo wong-wong mau. Tandha umume migunani, ing watesan sing cukup.
Saliyane informasi babagan sapa sing tanggung jawab, ana jawaban kanggo pitakonan: sapa sing nduweni layanan, sing tanggung jawab kanggo pangembangan, arsitektur lan siklus urip. Wong sing tanggung jawab kanggo layanan iki yaiku wong sing bisa ndandani yen ana kedadeyan. Pemilik layanan nduweni hak kanggo ninggalake +2 ing commit, sing tanggung jawab uga kudu ana ing review sadurunge layanan iki nampa komitmen anyar.
Sajrone wektu saya suwe, praktik anyar wiwit ditrapake, contone, migrasi menyang Kubernetes, kabeh jinis checkstyle, spotbugs, ktlint, anané log ing Kibana, layanan autodiscovery tinimbang langsung nemtokake alamat lan liya-liyane sing migunani. Lan ing endi wae meja kita ngidini kita njaga relevansi layanan kita. Kanggo kita, iki minangka dhaptar priksa sing ujar manawa layanan iki bisa ditindakake, nanging durung rampung, kanthi ngerti manawa kita ora duwe informasi babagan layanan, sing dipantau, ing ngendi sumber layanan. ing ngendi tugas perakitan diluncurake ing TeamCity, carane disebarake, ing ngendi sumber tes end2end disimpen, foto saka sesi dandan babagan arsitektur, babagan keputusan sing digawe. Saenipun, aku pengin kabeh informasi iki kanggo ngapusi nang endi wae lan ing tangan yen perlu. Mula, tandha kita dadi titik wiwitan kanggo nggoleki informasi.
Nanging QIWI, sanajan tetep semangat wiwitan, minangka perusahaan gedhe. Kita wis umur 12 taun, lan tim ganti: wong lunga, wong teka, tim anyar dibentuk. Lan kita nemokake sawetara layanan ing domain sing diwarisake. Sawetara teka saka pangembang saka tim liyane, sawetara mung ora langsung ana hubungane karo Dompet, mula saiki kita duwe layanan ing neraca. Ngerteni apa lan cara kerjane - kenapa? Layanan kasebut bisa digunakake, lan kita duwe fitur produk sing mesthi kudu ditingkatake.
Carane mengkono
Nanging ing sawetara wektu, kita nemokake manawa layanan mandheg nindakake fungsine, ana sing rusak - apa sing kudu ditindakake ing kahanan kaya ngono? Layanan mung mandheg. Sakabehe. Lan kita nemokake babagan iki, pisanan, kanthi ora sengaja, lan kaping pindho, nem wulan sabanjure. Mengkono. Siji-sijine sing kita ngerti yaiku mesin virtual layanan kasebut bakal diluncurake, ing ngendi sumber kasebut, lan kabeh. Kita nggawe klon git lan nyilem ing pikirane wong sing nulis iki sawetara taun kepungkur, nanging apa sing kita deleng? Ora ana Spring Boot sing menowo kanggo kita, sanajan kita digunakake kanggo kabeh, kita duwe tumpukan lengkap lan kabeh. Mungkin ana Spring Framework ing kana? Nanging ora.
Wong sing nulis kabeh iki angel lan nulis kabeh nganggo basa Jawa murni. Ora ana alat sing biasa kanggo pangembang, lan muncul ide: kita kudu nulis ulang kabeh iki. Kita duwe layanan mikro, lan saka saben pemanggang roti ana "Guys, microservices sing sampeyan butuhake!" Yen dumadakan ana masalah, sampeyan bisa kanthi tenang njupuk basa lan kabeh bakal apik.
Masalahe saiki ora duwe pelanggan sing tanggung jawab kanggo layanan iki. Apa syarat bisnis sing diduweni, apa sing kudu ditindakake layanan iki? Lan layanan kasebut digabungake kanthi rapet menyang proses bisnis sampeyan.
Saiki dakkandhani, sepira gampang nulis ulang layanan tanpa ngerti syarat bisnis? Ora jelas carane layanan kasebut dicathet yen ana metrik sing ora dingerteni. Apa maneh, yen ana, luwih ora dingerteni. Lan ing wektu sing padha, layanan kasebut ngemot pirang-pirang kelas logika bisnis sing ora bisa dingerteni. Ana sing kalebu ing sawetara jinis database, sing uga durung ngerti apa-apa.
Where kanggo miwiti?
Saka titik paling logis - kasedhiyan tes. Biasane ana sawetara logika sing ditulis ing kana lan sampeyan bisa nggawe kesimpulan babagan apa sing kedadeyan. Saiki TDD modis, nanging kita weruh yen 5 taun kepungkur kabeh meh padha karo saiki: meh ora ana tes unit, lan ora bakal ngandhani apa-apa. Inggih, kajaba mbok menawa sawetara jinis verifikasi, carane sawetara xml mlebu karo sawetara sertifikat khusus.
Kita ora bisa ngerti apa-apa saka kode, supaya kita lunga kanggo ndeleng apa ana ing mesin virtual. Kita mbukak log layanan lan nemokake kesalahan klien http ing wong-wong mau sertifikat sing ditandatangani dhewe sing diselehake ing sumber daya aplikasi tanpa isin. Kita ngubungi analis, dheweke njaluk sertifikat anyar, ditanggepi kanggo kita lan layanan kasebut bisa digunakake maneh. Iku bakal katon sing kabeh. Utawa ora? Sawise kabeh, layanan kasebut bisa digunakake, nindakake sawetara fungsi sing dibutuhake bisnis kita. Kita duwe standar tartamtu kanggo pangembangan aplikasi, sing paling mungkin sampeyan uga duwe. Contone, aja nyimpen log ing simpul ing folder, nanging nyimpen ing sawetara jinis panyimpenan, kayata elastis, lan katon ing Kibana. Sampeyan uga bisa ngelingi metrik emas. Yaiku, beban layanan, jumlah panjaluk layanan kasebut, apa dheweke isih urip utawa ora, kepiye HealthCheck. Paling ora, metrik kasebut bakal mbantu sampeyan ngerti kapan bisa dicopot saka layanan kanthi ati nurani sing resik lan dilalekake kaya ngimpi sing ala.
Apa sing kudu dilakoni
Mulane, kita nambahake layanan lawas kasebut menyang meja, banjur golek sukarelawan saka antarane pangembang sing bakal ngurus layanan kasebut lan diurutake: dheweke bakal nulis paling ora sawetara informasi babagan layanan kasebut, nambah pranala menyang dashboards ing grafana, kanggo tugas Déwan, lan ngerti carane nyebarake aplikasi, ora upload file kanthi manual nggunakake ftp.
Sing utama yaiku suwene kabeh kegiatan sukarelawan sing migunani iki? Siji sprint kanggo pangembang luwih utawa kurang pengalaman, contone, sak 20% utang technical. Suwene suwene kanggo ngerti kabeh logika sing wis ana ing komunikasi karo sistem negara tartamtu lan nggawa menyang teknologi sing luwih anyar? Aku ora bisa njamin iki, bisa uga sasi utawa bisa uga loro karya tim. Aku ngomong iki saka pengalaman integrasi saiki karo sawetara layanan anyar.
Ing wektu sing padha, ora ana release saka nilai bisnis. Sakabehe. Iku normal kanggo nyewa layanan kanggo dhukungan lan nglampahi wektu sethithik. Nanging sawise njoget standar karo layanan, kita ditambahake menyang meja, nambah informasi babagan lan, mbok menawa, bakal nulis maneh liyawektu. Nanging saiki wis ketemu standar layanan kita.
Akibaté, aku arep nggawe rencana apa sing kudu dilakoni karo layanan Warisan.
Nulis maneh warisan saka awal iku ide sing ala
Bener, sampeyan ora kudu mikir babagan iki. Cetha yen aku seneng, lan ana sawetara kaluwihan, nanging biasane ora ana kang perlu, kalebu dhewe.
Buku referensi
Telusuri kode sumber aplikasi sampeyan, gawe buku referensi sing bakal nuduhake ing ngendi lan cara kerjane, ketik katrangan babagan proyek kasebut (conditional readme.md) supaya cepet ngerti lokasi log lan metrik. Pangembang sing bakal ngatasi iki sawise sampeyan mung bakal matur nuwun.
Ngerti domain
Yen sampeyan duwe domain, coba tetep driji ing pulsa. Iku muni ora pati penting, ya, nanging ora saben wong nggawe manawa layanan ing tombol siji. Nanging nggarap siji standar pancen luwih gampang.
Mung pangguna pangguna sing bisa melu survey. nggih.
Apa sing sampeyan lakoni karo warisan sampeyan?
31.5%Aku nulis maneh saka awal, luwih bener 12
52.6%Meh padha karo kowe20
10.5%Ora duwe pusaka, wis hebat4
5.2%Aku bakal nulis ing komentar2
38 pangguna milih. 20 kedhaftar abstained.
Source: www.habr.com
