Tarnevahendite evolutsioon vÔi mÔtted Dockerist, deb, jar ja muust

Tarnevahendite evolutsioon vÔi mÔtted Dockerist, deb, jar ja muust

Kordagi hetkel otsustasin kirjutada artikli konteineri ja deb-pakettide tarnimisest, kuid kui ma alustasin, viibis mind kuidagi kaugesse aega, mil tekkisid esimesed personaalarvutid ja isegi kalkulaatorid. KokkuvÔttes said kuivade vÔrdsuste asemel dokkeri ja deb-i vahel sellised mÔtisklused evolutsiooni teemal, mille ma teile esitan.

Iga toode, olgu see milline tahes, peab mingil viisil jÔudma tootmisse, olema seadistatud ja kÀivitatud. Just sellest rÀÀgibki see artikkel.

MĂ”tlen ajaloolises kontekstis, "mida nĂ€en — seda laulan", mida ma nĂ€gin, kui hakkasin koodi kirjutama, ja mida ma praegu jĂ€lgin, mida me ise sel hetkel kasutame ja miks. Artikkel ei pretendeeri tĂ€ielikule uurimisele, mĂ”ned aspektid on jÀÀnud vĂ€lja, see on minu isiklik vaade sellele, mis oli ja mis on praegu.

Nii et vanades heades aegades
 kÔige varasem tarnemood, mida ma kogesin, oli magnetofoni kassett. Mul oli arvuti BK-0010.01


Kalkulaatorite ajastu

Ei, oli veel varasem hetk, oli ka kalkulaator MK-61 ja MK-52.

Tarnevahendite evolutsioon vĂ”i mĂ”tted Dockerist, deb, jar ja muust Nii et kui mul oli MK-61, oli tavaline ruuduline paberileht, millele oli kirjutatud programm, mida vajadusel manuaalselt kalkulaatorisse sisestada. Tahad mĂ€ngida (jah, isegi selle vanamoodsa kalkulaatoriga olid mĂ€ngud) — istud alla ja kirjutad programmi kalkulaatorisse. Loomulikult, kui kalkulaator vĂ€lja lĂŒlitati, kadus programm eksistentsi. Peale enda kĂ€ega kirjutatud koodide lehelt avaldati programa ajakirjades "Raadio" ja "Noorte Tehnika", samuti trĂŒkiti neid tolle aja raamatutes.

JĂ€rgmine modifikatsioon oli kalkulaator MK-52, millel oli juba mingi sarnasus energiat mitte nĂ”udva andmete salvestamisega. NĂŒĂŒd ei pidanud mĂ€ngu vĂ”i programmi enam kĂ€sitsi sisestama, vaid, tehes mĂ”ned maagilised nĂ€ppimisliigutused nuppudega, laaditi see automaatselt.

Kalkulaatori suurima programmi maht oli 105 sammu, samas kui MК-52 pĂŒsimĂ€lu suurus oli 512 sammu.

Muide, kui on neid kalkulaatorite fĂ€nnide, kes seda artiklit loevad — artiklit kirjutades leidsin ma ka kalkulaatori emulaatori Androidile ja programmid sellele. Edasi ajaloos!

Veidi tagasiminekut MK-52 kohta (Vikipeediast)

MK-52 lendas kosmoses laevaga „Sojuz TM-7“. Selle eesmĂ€rk oli arvutada maandumistrajektoore, kui pardaarvuti ebaĂ”nnestub.

MK-52, millel on mĂ€lu laiendusplokk „Elektronika-Astro“, on alates 1988. aastast tarnitud laevadele, mis kuuluvad merevĂ€e navigeerimisarvutite komplekti.

Esimesed isiklikud arvutid

Tarnevahendite evolutsioon vĂ”i mĂ”tted Dockerist, deb, jar ja muust Tagasi aegadesse BK-0010. Loomulikult on seal nĂŒĂŒd rohkem mĂ€lu ning koodi paberilt sisestamine ei olnud enam variant (kuigi alguses tegin just nii, sest teisi andmekandjaid polnud olemas). Peamine tarkvara hoiustamise ja levitamise vahend on magnetofonide helikassettid.





