Virtualizációval kapcsolatban nekem az LXD megközelítése szimpatikusabbnak tűnik, mint a Docker-é, és ugyanúgy container alapú ez a megoldás is. Van bárkinek itt tapasztalata vagy összehasonlítási alapja, hogy melyik mire jobb?
Például pontosan az éles szerverrel megegyező virtuális gépeken fejlesztesz, lokálisan a Te gépeden, SSD meghajtón nem túl lassan elérve a forráskódot... :)
Már fejlesztéskor ugyanúgy elkülönített konténerekben "laknak" a különböző (célú) szerverek.
Ez pontosan mire jó? A komolyabb szoftvereknek akár Windowsra is van natív változata, Linuxra pedig főleg. SSD-t így akár Windowsos PC-be is lehet tenni, azaz lokálisan ugyanolyan környezet kialakítható.
Majd egy (néhány) sör mellett elmesélem, ha eddig nem szívtál pl Apache - PHP config különbségekkel Windows és Linux között. :)
A másik fő lényeg a szeparált szolgáltatások, nem egy "gépen" fut minden, hanem egymástól függetlenül.
Aztán ott van még a skálázhatóság is, xy konténerből élesben z db fog futni különböző vasakon - fejlesztés szempontjából nálad elég 1 db, de részben ezért is van konténerben, hogy könnyű legyen belőle több darabot futtatni.
Elég sok előnye van, ezt most csak hirtelen soroltam fel, tényleg elfogy pár sör, mire csak azt fel tudom rendesen sorolni, amit én ismerek.
Szerk:
Nem az SSD-n volt a lényeg, csak aki dolgozott pl "házi dev szerveren" megosztott meghajtóval, az tudja értékelni a sokezerszer nagyobb I/O sebességet, főleg ha valami jobb IDE-t használ és támaszkodik mondjuk code completition-re is...
Egyébként nekem most nincs olyan nagy szükségem rá, de ezt már talán írtam. Viszont ahhoz, hogy tudjam, hogy most haszontalan nekem jó tájékozódni a témában. Talán olyan szempontból, ahogy Pepita írja, hogy megkönnyíti a fejlesztést, deploy-t, mert egyforma a környezet mindenhol.
Nekem úgy jött le, hogy az LXD-nél csak egy kész rendszert kapsz a container-edbe, és arra kell manuálisan vagy valamilyen tetszőleges shell scripttel telepíteni egy vagy több appot. A docker-nél ezzel szemben egy app megy egy container-be, és valami saját dockerfile script formátumuk van, ami gyakorlatilag ugyanazt csinálja, mint a fent említett, illetve valami olyasmi rémlik még, hogy memóriaképet is ment, tehát ha összeomlik a container, akkor pillanatok alatt vissza tudja állítani. Az LXD-nél azt írják, hogy eleve hardened, és nem nagyon tud egy támadó a host OS-ig eljutni, a docker-nél meg elvileg jóval egyszerűbb dolga van, de arra viszont van egy 200 oldalas doksi, hogy hogyan kell hardenelni: link. Nagyjából jelenleg ennyit tudok a témában.
Igazából pont a tapasztalat szerzés a cél, egyébként annyira nagy szükségem nincs rá. Szempont egyelőre annyi volt, hogy ne legyenek környezeti eltérések, legyen valamennyi sandboxing a futó kódnak, és stabilabb legyen az egész rendszer futása. Az utóbbit ki lehet lőni azt hiszem, mert menet közben kiderült, hogy csak a VM nyújt extra összeomlás védelmet a host OS-nek, pl ha kernel hibára fut valamelyik program. A container-nél a host OS kernelét használja minden. Úgyhogy marad a két másik szempont. Az elsőt teljesíti mindkettő, a másodiknál inkább az LXD felé hajlok, de nem nagyon találok róla biztonsági elemzéseket, csak annyit, hogy a készítők azt állítják róla, hogy biztonságos. Azért szimpatikusabb most az LXD, mert nem akarok több példányt futtatni semmiből, és így nem látom értelmét az 1 app - 1 container párosításnak, ami a Docker-nél a divat. Inkább azt csinálnám, hogy témakörönként csinálnék container-t, amiben a webservice-ek és a hozzájuk kapcsolódó adatbázisok futnak. Így egyszerre menne ezek indítása és leállítása, és a lazábban összefüggő appok mégis el lennének egymástól választva. Persze nem értek hozzá, de nekem ez a megközelítés most jobban tetszik. :-)
a docker-nél meg elvileg jóval egyszerűbb dolga van
Erre baromi kivancsi lennek. Az LXD es a Docker ugyanazokat a kernel hivasokat hasznalja, raadasul a Docker rengeteget erolkodott egy jol kitalalt Seccomp profilon, stb. Szal ha nem allat modjara rakod ossze a containert, akkor egesz jo pozicioban vagy.
Passz. Sokmindent olvasok, és gondolom a Docker előző verziói is közte lehettek. Lehet, hogy most már az is biztonságos alapból, bár a 200 oldalas cis benchmark-ból másra következtetek. Most nincs időm sajna végigolvasni, mások a prioritások, de ha érdekel ásd bele magad. link Itt írnak valami minimálisat LXD-ről, de itt sem Docker vs LXD összehasonlításban. link Olyan cikkeket sajna csak elvétve találni, és akkor sem nagyon ejtenek szót a biztonságról. :S
nem látom értelmét az 1 app - 1 container párosításnak, ami a Docker-nél a divat
Valóban ez a "divat", én inkább azt mondanám, hogy a skálázhatóság a fő szempont.
Ettől még tudsz csinálni egyetlen container-ben pl komplett LAMP szervert, pár kiegészítővel, mint pl memcached, elastic search és társaik, az eredmény az lesz, mint a "jó öreg" vagrantnál: hamar kb követhetetlen lesz, hogy melyik szolgáltatást hol - hogy lehetne optimalizálni; ha gyenge a vas, akkor csak cserélni tudod, nem tudod elosztani; lényegesen nagyobb nyűgök árán tudod több szálon (másik gépen) futtatni a teljesítményigényesebb dolgaidat.
Magyarul egyáltalán nem kötelező egy LAMP esetében 2 container + az egyéb szolgáltatások egyenként, viszont a skálázhatóság érdekében erősen ajánlott.
Az igazán szép esemény, amikor már db szerverből is több példány van.. :)
Nem csak, illetve nem elso sorban a skalazodas a szempont. Attol nem lesz valami skalazhato hogy containerben futtatod.
Az 1 container 1 app kerdesnek az az elonye, hogy van egy tesztelheto egyseged. Tehat pl. van egy nginx containered, amirol tudod hogy mukodik, tesztelted. A PHP containered megint kulon tesztelheto, mukodik. Nem az van hogy belenyulunk a rendszerbe itt es amott osszedol.
Attol nem lesz valami skalazhato hogy containerben futtatod.
Ezt nem is állítottam, viszont nem egy hátrány, ha a lehetőség megvan.
Tehat pl. van egy nginx containered, amirol tudod hogy mukodik, tesztelted. A PHP containered megint kulon tesztelheto, mukodik.
Van arra is példád, amikor külön image az nginx és php? Nem láttam még ilyet, kivéve a különálló workerek, amin viszont csak cli-k futnak, webszerver nem is kell.
Az ilyen és hasonló forrás-image-ekkel viszont Dunát lehetne rekeszteni: FROM php:7.1-apache.
(Lehet, hogy most kaptál egy infarktust, de én bizony ilyenekből szoktam kiindulni, aztán szépen hozzáírom, ami nekem kell, Dockerfile-ban, aztán docker-compose up. :))
Na végre valaki markdown-t használ sablonozásra. Én is ezt tervezem node alól, csak nem találtam eddig normális engine-t hozzá. Lehet, hogy írok sajátot.
Egyébként most agyalok, hogy markdown-t használjak BDD tesztelésre cucumber/gherkin helyett. Ha csak az alap dolgokat nézzük, akkor a feature lehetne a header, a scenario lehetne a subheader, a steps részét meg helyettesíteném folyószöveggel és egy kicsit bonyolultabb nyelvi értelmezővel. pl:
Feature: Serve coffee
In order to earn money
Customers should be able to
buy coffee at all times
Scenario: Buy last coffee
Given there are 1 coffees left in the machine
And I have deposited 1 dollar
When I press the coffee button
Then I should be served a coffee
helyett
# Serving coffee
In order to earn money Customers should be able to buy coffee at all times
## Buying the last coffee
If there is only 1 coffee left in the machine and I have deposited 1$,
then by pressing the coffee button, I should be served a coffee.
Tulképp ha belegondolok ezek a gherkinnél divatos kötőszavak is teljesen feleslegesek ahhoz, hogy érthető szöveget kapjunk:
# Serving coffee
We placed coffee machines to several locations,
so our customers are able to buy coffee at all times.
## Buying the last coffee
There is only 1 coffee left in the machine and Susanne has deposited 1$.
By pressing the coffee button, a coffee should be served to Susanne.
A mostani cucumber js implementáció szerintem nagyon fapados ahhoz képest, amit ebből a témakörből ki lehetne hozni. A legnagyobb hibája, hogy egy step definition-höz csak egy sablon szöveget lehet választani. Szóval pl itt felhasználtam, hogy "^[Tt]here is(?: only)? (?<n>1) coffee left in the machine$", és talán nagy erőlködéssel össze tudnám vonni egy regex-be azzal, hogy "^[Tt]here are (?<n>\d+) coffees left in the machine$", közben meg a hozzá tartozó step definition gyakorlatilag maradhatna ugyanaz (n) => {this.coffeesLeft = n;}.
Odáig még nem jutottam vele, közben elkalandoztam dac+amp meg külső hangkártya témában, meg elkezdtem tervezni egy komolyabb libet különböző formátumok, köztük markdown parsolására, de ami késik nem múlik. :-)
Jó cikk ez is! :-) Ilyenkor érti meg az ember, hogy a devops egy külön szakma. :-)
A Jekyll érdekes. Én valami hasonlót tervezek a github.io-s oldalamra, de az on the fly fogja a repo-ba feltöltött markdown-okat átalakítani. Még nem néztem meg, de remélhetőleg a többi repo-ból is be tudja emelni raw-ként a dokumentációt, szóval egyúttal azt a részét is megoldom majd vele. Amivel még kísérletezek, hogy titkosítva töltök fel tartalmat a repo-ba, és libsodiummal vagy fapadosan window.crypto-val bontom ki. Így ilyen nyilvánosan látható tartalmakat is le lehet jelszavasítani. Valószínűleg átköltöztetem majd az egész blogomat blogspotról oda. Később meg veszek egy domain-t, amit rá irányítok. A hosting-ért viszont nem akarok egy fillért sem fizetni, annyit nem ér nekem az egész.
Ma teljesen varatlanul felkuzdotte magat ez a cikk a Hacker News nyitolapjara es kicsit lerohantak a userek az oldalt. A szerverek jol birtak, viszont a fonokom / megbizom elkezdett gondolkozni rajta hogy kene ebbol valamit csinalni, szal ki tudja, lehet hogy egyszer csak lesz normalis szolgaltatas statikus oldalak hostolasara. :)
Gratulálok! Most éppen 37. (A Huawei, amit nagyon felkaptak mostanában, bár minket rohadtul nem érint, mert tökmindegy, hogy az amcsik vagy a kínaiak kémkednek utánunk.)
Esetleg tudnál mutatni grafikonokat, hogy hogyan bírta a terhelést?
Nem tudok, mert nem latszik a grafikonon valtozas. :D Csak a network grafikonon vannak spike-ok, a CPU 2.5%-on porgott. Statikus HTML fajlok kiszolgalasa egyaltalan nem eroforrasigenyes, valszeg napi 1 millio felhasznalo alatt nem is ereznem meg kulonosebben.
Tegnap 5100 unique user / 8000 pageview folott zartam, ma is lesz 2000-3000 unqiue user / 3000-5000 pageview. Tarhely kiszolgalasilag nem nagy ugy, de epp eleg adat egy csomo elemzeshez es en persze orulok neki mint majom a farkanak.
Azt aláírom, hogy van hátránya ennek a megközelítésnek, de legalább ebből is tanulok hosszú távon. ;-)
Az igazán szép esemény, amikor már db szerverből is több példány van.. :)
Nem kell itt semmi komolyra gondolni, csak ki akarom próbálni a polyglot persistence-et link, mert szimpatikus az a megközelítés, hogy nem mindenre a "golden hammer" adatbázist használom. Itt pl most kimondottan jól jön, ha van az SQL mellett egy gráf adatbázis.
A ketto kozott filozofiai kulonbseg van. A Docker arra van optimalizalva, hogy eldobhato containereid vannak, minden frissites a teljes container ujrageneralasat jelenti. Az LXD perzisztens, virtualis gepekre hasonlito containerekre van kihegyezve.
Az LXD-nek az az elonye, hogy tudsz vele olyan szoftvert is futtatni, ami nem viseli jol ha allandoan kirantjak alola a padlot, vagy kezzel kell confolni (== nehezen uzemeltetheto szoftver). Cserebe tenylegesen uzemeltetned, frissitened kell a gepet, konfiguracio-managementre van szukseged hozza.
Mind az LXD-t, mint a Dockert lehet a masik feladatra is hasznalni, csak nem erdemes. Miutan a Docker sokkal szelesebb korben elterjedt, javaslom az arcra esesek elkerulese vegett azt hasznalni. Kulonosen, hogy LXC volt az egyik elofutar, de kozben olyan szinten elszaladt mellettuk a vilag, hogy csak lesnek.
Köszi! Így már sokkal világosabb, hogy hogyan működik az egész technológia. Jó cikkek. (Azt hiszem az egyikben van egy elütés cgroups helyett chroops vagy ilyesmi.)
Kicsit jobban utánajárok konkrét példáknak az LXD-vel kapcsolatban, mert még mindig nem világos, hogy mi a lényegi különbség. Miben tud többet a dockerfile, mintha betennék egy shell scriptet egy LXD container-be, ami automatikusan lefut, amikor felállt a guest rendszer? Gondolom sebességbeli különbség lesz, mert a docker mindent cache-el, de ezen kívül van más is?
A Dockerben elvalik a build es a runtime. Ergo a dev gepeden lebuildeled az imaget, mondjuk berakod a kododat, lefuttatod a composer installt, stb. es utana mar a kesz imaget shippeled production-ba. Ezen felul az is elony, hogy dev es prod kornyezetben garantaltan ugyanaz lesz meg, raadasul a Dockerfile dokumentalja is hogy hogy kell eloallitani.
Be lehet állítani, hogy küldjön értesítést a böngészőnek, ha új cikket publikálsz?
szerk:
Közben utánanéztem, elvileg tényleg lehetséges az ilyesmi bezárt weboldalaknál is: link, link. Úgy nézem, hogy a service worker-eket perzisztálja a böngésző, szóval a böngésző újraindítása után sem kell újra megnyitni az oldalt ahhoz, hogy menjenek az értesítések. link
off:
Beleástam magam közben ebbe a service worker témába. Elég érdekes, egyáltalán nem követtem eddig, pedig egy csomó fejlesztést csináltak. Szerintem nagyon hasznos intertab communication-höz, hogyha egyszerre több tab nyitva van, akkor is tudd szinkronizálni mindegyiket, illetve ahogy nézem még arra is használják, ha esetleg offline menne egy single page app. Többek között a google analytics is gyűjti az adatokat localstorage-be offline állapotban is. Ezen kívül a facebook push notification-je is ezzel van megoldva.
Ossza meg ismeroseivel, barataival es kollegaival, csiripeljen es arckonyvezzen rola. :) Valahogy ez a reklam dolog nekem nem megy, bar igy is napi 40-60 latogato van a site-on, ugyhogy ugy latom hogy van igeny ezekre a menjunk bele melyen a dolgokba tipusu cikkekre.
Hetvegen irtam egy container rendszert nullarol, demonstracios cellal: https://github.com/janoszen/demo-container-runtime. Ebbol jol latszik hogy hogyan is mukodnek a containerek, es igyekeztem sok-sok readmevel megspekelni.
Elolvastam az írásaidat, és az érdekelne, hogy a Docker tud-e hot swap-et, azaz mondjuk van egy konténer, benne egy webszerver és egy php, aztán amikor bármelyikhez kiadnak egy frissítést, készítünk egy új konténert, felmásoljuk a másik mellé, és egy megadott időpontban átváltunk az újra? És onnantól kezdve a 80-as porton már az új konténerben lévő webszerver figyel.
Nem, ilyen formaban a container egy kobuta joszag, onmagatol nem tud hot swapet. Ha beleteszel valamilyen loadbalancerrel egybekotott magiat, pl Docker Swarm, Kubernetes, vagy akar IPVS, akkor tud, de ezek tobbnyire kelloen bonyolultak vagy meg nem stabilak ahhoz hogy ne akard hasznalni. Ettol fuggetlenul a restart time kb annyi mint ha egy nginx-et inditasz ujra, szal nem lesz erzekelheto.
Igazából a koncepciót még nem igazán értem, hogy mire is jó ez az egész. Ha nincs hot swap, akkor annyi az előnye egy apt-get upgrade-hez képest, hogy gyorsabb az újraindulás. Jó esetben az apt-get megvan egy perc alatt, tehát ennyi kiesés lehet, ami egy lokális szolgáltatásnál szerintem általában beleférhet mondjuk valamikor éjjel három óra fele, legfeljebb egy nemzetközinél nem. Kérdés, hogy emiatt az egy percnyi megtakarítás miatt érdemes-e egy újabb függőséget betenni a rendszerbe, ráadásul úgy, hogy téged idézve: "running Docker & Co in production is still very very hard"?
A konfigurációt sem értem, hogy hol lehet probléma. Egy fejlesztői környezetben, ha jól csinálják meg, lehet különböző konfigurációkkal kísérletezgetni. Kérdés, hogy milyen sűrűn van szükség arra, hogy az ember konfigurálja az egyes komponenseket?
Azt sem értem, miért fontos, hogy az egyes komponensek verziója megegyezzen a fejlesztői és az éles környezetben? Szoftvereknél általában a nagy változásokat előre jelzik, időben szólnak, ha egy funkció deprecated lesz, így a kódot fel lehet készíteni rá.
Ha nincs hot swap, akkor annyi az előnye egy apt-get upgrade-hez képest, hogy gyorsabb az újraindulás.
Nem, az apt-get upgrade-nel nincs rollback lehetoseged, amig a Docker containernel van. Raadasul le tudod tesztelni elore lokalis kornyezetben hogy mukodik-e a szoftver az uj csomagokkal.
A konfigurációt sem értem, hogy hol lehet probléma. Egy fejlesztői környezetben, ha jól csinálják meg, lehet különböző konfigurációkkal kísérletezgetni. Kérdés, hogy milyen sűrűn van szükség arra, hogy az ember konfigurálja az egyes komponenseket?
Ahhoz, hogy eloalljon egy mukodo szerver, sok mindent kell confolni. Webszerver, stb stb. A Docker egybe csomagolja es egyben dokumentalhatova, verziokezelhetove teszi a teljes configot. Az alternativa ehhez a Puppet, Ansible, stb. de aki irt mar veluk komolyabb configot, az el fogja mondani hogy ez nem setagalopp.
Persze nyilvan csinalhatsz mentest az osszes config fajlodrol, de azok altalaban egy baromi nagy .tar.gz-ben vannak amibol elovadaszni hogy mi miert valtozott, eleg maceras.
Azt sem értem, miért fontos, hogy az egyes komponensek verziója megegyezzen a fejlesztői és az éles környezetben? Szoftvereknél általában a nagy változásokat előre jelzik, időben szólnak, ha egy funkció deprecated lesz, így a kódot fel lehet készíteni rá.
Deruljon ki elesben hogy a dev kornyezetben hasznalt feature nem elerheto mert regebbi PHP van? Vagy hogy van egy dokumentalatlan regression?
Nem, az apt-get upgrade-nel nincs rollback lehetoseged, amig a Docker containernel van.
Nyilvánvalóan sokkal kevesebb rendszer- és szoftverfrissítésben volt részem az utóbbi tizenvalahány évben, mint neked, de még egyszer sem történt rollback. Miért készüljön olyasvalamire az ember, aminek minimális az esélye?
Raadasul le tudod tesztelni elore lokalis kornyezetben hogy mukodik-e a szoftver az uj csomagokkal.
Miért ne működne?
Deruljon ki elesben hogy a dev kornyezetben hasznalt feature nem elerheto mert regebbi PHP van? Vagy hogy van egy dokumentalatlan regression?
A fejlesztő nem tudja, hogy mit használhat és mit nem? Miért nem nézi meg?
Mi például tudatosan mindig a legegyszerűbb megoldásra törekszünk, az általunk fejlesztett integrált vállalatirányítási rendszer minimális módosítással akár php 4.0-n is tudna futni, MySQL 5.0-tól 5.7-ig, PostgreSQL 9.0-tól 10.0-ig, Apache, Nginx és OpenBSD httpd (pedig ez tényleg fapados) alatt minden gond nélkül működik.
Az integrált szót azért emeltem ki, hogy rávilágítsak, ez nem a Kovács és Társa Bt. CMS-e, hanem némileg összetettebb funkcionalitással bír. És mindezt úgy, hogy moduláris, egy fizikai vason egy vagy több modul is lehet (pl. webszerver, adatbázis, levelezés), és dinamikusan lehet modulokat módosítani, élőben telepíteni stb.
Hat nekem mar volt rollbackben reszem, es nem keves szivas volt. Olyan rendszer meg aztan plane orom amit valaki valahogy kezzel frissitett, a config fajlok allapota is ismeretlen. Olyan is volt jo sokszor, hogy a 2-3 orasra tervezett karbantartasi procedura egesz estes buliva fejlodott es az ugyfelek meg lihegnek a nyakunkba hogy mi van mar.
Ezen felul Dockerrel felhuzni egy fejlesztokornyezetet egy uj fejlesztonek nem egesz 30 masodperc, mig Docker nelkul a fejleszto elcseszerint vele tobb orat. Vagy van shared fejlesztoi szerver, aminek altalaban turosabb a hata mint a mondasbeli pacinak.
Vagy akár napokat, és ez igaz a shared dev szerverre is. Utóbbinak további "előnye" még, amikor valaki kicsit megfekteti, és senki se tud tovább dolgozni miatta... :)
Nem vonom kétségbe, amit írsz. De mondjuk egy cégvezető vagy vezető fejlesztő szempontjából fontosak a számok, hogyan jön ki olcsóbban. És ha a Docker üzemeltetését még te is nagyon-nagyon nehéznek ítéled meg, akkor ott lehet, hogy célszerű elgondolkodni.
Ezen felul Dockerrel felhuzni egy fejlesztokornyezetet egy uj fejlesztonek nem egesz 30 masodperc, mig Docker nelkul a fejleszto elcseszerint vele tobb orat. Vagy van shared fejlesztoi szerver,
De miért kell ennek így lennie? A forrásfájlok nem valamilyen verziókezelő rendszerben vannak? Kell lennie valahol egy tesztrendszernek is, ahol mások is meg tudják nézni az elkészült programot. Ezt hogyan szokták megoldani? Az egyik konténerből másolják a fájlokat a másikba?
Nyilvan, es a Docker meg relative uj es ezaltal kockazat. Raadasul a production futtatas kis leptekben nem megoldott.
Ellenben hatalmas elony az, hogy egy szabvany LNMP stack osszerakasa - a kesz imageknek koszonhetoen - fel orakban merheto. Mivel nincs szukseg kozos dev szerverre ami az osszes vhost sajatossagat magan tartja, igy a config sem lesz agyon bonyolitva.
A teszt rendszer meg szinten ugyanaz, felrantod a Docker containereket amik a CI pipelinebol kiesnek es nyomkodod.
Ahogy a programozasban is szeretunk modulokat csinalni, ugy az uzemeltetesben is. Csak eddig nem volt mivel. Ez nem mas.
Jelenleg az a javaslatom, hogy ha valaki boldog a meglevo rendszerevel, akkor nem kell raugrani csak azert mert ez most az uj divat. Csomo szivas tud vele lenni, foleg komplexebb rendszereknel. Ha van olyan problema amit viszont nehez megoldani es a Docker segithet, akkor erdemes megfontolni. Ilyen problemak:
- Rengeteg ideig tart amig az uj kolleganak eloall a dev kornyezete
- Nincs normalis teszt kornyezet
- Nincs normalis konfiguracio menedzsment az eles rendszeren
- Nem kerulnek ki idoben a bizontsagi frissitesek mert rohadt komplex a szerver es senki nem mer hozzanyulni (special snowflake szerver).
Használsz (pl composer-rel) csomagokat? Vagy váltottál már nagyobb alkalmazás mögött PHP 5.6 - ról 7.0 - ra?
Csak mert mindkét esetben elég komoly meglepetések érhetnek (és nyilván van még sokféle), és ezeket jobb élesítés előtt tudni..
A fejlesztő nem tudja, hogy mit használhat és mit nem? Miért nem nézi meg?
Remélem ezzel nem azt akarod mondani, hogy a PHP fejlesztő nyugodtan rakjon fel magának egy WAMP / XAMP / mittudomén nevű csodát PHP 7.2 - vel fejlesztői környezet gyanánt, azután fejlesszen úgy, hogy élesben csak PHP 5.3 van, és még legyen a fejében a teljes php.ini és my.conf, két példányban, a lokális és az éles?
Tudom, hogy Te nem kedveled az IDE-t sem, pedig rendkívül sokat tud segíteni - de csak addig, amíg jól van beállítva. Ha PHP 7.2 - n futtatod / teszteled a kódod, akkor baromság az IDE-t 5.x - re állítani és viszont.
minimális módosítással akár php 4.0-n is tudna futni
És ennek mi értelme van?
Tudsz biztonságosan 4.0 - t üzemeltetni 2018-ban? És teljesítményben is elég jó lesz?
Nem azért mondom, de 7.0 - tól kezdve jöttek a nyelvbe olyan (nagyon is hasznos) feature - ök, amik miatt (pl type és return type declaration) én már kicsit utálkozom az olyan kódoktól, amik a "visszafelé kompatibilitás jegyében" nem használják ki ezeket a lehetőségeket, pusztán annyira PHP 7 kompatibilisek, hogy épphogy elfutnak 7.x alatt is... (Pl. Magento 2.0 épp ilyen, hogy a "kisebb" kódbázisú projektekből nézelődjünk.)
Légyszi egy okot mondj, ami miatt érdemes ma PHP 4.x - kompatibilis kódot fenntartani (elég nehéz lehet, mert egy csomó fv 7.x alatt már nincs, removed).
Használsz (pl composer-rel) csomagokat? Vagy váltottál már nagyobb alkalmazás mögött PHP 5.6 - ról 7.0 - ra?
Csak mert mindkét esetben elég komoly meglepetések érhetnek (és nyilván van még sokféle), és ezeket jobb élesítés előtt tudni..
Nem használunk ilyeneket, mert nincs rá szükség, egy-két kivétellel mindent magunk írtunk meg.
Izgalmas lenne kiszámolni, hogy mivel megy el több idő:
1, egy teljesen saját rendszer elkészítésével,
2, külső modulokból álló rendszer elkészítésével, ahol minden komponens frissítése előtt imádkozhatsz, hogy ne kelljen rollback-elni, és állandóan tesztelni kell minden alkatrész verzióváltásánál.
»A fejlesztő nem tudja, hogy mit használhat és mit nem? Miért nem nézi meg?«
Remélem ezzel nem azt akarod mondani, hogy a PHP fejlesztő nyugodtan rakjon fel magának egy WAMP / XAMP / mittudomén nevű csodát PHP 7.2 - vel fejlesztői környezet gyanánt, azután fejlesszen úgy, hogy élesben csak PHP 5.3 van
Nem, egyáltalán nem ezt akarom mondani. Nem is értem, mi alapján jutottál erre a következtetésre.
Feltételezem, hogy egy projektnek van egy vezetője, aki tisztában van az olyan paraméterekkel, hogy például mi az éles környezetben található php verziója. Ezt vagy elmondja a fejlesztőnek vagy leírja, vagy rosszabb esetben a programozó rákérdez. Vagy kap egy környezetet készen, és még csak gondolkodnia sem kell rajta.
Tudsz biztonságosan 4.0 - t üzemeltetni 2018-ban? És teljesítményben is elég jó lesz?
Ki mondta, hogy üzemeltetnék? Ennek nem ez a lényege. De az első válaszom alapján ezen el lehet gondolkodni.
Korábban már írtam, de nálunk a PHP 5 -> PHP 7 migráció miatt az egész kódban egy vagy két sort kellett módosítani.
Légyszi egy okot mondj, ami miatt érdemes ma PHP 4.x - kompatibilis kódot fenntartani
Például az, hogy kompatibilitási tesztekre nem ment el egy perc sem. Az alap függvények és beépített típusok segítségével eddig még minden feladatot meg tudtunk oldani.
Szerintem neked as assembly lenne a megfelelő nyelv. :D Másoknak kell mindenféle oop feature meg ilyen hülyeségek, neked meg bőven elég, ha vannak függvények meg változók.
Assembly-ben nincsenek függvényeid, amíg nem írsz magadnak, és változók sem, csak regiszterek és memóriaterületek. :)
Viszont valószínű, hogy Gábornak testhez állna, ugyanis még egy egyszerű, 0 végű stringet definiálni is szép feladat. :)
(Gondolok itt Assembly real mode-ra.)
minden komponens frissítése előtt imádkozhatsz, hogy ne kelljen rollback-elni, és állandóan tesztelni kell
Visszatérő téma, tudom, hogy szerinted az OOP és a TDD Isten büntetése, mégis vannak olyan fejlesztők, akik szerint nem az. A unittesztek futtatása pedig a build folyamat része is kell legyen, úgyhogy egy gombnyomásra kiderül, hogy van-e valami baj és ha igen, akkor pontosan mi és hol. Composer-nél maradva meg van a gyorsfix is: adott package x.y.z verziónál problémát okoz, egy perc alatt beírod configba fixen az x.y.z-1 verziót, aminél még jó volt, és mehet is az új build. Aztán felveszed az issue-t, hogy ezzel kezdeni kell valamit majd.
Ezt vagy elmondja a fejlesztőnek vagy leírja, vagy rosszabb esetben a programozó rákérdez. Vagy kap egy környezetet készen
Oké, most akkor tegyük fel, hogy olyan furcsa helyzet állt elő, hogy a cégnél, ahol mondjuk Te vagy a vezető fejlesztő, egyszerre több projekten dolgoztok. 3 régi, PHP 5.3 alatt futó, 2 átvett forráskódú 5.6 alatt, és 4 új saját projekt 7.2 alatt. Milyen fejlesztői környezetet adsz készen a fejlesztőknek, akik kb hetente másik projekten dolgoznak?
(Kb erre próbált János is rávilágítani, hogy Docker konténerekkel 0.5 perc a fejlesztői környezet, tegyük fel, hogy az előzőt törölni is kell, akkor 1 perc..)
nálunk a PHP 5 -> PHP 7 migráció miatt az egész kódban egy vagy két sort kellett módosítani.
Elég érdekes lehet ennyire nem kihasználni egy programnyelv lehetőségeit... :)
Őszintén szólva én annyira örülök jónéhány 7.x újdonságnak, hogy elég nehéz lenne arra kényszeríteni, hogy 5.x alatt fejlesszek bármit is.
Például az, hogy kompatibilitási tesztekre nem ment el egy perc sem.
Milyen az a kompatibilitási teszt? Tudnál rá példát mondani? Számomra eddig elégnek tűnt, ha kellően le van fedve automata tesztekkel a kód (itt nem kizárólag phpunitra gondolok), ha ennél több kell / van jobb, kíváncsian várom.
Visszatérő téma, tudom, hogy szerinted az OOP és a TDD Isten büntetése, mégis vannak olyan fejlesztők, akik szerint nem az.
Nekem nincs semmi bajom azzal, hogy valaki Composert használ, folyamatosan tesztel, mert biztosan jó oka van rá. Ez egy út.
De az is egy út, amin mi járunk, és, mint látom, így is lehet jól működő szoftvert létrehozni. És épp ezért írtam, hogy érdekes lenne összehasonlítani a két fejlesztési módot, hogy melyiknek mik az előnyei, mik a hátrányai, mert enélkül nem lehet objektíven dönteni egy új projekt létrehozásánál.
Composer-nél maradva meg van a gyorsfix is: adott package x.y.z verziónál problémát okoz, egy perc alatt beírod configba fixen az x.y.z-1 verziót, aminél még jó volt
Ha pedig több ilyen külső komponenst használtok, és ezek véletlenül egymásra épülnek, akkor egy hibát okozó alapkomponens megakaszthatja az egész frissítést, és a konfigfájlok tele lesznek beégetett verziókkal.
tegyük fel, hogy olyan furcsa helyzet állt elő, hogy a cégnél, ahol mondjuk Te vagy a vezető fejlesztő
A jelenlegi cégemnél az a furcsa helyzet állt elő, hogy én vagyok a vezető fejlesztő, és itt verziófüggetlenül dolgozunk. Nem számít, hogy PHP 5.2 vagy 7.2, PostgreSQL 9.0 vagy 10.0, Javascript 1.3 vagy Ecmascript 2017. A korábbi mindig az újabb részhalmaza, és ha ez a funkcionalitás elég a megvalósításhoz, akkor ezt használjuk.
Látszik, hogy nemigen használtál még ilyesmit, mindegyik komponens magának intézi a függőségeit.
Te a "C" komponenst akarod használni, ez viszont használ "A"-t és "B"-t is, akkor azokat be fogja húzni magának - és neked semmi dolgod vele.
Ha gondod van a "C" - vel, akkor azzal (és csak azzal) kell matekolnod.
A jelenlegi cégemnél az a furcsa helyzet állt elő, hogy én vagyok a vezető fejlesztő
Baromira zavaró és igaztalan, amikor szándékosan úgy vágsz ki idézetmorzsákat a másik ember írásából, hogy kvázi az ő szavaival mutatsz fontosnak egy lényegtelen dolgot, miközben elrejted azt, ami mindenki számára érthető módon volt a lényege az adott mondatnak.
Hogy könnyebb legyen neked is a lényegre fókuszálni, idézem magam, kiemelve a lényeget.
tegyük fel, hogy olyan furcsa helyzet állt elő, hogy a cégnél, ahol mondjuk Te vagy a vezető fejlesztő, egyszerre több projekten dolgoztok
Tehát gratulálok a pozíciódhoz, de a probléma megoldása szempontjából tökmindegy a valódi pozíciód, és ami példát hoztam, nem is 1-3 fős fejlesztői "csapatról" szól:
3 régi, PHP 5.3 alatt futó, 2 átvett forráskódú 5.6 alatt, és 4 új saját projekt 7.2 alatt
Ez 9 aktív projekt egyidőben, kiemeltem az átvett kódot, amiből nem fogod utólag "kigyomlálni" a "túl modern" nyelvi eszközök használatát.
Túl erőszakosan próbáltad meg konkrétan kiforgatni a szavaimat, ez igaztalan és méltatlan a konstruktív vitához. Nem vagy vitapartner. Szerintem politikai pályán sikeres lehetnél.
SZERK:
És itt szokásodhoz híven ismét elmentünk teljesen OFF irányba, vagy jelezd kérlek, hogy az előző kommented mennyire kapcsolódott a témanyitóhoz, mert én már semmiféle konténerizációs kérdést vagy választ nem látok benne... :(
Ha jól értem ő azt írta, hogy a C -> [A,B], L -> [C,A] és a hiba "A" új verziójában van, tehát mind "A"-nál, mind "C"-nél fix verziót kell használni, amíg nem javítják a hibát. Egyébként ez nem jellemző, mármint ha ilyen gond van, akkor "C" fejlesztői is észreveszik, és addig nem release-elnek vagy frissítik a függőségeket, amíg nincs kint a javítás. Sok esetben mondjuk az a jellemző, hogy régebbi verzióval dolgoznak egy csomó ideig, és pár havonta vagy akár évente frissítik a függőségeket, ha éppen olyanjuk van. Legtöbbször csak az alap funkciókat használják egy-egy függőségből, szóval megy a pazarlás meg a felesleges szivárgó absztrakciók. ;-)
Nincs itt semmi kiforgatás, egyszerűen (sokadjára) nem értetted meg, amit írtam, és a fáradságot sem veszed, hogy kérdezz vagy gondolkodj.
Ahol én dolgozom mint vezető fejlesztő, ott eleve ilyen probléma fel sem merül, pontosabban irreleváns.
De tegyük fel, hogy elmegyek egy új céghez vezető fejlesztőnek, akkor a webszerver például proxyzhat a különböző projektekhez (azaz a Projekt 1-nek van saját webszervere egy bizonyos php-val, a Projekt 2-nek pedig másik webszerver másik php-val), vagy kihasználom, hogy a PHP tud fastcgi módban futni, így elég különböző portokon elindítani a különböző verziókat.
Így nagyon egyszerű marad a szerveroldali konfiguráció, de minden programozó olyan fejlesztői környezetet használ, ami neki tetszik. Én például próbáltam Linux desktop alól dolgozni, de egyelőre nem sikerült, a Windows sokkal hatékonyabb az erőforrások kihasználásában. Ezért én Windowson dolgozom, de más lehet, hogy Linuxon vagy OS-X-en.
És mivel én vagyok a vezető fejlesztő, azoknak az elveknek megfelelően alakítanám a fejlesztési kódexet, amit fentebb írtam: lehetőleg verziófüggetlen kód készüljön.
Ha egy cégtulajdonosnak ez nem tetszik, akkor eleve fel sem vesz. Ha a kollegáknak ez nem tetszik, akkor keresnek másik helyet, én pedig olyanokat veszek fel, akik képesek így dolgozni.
De minden, amit most leírtam, következik a korábbiakból. Ezért válaszoltam csak olyan röviden a "tegyük fel, hogy" feltételezésedre.
ezek szerint már wl tagságon belül is megyünk abba az irányba, hogy "mindenki ostoba, akinek nem HG a monogramja", és magasról teszünk rá, hogy már rég nem Docker vs LXD a téma, sőt, szóba se kerül...
(Azért meg kell hagyni, egész ügyesen álcázod, de ettől még ugyanolyan: magadat minősíted vele, nem engem.)
Ha egy cégtulajdonosnak ez nem tetszik, akkor eleve fel sem vesz
Ez elég valószínű, mert ez az egyszerűsítési mániád nem éppen innovatív. Nem az a kérdés, hogy ez hány leendő kollégának tetszik vagy nem, hanem hogy találsz - e olyan céget (a jelenlegin kívül), aki hajlandó lenne akár juniorként alkalmazni (próbaidőnél tovább) ezzel a berögzült szemlélettel. Érdekes lenne, ha kipróbálnád.
Vezető fejlesztőként pedig nagyon hamar belefutnál, hogy senki nem marad ott 1-2 hétnél tovább. Nézz csak szét itt, hány ember van, aki egyetért veled, junior / senior egyaránt..
Apropó, a jelenlegi cégednél hányan is dolgoztok ezen a projekten? Egyidőben mennyi volt maximum a fejlesztői létszám? (Nyilván a tesztelő / takarítónéni / stb nem fejlesztőnek számít.)
Ilyen ez a pop szakma. Szerintem csodálatra méltó, amit Gábor csinál, mert ezzel a megközelítéssel is vezető fejlesztő lett. :-)
Egyébként ebben a verziófüggetlen programozásban van némi ráció, viszont PHP-nél pont van egy jó pár deprecated függvény, amik két verzió között elveszhetnek, illetve a régebbi verzióknál előfordulhatnak nyelvi hibák, amiket esetleg menet közben javítanak. Úgy emlékszem én konkrétan egy -0 <> 0 jellegű hibát jelentettem az 5-ös verziók valamelyikénél, ami azért elég súlyos. Ezen kívül előfordulnak sebezhetőségek is, amiket az új verzióknál foltoznak, vagy pl letiltják a több soros SQL-eket, HTTP header-eket, stb. injection védelem címszóval. Nem tudom hosszú távon mennyire fenntartható ez a verzió függetlenség. Valószínűleg ha Gábor kódját egy PHP4-re tennénk, akkor azonnal eltörne ugyanúgy, mint bármelyik mai OOPs PHP kód.
Az igazság az, hogy ez már akkor (1998 - 2000) sem volt teljes, amikor még elhittem. :)
Az egyik legjobban felülről (vagy visszafelé) kompatibilis szoftver a Windows volt, amit (akkor) ismertem. Ha írtál egy desktop appot win 98 alá, akkor az jó eséllyel működött még xp-n is, win7-nél jöttek elő először problémák, de ez is jórészt kimerült hozzáférési / jogosultsági gondokban, amit nem volt túl nehéz orvosolni.
Ezzel együtt - bár Bill barátunk volt a leghangosabb "kompatibilitási szószóló" - ha az appod használt pl Microsoft Office interface-t (mondjuk hozott létre Word / Excel dokumentumot ezen keresztül), az már sajnos pontos verzióazonosságot követelt, annyit változott egy egy újabb verziónál.
Tehát még akkor sem volt könnyű olyan szoftvert írni, ami későbbi oprendszeren / környezetben is működni fog.
PHP - val összehasonlítani nem is nagyon lehet, ebben akkora különbségek vannak két főverzió között, hogy egyszerűen butaság azt hinni, hogy visszafelé kompatibilis kódot tudsz írni. Természetesen ott van még mindig az "Assembly szint" :) , ha kb semmilyen beépített függvényt / feature-t nem használsz, de akkor miért nem Assembly-ben fejlesztesz?
Emiatt én azt gondolom, hogy már régen nem fenntartható ez a fajta verziófüggetlenség, legfeljebb imitálni lehet vagy közelíteni hozzá, de aránytalanul több munkával és rosszabb karbantarthatósággal jár, tehát nem éri meg.
Szerintem csodálatra méltó, amit Gábor csinál, mert ezzel a megközelítéssel is vezető fejlesztő lett.
Én megvárnám a válaszát is, hogy mekkora csapatban, utána csodálnám, a teljes story ismeretében. :)
SZERK.:
Ja és pont a verziók és a környezet (oprendszer, stb) közti különbségek azok, amik miatt én nagyon bírom a Dockert, mert felhasználóként megrögzött Windowsos vagyok, viszont mégis tudok ugyanolyan szerver(ek)en fejleszteni, mint az éles környezet, plusz még az én gépemen van helyben, a lehető leggyorsabb fájleléréssel.. :)
Én nem vagyok egy megrögzött Win-es, szívesen használnék Linux-ot kliens gépeken is, de egyszerűen nem megy. A PC-nél a játék miatt muszáj a win, a tablet-nél meg még mindig nincs mindenhez megfelelő Linux driver, valószínűleg már nem is lesz. Később teszek majd egy újabb próbát az átállással, hátha, de minimális esélyt látok csak rá.
Miért nem az? Te mit tartasz innovációnak? Miért fontos az innováció? Szükséges-e az innováció a feladatok megoldásához?
találsz - e olyan céget (a jelenlegin kívül), aki hajlandó lenne akár juniorként alkalmazni (próbaidőnél tovább) ezzel a berögzült szemlélettel
Ismerem a népszerű modern technológiákat, a gépem tele van tesztfájlokkal, ahol kipróbáltam őket, méréseket végeztem. Enélkül nem tudnék sarkos véleményt megfogalmazni róluk.
Ha arról lenne szó, bármelyik céghez el tudnék menni, és az ismert keretrendszerekkel tudnék dolgozni, de persze saját fejlesztésű rendszerektől sem ijedek meg. Jól ismerem az OOP-t és a tervezési mintákat. Szerintem nem lenne probléma : ) De én tökéletesen elégedett vagyok a jelenlegi helyemmel, és ők is velem.
Apropó, a jelenlegi cégednél hányan is dolgoztok ezen a projekten? Egyidőben mennyi volt maximum a fejlesztői létszám?
Négyen vagyunk, ebből kettő végzett programozó/progmatos, kettőnknek pedig nem szakmai diplománk van, és ennél csak kevesebben voltunk. A cég jóval nagyobb, ez egy kis részleg.
Nekem ez fura, hogy egyenlőség jelet teszel a külső csomagok kezelése és a csomagkezelő használata között. Amennyire én tudom a composer is támogatja, hogy saját libeket használj, anélkül, hogy feltöltenéd és nyilvánossá tennéd őket.
Miért?
Pl
Már fejlesztéskor ugyanúgy elkülönített konténerekben "laknak" a különböző (célú) szerverek.
Miért?
sör
A másik fő lényeg a szeparált szolgáltatások, nem egy "gépen" fut minden, hanem egymástól függetlenül.
Aztán ott van még a skálázhatóság is, xy konténerből élesben z db fog futni különböző vasakon - fejlesztés szempontjából nálad elég 1 db, de részben ezért is van konténerben, hogy könnyű legyen belőle több darabot futtatni.
Elég sok előnye van, ezt most csak hirtelen soroltam fel, tényleg elfogy pár sör, mire csak azt fel tudom rendesen sorolni, amit én ismerek.
Szerk:
Nem az SSD-n volt a lényeg, csak aki dolgozott pl "házi dev szerveren" megosztott meghajtóval, az tudja értékelni a sokezerszer nagyobb I/O sebességet, főleg ha valami jobb IDE-t használ és támaszkodik mondjuk code completition-re is...
Itt egy rövid leírás, hogy
Egyébként nekem most nincs olyan nagy szükségem rá, de ezt már talán írtam. Viszont ahhoz, hogy tudjam, hogy most haszontalan nekem jó tájékozódni a témában. Talán olyan szempontból, ahogy Pepita írja, hogy megkönnyíti a fejlesztést, deploy-t, mert egyforma a környezet mindenhol.
Linket lécci
Ha konkrét gondod van Dockerrel, abban próbálok segíteni, LXD-t nem ismerem.
Nekem úgy jött le, hogy az
Igazából pont a tapasztalat szerzés a cél, egyébként annyira nagy szükségem nincs rá. Szempont egyelőre annyi volt, hogy ne legyenek környezeti eltérések, legyen valamennyi sandboxing a futó kódnak, és stabilabb legyen az egész rendszer futása. Az utóbbit ki lehet lőni azt hiszem, mert menet közben kiderült, hogy csak a VM nyújt extra összeomlás védelmet a host OS-nek, pl ha kernel hibára fut valamelyik program. A container-nél a host OS kernelét használja minden. Úgyhogy marad a két másik szempont. Az elsőt teljesíti mindkettő, a másodiknál inkább az LXD felé hajlok, de nem nagyon találok róla biztonsági elemzéseket, csak annyit, hogy a készítők azt állítják róla, hogy biztonságos. Azért szimpatikusabb most az LXD, mert nem akarok több példányt futtatni semmiből, és így nem látom értelmét az 1 app - 1 container párosításnak, ami a Docker-nél a divat. Inkább azt csinálnám, hogy témakörönként csinálnék container-t, amiben a webservice-ek és a hozzájuk kapcsolódó adatbázisok futnak. Így egyszerre menne ezek indítása és leállítása, és a lazábban összefüggő appok mégis el lennének egymástól választva. Persze nem értek hozzá, de nekem ez a megközelítés most jobban tetszik. :-)
a docker-nél meg elvileg
Erre baromi kivancsi lennek. Az LXD es a Docker ugyanazokat a kernel hivasokat hasznalja, raadasul a Docker rengeteget erolkodott egy jol kitalalt Seccomp profilon, stb. Szal ha nem allat modjara rakod ossze a containert, akkor egesz jo pozicioban vagy.
Passz. Sokmindent olvasok, és
Containerek
Ettől még tudsz csinálni egyetlen container-ben pl komplett LAMP szervert, pár kiegészítővel, mint pl memcached, elastic search és társaik, az eredmény az lesz, mint a "jó öreg" vagrantnál: hamar kb követhetetlen lesz, hogy melyik szolgáltatást hol - hogy lehetne optimalizálni; ha gyenge a vas, akkor csak cserélni tudod, nem tudod elosztani; lényegesen nagyobb nyűgök árán tudod több szálon (másik gépen) futtatni a teljesítményigényesebb dolgaidat.
Magyarul egyáltalán nem kötelező egy LAMP esetében 2 container + az egyéb szolgáltatások egyenként, viszont a skálázhatóság érdekében erősen ajánlott.
Az igazán szép esemény, amikor már db szerverből is több példány van.. :)
Nem
Az 1 container 1 app kerdesnek az az elonye, hogy van egy tesztelheto egyseged. Tehat pl. van egy nginx containered, amirol tudod hogy mukodik, tesztelted. A PHP containered megint kulon tesztelheto, mukodik. Nem az van hogy belenyulunk a rendszerbe itt es amott osszedol.
Nem is állítottam
Az ilyen és hasonló forrás-image-ekkel viszont Dunát lehetne rekeszteni:
FROM php:7.1-apache
.(Lehet, hogy most kaptál egy infarktust, de én bizony ilyenekből szoktam kiindulni, aztán szépen hozzáírom, ami nekem kell, Dockerfile-ban, aztán
docker-compose up
. :))Van arra is példád, amikor
Persze.
Érdekes!
Ha akarsz egy meredekebbet...
Na végre valaki markdown-t
Egyébként most agyalok, hogy markdown-t használjak BDD tesztelésre cucumber/gherkin helyett. Ha csak az alap dolgokat nézzük, akkor a feature lehetne a header, a scenario lehetne a subheader, a steps részét meg helyettesíteném folyószöveggel és egy kicsit bonyolultabb nyelvi értelmezővel. pl:
"^[Tt]here is(?: only)? (?<n>1) coffee left in the machine$"
, és talán nagy erőlködéssel össze tudnám vonni egy regex-be azzal, hogy"^[Tt]here are (?<n>\d+) coffees left in the machine$"
, közben meg a hozzá tartozó step definition gyakorlatilag maradhatna ugyanaz(n) => {this.coffeesLeft = n;}
.Hagyjan
Odáig még nem jutottam vele,
szerk:
Erre gondolsz? https://www.refaktor.hu/sajat-cdn-kevesebb-mint-100-bol/
Azota
Jó cikk ez is! :-) Ilyenkor
A Jekyll érdekes. Én valami hasonlót tervezek a github.io-s oldalamra, de az on the fly fogja a repo-ba feltöltött markdown-okat átalakítani. Még nem néztem meg, de remélhetőleg a többi repo-ból is be tudja emelni raw-ként a dokumentációt, szóval egyúttal azt a részét is megoldom majd vele. Amivel még kísérletezek, hogy titkosítva töltök fel tartalmat a repo-ba, és libsodiummal vagy fapadosan window.crypto-val bontom ki. Így ilyen nyilvánosan látható tartalmakat is le lehet jelszavasítani. Valószínűleg átköltöztetem majd az egész blogomat blogspotról oda. Később meg veszek egy domain-t, amit rá irányítok. A hosting-ért viszont nem akarok egy fillért sem fizetni, annyit nem ér nekem az egész.
Hacker News
Gratulálok! Most éppen 37. A
Esetleg tudnál mutatni grafikonokat, hogy hogyan bírta a terhelést?
Rohogve
Nem tudok, mert nem latszik a grafikonon valtozas. :D Csak a network grafikonon vannak spike-ok, a CPU 2.5%-on porgott. Statikus HTML fajlok kiszolgalasa egyaltalan nem eroforrasigenyes, valszeg napi 1 millio felhasznalo alatt nem is ereznem meg kulonosebben.
Mennyire ment fel a napi
Kb
Gondolom. :-) Azért ez elég
Azt aláírom, hogy van
Nem kell itt semmi komolyra gondolni, csak ki akarom próbálni a polyglot persistence-et link, mert szimpatikus az a megközelítés, hogy nem mindenre a "golden hammer" adatbázist használom. Itt pl most kimondottan jól jön, ha van az SQL mellett egy gráf adatbázis.
Filozofiai
Az LXD-nek az az elonye, hogy tudsz vele olyan szoftvert is futtatni, ami nem viseli jol ha allandoan kirantjak alola a padlot, vagy kezzel kell confolni (== nehezen uzemeltetheto szoftver). Cserebe tenylegesen uzemeltetned, frissitened kell a gepet, konfiguracio-managementre van szukseged hozza.
Mind az LXD-t, mint a Dockert lehet a masik feladatra is hasznalni, csak nem erdemes. Miutan a Docker sokkal szelesebb korben elterjedt, javaslom az arcra esesek elkerulese vegett azt hasznalni. Kulonosen, hogy LXC volt az egyik elofutar, de kozben olyan szinten elszaladt mellettuk a vilag, hogy csak lesnek.
Tovabbi olvasni valok a blogomon:
- Miert fontos elorelepes az uzemeltetesben a Docker
- Hogyan mukodik az egesz konteneresdi belulrol
Köszi! Így már sokkal
Kicsit jobban utánajárok konkrét példáknak az LXD-vel kapcsolatban, mert még mindig nem világos, hogy mi a lényegi különbség. Miben tud többet a dockerfile, mintha betennék egy shell scriptet egy LXD container-be, ami automatikusan lefut, amikor felállt a guest rendszer? Gondolom sebességbeli különbség lesz, mert a docker mindent cache-el, de ezen kívül van más is?
Egyszeru
Bele tudnánk egy kicsit
Igen
Be lehet állítani, hogy
szerk:
Közben utánanéztem, elvileg tényleg lehetséges az ilyesmi bezárt weboldalaknál is: link, link. Úgy nézem, hogy a service worker-eket perzisztálja a böngésző, szóval a böngésző újraindítása után sem kell újra megnyitni az oldalt ahhoz, hogy menjenek az értesítések. link
RSS
Sebaj. :-)off:Beleástam
off:
Beleástam magam közben ebbe a service worker témába. Elég érdekes, egyáltalán nem követtem eddig, pedig egy csomó fejlesztést csináltak. Szerintem nagyon hasznos intertab communication-höz, hogyha egyszerre több tab nyitva van, akkor is tudd szinkronizálni mindegyiket, illetve ahogy nézem még arra is használják, ha esetleg offline menne egy single page app. Többek között a google analytics is gyűjti az adatokat localstorage-be offline állapotban is. Ezen kívül a facebook push notification-je is ezzel van megoldva.
off2:
A weblabor úgy tűnik más időzónát használ.
Reklám
Lehet, hogy kicsit több "reklám" kéne nekik. :)
Feel free
Hetvegen irtam egy container rendszert nullarol, demonstracios cellal: https://github.com/janoszen/demo-container-runtime. Ebbol jol latszik hogy hogyan is mukodnek a containerek, es igyekeztem sok-sok readmevel megspekelni.
Hot swap
Nem
Ha erdekel, hogy mi is az a "container", akkor ihun-e a hetvegi projektem ami egy nagyon fapados, de olvashato containert implemental: https://github.com/janoszen/demo-container-runtime
Kérdések
Igazából a koncepciót még nem igazán értem, hogy mire is jó ez az egész. Ha nincs hot swap, akkor annyi az előnye egy apt-get upgrade-hez képest, hogy gyorsabb az újraindulás. Jó esetben az apt-get megvan egy perc alatt, tehát ennyi kiesés lehet, ami egy lokális szolgáltatásnál szerintem általában beleférhet mondjuk valamikor éjjel három óra fele, legfeljebb egy nemzetközinél nem. Kérdés, hogy emiatt az egy percnyi megtakarítás miatt érdemes-e egy újabb függőséget betenni a rendszerbe, ráadásul úgy, hogy téged idézve: "running Docker & Co in production is still very very hard"?
A konfigurációt sem értem, hogy hol lehet probléma. Egy fejlesztői környezetben, ha jól csinálják meg, lehet különböző konfigurációkkal kísérletezgetni. Kérdés, hogy milyen sűrűn van szükség arra, hogy az ember konfigurálja az egyes komponenseket?
Azt sem értem, miért fontos, hogy az egyes komponensek verziója megegyezzen a fejlesztői és az éles környezetben? Szoftvereknél általában a nagy változásokat előre jelzik, időben szólnak, ha egy funkció deprecated lesz, így a kódot fel lehet készíteni rá.
Nem
Nem, az apt-get upgrade-nel nincs rollback lehetoseged, amig a Docker containernel van. Raadasul le tudod tesztelni elore lokalis kornyezetben hogy mukodik-e a szoftver az uj csomagokkal.
Ahhoz, hogy eloalljon egy mukodo szerver, sok mindent kell confolni. Webszerver, stb stb. A Docker egybe csomagolja es egyben dokumentalhatova, verziokezelhetove teszi a teljes configot. Az alternativa ehhez a Puppet, Ansible, stb. de aki irt mar veluk komolyabb configot, az el fogja mondani hogy ez nem setagalopp.
Persze nyilvan csinalhatsz mentest az osszes config fajlodrol, de azok altalaban egy baromi nagy .tar.gz-ben vannak amibol elovadaszni hogy mi miert valtozott, eleg maceras.
Deruljon ki elesben hogy a dev kornyezetben hasznalt feature nem elerheto mert regebbi PHP van? Vagy hogy van egy dokumentalatlan regression?
Nem, az apt-get upgrade-nel
Mi például tudatosan mindig a legegyszerűbb megoldásra törekszünk, az általunk fejlesztett integrált vállalatirányítási rendszer minimális módosítással akár php 4.0-n is tudna futni, MySQL 5.0-tól 5.7-ig, PostgreSQL 9.0-tól 10.0-ig, Apache, Nginx és OpenBSD httpd (pedig ez tényleg fapados) alatt minden gond nélkül működik.
Az integrált szót azért emeltem ki, hogy rávilágítsak, ez nem a Kovács és Társa Bt. CMS-e, hanem némileg összetettebb funkcionalitással bír. És mindezt úgy, hogy moduláris, egy fizikai vason egy vagy több modul is lehet (pl. webszerver, adatbázis, levelezés), és dinamikusan lehet modulokat módosítani, élőben telepíteni stb.
Hat nekem mar volt
Ezen felul Dockerrel felhuzni egy fejlesztokornyezetet egy uj fejlesztonek nem egesz 30 masodperc, mig Docker nelkul a fejleszto elcseszerint vele tobb orat. Vagy van shared fejlesztoi szerver, aminek altalaban turosabb a hata mint a mondasbeli pacinak.
Többet is
Hogyan?
Nyilvan
Ellenben hatalmas elony az, hogy egy szabvany LNMP stack osszerakasa - a kesz imageknek koszonhetoen - fel orakban merheto. Mivel nincs szukseg kozos dev szerverre ami az osszes vhost sajatossagat magan tartja, igy a config sem lesz agyon bonyolitva.
A teszt rendszer meg szinten ugyanaz, felrantod a Docker containereket amik a CI pipelinebol kiesnek es nyomkodod.
Ahogy a programozasban is szeretunk modulokat csinalni, ugy az uzemeltetesben is. Csak eddig nem volt mivel. Ez nem mas.
Jelenleg az a javaslatom, hogy ha valaki boldog a meglevo rendszerevel, akkor nem kell raugrani csak azert mert ez most az uj divat. Csomo szivas tud vele lenni, foleg komplexebb rendszereknel. Ha van olyan problema amit viszont nehez megoldani es a Docker segithet, akkor erdemes megfontolni. Ilyen problemak:
- Rengeteg ideig tart amig az uj kolleganak eloall a dev kornyezete
- Nincs normalis teszt kornyezet
- Nincs normalis konfiguracio menedzsment az eles rendszeren
- Nem kerulnek ki idoben a bizontsagi frissitesek mert rohadt komplex a szerver es senki nem mer hozzanyulni (special snowflake szerver).
Miért ne működne?
Csak mert mindkét esetben elég komoly meglepetések érhetnek (és nyilván van még sokféle), és ezeket jobb élesítés előtt tudni..
Tudom, hogy Te nem kedveled az IDE-t sem, pedig rendkívül sokat tud segíteni - de csak addig, amíg jól van beállítva. Ha PHP 7.2 - n futtatod / teszteled a kódod, akkor baromság az IDE-t 5.x - re állítani és viszont.
Tudsz biztonságosan 4.0 - t üzemeltetni 2018-ban? És teljesítményben is elég jó lesz?
Nem azért mondom, de 7.0 - tól kezdve jöttek a nyelvbe olyan (nagyon is hasznos) feature - ök, amik miatt (pl type és return type declaration) én már kicsit utálkozom az olyan kódoktól, amik a "visszafelé kompatibilitás jegyében" nem használják ki ezeket a lehetőségeket, pusztán annyira PHP 7 kompatibilisek, hogy épphogy elfutnak 7.x alatt is... (Pl. Magento 2.0 épp ilyen, hogy a "kisebb" kódbázisú projektekből nézelődjünk.)
Légyszi egy okot mondj, ami miatt érdemes ma PHP 4.x - kompatibilis kódot fenntartani (elég nehéz lehet, mert egy csomó fv 7.x alatt már nincs, removed).
Használsz (pl composer-rel)
Csak mert mindkét esetben elég komoly meglepetések érhetnek (és nyilván van még sokféle), és ezeket jobb élesítés előtt tudni..
Izgalmas lenne kiszámolni, hogy mivel megy el több idő:
1, egy teljesen saját rendszer elkészítésével,
2, külső modulokból álló rendszer elkészítésével, ahol minden komponens frissítése előtt imádkozhatsz, hogy ne kelljen rollback-elni, és állandóan tesztelni kell minden alkatrész verzióváltásánál.
Remélem ezzel nem azt akarod mondani, hogy a PHP fejlesztő nyugodtan rakjon fel magának egy WAMP / XAMP / mittudomén nevű csodát PHP 7.2 - vel fejlesztői környezet gyanánt, azután fejlesszen úgy, hogy élesben csak PHP 5.3 van
Feltételezem, hogy egy projektnek van egy vezetője, aki tisztában van az olyan paraméterekkel, hogy például mi az éles környezetben található php verziója. Ezt vagy elmondja a fejlesztőnek vagy leírja, vagy rosszabb esetben a programozó rákérdez. Vagy kap egy környezetet készen, és még csak gondolkodnia sem kell rajta.
Korábban már írtam, de nálunk a PHP 5 -> PHP 7 migráció miatt az egész kódban egy vagy két sort kellett módosítani.
Szerintem neked as assembly
Tévedés! :)
Viszont valószínű, hogy Gábornak testhez állna, ugyanis még egy egyszerű, 0 végű stringet definiálni is szép feladat. :)
(Gondolok itt Assembly real mode-ra.)
De legalább gyors. :-)
Gondoltam. :)
(Kb erre próbált János is rávilágítani, hogy Docker konténerekkel 0.5 perc a fejlesztői környezet, tegyük fel, hogy az előzőt törölni is kell, akkor 1 perc..)
Őszintén szólva én annyira örülök jónéhány 7.x újdonságnak, hogy elég nehéz lenne arra kényszeríteni, hogy 5.x alatt fejlesszek bármit is.
Visszatérő téma, tudom, hogy
De az is egy út, amin mi járunk, és, mint látom, így is lehet jól működő szoftvert létrehozni. És épp ezért írtam, hogy érdekes lenne összehasonlítani a két fejlesztési módot, hogy melyiknek mik az előnyei, mik a hátrányai, mert enélkül nem lehet objektíven dönteni egy új projekt létrehozásánál.
Ez így csúnya volt!
Te a "C" komponenst akarod használni, ez viszont használ "A"-t és "B"-t is, akkor azokat be fogja húzni magának - és neked semmi dolgod vele.
Ha gondod van a "C" - vel, akkor azzal (és csak azzal) kell matekolnod.
Hogy könnyebb legyen neked is a lényegre fókuszálni, idézem magam, kiemelve a lényeget.
Túl erőszakosan próbáltad meg konkrétan kiforgatni a szavaimat, ez igaztalan és méltatlan a konstruktív vitához. Nem vagy vitapartner. Szerintem politikai pályán sikeres lehetnél.
SZERK:
És itt szokásodhoz híven ismét elmentünk teljesen OFF irányba, vagy jelezd kérlek, hogy az előző kommented mennyire kapcsolódott a témanyitóhoz, mert én már semmiféle konténerizációs kérdést vagy választ nem látok benne... :(
Ha jól értem ő azt írta, hogy
Hát én sem nagyon. :-)
Beforgatás
Ahol én dolgozom mint vezető fejlesztő, ott eleve ilyen probléma fel sem merül, pontosabban irreleváns.
De tegyük fel, hogy elmegyek egy új céghez vezető fejlesztőnek, akkor a webszerver például proxyzhat a különböző projektekhez (azaz a Projekt 1-nek van saját webszervere egy bizonyos php-val, a Projekt 2-nek pedig másik webszerver másik php-val), vagy kihasználom, hogy a PHP tud fastcgi módban futni, így elég különböző portokon elindítani a különböző verziókat.
Így nagyon egyszerű marad a szerveroldali konfiguráció, de minden programozó olyan fejlesztői környezetet használ, ami neki tetszik. Én például próbáltam Linux desktop alól dolgozni, de egyelőre nem sikerült, a Windows sokkal hatékonyabb az erőforrások kihasználásában. Ezért én Windowson dolgozom, de más lehet, hogy Linuxon vagy OS-X-en.
És mivel én vagyok a vezető fejlesztő, azoknak az elveknek megfelelően alakítanám a fejlesztési kódexet, amit fentebb írtam: lehetőleg verziófüggetlen kód készüljön.
Ha egy cégtulajdonosnak ez nem tetszik, akkor eleve fel sem vesz. Ha a kollegáknak ez nem tetszik, akkor keresnek másik helyet, én pedig olyanokat veszek fel, akik képesek így dolgozni.
De minden, amit most leírtam, következik a korábbiakból. Ezért válaszoltam csak olyan röviden a "tegyük fel, hogy" feltételezésedre.
Aha, értem
(Azért meg kell hagyni, egész ügyesen álcázod, de ettől még ugyanolyan: magadat minősíted vele, nem engem.)
Vezető fejlesztőként pedig nagyon hamar belefutnál, hogy senki nem marad ott 1-2 hétnél tovább. Nézz csak szét itt, hány ember van, aki egyetért veled, junior / senior egyaránt..
Apropó, a jelenlegi cégednél hányan is dolgoztok ezen a projekten? Egyidőben mennyi volt maximum a fejlesztői létszám? (Nyilván a tesztelő / takarítónéni / stb nem fejlesztőnek számít.)
Ilyen ez a pop szakma.
Egyébként ebben a verziófüggetlen programozásban van némi ráció, viszont PHP-nél pont van egy jó pár deprecated függvény, amik két verzió között elveszhetnek, illetve a régebbi verzióknál előfordulhatnak nyelvi hibák, amiket esetleg menet közben javítanak. Úgy emlékszem én konkrétan egy -0 <> 0 jellegű hibát jelentettem az 5-ös verziók valamelyikénél, ami azért elég súlyos. Ezen kívül előfordulnak sebezhetőségek is, amiket az új verzióknál foltoznak, vagy pl letiltják a több soros SQL-eket, HTTP header-eket, stb. injection védelem címszóval. Nem tudom hosszú távon mennyire fenntartható ez a verzió függetlenség. Valószínűleg ha Gábor kódját egy PHP4-re tennénk, akkor azonnal eltörne ugyanúgy, mint bármelyik mai OOPs PHP kód.
Verziófüggetlenség
Az egyik legjobban felülről (vagy visszafelé) kompatibilis szoftver a Windows volt, amit (akkor) ismertem. Ha írtál egy desktop appot win 98 alá, akkor az jó eséllyel működött még xp-n is, win7-nél jöttek elő először problémák, de ez is jórészt kimerült hozzáférési / jogosultsági gondokban, amit nem volt túl nehéz orvosolni.
Ezzel együtt - bár Bill barátunk volt a leghangosabb "kompatibilitási szószóló" - ha az appod használt pl Microsoft Office interface-t (mondjuk hozott létre Word / Excel dokumentumot ezen keresztül), az már sajnos pontos verzióazonosságot követelt, annyit változott egy egy újabb verziónál.
Tehát még akkor sem volt könnyű olyan szoftvert írni, ami későbbi oprendszeren / környezetben is működni fog.
PHP - val összehasonlítani nem is nagyon lehet, ebben akkora különbségek vannak két főverzió között, hogy egyszerűen butaság azt hinni, hogy visszafelé kompatibilis kódot tudsz írni. Természetesen ott van még mindig az "Assembly szint" :) , ha kb semmilyen beépített függvényt / feature-t nem használsz, de akkor miért nem Assembly-ben fejlesztesz?
Emiatt én azt gondolom, hogy már régen nem fenntartható ez a fajta verziófüggetlenség, legfeljebb imitálni lehet vagy közelíteni hozzá, de aránytalanul több munkával és rosszabb karbantarthatósággal jár, tehát nem éri meg.
SZERK.:
Ja és pont a verziók és a környezet (oprendszer, stb) közti különbségek azok, amik miatt én nagyon bírom a Dockert, mert felhasználóként megrögzött Windowsos vagyok, viszont mégis tudok ugyanolyan szerver(ek)en fejleszteni, mint az éles környezet, plusz még az én gépemen van helyben, a lehető leggyorsabb fájleléréssel.. :)
Én nem vagyok egy megrögzött
Off
Ha arról lenne szó, bármelyik céghez el tudnék menni, és az ismert keretrendszerekkel tudnék dolgozni, de persze saját fejlesztésű rendszerektől sem ijedek meg. Jól ismerem az OOP-t és a tervezési mintákat. Szerintem nem lenne probléma : ) De én tökéletesen elégedett vagyok a jelenlegi helyemmel, és ők is velem.
Nekem ez fura, hogy