Инфрақұрылымдағы бұрынғы қызметтер

Сәлеметсіз бе! Менің атым Паша Черняк, мен QIWI жетекші әзірлеушісімін, бүгін мен сөзсіз туралы айтқым келеді. Legacy туралы.

Сұрақтан бастайық: Legacy қызметі дегеніміз не? Бұрынғы қызмет әзірлеуші ​​бір апта/ай/жыл бойы қолын созбаған қызмет пе? Немесе бұл тәжірибесі аз бағдарламашы жазған қызмет пе, мысалы, сіз арнайы, бірақ бір жыл бұрын? Ал енді сіз салқын және тәжірибелісіз. Немесе Legacy қызметі сіз енді ешқашан жасамауға шешім қабылдаған және оны ауыстыруды баяу дайындап жатқан қызмет пе? Қалай болғанда да, мұндай қызметті қараусыз қалдыру және жаңартпау кейінірек жарылуы мүмкін сағаттық бомба болып табылады.

Инфрақұрылымдағы бұрынғы қызметтер

QIWI-дегі бұрынғы қызметтерімізбен қалай жұмыс істейтінімізге көшпес бұрын, мен Әмияндағы қызметтерді қалай ретке келтіргенімізді айтып беремін. Екі жылдан бері оның орындалуына жауаптымын. Қандай да бір мәселе туындаса, олар әрқашан бірінші маған хабарласады. Әдетте түнгі 11-де басқа біреуге қоңырау шалуға менде жүйке болмайды, сондықтан мен отыруға және біздің домендегі барлық қызметтерді анықтауға тура келді.

Бірақ мен, кез келген адам сияқты, түнде ұйықтағанды ​​ұнатамын, сондықтан мен қанаумен күресуге тырыстым: «Жігіттер, мені неге шақырып жатырсыңдар?» Оған мен «Тағы кім?» сияқты өте қысқа жауап алдым. Өйткені мен қызметтерді жөндеймін, ал жігіттер кімге қоңырау шалу керектігін білмейді.

Сондықтан, Wallet backend командасының ретроспективаларының бірінде біз қызметтеріміздің, микросервистердің және әмиян монолиттерінің және оларға жауаптылардың тізімі бар белгі жасау керек деп шештік. Белгілер әдетте қолайлы шектерде пайдалы.

Кімнің не үшін жауапты екендігі туралы ақпаратпен қатар, қызмет иесі кім, оның дамуына, архитектурасына және өмірлік цикліне кім жауапты деген сұрақтарға жауаптар берілді. Бұл қызметке жауапты адамдар, егер бірдеңе болса, оны түзете алатын адамдар. Қызмет иесінің міндеттемелерде +2 қалдыруға құқығы бар, жауаптылар да осы қызмет жаңа міндеттемені қабылдағанға дейін қарауға қатысуы керек.

Уақыт өте келе жаңа тәжірибелер қолданыла бастады, мысалы, Кубернетеске көшу, тексеру стилінің барлық түрлері, спотбугтар, ktlint, Кибанадағы журналдардың болуы, мекенжайларды тікелей көрсетудің орнына автоматты табу қызметтері және басқа да пайдалы нәрселер. Біздің үстеліміз барлық жерде қызметтеріміздің өзектілігін сақтауға мүмкіндік берді. Біз үшін бұл қызметтің мұны істей алатынын көрсететін бақылау парағының бір түрі, бірақ ол әлі жоқ.Бірақ біз бақылайтын қызметтеріміз туралы, қызмет көздерінің қай жерде орналасқаны туралы ақпараттың жетіспейтінін түсініп, әрі қарай жүрдік. TeamCity жүйесінде құрастыру тапсырмалары қай жерде іске қосылады, олар қалай орналастырылады, end2end сынақтарының көздері қайда сақталады, сәулет туралы күтім сеанстарынан фотосуреттер, қабылданған шешімдер туралы. Ең дұрысы, мен бұл ақпараттың бір жерде жатқанын және қажет кезде қолымда болғанын қалаймын. Сондықтан біздің белгіміз ақпаратты іздеудің бастапқы нүктесі болды.