Tarnevahendite evolutsioon vĂ”i mĂ”tted Dockerist, deb, jar ja muustKassettide hoidmine toimus tavaliselt ĂŒhe vĂ”i kahe binaarfaili kujul, kĂ”ik muu sisaldus sisemuses. UsaldusvÀÀrsus oli vĂ€ga madal, pidime hoidma 2-3 koopiat programmist. Laadimisaeg ei olnud samuti rahuldav, entusiastid katsetasid erineva sageduskodeerimisega, et neid puudusi ĂŒletada. Toona ei tegelenud ma veel professionaalse tarkvaraarendusega (vĂ€lja arvatud mĂ”ned lihtsad programmid Basicus), seetĂ”ttu ei saa ma kahjuks detailselt rÀÀkida, kuidas kĂ”ik sees tegelikult toimis. Ainult RAM-i olemasolu arvutis mÀÀras suuresti andmete salvestamise skeemi lihtsuse.

UsaldusvÀÀrsete ja suurte andmekandjate tulek

Hiljem tulevad vÀlja diskettid, kopeerimisprotsess muutub lihtsamaks ja usaldusvÀÀrsus kasvab.
Aga olukord muutub kardinaalselt alles siis, kui ilmuvad piisavalt suured kohalikke ladustamise seadmed HDD-de kujul.

Oluliselt muutub tarnimise tĂŒĂŒp: ilmuvad installatsiooniprogrammid, mis haldavad sĂŒsteemi konfigureerimise protsessi ja ka eemaldamisejĂ€rgset puhastamist, kuna programmid mitte ainult ei loeta mĂ€llu, vaid kopeeritakse juba kohalikku salvestusse, kust peab oskama vajadusel eemaldada ebavajalikku.

Samaaegselt suureneb tarnitava tarkvara keerukus.
Failide arv tarnes kasvab ĂŒhest sadadeni ja tuhandeteni, algavad versioonikonfliktid raamatukogudes ja muud meeldivused, kui erinevad programmid kasutavad samu andmeid.

Tarnevahendite evolutsioon vĂ”i mĂ”tted Dockerist, deb, jar ja muust Sel ajal polnud ma veel teadlik Linuxi olemasolust, elasin MS DOS ja hiljem Windowsi maailmas, kirjutades Borland Pascalis ja Delphis, vahel piiludes C++ suunas. Toote tarnimiseks kasutasid paljud tol ajal InstallShieldi ru.wikipedia.org/wiki/InstallShield, mis lahendas edukalt kĂ”ik tarkvara juurutamise ja konfigureerimisega seotud ĂŒlesanded.




Internetiajastu

Programmi sĂŒsteemide keerukus kasvab pidevalt – monoliitsetest ja lauaarvuti rakendustest liigume edasi hajutatud sĂŒsteemide, Ă”hukeste klientide ja mikroteenuste suunas. NĂŒĂŒd tuleb konfigureerida mitte ĂŒhte programmi, vaid terve hulk, ja nii, et need kĂ”ik omavahel ĂŒhilduksid.

Kogu kontseptsioon on tÀielikult muutunud, Internet on saabunud ja pilveteenuste ajastu on alanud. Seni olid need veel vaid algstaadiumis, enamasti veebisaitide kujul, ja teenuste poole peale ei olnud keegi veel mÔelnud. Kuid see oli pöördeline hetk nii arendus- kui ka rakenduste tarnimise valdkonnas.

MÀrkasin, et sel hetkel toimus pÔlvkondade vahetus arendajate seas (vÔi vÀhemalt minu ringkonnas) ning tundus, et kÔik vanad, head tarneviisid olid korraga unustatud ja kÔik algas algusest peale: kogu tarne tehti improvisatsiooniliste skriptidega, mida hakati uhkelt nimetama 'Continuous delivery'. Tegelikult algas mingi segaduse periood, kus vana oli unustatud ja ei olnud midagi uut.

