Huduma za urithi katika miundombinu yako

Habari! Jina langu ni Pasha Chernyak, mimi ni msanidi programu anayeongoza katika QIWI, na leo nataka kuzungumza juu ya kuepukika. Kuhusu Legacy.

Wacha tuanze na swali: huduma ya Urithi ni nini? Je, huduma ya urithi ni huduma ambayo msanidi programu hajaigusa kwa wiki/mwezi/mwaka? Au ni huduma ambayo iliandikwa na mtayarishaji mwenye uzoefu mdogo, kwa mfano, na wewe hasa, lakini mwaka mmoja uliopita? Na sasa wewe ni baridi na uzoefu zaidi. Au je, huduma ya Urithi ni huduma ambayo umeamua kutotoa tena na unatayarisha polepole mbadala wake? Kwa hali yoyote, kuacha huduma kama hiyo bila kutarajia na sio kusasisha ni bomu la wakati ambalo linaweza kulipuka baadaye.

Huduma za urithi katika miundombinu yako

Kabla ya kuendelea na jinsi sisi katika QIWI tunafanya kazi na huduma zetu za Urithi, nitakuambia jinsi tulivyoleta utaratibu wa huduma kwenye Wallet. Kwa miaka miwili sasa nimewajibika kwa utendaji wake. Ikiwa kuna shida yoyote, huwa wananiita kwanza. Kwa kawaida huwa sina ujasiri wa kumpigia simu mtu mwingine saa 11 jioni, kwa hivyo ilinibidi kuketi na kufahamu huduma zote kwenye kikoa chetu.

Lakini mimi, kama mtu yeyote, napenda kulala usiku, kwa hivyo nilijaribu kushughulikia unyonyaji: "Jamani, kwa nini mnaniita?" Ambayo nilipokea jibu la laconic kabisa kama "Nani mwingine?" Kwa sababu mimi hurekebisha huduma, na wavulana hawajui ni nani wa kumpigia simu.

Kwa hivyo, katika moja ya historia ya timu ya nyuma ya Wallet, tuliamua kwamba tunahitaji kufanya ishara na orodha ya huduma zetu, huduma ndogo na monoliths za pochi, na wale wanaohusika nazo. Ishara kwa ujumla ni muhimu, ndani ya mipaka inayofaa.

Mbali na habari kuhusu nani anayehusika na nini, kulikuwa na majibu ya maswali: ni nani mmiliki wa huduma, ambaye anajibika kwa maendeleo yake, usanifu na mzunguko wa maisha. Watu wanaohusika na huduma hii ni watu ambao wanaweza kuirekebisha ikiwa kitu kitatokea. Mmiliki wa huduma ana haki ya kuacha +2 katika ahadi, wale wanaohusika lazima pia wawepo kwenye ukaguzi kabla ya huduma hii kukubali ahadi mpya.

Kadiri muda ulivyosonga, mazoea mapya yalianza kutumika, kwa mfano, uhamiaji wa Kubernetes, aina zote za kuangalia, spotbugs, ktlint, uwepo wa magogo huko Kibana, huduma za ugunduzi wa kiotomatiki badala ya kutaja anwani moja kwa moja na vitu vingine muhimu. Na kila mahali meza yetu ilituruhusu kudumisha umuhimu wa huduma zetu. Kwetu sisi, hii ni aina ya orodha inayosema kwamba huduma hii inaweza kufanya hivi, lakini bado haijafanywa. ambapo kazi za kusanyiko zinazinduliwa katika TeamCity, jinsi zinavyotumiwa, ambapo vyanzo vya vipimo vya end2end vinahifadhiwa, picha kutoka kwa vikao vya maandalizi kuhusu usanifu, kuhusu maamuzi yaliyofanywa. Kwa kweli, ningependa habari hii yote ilale mahali fulani na iwe karibu inapohitajika. Kwa hivyo, ishara yetu ikawa mahali pa kuanzia kwa kutafuta habari.

