'webadmin' kategória archívuma.

MySQL Maria

A MySQL háza tájáról a Sun általi felvásárlás volt az utóbbi időben a leghangosabb, azonban a fejlesztés ezzel párhuzamosan nem állt meg, sőt. Az akvizíció rövid távon biztosan nem érinti a MySQL-t semmilyen módon, és egyelőre semmi jel nem utal arra sem, hogy hosszú távon kár érné az adatbázismotor használóit. Ebben a blogbejegyzésben azonban nem erről, hanem az egyik új fejlesztésről: a MyISAM táblatípus utódjának szánt Maria-ról lesz szó.

MySQL

A MySQL több fajta táblatípus használatát teszi lehetővé párhuzamosan egy adatbázisszerveren, egy adatbázison belül, táblázatonként. A MySQL alapértelmezett táblatípusa a MyISAM, de többnyire ismert még az InnoDB táblatípus is (és van még pár: MyISAM Merge, Memory/HEAP, Cluster, Archive és Federated – talán egyet sem hagytam ki). Mindegyik táblatípus más felhasználási területen tud optimális teljesítményt nyújtani – a éppen aktuális felhasználási módnak megfelelőt kiválasztva hozhatjuk ki a leghatékonyabb megoldást. Több aktívan fejlesztett táblatípus is ismert, ilyen a Falcon és a MyISAM utód Maria.

A Maria táblatípus gyakorlatilag a MyISAM továbbfejlesztése, kezdetnek két újdonsággal (és pár kötöttséggel): opcionálisan “crash safe” táblák, illetve sor alapú gyorsítótárazás. Az előbbi magyarra lefordítva annyit jelent, hogy ha a tábla módosítása során a szerver lefagy, a tábla nem sérül (kijavítja önmagát), míg az utóbbi a teljesítményt javíthatja jellemzően átmeneti lemezre írt táblák esetén (amikor nem fér be egy JOIN miatt összeálló a átmenetileg létrejövő tábla a memóriába). Nagy csodáról tehát nincsen szó, ezek a változások azonban megbízhatóbbá, és gyorsabbá tehetik majd a jövőben a MyISAM táblákat.

Az egy hete megesett bejelentésben nem esik szó róla, hogy mikorra készül el a végleges változat, eddig – főleg részmunkaidőben végzett – 2 év munkája áll a projektben. A jelenlegi verzió már letölthető és kipróbálható, annyit lehet róla tudni, hogy működik, s hogy a teljesítménye jónak mondható jelenlegi állapotához képest. A projektet egyébként Michael “Monty” Widenius vezeti, aki a MySQL egyik alapítótagja, és a MyISAM motor is nevéhez fűződik. S hogy miért pont Maria?

Monty, the creator of MySQL, named MySQL after his first child ‘My’. His second child, Max, gave his name to MaxDB and the MySQL-Max distributions. His third and youngest child is named Maria…

Netvibes Ginger bétázás

Jópár visszajelzést kaptam a Gingerrel kapcsolatosan, az ezekkel kapcsolatos gondolataimat megosztanám egy kicsit. Szó fog esni egy kis architektúráról (nem, nem fogom leírni, hogy milyen van a Netvibes mögött, mert köt a titoktartási szerződés, de olyan dolgokat szívesen összefoglalok, melyek kikövetkeztethetőek), arról, hogy mi történik, történt az átálláskor, hogy miért van bétázás, s hogy miért fordulhatott elő, hogy egy kicsit ma belassult az oldal és korrekcióra volt szükség.

Netvibes Ginger

Mindenekelőtt fontos látni, hogy jelenleg két Netvibes rendszer fut egyszerre, a régebbi Coriander változat, és az újabb Ginger, és hogy mit kapunk, az attól függ hogy milyen felhasználóval vagyunk bejelentkezve. A két rendszer nagyon sok ponton tér el egymástól, a különböző függvénykönyvtár (pl. Mootools) verzióktól kezdve a szerverrel történő kommunikációig, nem hiába: a Ginger mögött jópár hónap fejlesztés van, és közben nem henyélt egyik fejlesztő sem. Ennek megoldása elvileg nem nehéz, gyakorlatilag sok apróság miatt nem a triviális kategória, és a fejlesztés nem kis körültekintést kívánt. Alapvetően amit látni is lehet a rendszerből az annyi, hogy bejelentkezéskor egy cookie kerül beállításra, és a terheléselosztó rendszer ez alapján tudja, hogy melyik szerverhez küldje a kéréseket. A ki-be jelentkezést és egyéb folyamatokat persze jól le kell zsírozni.