MĂ€ mĂ€letan aegu, mil firmas, kus ma tol ajal töötasin (ei hakka nimetama), ei ehitatud me kogunemist lĂ€bi ant'i (maven polnud siis veel populaarne vĂ”i ei olnud seda ĂŒldse), vaid inimesed lihtsalt kogusid jar'i IDE's ja rahulikult commitiid seda SVN-i. Vastavalt sellele koosnes rakendamine faili vĂ€lja vĂ”tmisest SVN-ist ja selle SSH kaudu vajaliku masinasse kopeerimisest. Nii lihtne ja toorelt.

Samas ajavahemikus tehti lihtsate PHP veebisaitide tarnimine tĂ€iesti primitiivse lihtsa faili kopeerimise kaudu FTP-le sihtmasinasse. MĂ”nikord ei olnud isegi seda — koodi muudeti otse tootmisserveris, ja see oli eriline luksus, kui kuskil olemas olid varukoopiad.


RPM- ja DEB-paketid

Tarnevahendite evolutsioon vĂ”i mĂ”tted Dockerist, deb, jar ja muustTeisest kĂŒljest, koos interneti arenguga, hakkasid ĂŒha suuremat populaarsust koguma UNIX-i sarnased sĂŒsteemid, eriti sel ajal avastasin ma enda jaoks RedHat Linux 6, umbes 2000. aastal. Loomulikult oli seal ka teatud vahendid tarkvara tarnimiseks, vastavalt vikipeediale, sai RPM peamiseks pakihalduriks 1995. aastal, RedHat Linux 2.0 versioonis. Ja alates sellest ajast on sĂŒsteem tarnitud RPM-pakettidena ja see eksisteerib ning areneb edukalt ka tĂ€napĂ€eval.

Debian-perekondade distributsioonid lÀbisid sarnase tee ja realiseerisid kohaletoimetamise deb-pakettide nÀol, mis on jÀÀnud muutumatuks kuni tÀnaseni.

Pakettide haldurid vĂ”imaldavad mitte ainult tarkvaratooteid jĂ”udma, vaid ka nende seadistamist installimise kĂ€igus, sĂ”ltuvuste haldamist erinevate pakettide vahel, toodete eemaldamist ning liigsete andmete puhastamist deinstallimise ajal. Ehkki pĂ”himĂ”tteliselt on see kĂ”ik, mida vajate, ongi see pĂ”hjus, miks nad on pĂŒsinud peaaegu muutumatuna juba mitu aastakĂŒmmet.

Pilvetehnoloogia on paketihalduritesse lisanud installatsioonid mitte ainult fĂŒĂŒsilistelt andmekandjatelt, vaid ka pilvehoidlatest, kuid pĂ”himĂ”tteliselt on vĂ€he muutunud.

Tuleb mĂ€rkida, et hetkel on mĂ”ned katsetused eemalduda deb-paketist ja ĂŒleminek snap-paketidele, kuid sellest rÀÀgime hiljem.

Niisiis, see uus pilvearendajate pĂ”lvkond, kes ei teadnud ei DEB-i ega RPM-i, kasvas aeglaselt, kogus kogemusi, tooted muutusid keerukamaks ja vajati mĂ”istlikumaid kohaletoimetamisviise kui FTP, bash-skripti ja sarnased ĂŒliĂ”pilastooted.
Ja siin tuleb mÀngu Docker, virtuaalsuse, ressursside eristamise ja tarnimisviisi kombinatsioon. See on praegu moes ja nooruslik, kuid kas see on ikka vajalik? Kas see on igasuguste probleemide lahendaja?