Lakini QIWI, ingawa inashikilia moyo wa kuanzisha, ni kampuni kubwa. Tayari tuna umri wa miaka 12, na timu zinabadilika: watu wanaondoka, watu wanakuja, timu mpya zinaundwa. Na tuligundua huduma kadhaa kwenye kikoa chetu ambazo tulirithi. Baadhi zilitoka kwa wasanidi programu kutoka kwa timu zingine, zingine kwa njia isiyo ya moja kwa moja zinazohusiana na Wallet, kwa hivyo sasa tunayo huduma kwenye laha letu la usawa. Kuelewa nini na jinsi inavyofanya kazi - kwa nini? Huduma inafanya kazi, na tuna vipengele vya bidhaa ambavyo hakika vinahitaji kuboreshwa.

Jinsi inavyotokea

Lakini kwa wakati fulani tunagundua kwamba huduma inachaacha kufanya kazi yake, kitu kinavunjika - nini cha kufanya katika hali hiyo? Huduma iliacha kufanya kazi tu. Hata kidogo. Na tuligundua juu ya hii, kwanza, kwa bahati mbaya, na pili, miezi sita baadaye. Inatokea. Kitu pekee tulichojua ni kwamba huduma hiyo ingetumwa kwa mashine gani, ambapo vyanzo vyake vilipatikana, na ndivyo tu. Tunafanya git clone na kupiga mbizi katika akili ya mtu ambaye aliandika hii miaka michache iliyopita, lakini tunaona nini? Hakuna Boot ya Spring ambayo inajulikana kwetu, ingawa tumezoea kila kitu, tunayo rundo kamili na hayo yote. Labda kuna Mfumo wa Spring hapo? Lakini hapana.

Mwanadada aliyeandika haya yote alikuwa mgumu na aliandika kila kitu kwa Java safi. Hakuna zana za kawaida za msanidi programu, na wazo linatokea: tunahitaji kuandika upya haya yote. Tuna huduma ndogo, na kutoka kwa kila kibaniko huja kawaida "Guys, microservices ni nini unahitaji!" Ikiwa ghafla kitu kitaenda vibaya, unaweza kuchukua lugha yoyote kwa utulivu na kila kitu kitakuwa sawa.

Jambo ni kwamba sasa hatuna mteja ambaye anawajibika kwa huduma hii. Je, alikuwa na mahitaji gani ya biashara, huduma hii inapaswa kufanya nini? Na huduma imeunganishwa kikamilifu katika michakato yako ya biashara.

Sasa niambie, ni rahisi kiasi gani kuandika upya huduma bila kujua mahitaji yake ya biashara? Haijulikani jinsi huduma inavyowekwa; ikiwa kuna vipimo haijulikani. Ni nini wao, ikiwa wapo, haijulikani zaidi. Na wakati huo huo, huduma ina idadi kubwa ya madarasa ya mantiki ya biashara isiyoeleweka. Kitu kimejumuishwa katika aina fulani ya hifadhidata, ambayo pia hatujui chochote kuihusu bado.

Wapi kuanza?

Kutoka kwa hatua ya mantiki zaidi - upatikanaji wa vipimo. Kawaida kuna angalau mantiki iliyoandikwa hapo na unaweza kupata hitimisho juu ya kile kinachotokea. Sasa TDD ni ya mtindo, lakini tunaona kwamba miaka 5 iliyopita kila kitu kilikuwa karibu sawa na ilivyo sasa: kuna karibu hakuna vipimo vya kitengo, na hawatatuambia chochote. Vema, isipokuwa labda aina fulani ya uthibitishaji, jinsi baadhi ya xml inavyotiwa saini na cheti maalum.

