Бо истифода аз Liquibase чӣ гуна аз тир ба пои худ худдорӣ кардан мумкин аст

Пештар ҳеҷ гоҳ рӯй надода буд ва ин ҷо боз меравем!

Дар лоиҳаи навбатии худ, мо тасмим гирифтем, ки Liquibase-ро аз ибтидо истифода барем, то дар оянда мушкилот пешгирӣ кунем. Чунон ки маълум мешавад, на хамаи аъзоёни чавони бригада дуруст истифода бурдани онро медонанд. Ман як семинари дохилӣ баргузор кардам, ки баъдан тасмим гирифтам, ки онро ба мақола табдил диҳам.

Мақола маслиҳатҳои муфид ва тавсифи се домҳои аёнтаринро дар бар мегирад, ки шумо метавонед ҳангоми кор бо абзорҳои интиқоли пойгоҳи додаҳо, аз ҷумла Liquibase, дучор шавед. Барои таҳиягарони Java дар сатҳҳои хурд ва миёна тарҳрезӣ шудааст; барои таҳиягарони ботаҷриба он метавонад барои сохторсозӣ ва такрор кардани он чизе, ки эҳтимолан маълум аст, ҷолиб бошад.

Бо истифода аз Liquibase чӣ гуна аз тир ба пои худ худдорӣ кардан мумкин аст

Liquibase ва Flyway технологияҳои асосии рақобаткунанда барои ҳалли масъалаҳои идоракунии версияи сохторҳои релятсионӣ дар ҷаҳони Java мебошанд. Якум комилан ройгон аст, дар амал аксар вақт барои истифода интихоб карда мешавад, аз ин рӯ Liquibase ҳамчун қаҳрамони нашрия интихоб шудааст. Бо вуҷуди ин, баъзе аз амалияҳои тавсифшуда вобаста ба меъмории барномаи шумо метавонанд универсалӣ бошанд.

Муҳоҷирати сохторҳои релятсионӣ як роҳи маҷбурии мубориза бо чандирии сусти анбори додаҳои релятсионӣ мебошад. Дар давраи мӯди OOP, услуби кор бо пойгоҳи додаҳо маънои онро дошт, ки мо схемаро як бор тавсиф мекунем ва дигар ба он даст нарасонем. Аммо воқеият ҳамеша ин аст, ки ҳама чиз тағир меёбад ва тағирот ба сохтори ҷадвал аксар вақт талаб карда мешавад. Табиист, ки худи раванд метавонад дардовар ва ногувор бошад.

Ман ба тавсифи технология ва дастурҳои илова кардани китобхона ба лоиҳаи шумо амиқтар намеравам; дар ин мавзӯъ чанд мақола навишта шудааст:

Илова бар ин, аллакай мақолаи олӣ дар мавзӯи маслиҳатҳои муфид мавҷуд буд:

Маслињат

Мехохам маслихату эродхои худро, ки аз араку хун ва дарди халли мушкилоти мухочират ба дунё омад.

1. Пеш аз оғози кор, шумо бояд бо бахши таҷрибаҳои беҳтарин шинос шавед сомона Ликибаза

Дар он ҷо чизҳои оддӣ, вале хеле муҳим тасвир шудаанд, ки бе онҳо истифодаи китобхона метавонад ҳаёти шуморо душвор гардонад. Масалан, бархӯрди сохторнашуда барои идоракунии маҷмӯи тағирот дер ё зуд ба нофаҳмиҳо ва муҳоҷирати шикаста оварда мерасонад. Агар шумо дар як вақт тағйироти ба ҳамдигар вобастаро ба сохтори пойгоҳи додаҳо ва мантиқи хидматрасонӣ ворид накунед, эҳтимоли зиёд вуҷуд дорад, ки ин ба санҷишҳои сурх ё муҳити вайроншуда оварда мерасонад. Илова бар ин, тавсияҳо оид ба истифодаи Liquibase дар вебсайти расмӣ банд дар бораи таҳия ва санҷиши скриптҳои бозгашт дар якҷоягӣ бо скриптҳои асосии муҳоҷиратро дар бар мегиранд. Хуб, дар мақола https://habr.com/ru/post/178665/ Мисолҳои рамзӣ дар бораи муҳоҷират ва механизми бозгашт вуҷуд доранд.

2. Агар шумо ба истифодаи абзорҳои муҳоҷират шурӯъ кунед, ба ислоҳи дастӣ дар сохтори пойгоҳи додаҳо иҷозат надиҳед