Minu tĂ€helepanekute pĂ”hjal pakutakse Dockerit sageli mitte kui mĂ”istlikku valikut, vaid lihtsalt sellepĂ€rast, et sellest rÀÀgitakse kogukonnas, ja need, kes seda pakuvad, tunnevad seda ainult. Teisalt on vanad head pakkujad suurel mÀÀral tĂ€helepanuta jĂ€etud — need eksisteerivad ja teevad oma tööd vaikselt ja mĂ€rkamatult. Sellises olukorras pole teist valikut — valik on ilmne — Docker.

PĂŒĂŒan jagada kogemusi meie Dockerisse rakendamise protsessist ja milline on tulemus.


Kohandatud skriptid

Alguses olid bash-skriptid, mis edastasid jar-arhiive Ă”igetele masinatele. Selle protsessi juhtis Jenkins. See töötas edukalt, kuna jar-arhiiv on juba kogum, mis sisaldab klasse, ressursse ja isegi konfiguratsiooni. Kui panna sinna kĂ”ik maksimaalselt — siis on selle skripti abil jaotamine ĂŒks lihtsamaid asju.

Kuid skriptidel on mitmeid puudusi:

  • Skriptid kirjutatakse sageli kiirusest, mistĂ”ttu on need ÀÀrmiselt primitiivsed ja sisaldavad vaid kĂ”ige lihtsamat stsenaariumi. Seda soodustab see, et arendaja soovib vĂ”imalikult kiiresti tarnida, samas kui korraliku skripti kirjutamine nĂ”uab mĂ€rkimisvÀÀrset ressursside investeeringut.
  • Eelmise punkti tagajĂ€rjel ei sisalda skriptid eemaldamise protseduuri.
  • Uuendamise protseduuri ei ole kehtestatud.
  • Uue toote ilmumisel on vajalik kirjutada uus skript.
  • SĂ”ltuvuste tugi puudub.

Loomulikult on vÔimalik kirjutada keeruline skript, kuid nagu ma eelnevalt mainisin, on see arenduseks kuluv aeg, mis ei ole sugugi vÀike, ja aega, nagu teada, on alati vÀhe.

See piirab selgelt sellise juurutusmeetodi kasutusvĂ”imaluste ringi vaid kĂ”ige lihtsamatele sĂŒsteemidele. On aeg seda muuta.


Docker

Tarnevahendite evolutsioon vĂ”i mĂ”tted Dockerist, deb, jar ja muustMingil hetkedel hakkasid meile jĂ”udma vĂ€rskelt kĂŒpsetatud keskmise tasemega spetsialistid, kes olid tulvil ideid ja unistasid Dockerist. Nojah, lipp ĂŒles — teeme! Oli kaks katset. MĂ”lemad ebaĂ”nnestusid — ĂŒtleme nii, et suurtest ambitsioonidest tingituna, kuid reaalsest kogemusest jĂ€i puudu. Kas oleks pidanud kiirustama ja kĂ”iki jĂ”ude kasutades lĂ”pule viima? Vaevalt — meeskond peab evolutsiooniliselt kasvama vajalikule tasemele, enne kui suudab kasutada sobivaid tööriistu. KĂ”igele lisaks, kasutades valmis Dockerisid, seisime tihti silmitsi olukordadega, kus vĂ”rgu töö ei olnud korrektne (mis vĂ”is olla seotud ka Docker enda tooretsusega) vĂ”i oli keeruline teiste konteinereid laiendada.

Milliste ebamugavustega me silmitsi seisime?

  • Probleemid vĂ”rguĂŒhendusega bridge-reĆŸiimis
  • Ebamugav logisid konteineris vaadata (kui need pole eraldi host-masina failisĂŒsteemi vĂ€lja tĂ”stetud)
  • Perioodiliselt kummaline hangumine ElasticSearchis konteineris, pĂ”hjust ei saanud selgeks, konteiner ametlik
  • Konteineris shelli kasutamine on ebamugav — kĂ”ik on tugevalt piiratud, puuduvad tuttavad tööriistad
  • Kogutud konteinerite suurus on suur — sĂ€ilitamine on kallis
  • Suure konteinerite tĂ”ttu on keeruline hallata mitmeid versioone.
  • Kogumine kestab kauem kui teiste meetodite (skriptid vĂ”i deb-pakid) puhul.