Hatukuweza kuelewa chochote kutoka kwa msimbo, kwa hivyo tulienda kuona ni nini kilikuwa kwenye mashine pepe. Tulifungua kumbukumbu za huduma na tukapata hitilafu ya mteja wa http ndani yake; cheti cha kujiandikisha ambacho kilipachikwa kwenye rasilimali za programu kilikuwa kimeoza bila aibu. Tuliwasiliana na wachambuzi wetu, wakaomba cheti kipya, wakatupatia na huduma inafanya kazi tena. Inaweza kuonekana kuwa hiyo ndiyo yote. Au siyo? Baada ya yote, huduma inafanya kazi, hufanya kazi fulani ambayo biashara yetu inahitaji. Tuna viwango fulani vya ukuzaji wa programu, ambavyo kuna uwezekano mkubwa kuwa unazo pia. Kwa mfano, usihifadhi kumbukumbu kwenye nodi kwenye folda, lakini zihifadhi katika aina fulani ya hifadhi, kama vile elastic, na uziangalie Kibana. Unaweza pia kukumbuka vipimo vya dhahabu. Hiyo ni, mzigo kwenye huduma, idadi ya maombi ya huduma, ikiwa yu hai au la, AfyaCheck yake inaendeleaje. Angalau, vipimo hivi vitakusaidia kujua wakati inaweza kuondolewa kwenye huduma kwa dhamiri safi na kusahaulika kama ndoto mbaya.

Nini cha kufanya

Kwa hivyo, tunaongeza huduma kama hiyo ya zamani kwenye meza, na kisha tunaenda kutafuta watu wa kujitolea kutoka kwa watengenezaji ambao watachukua huduma na kuiweka kwa mpangilio: wataandika angalau habari fulani juu ya huduma, ongeza viungo dashibodi katika grafana, kwa kazi za kusanyiko, na kuelewa jinsi Sambaza programu, usipakie faili wewe mwenyewe kwa kutumia ftp.

Jambo kuu ni kwamba shughuli hii yote muhimu ya kujitolea itachukua muda gani? Mbio moja kwa msanidi programu mwenye uzoefu zaidi au mdogo, kwa mfano, wakati wa deni la kiufundi la 20%. Ilichukua muda gani kuelewa mantiki yote iliyokita mizizi ya kuwasiliana na mfumo fulani wa serikali na kuuleta kwa teknolojia mpya zaidi? Siwezi kuthibitisha hili, labda mwezi au labda kazi mbili za timu. Ninasema hivi kutokana na uzoefu wa ushirikiano wa sasa na huduma mpya.

Wakati huo huo, hakuna kutolewa kwa thamani ya biashara. Hata kidogo. Ni kawaida kuajiri huduma kwa usaidizi na kutumia muda kidogo juu yake. Lakini baada ya densi zetu za kawaida na huduma, tuliiongeza kwenye meza, tukaongeza habari juu yake na, labda, tutaiandika tena siku moja. Lakini sasa inakidhi viwango vya huduma zetu.

Kwa hivyo, ningependa kuja na mpango wa nini cha kufanya na huduma za Legacy.

Kuandika upya urithi kutoka mwanzo ni wazo mbaya
Kwa kweli, sio lazima hata kufikiria juu yake. Ni wazi kwamba ningependa, na kuna faida fulani, lakini kwa kawaida hakuna mtu anayehitaji, ikiwa ni pamoja na wewe mwenyewe.

Directory
Chimba misimbo ya chanzo cha programu zako, tengeneza kitabu cha kumbukumbu kitakachoonyesha ni wapi na jinsi inavyofanya kazi, ingiza maelezo ya mradi hapo (conditional readme.md) ili kuelewa haraka kumbukumbu na metriki ziko wapi. Msanidi programu ambaye atashughulikia hili baada yako atasema tu asante.

Elewa kikoa
Ikiwa unamiliki kikoa, jaribu kuweka kidole chako kwenye mpigo. Inaonekana kuwa ndogo, ndio, lakini sio kila mtu anahakikisha kuwa huduma ziko kwenye ufunguo mmoja. Lakini kufanya kazi katika kiwango kimoja ni rahisi sana.

Watumiaji waliojiandikisha pekee ndio wanaweza kushiriki katika utafiti. Weka sahihitafadhali.

Unafanya nini na urithi wako?

  • 31.5%Ninaandika tena kutoka mwanzo, ni sahihi zaidi 12

  • 52.6%Karibu sawa na wewe20

  • 10.5%Hatuna urithi, sisi ni wakuu4

  • 5.2%Nitaandika kwenye maoni2

Watumiaji 38 walipiga kura. Watumiaji 20 walijizuia.

Chanzo: mapenzi.com

Kuongeza maoni