A Gingerhez új szerverek kerültek beállításra, de a Ginger hatása korántsem csak az új szerverekre korlátozódik, ezért az üzemeltetésnek jelentősen megnövekedett aktivitásra kellett számítania – ekkorára mint ami most volt, mégsem számítottunk, az átállás kiemelkedően jól sikerült. Az egyik architektúrális dolog mely számít, hogy a Ginger az ecosystemet is használja és terheli, hiszen tartalom hozzáadáskor immár nem saját adatbázist, hanem az ecosystemét használja, a Gingerben hozzáadandó widgeteket keresők valójában az ecosystemen keresnek, stb. Másrészt a Ginger átállás marketingje a Netvibes teljes látogatottságát, használatát is megdobta, olyanok is az oldalra látogattak, akik egyébként nem lettek migrálva, azok is ránéztek korábbi oldalukra, akik már nem használják azt, és jöttek új felhasználók is persze, nem is kevés.

Harmadrészt az új funkciók (barátok, aktivitás) alapvetően adatbázis terhelőbbek, mint a régi felállás, ahol gyakorlatilag felhasználónként teljesen szeparált adatokról beszélhettünk. Negyedrészt, hogy soroljam még az indokokat, a Ginger felhasználók (akik early adopters, erősen tech réteg) most rárobbantak az oldalra, jelentősen nagyobb látogatottságot produkálva, mint ami jellemző a Netvibes-on, és mint ami jellemző lesz rájuk – egyszerűen végigpróbálták a funkciókat, kommunikáltak egymással, létrehozták, összerakosgatták univerzumukat.

Végül, de nem utolsó sorban: a meghívásos bétázást olyan marketinges, webkettes herce-hurcának szokták tartani az emberek, alapvetően azonban az üzemeltetés szempontjából nagyon is praktikus kérdés. A felhasználók egy kis csoportjának átállítása lehetővé teszi, hogy valódi felhasználói aktivitás mellett, de kisebb körben, kevesebb befektetéssel, az esetleges problémákat csak a felhasználók egy részére korlátozva felmérjék, hogy a rendszer hogyan muzsikál, hol kell rajta hangolni. A felmerülő hibák sokkal nyugodtabban javíthatóak, esetlegesen valamilyen nem várt, de nagy probléma esetén vissza lehet térni az előző verzióra. S ezekkel együtt persze marketingről is szó van. Lehet növelni az érdeklődést, a béta rendszert használók számára jó érzés, hogy az új funkciókhoz előbb hozzáférhetnek, mint a többség, s ráadásul a körülmények hatására toleránsabbak is a hibákkal szemben, mint általában.

A bétázás egy lehetőség a Netvibesnak, hogy stabilan történhessen meg a Gingerre a végleges átállás a közeljövőben. A Ginger kiemelkedően kedvező fogadtatásra talált. A helyzettel azonban – és ez igaz bármelyik “béta” címkéjű oldalra – nem szabad, s nem célszerű visszaélni. A teljes csapat erősen dolgozik is azon, hogy a felmerülő hibák javításra kerüljenek, s hogy a Netvibes továbbra is megbízhatóan, stabilan működjön.

SVN: telepítés

Korábbi SVN bevezető bejegyzésem igen pozitív visszajelzéseket kapott, több reakció is érkezett rá. Az egyikben azt a kérdést szegezték nekem, hogy akkor hogyan is van ez a dolog, kell-e valami szerverszerűt telepíteni az SVN használatához, vagy másképp működik a rendszer? Röviden: nem feltétlenül, de a legegyszerűbb, ha van.

SVN - Subversion