Бірақ QIWI, стартап рухын сақтағанымен, үлкен компания. Бізге қазірдің өзінде 12 жыл болды, ал командалар өзгеруде: адамдар кетеді, адамдар келеді, жаңа командалар құрылуда. Біз өз доменімізде мұраға қалған бірнеше қызметтерді таптық. Кейбіреулер басқа командалардың әзірлеушілерінен келді, ал кейбіреулері әмиянға жанама түрде қатысты, сондықтан біздің баланста қызмет бар. Нені және қалай жұмыс істейтінін түсіну - неге? Қызмет жұмыс істейді және бізде міндетті түрде жақсартуды қажет ететін өнім мүмкіндіктері бар.

Бұл қалай болады

Бірақ белгілі бір уақытта біз қызмет өз функциясын орындауды тоқтатқанын, бір нәрсе бұзылғанын анықтаймыз - мұндай жағдайда не істеу керек? Қызмет жай жұмысын тоқтатты. Мүлдем. Ал біз бұл туралы біріншіден, кездейсоқ, екіншіден, жарты жылдан кейін білдік. Осылай болады. Біз білетін жалғыз нәрсе - бұл қызмет қандай виртуалды машиналарда орналастырылатыны, оның көздері қайда орналасқаны және барлығы. Біз гит клонын жасаймыз және мұны бірнеше жыл бұрын жазған адамның санасына сүңгеміз, бірақ біз не көріп отырмыз? Бізге таныс көктемгі етіктердің ешқайсысы жоқ, біз бәріне үйреніп қалған болсақ та, бізде толық стек және бәрі бар. Мүмкін көктемгі шеңбер бар шығар? Бірақ жоқ.

Осының бәрін жазған жігіт қатал және бәрін таза Java тілінде жазған. Әзірлеуші ​​үшін әдеттегі құралдар жоқ және идея туындайды: біз мұның бәрін қайта жазуымыз керек. Бізде микросервистер бар және әрбір тостерден әдеттегідей «Жігіттер, микросервистер сізге қажет!» Егер кенеттен бірдеңе дұрыс болмаса, сіз кез келген тілді сабырмен қабылдай аласыз және бәрі жақсы болады.

Ең бастысы, қазір бізде бұл қызметке жауапты тұтынушы жоқ. Ол қандай бизнес талаптарын қойды, бұл қызмет не істеуі керек? Және бұл қызмет сіздің бизнес-процестеріңізге тығыз біріктірілген.

Енді айтыңызшы, қызметті оның бизнес талаптарын білмей, қайта жазу қаншалықты оңай? Қызмет қалай тіркелетіні белгісіз; көрсеткіштер бар ма белгісіз. Олардың не екені, егер бар болса, бәрібір белгісіз. Сонымен қатар, қызмет түсініксіз іскерлік логика кластарының үлкен санын қамтиды. Дерекқордың қандай да бір түріне бір нәрсе енгізілген, ол туралы біз әлі ештеңе білмейміз.

Қайдан бастау керек?

Ең қисынды нүктеден - сынақтардың болуы. Онда әдетте кем дегенде логика жазылған және сіз не болып жатқаны туралы қорытынды жасай аласыз. Қазір TDD сәнді, бірақ біз 5 жыл бұрын бәрі дәл қазіргідей болғанын көреміз: бірлік сынақтары дерлік жоқ және олар бізге ештеңе айтпайды. Тексерудің қандай да бір түрін қоспағанда, кейбір xml-ге кейбір пайдаланушы сертификатымен қалай қол қойылғаны.