Чи хеле ки мегуянд: «Як бор Персил, хамеша Персил». Агар асоси барномаи шумо аз ҷониби Liquibase идора карда шавад, ҳама гуна тағироти дастӣ фавран ба ҳолати номувофиқ оварда мерасонад ва сатҳи эътимод ба маҷмӯи тағирот ба сифр табдил меёбад. Хавфҳои эҳтимолӣ якчанд соатро барои барқарор кардани пойгоҳи додаҳо дар бар мегиранд; дар сенарияи бадтарин, сервери мурда. Агар шумо дар дастаи худ як меъмори DBA "мактаби кӯҳна" дошта бошед, босаброна ва бодиққат ба ӯ фаҳмонед, ки агар вай аз рӯи фаҳмиши худ аз як таҳиягари шартии SQL махзани маълумотро таҳрир кунад, кор то чӣ андоза бад хоҳад буд.

3. Агар маҷмӯи тағирот аллакай ба анбор ворид шуда бошад, аз таҳрир худдорӣ намоед

Агар як таҳиягари дигар кашола карда, маҷмӯи тағиротро истифода барад, ки баъдтар таҳрир карда мешавад, вай ҳангоме ки ҳангоми оғоз кардани барнома хатогӣ мегирад, ҳатман шуморо бо сухани меҳрубонона ёд хоҳад кард. Агар таҳрир кардани маҷмӯаи тағирот бо ягон роҳ ба рушд ворид шавад, шумо бояд ба нишебҳои лағжиши ислоҳот пайравӣ кунед. Моҳияти мушкилот ба тасдиқи тағирот аз рӯи ҳаш - механизми асосии Liquibase вобаста аст. Ҳангоми таҳрир кардани рамзи тағирот, миқдори хэш тағир меёбад. Таҳрири маҷмӯаҳои тағирот танҳо вақте имконпазир аст, ки тамоми пойгоҳи додаҳоро аз сифр бе талафи маълумот ҷойгир кардан мумкин аст. Дар ин ҳолат, рефакторинги коди SQL ё XML метавонад, баръакс, ҳаётро осонтар ва муҳоҷиратро қобили хондан гардонад. Намунае метавонад вазъияте бошад, ки дар оғози барнома схемаи пойгоҳи додаҳо дар дохили даста мувофиқа карда шуд.

4. Агар имконпазир бошад, нусхаҳои эҳтиётии махзани маълумотро дошта бошед

Дар ин чо, ба фикрам, хама чиз равшан аст. Агар ногаҳон муҳоҷират бебарор бошад, ҳама чизро баргардонидан мумкин аст. Liquibase дорои асбоби баргардонидани тағирот мебошад, аммо скриптҳои бозпасро низ худи таҳиякунанда навиштаанд ва онҳо метавонанд бо эҳтимолияти ҳамон скриптҳои маҷмӯи тағиротҳои асосӣ мушкилот дошта бошанд. Ин маънои онро дорад, ки дар ҳама ҳолат онро бо нусхабардорӣ бехатар бозӣ кардан муфид аст.

5. Агар имконпазир бошад, нусхаҳои эҳтиётии махзани маълумотро ҳангоми таҳия истифода баред

Агар ин ба шартномаҳо ва махфият мухолифат накунад, дар пойгоҳи додаҳо маълумоти шахсӣ мавҷуд нест ва вазни он то ду офтоб зиёд нест - пеш аз истифодаи он дар серверҳои муҳоҷирати мустақим, шумо метавонед тафтиш кунед, ки он дар мошини таҳиягар чӣ гуна кор мекунад ва ҳисоб кунед қариб 100% мушкилоти эҳтимолӣ ҳангоми муҳоҷират.

6. Бо дигар таҳиягарон дар даста муошират кунед

Дар процесси нагз ташкил кардашудаи тараккиёт хар як аъзои коллектив медонад, ки кй чй кор мекунад. Дар асл, ин аксар вақт чунин нест, бинобар ин, агар шумо ба сохтори пойгоҳи додаҳо ҳамчун як қисми вазифаи худ тағирот омода карда бошед, тавсия дода мешавад, ки ба таври иловагӣ тамоми дастаро дар ин бора огоҳ созед. Агар касе дар баробари тағирот ворид кунад, шумо бояд бодиққат ташкил кунед. Бо ҳамкорон пас аз анҷоми кор муошират кардан меарзад, на танҳо дар ибтидо. Бисёр мушкилоти эҳтимолӣ бо маҷмӯи тағиротро дар марҳилаи баррасии код ҳал кардан мумкин аст.

7. Дар бораи чӣ кор карданатон фикр кунед!

Чунин ба назар мерасад, ки маслиҳати худ аз худ маълум аст, ки ба ҳама гуна вазъият дахл дорад. Аммо, агар таҳиякунанда бори дигар чӣ кор карда истодааст ва он чӣ таъсир карда метавонад, таҳлил мекард, аз бисёр мушкилот пешгирӣ кардан мумкин буд. Кор бо муҳоҷирон ҳамеша таваҷҷӯҳи иловагӣ ва дақиқро талаб мекунад.

Домҳо

Биёед ҳоло ба домҳои маъмулӣ назар кунем, ки агар шумо маслиҳатҳои дар боло зикршударо риоя накунед, шумо метавонед ба онҳо дучор шавед ва маҳз чӣ бояд кард?

Ҳолати 1: Ду таҳиягар кӯшиш мекунанд, ки дар як вақт маҷмӯи тағиротҳои нав илова кунанд

Бо истифода аз Liquibase чӣ гуна аз тир ба пои худ худдорӣ кардан мумкин аст
Вася ва Петя мехоҳанд версияи тағирёбандаи 4-ро бидуни огоҳӣ дар бораи якдигар эҷод кунанд. Онҳо ба сохтори пойгоҳи додаҳо тағирот ворид карданд ва дархости кашиданро бо файлҳои гуногуни тағирот пешниҳод карданд. Механизми зерини амал пешниҳод карда мешавад:

Чӣ тавр қарор

  1. Ба ҳар ҳол, ҳамкорон бояд дар бораи тартибе, ки маҷмӯаҳои тағироташон бояд мувофиқ бошанд, мувофиқат кунанд, масалан, Петин бояд аввал татбиқ карда шавад.
  2. Касе бояд дуюмро ба худ илова кунад ва маҷмӯи тағиротҳои Васяро бо версияи 5 қайд кунад. Инро метавон тавассути Cherry Pick ё якҷоякунии тоза анҷом дод.
  3. Пас аз тағирот, шумо бояд ҳатман дурустии амалҳои андешидашударо тафтиш кунед.
    Дар асл, механизмҳои Liquibase ба шумо имкон медиҳанд, ки дар анбор ду маҷмӯи тағиротҳои версияи 4 дошта бошед, аз ин рӯ шумо метавонед ҳама чизро тавре ки ҳаст, тарк кунед. Яъне, шумо танҳо ду тағиротро ба версияи 4 бо номҳои гуногун хоҳед дошт. Бо ин равиш, баъдтар паймоиш кардани версияҳои пойгоҳи додаҳо хеле душвор мешавад.

Илова бар ин, Liquibase, ба монанди хонаи хоббитҳо, асрори зиёдеро нигоҳ медорад. Яке аз онҳо калиди validCheckSum мебошад, ки дар версияи 1.7 пайдо шудааст ва ба шумо имкон медиҳад, ки новобаста аз он ки дар пойгоҳи додаҳо нигоҳ дошта мешавад, арзиши хэшро барои маҷмӯи тағироти мушаххас муайян кунед. Ҳуҷҷатгузорӣ https://www.liquibase.org/documentation/changeset.html чунин мегуяд:

Маблағи назоратро илова кунед, ки барои ин тағирот дуруст ҳисобида мешавад, новобаста аз он ки дар базаи маълумот захира шудааст. Пеш аз ҳама вақте истифода мешавад, ки ба шумо тағир додани маҷмӯи тағирот лозим аст ва намехоҳед, ки хатогиҳо дар пойгоҳи додаҳо, ки дар он аллакай иҷро шудааст, партофта шаванд (на тартиби тавсияшуда)

Бале, бале, ин тартиб тавсия дода намешавад. Аммо баъзан як ҷодугари нури қавӣ низ техникаи торикро азхуд мекунад

Ҳолати 2: Муҳоҷират, ки аз маълумот вобаста аст

Бо истифода аз Liquibase чӣ гуна аз тир ба пои худ худдорӣ кардан мумкин аст

Фарз мекунем, ки шумо имкони истифодаи нусхаҳои эҳтиётии пойгоҳи додаҳоро аз серверҳои зинда надоред. Петя маҷмӯи тағиротро эҷод кард, онро дар маҳаллӣ санҷид ва бо итминони комил, ки ӯ дуруст аст, ба таҳиякунанда дархости ҷалб кард. Ба хар хол рохбари лоиха аник кард, ки оё Петя онро тафтиш карда бошад ва баъд илова кард. Аммо ҷойгиркунӣ дар сервери рушд афтод.

Дар асл, ин имконпазир аст ва ҳеҷ кас аз ин эмин нест. Ин ҳодиса рӯй медиҳад, агар тағирот ба сохтори ҷадвал бо ягон навъ ба маълумоти мушаххас аз пойгоҳи додаҳо алоқаманд бошад. Аён аст, ки агар базаи Петя танҳо бо маълумоти санҷишӣ пур карда шавад, он метавонад ҳама ҳолатҳои мушкилотро дар бар нагирад. Масалан, њангоми нест кардани љадвал маълум мешавад, ки дар љадвалњои дигар аз рўи Калиди хориљї сабтњо мављуданд, ки ба сабтњои љадвали тозашаванда алоќаманданд. Ё ҳангоми иваз кардани навъи сутун маълум мешавад, ки на 100% маълумотро ба навъи нав табдил додан мумкин аст.

Чӣ тавр қарор

  • Скриптҳои махсусро нависед, ки як маротиба дар баробари муҳоҷират истифода мешаванд ва маълумотро ба шакли мувофиқ оваред. Ин як роҳи умумии ҳалли мушкилоти интиқоли маълумот ба сохторҳои нав пас аз татбиқи муҳоҷират аст, аммо чизи шабеҳро қаблан дар ҳолатҳои махсус истифода бурдан мумкин аст. Ин роҳ, албатта, на ҳамеша дастрас аст, зеро таҳрир кардани маълумот дар серверҳои зинда метавонад хатарнок ва ҳатто харобиовар бошад.
  • Роҳи дигари душвор таҳрир кардани маҷмӯи тағиротҳои мавҷуда мебошад. Мушкилот дар он аст, ки ҳама пойгоҳи додаҳо, ки аллакай дар шакли мавҷудаи худ татбиқ карда шудаанд, бояд барқарор карда шаванд. Ин комилан имконпазир аст, ки тамоми дастаи пуштибонӣ маҷбур мешаванд, ки пойгоҳи додаҳоро аз сифр ба таври маҳаллӣ паҳн кунанд.
  • Ва роҳи универсалтарин ин интиқол додани мушкилот бо додаҳо ба муҳити таҳиякунанда, дубора эҷод кардани ҳамон вазъият ва илова кардани тағиротҳои нав ба тағири шикаста мебошад, ки мушкилотро бартараф мекунад.
    Бо истифода аз Liquibase чӣ гуна аз тир ба пои худ худдорӣ кардан мумкин аст

Умуман, ҳар қадаре, ки пойгоҳи додаҳо аз ҷиҳати таркиб ба базаи сервери истеҳсолӣ монанд бошад, ҳамон қадар эҳтимолияти мушкилот бо муҳоҷират дуртар меравад. Ва, албатта, пеш аз фиристодани маҷмӯи тағирот ба анбор, шумо бояд якчанд маротиба фикр кунед, ки оё он чизеро вайрон мекунад.

Вазъияти 3. Ликибаза пас аз ба истеҳсолот даромадан ба истифода оғоз мешавад

Фарз мекунем, ки роҳбари даста аз Петя хоҳиш кард, ки Liquibase-ро ба лоиҳа дохил кунад, аммо лоиҳа аллакай дар истеҳсолот аст ва сохтори пойгоҳи додаҳо мавҷуд аст.

Мутаносибан, мушкилот дар он аст, ки дар ҳама гуна серверҳои нав ё мошинҳои таҳиякунанда ин ҷадвалҳо бояд аз сифр дубора эҳё шаванд ва муҳити мавҷуда бояд дар ҳолати муттасил боқӣ монад ва барои қабули маҷмӯи тағиротҳои нав омода бошад.

Чӣ тавр қарор