Én eddig egyszer telepítettem SVN szervert, egy ősrégi Debian masinára, a tapasztalat az volt, hogy bár megdolgoztam vele, nem igazán tért el egy szerver telepítéstől Linux alá. A helyzet azóta sokat változott, a Linux szerverek és maga a Subversion is fejlődött.

A kalandozást érdemes a Subversion projekt honlapján kezdeni, először is azzal, hogy pontosan hogyan is kommunikál az SVN kliens az SVN szerverrel. A – remélhetőleg – ismerős HTTP protokolt kiegészítő WebDAV/DeltaV kommunikációt használ (kicsit részletesebben), melyekről nem állítanám, hogy egyszerűek, mindazonáltal jól működnek. Ebből többminden következik. Az egyik, hogy a webproxy-kon keresztül elvileg jól működtethető az SVN kommunikáció, másrészt, hogy az Apache szerver a rendszer barátja. De ha nem akarjuk, nem kell bemutatnunk őket egymásnak, Apache nélkül is megoldható a dolog.

Kicsit előreugrok, hogy aztán érthetőbb legyen a következő bekezdés. Szóval miután felraktuk a szervert, az első dolgunk az lesz majd, hogy létrehozunk egy repository-t. A repository-k tárolására több módszer van, de alapvetően mindegyiknél létrehozunk egy könyvtárat a szerveren egy “svnadmin create könyvtárnév” parancs kiadásával, egy “mkdir könyvtárnév” mintájára. Windows alatt lehet, hogy van rá grafikus eszköz, nem tudom. Ebben a könyvtárban fogja nekünk letárolni a szerver a különböző információkat, és ezekben lehet matatni is, ha le akarunk kezelni olyan eseményeket, mint egy “commit” művelet. Jellemzően több könyvtár és fájl kerül ebbe a könyvtárba alapból bele.

Bár a dokumentációk mindenhol három lehetőséget emlegetnek mint rendszer összeállítási lehetőséget, valójában van egy negyedik is: a szerver nélküli használat. Ezt csak Linuxon parancssorban próbáltam, de vállalkozó kedvűek kipróbáhatják Windows alatt is, kiváncsi lennék. A lényeg, hogy az SVN kliensek jellemzően ismerik a fájlrendszer alapú címzést is a repository-t illetően, tehát ha az SVN repository-nk a szerveren a /usr/local/svnroot/webakademia könyvtárban van, akkor a file:///usr/local/svnroot/webakademia címen is hozzáférhetünk. Linux alatt ennek fényében az “svn co file:///usr/local/svnroot/webakademia” paranccsal “kicheckoutolhatjuk”.

További egyik lehetőség egy saját “svnserve” nevű szerverke, ez a legegyszerűbb feladat, s ha nincsenek különösebb igényeink, használjuk bátran ezt. Ezen kívül van még az SSH-n keresztüli működtetés “svnserve”-vel, és végül a legbonyolultabb konfigurációt az Apache 2 alá telepítés igényli, ahol egy modulként fog tudni működni a szerverünk. Fontos, hogy mind a három szerveres esetben magát a repository-t nekünk kell létrehoznunk, és hogy az SVN funkciókat illetően egyik szerver sem tér el a másiktól, csak és kizárólag abban, hogy hogyan authentikál a rendszerünk, s hogy milyen portokat használ. A konkrét szerver telepítéseket nem írom le, jó dokumentáció áll rendelkezésre hozzá a projekt honlapján. Alapvetően semmi hatalmas tortúrától nem kell tartanunk. Windows, Linux, Mac OS X és egyebek alá is elérhetőek a szerverek bináris terjesztésben, és ugye ott van a forráskód is, ha valaki a forrásban szeretne turkálni.

TortoiseSVN