Біз кодтан ештеңе түсінбедік, сондықтан виртуалды машинада не бар екенін көруге бардық. Біз қызмет журналдарын аштық және олардан http клиентінің қатесін таптық; қолданба ресурстарына ендірілген өздігінен қол қойылған сертификат ұятсыз шірік болды. Біз талдаушыларымызға хабарластық, олар жаңа сертификат сұрады, олар бізге оны берді және қызмет қайтадан жұмыс істеп жатыр. Осымен біткен сияқты. Немесе жоқ? Өйткені, қызмет жұмыс істейді, ол біздің бизнеске қажет қандай да бір функцияны орындайды. Бізде қолданбаларды әзірлеуге арналған белгілі стандарттар бар, олар сізде де болуы мүмкін. Мысалы, түйіндегі журналдарды қалтада сақтамаңыз, бірақ оларды серпімділік сияқты қандай да бір жадта сақтаңыз және оларды Кибанада қараңыз. Сіз сондай-ақ алтын көрсеткіштерді есте сақтай аласыз. Яғни, қызметке түсетін жүктеме, қызметке сұраныстардың саны, оның тірі немесе жоқтығы, оның HealthCheck қалай жүріп жатқаны. Кем дегенде, бұл көрсеткіштер оны таза ар-ұжданмен қызметтен алып тастауға және жаман арман сияқты ұмытуға болатынын білуге ​​көмектеседі.

Не істеу

Сондықтан біз кестеге осындай ескі қызметті қосамыз, содан кейін біз қызметке қамқорлық жасайтын және оны ретке келтіретін әзірлеушілер арасынан еріктілерді іздейміз: олар қызмет туралы кем дегенде біраз ақпарат жазады, сілтемелер қосады. grafana ішіндегі бақылау тақталары, құрастыру тапсырмалары үшін және қолданбаны қалай қолдану керектігін түсіну үшін ftp арқылы файлдарды қолмен жүктеп салмаңыз.

Ең бастысы, осы пайдалы волонтерлік қызмет қанша уақытқа созылады? Азды-көпті тәжірибелі әзірлеушіге бір спринт, мысалы, 20% техникалық қарыз кезінде. Белгілі бір мемлекеттік жүйемен қарым-қатынас жасаудың барлық сіңген логикасын түсініп, оны жаңа технологияларға жеткізу қанша уақытты алды? Мен бұған кепілдік бере алмаймын, мүмкін бір ай немесе екі команданың жұмысы. Мен мұны кейбір жаңа қызметпен қазіргі интеграция тәжірибесінен айтып отырмын.

Сонымен қатар, бизнес құнының босатылуы жоқ. Мүлдем. Қолдау үшін қызметті жалдап, оған аз уақыт жұмсау қалыпты жағдай. Бірақ қызметпен стандартты билерден кейін біз оны үстелге қостық, ол туралы ақпаратты қостық және, мүмкін, оны бір күні қайта жазамыз. Бірақ қазір ол біздің қызмет көрсету стандарттарымызға сәйкес келеді.

Нәтижесінде мен Legacy қызметтерімен не істеу керектігі туралы жоспар құрғым келеді.

Мұраны нөлден қайта жазу жаман идея
Шынымды айтсам, бұл туралы ойлаудың да қажеті жоқ. Мен мұны қалайтыным анық, және кейбір артықшылықтар бар, бірақ әдетте ешкімге, соның ішінде өзіңізге де қажет емес.

Каталог
Қолданбаларыңыздың бастапқы кодтарын қазып алыңыз, оның қайда және қалай жұмыс істейтінін көрсететін анықтамалық жасаңыз, журналдар мен көрсеткіштердің қай жерде орналасқанын жылдам түсіну үшін жобаның сипаттамасын (шартты readme.md) енгізіңіз. Сізден кейін мұнымен айналысатын әзірлеуші ​​тек рахмет айтады.

Доменді түсіну
Егер сізде домен болса, саусағыңызды импульсте ұстауға тырысыңыз. Бұл тривиальды болып көрінеді, иә, бірақ бәрі бірдей қызметтердің бір кілтте екеніне көз жеткізе бермейді. Бірақ бір стандартта жұмыс істеу іс жүзінде айтарлықтай оңайырақ.

Сауалнамаға тек тіркелген пайдаланушылар қатыса алады. Кіру, өтінемін.

Сіз өзіңіздің мұраңызбен не істейсіз?

  • 31.5%Мен нөлден қайта жазып жатырмын, бұл дұрысырақ 12

  • 52.6%Сізбен бірдей дерлік20

  • 10.5%Бізде мұра жоқ, біз кереметпіз4

  • 5.2%Пікірге жазамын 2

38 пайдаланушы дауыс берді. 20 пайдаланушы қалыс қалды.

Ақпарат көзі: www.habr.com

пікір қалдыру