Ҳамчунин якчанд роҳ вуҷуд дорад:

  • Аввалин ва возеҳтарин он аст, ки скрипти алоҳида дошта бошад, ки ҳангоми оғоз кардани муҳити нав бояд дастӣ татбиқ карда шавад.
  • Дуюм камтар возеҳ аст, муҳоҷирати Liquibase дошта бошед, ки дар контексти дигари Liquibase ҷойгир аст ва онро татбиқ кунед. Шумо метавонед бештар дар бораи Context Liquibase инҷо хонед: https://www.liquibase.org/documentation/contexts.html. Умуман, ин як механизми ҷолибест, ки онро бомуваффақият истифода бурдан мумкин аст, масалан, барои санҷиш.
  • Роҳи сеюм аз якчанд марҳила иборат аст. Аввалан, барои ҷадвалҳои мавҷуда интиқол бояд эҷод карда шавад. Пас он бояд ба ягон муҳит татбиқ карда шавад ва аз ин рӯ маблағи хэши он ба даст оварда мешавад. Қадами навбатӣ ин оғоз кардани ҷадвалҳои холии Liquibase дар сервери холии мо мебошад ва дар ҷадвал бо таърихи истифодаи маҷмӯаҳои тағирот, шумо метавонед ба таври дастӣ дар бораи маҷмӯаи тағиротҳои "гӯё татбиқшуда" бо тағирот дар пойгоҳи додаҳо сабт кунед. . Ҳамин тариқ, дар сервери мавҷуда, ҳисобкунии таърих аз версияи 2 оғоз мешавад ва ҳама муҳитҳои нав якхела рафтор мекунанд.
    Бо истифода аз Liquibase чӣ гуна аз тир ба пои худ худдорӣ кардан мумкин аст

Вазъият 4. Муҳоҷиратҳо бузург мешаванд ва барои анҷом додан вақт надоранд

Дар оғози таҳияи хидмат, чун қоида, Liquibase ҳамчун вобастагии беруна истифода мешавад ва ҳама муҳоҷират ҳангоми оғози барнома коркард карда мешаванд. Бо вуҷуди ин, бо гузашти вақт, шумо метавонед ба ҳолатҳои зерин дучор шавед:

  • Муҳоҷиратҳо бузург мешаванд ва барои анҷоми он вақти зиёд лозим аст.
  • Муҳоҷират дар муҳитҳои тақсимшуда, масалан, дар як вақт дар якчанд серверҳои пойгоҳи додаҳо зарур аст.
    Дар ин ҳолат, татбиқи муҳоҷират барои муддати тӯлонӣ ба вақти фарорасии барнома оварда мерасонад. Илова бар ин, татбиқи муҳоҷир ба ҳар як мисоли барнома алоҳида метавонад боиси аз ҳамоҳангсозии серверҳои гуногун гардад.

Чӣ тавр қарор

Дар чунин ҳолатҳо, лоиҳаи шумо аллакай калон аст, шояд ҳатто калонсолон ва Liquibase ҳамчун воситаи алоҳидаи беруна амал мекунад. Гап дар он аст, ки Liquibase ҳамчун китобхона ба файли jar тартиб дода шудааст ва метавонад ҳамчун вобастагӣ дар дохили лоиҳа ё мустақил кор кунад.

Дар ҳолати мустақил, шумо метавонед татбиқи муҳоҷиратро ба муҳити CI/CD-и худ ё ба дӯши пурқуввати маъмурони система ва мутахассисони ҷойгиркунӣ вогузоред. Барои ин ба шумо сатри фармони Liquibase лозим аст https://www.liquibase.org/documentation/command_line.html. Дар ин реҷа имкон пайдо мешавад, ки барнома пас аз анҷоми ҳама интиқолҳои зарурӣ оғоз шавад.

хулоса

Дарвоқеъ, ҳангоми кор бо муҳоҷирати пойгоҳи додаҳо метавонад боз ҳам бисёр домҳо бошад ва бисёре аз онҳо муносибати эҷодиро талаб мекунанд. Фаҳмидани он муҳим аст, ки агар шумо асбобро дуруст истифода баред, аксари ин домҳоро пешгирӣ кардан мумкин аст. Махсусан, ба ман лозим омад, ки ҳамаи мушкилоти номбаршударо дар шаклҳои гуногун ҳал кунам ва баъзеи онҳо натиҷаи хатогиҳои ман буданд. Бештари вақт ин, албатта, аз сабаби беэҳтиётӣ рӯй медиҳад, аммо баъзан аз сабаби нотавонӣ будани ҷиноӣ дар истифодаи асбоб.

Манбаъ: will.com

Илова Эзоҳ