Ami a klienseket illeti, én eddig négy megoldást próbáltam. Különböző Linuxok, Mac OS X alatt bár nem mindig a legkényelmesebb, de biztos pont volt a parancssori “svn” nevezetű SVN kliens. Windows alá bátran ajánlom a Windows Explorerbe épülő TortoiseSVN-t, folyamatosan fejlődik, kényelmesen használható, és a teknős (lásd mellékelt ábra) is jó fej (ha lányokat kell meggyőzni a használatáról). Eclipse alatt a Subclipse nevű plugint használtam, mely elég kényelmesen beépül az Eclipse-be, és kényelmesen használhatóvá teszi az SVN-t. Jó tudni, hogy a TortoiseSVN és az Eclipse modul ugyanúgy adminisztrálja kliens oldalon a fájlokat, így párhuzamosan tudunk együtt dolgozni a kettővel ugyanazokon a fájlokon. Végül mostanában az svnX nevű Mac OS X-es klienst használom, s bár ezzel nem vagyok annyira elégedett, mint a TortoiseSVN-nel vagy az Eclipse modullal, de ez is jól működik. Van még a TextMate-nek is SVN kliense, de az vagy csak részben használható, vagy még nem jöttem rá hogyan kell – nem tudom. Persze ez korántsem a teljes lista, egy jóval bővebb itt olvasható.

Jó SVN-ezést! Előbb-utóbb folytatom további részletekkel. :)

MySQL akadémia

A MySQL (mint cég) elég jó anyagokat tett közzé eddig is a neten, például a MySQL dokumentációt egy igen jó (bár sajnos néhol hiányos) olvasnivalónak gondolom, de ezen kívül is jó dolgokat lehet találni, ha körbenéz az ember. Most egy MySQL University nevű sorozatot indítottak útjára, mely gyakorlatilag egy online előadássorozatot jelent.

Az előadások minden héten csütörtökön, magyar idő szerint délután 3-kor vannak, és 1-2 órásak. Hangot sugároznak, a hallgatók IRC-n tudnak aktívan résztvenni az előadások alakításában. A sorozat már márciusban elindult, de nem maradt le senki semmiről, ugyanis minden előadás utólag is hozzáférhető a weblapon.

MySQL telepítése 7 másodperc alatt

Az automatizmusok, avagy néhány ügyes script nagyon sokat segíthetnek egy rendszergazda munkáját illetően (is). David Axmark, a MySQL egyik alapítója mondta az egyik vele készült interjú során, hogy az egyik háziszabályként azt tűzték ki, negyed órával a letöltés után már működőképes állapotban is lehessen a szerver. Egyszerű konfigurációt és gyors telepítőt készítettek – s mint a legnépszerűbb ingyenes adatbázisszerver, úgy tűnik jól tették dolgukat. Most egy olyan blogbejegyzéssel találkoztam, ami pár a telepítést megkönnyítő scriptet mutat be: Introducing the 15 seconds rule. Érdemes megnézni, és elgondolkodni azon, hogy mivel és mennyit tököl el feleslegesen az ember, ami kiváltható lenne pár scripttel.

MySQL Proxy

Kicsit hezitáltam, hogy mivel álljak neki a blog lényegi részének, aztán úgy gondoltam, hogy belecsapok a lecsóba, aztán majd megtalálom a hangot. Az egyik dolog, ami mostanában eléggé foglalkoztat, bár a kipróbálás részét egyelőre még halogatom, az a MySQL Proxy. Röviden összefoglalva a lényegét, nem másról van szó, mint a konkrét MySQL szerver előtt egy a kérdéseket és válaszokat feldolgozni, átalakítani képes csodaeszközről.

A Weblaboron egy blogbejegyzésben (Újdonságok a MySQL háza táján) már kifejtettem, hogy körülbelül miket tud, ezek alapján gondolkodom, hogy a napi eszköztáramban vajon mire lehetne használni. Egy elvileg könnyen tanulható scriptnyelvvel, a Lua-val programozható. Az ottani listán az alábbiakban végigmegyek, de előtte pár általános gondolat megfogalmazható.

Egy új szint

A MySQL Proxy valójában nem más, mint egy új szint/layer bevezetése. Ezt a layert egy jól felépített keretrendszerrel, vagy okos tárolt eljárásokkal, triggerekkel körülbelül most is fel tudja építeni bármely webprogramozó. Vannak azonban esetek, amikor egy jól programozható layer egy kényelmesebb, ügyesebb megoldást kínálhat. Ilyen lehet, amikor nem a programozó, hanem egy db admin próbálja meg az adatbázis viselkedését, a program működését monitorozni, vagy a programozók felé valamilyen extrább lehetőséget kínálni. Ha maga az alkalmazás a Proxy jelenlétére épít, az a hordozhatóságot csökkenti, de ez akár előny is lehet, hogy valamilyen szinten kötni szeretnénk a programozót, vagy a programot a mi platformunkhoz. Lehet kiegészítés szerű funkciókat is a MySQL-hez adni, ami egy nagyvállalati környezetben kényelmes lehet, hiszen független attól, hogy valaki PHP-ből, Java-ból, Perl-ből, .Net-ből éri-e el az adatbázisunkat.

Nézzük azonban a konkrétan felsorolt lehetőségeket, és az azokkal kapcsolatos gondolataimat.

Logolás

A MySQL Proxy logolni képes a teljes forgalmat, vagy annak csak egy programból meghatározott részét. Néhány alkalmazásomnál jó lenne látni, hogy honnan, milyen kéréseket teljesít, és azokat mennyi idő alatt hajtja végre – lehet, hogy elég szépen tudnám optimalizálni a lekérdezéseket ezzel. Ezt a MySQL csak nehézkesen támogatja alapból. Persze ezt elvileg önmagában a (PHP, Perl) alkalmazásban is meg tudnám valósítani, de ha vegyes a környezet, akkor jóval egyszerűbb lehet a MySQL Proxy segítségével (és hát vegyes). Esetleg a triviális, vagy cache-elhető lekérdezéseket egyből le tudná kezelni a Proxy is konkrét lekérdezések nélkül, ami azért javíthat a teljesítményen…

Elgépelések javítása

Ez az egyik dolog, aminek nem látom értelmét mint indok a MySQL Proxy mellett (MySQL Proxy segítségével lehet ugye olyan megoldást szülni, hogy az adatbázisnak egy “SLECT” se okozzon gondot, korrigálja azt “SELECT”-re). Sőt, néhány cikk ezzel is demózza a lehetőségeket. Míg egy ilyen demóból tényleg jól tanulható lehet az, hogy hogyan kell programozni a Proxy-t, addig nem hiszem el, hogy ez valódi segítség lehet valakinek. Elég kevés alkalommal építem fel úgy a lekérdezéseimet, hogy előtte parancssorból kipróbálom azokat, viszont a végeredményben nem szeretnék elgépeléseket látni. Ez a felhasználási mód azoknak lehet hasznos, akik gyakran tesznek fel gyors kérdéseket az adatbázisnak parancssorból, de nem ismerek olyan mazochistát, aki ezt nem egy kódszínezős, vagy legalábbis valamilyen emberibb felületről tenné.

Parancsok és adattartalmak megszűrése

Nem gondolom, hogy a biztonsági feladatokat, vagyis hogy ki milyen utasításokat adhat ki, milyen válaszokat kaphat vissza, azt a MySQL Proxy-ra kellene bízni, maga a MySQL és a rajta kívül felállított policy-k szerintem egy biztonságosabb, és jobban átlátható, egyszerűbb megoldást nyújthatnak. Azt viszont látom, hogy néhány esetben előfordulhat, hogy egy bonyolult feltételrendszert melyet a MySQL maga nem támogat, egyszerűbb lehet MySQL Proxy-val leprogramozni. De ez attól még nem segítség számomra.

Válasz üzenetek megváltoztatása, extra parancsok beillesztése

Na, ez egy komoly ügyesség lehet, hiszen vannak olyan válaszok, melyeket standard SQL-lel elég nehezen lehet a MySQL-ből (de más adatbázisból is) kicsiholni. Gondolok itt arra, amikor simán szeretném hogy egy lekérdezés eredményénél az egyik oszlop az adott válasz sorszámát tartalmazná, de beszélhetünk valami komolyabbról is, mint amikor szeretnénk pár sort összevonva, különböző szempontok szerint összegezve, valamilyen irányba transzponálva látni. Ez is egy dolog, ami kliens oldalon ugyanúgy megvalósítható, sőt, akár magában a MySQL-ben különböző tárolt eljárásokkal összehozható, de a tárolt eljárásoknál egyszerűbb, a kliens oldali megoldásnál pedig általánosabb lehetőséget kínálhat a Proxy használata. A Weblaboros cikkben elég jó példát hoztam fel, pl. minden INSERT után a beszúrt autoincrementes id-t adja vissza az SQL, egy mysql_insert_id-t (vagy SQL utasításként kiadását) megspórolhatjuk, ezzel eggyel kevesebb kört futva az SQL szerver felé. Ez a példa gyakorlatilag az extra parancsok beillesztését is lefedi, de a Proxy egyik érdekes felhasználási módja lehet, hogy kényelmesen tudunk például minden adott táblát érintő lekérdezés eredményéhez egy extra sort hozzátoldani, mely egy másik táblából szerez be információkat. Erre lehetőséget teremthet a tárolt eljárás is, kivéve ha valami SQL idegen, vagy a MySQL által “csak” nem támogatott dolgot szeretnénk megvalósítani.

Teljesítmény monitorozás

Ez gyakorlatilag a logolás egy másik módja, amikor szeretnénk megtudni az egyes lekérdezéseink hatékonyságát, sebességét.

Új parancsok, SQL-en kívüli világ

Valójában ez mozgatja meg leginkább a fantáziám. SQL felé kiadott parancs segítségével e-mail küldés, egy adott INSERT hatására például jelszóemlékeztető automatikus kiküldése. Vagy például hoszting környezetben a felhasználók a már bejáratott MySQL felhasználójuk segítségével le tudják kérdezni, hogy mekkora helyet foglalnak, hozzáférnek az egyébként nem MySQL-ben levő adataikhoz, stb. Könnyen tudunk egy olyan interfészt kínálni, melyen keresztül információkat tudunk átadni bármilyen meglévő rendszerünkből. Mi az egyszerűbb? A programozóknak egy általuk ismeretlen API-t átadni, vagy megmondani nekik, hogy ha egy ilyen és ilyen lekérdezést adnak ki, ezekhez és ezekhez az adatokhoz férnek hozzá? A válasz az lehet, hogy attól függ, de például egy közös MySQL-re épülő interfész leprogramozása sokkal költséghatékonyabb lehet, mint a cégnél/ügyfeleknél előforduló két-három nyelvre megírni és ledokumentálni egy egységes API-t, bugok nélkül.

Terhelés elosztás (és hasonlók)

Ez az, ami szintén eléggé megmozgatja a fantáziámat. Egyik nagy probléma a MyISAM táblákkal, hogy nem lehet fájdalommentesen élesben manipulálni őket, hiszen addig jellemzően blokkolva vannak a sima lekérdezések is feléjük, nem beszélve a módosításokról. Össze lehet azonban hozni egy olyan scriptet, ami átmenetileg puffereli mondjuk a változtatás jellegű kéréseket, vagy a backup adatbázis felé indítja el azokat, amíg az adatbázis szerver el van foglalva a dolgával. Vagy szeretnénk x táblával csinálni valamit, és készítünk róla egy másolatot, amit átmenetileg használunk, amíg be nem fejezzük x-szel a műveleteket. A címben levő terhelés elosztás, lekérdezések véletlenszerű vagy programozott szétosztása, a módosító műveletek pedig a fő szerver felé irányítása is elég egyszerű a MySQL Proxy segítségével.

Killer

A fentiek egyikét sem gondolom egyébként killer lehetőségnek, melynél a “best practice” az lenne, hogy a Proxy-t használjuk, bár ez változhat, ahogy egyre stabilabb rendszer lesz, és egyre többen fogják használni. Valószínűleg azonban a mindennapi munkánkat segítő kis scriptek tömkelege fog elérhetővé vállni, mint például a tesztelést segítő, makrók felvételét lehetővé tevő kis Proxy script, vagy hasonlók. Hogy általánosan elfogadott, az alap környezet részévé váló eszköz lesz-e a Proxy, vagy csak a saját szerverrel rendelkezők kiváltsága, azt még nehéz megmondani. Látok benne nagy fantáziát és kiaknázásra váró lehetőségeket, ha ezek bejönnek, akkor jó dolog lesz belőle minden bizonnyal. :)