Miks on Springi teenuse jar-arhiva kaudu juurutamine kehvem deb-paki kaudu? Kas ressursside isolatsioon on tĂ”esti vajalik? Kas tasub loobuda mugavatest operatsioonisĂŒsteemi tööriistadest, surudes teenuse tugevasti piiratud konteinerisse?

Kogemus tÔendab, et seda ei ole tegelikult vajalik, deb-pakist piisab 90% juhtudel.

Millal ei tööta vana hea deb ja millal on Docker tÔeliselt vajalik?

Meie jaoks tĂ€hendas see teenuste juurutamist Pythoni abil. Palju teeke, mis olid vajalikud masinĂ”ppe jaoks ja puudusid operatsioonisĂŒsteemi standardses komplektis (ja see, mis seal oli — ei olnud Ă”igeid versioone), seadistamisega seotud hack'id, vajadus erinevate versioonide jĂ€rele erinevates teenustes, mis elavad samas host-sĂŒsteemis, viisid selleni, et ainus mĂ”istlik viis selle tuumsegu tarnimiseks osutus Dockeriks. Docker-konteineri koostamise töömaht oli vĂ€iksem kui idee pakkida kĂ”ik see eraldi deb-pakettidesse koos sĂ”ltuvustega, tegelikult ei oleks keegi normaalsetes mĂ”tetes sellega jĂ€rele vĂ”tnud.

Teine aspekt, kus on plaanis kasutada Dockerit, on teenuste juurutamine blue-green deploy skeemi jÀrgi. Siin tahaks aga saavutada keerukuse jÀrkjÀrgulist suurenemist: alguses koostatakse deb-paketid ja seejÀrel juba nende pÔhjal luuakse Docker-konteiner.


Snap-paketid

Tarnevahendite evolutsioon vĂ”i mĂ”tted Dockerist, deb, jar ja muust Tagasi snap-pakettide juurde. Need ilmusid esmakordselt ametlikult Ubuntu 16.04-s. Erinevalt tuttavatest deb-pakettidest ja rpm-pakettidest sisaldavad snap-pakid endas kĂ”iki sĂ”ltuvusi. Ühest kĂŒljest vĂ”imaldab see vĂ€ltida teegikonflikte, teisest kĂŒljest aga on lĂ”pptootes suurused mĂ€rksa suuremad. Lisaks vĂ”ib see mĂ”jutada ka sĂŒsteemi turvalisust: snap-paketiga seotud teegimuudatuste eest peab jĂ€lgima arendaja, kes paketti loob. Üldiselt ei ole kĂ”ik nii ĂŒheselt mĂ”istetav ja nende kasutamise ĂŒleĂŒldine rÔÔm ei pruugi saabuda. Kuid siiski on see igati mĂ”istlik alternatiiv, kui Dockerit kasutatakse ainult pakendamise vahendina, mitte virtualiseerimiseks.



KokkuvÔttes kasutame praegu ratsionaalses kombinatsioonis nii deb-pakette kui ka Docker-konteinereid, mille mÔned nÀited asendame vajadusel snap-pakettidega.

Ainult registreeritud kasutajad saavad kĂŒsitluses osaleda. Logige sisse, palun.

Kuidas teie pakette tarnite?

  • Kohandatud skriptid

  • Kopeerime kĂ€sitsi FTP kaudu

  • deb-pakettide kaudu

  • rpm-pakettide kaudu

  • snap-pakettide kaudu

  • Docker-piltide kaudu

  • Virtuaalmasinate piltide kaudu

  • Kloonime HDD tervikuna

  • puppet

  • ansible

  • Muu

HÀÀletas 109 kasutajat. 32 kasutajat jÀid erapooletuks.

Allikas: habr.com

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster