fbpx
vshosting~

Jsme tu všichni hrdě odkojení nettisté. A pak to přišlo, vesmír se sesypal jak domeček z grafických karet, do kanceláře vtrhne náš šéf, tedy (z logiky věci) ten nejmoudřejší, a zařve: “Co když Davida Grudla přejede tatrovka? A to je dost pravděpodobný… Co s náma proboha bude? S přejetým Nette to nikdy nespíchnette…”

A tím to začalo…

Nový PHP framework

Volba nového PHP frameworku padla jednomyslně na Symfony. Pečeme u nás aplikace jak pro vshosting~ (čímž jsou ty internety zas o něco lepší), tak pro jeho klienty. Jedna z nadcházejících výzev je chystané REST API pro nový ticketovací systém. A na to je třeba mít kudly pořádně nabroušené a výpeky božsky redukované.

Jen pro představu, jaká nálož bude v pekáči: verzování s maximálním znovupoužitím již napsaného (zbytečné psaní je zbytečné) a kompatibilitou dopředu, dozadu i nahoru a dolů, strojové generování dokumentace pomocí Swaggera (bývá zvykem, že hlavní a jediná dokumentace se nachází za nefunkčním odkazem, ale není to úplně ono), použití Elasticu (megaúložiště, do nějž se replikuje databáze, aby čtení dat včetně fulltextového vyhledávání v milionech záznamů bylo v řádech desítek milisekund, tedy nechutně rychlé), automatizovaná validace vstupů (důvěřujeme, ale prověřujeme) včetně hlášení všech chyb najednou (čtenář se nesmí napínat, aby nedostal infarkt), automatizovaná validace výstupů (nevěříme ani sami sobě), autonaplnění výstupního objektu daty z Elasticu atd. atd. atd.

Pečeme REST API

Symfony pomůže v mnohém. Grunt nám dá FOSRestBundle, který zajistí základní routování (včetně typu requestu – GET, POST, PUT ad.) dle názvu metody v controlleru a naplnění vstupního objektu příchozími daty.

Pokud použijeme základní symfonní JSON response, můžeme z ní trochou ladných pohybů vykouzlit jak success API response (která přijme výstupní DTO objekt, zvaliduje a šup s ním ven jako JSON), tak error API response (která přijímá všechny API exceptions a z nich automaticky sestaví JSON odpověď včetně HTTP statusu, kódu chyby, chybové hlášky a případně dalších doplňujících dat). Pokud jsme líní a nechceme dokola psát error response do každé metody každého controlleru (a do většiny metod vícekrát), navěsíme na událost typu EXCEPTION listener, v němž danou chybu zpracujeme, a v controllerech pak stačí sázet API výjimky jak jahody do koláče.

S validacemi vstupu nebo výstupu pomůže symfonní validátor, který pomocí jednoduchých anotací zvládá i hutnější validace, nejen obvyklý basic jako datový typ, čas, email… ale také rozsah, porovnávání, IBAN ? a další. Pro vyšší výkon lze samozřejmě validace zamrazit do keše a schovat na příští sezónu. Validaci vstupu stačí provést v rámci requestu FOSRestBundle, a pokud to chceme ještě potunit a nebaví nás sbírat $validationErrors v každé metodě každého controlleru, stačí na request navěsit listener a validaci zpracovat v něm.

Pro serializaci pomůže JMSSerializerBundle, který vstupní JSONy “přeleje” do předem definovaných DTO objektů a výstupní DTO objekty zas převede na JSON, který, čerstvě upečený, vyjede uživateli. Pravidla se definují rovněž anotacemi a k dispozici je řada užitečných fičur, např. parametr obsažen až od určité verze API, automatické přejmenování atd.

Domluvu s Elasticem zajišťuje ElasticsearchBundle, který funguje v principu podobně jako Doktrína: dokumenty v Elasticu jsou reprezentovány entitami v PHP aplikaci a ve výkonném kódu se plní jako obraz dat, který bude uložen v Elasticu samotném. Podporovány jsou samozřejmě i nested objects, takže do Elasticu lze narvat entitu i s jejími dětmi a dalšími příbuznými.

Pro geerování swaggří dokumentace je použit Symfony NelmioApiDocBundle, který (jak jinak než z dokumentačních komentářů) strojově vygeneruje swagger JSON. Anotátor umí mimo jiné roztřídit endpointy do skupin, takže privátní část API nebude ve veřejné dokumentaci, ale třeba také endpoint pouze pro API verze 2 nebude v dokumentaci pro verzi 1.

Závěr všeho se, jak už to tak bývá, ukáže až na závěr. Snad to bude dost propečené a nová aplikace přinese zákazníkům i klukům z technické podpory radost a smích.

Vývojový tým vshosting~


Damir Špoljarič

Prosinec byl ve znamení probíhající vánoční sezóny, ve které se tradičně řešily špičky v návštěvnosti e-shopů, které zažívaly nejkritičtější období v roce. U některých e-shopů se projevila slabá místa v aplikaci, které bylo nutné ve spolupráci našich adminů a vývojářů klientů optimalizovat, případně navýšit výkon infrastruktury. Mnoho velkých e-shopů, které spravujeme, ale bylo letos podle našich doporučení (a to jak z pohledu infrastruktury, tak z pohledu testovacího prostředí a performance testů) na vánoční sezónu dobře připraveno.

V prosinci se nám podařilo produkčně zprovoznit naší CDN pro Evropu a USA. Celý koncept CDN nás tak zatím stál několik set hodin času, a to jsme stále s CDNkou na začátku. Ladění CDN se ukázalo jako náročnější z pohledu sítě a také z pohledu jednání s některými velkými TIER1 operátory, se kterými bylo nutné, často zdlouhavě, domlouvat individuální nastavení propojení a BGP komunit. První globální klient nám z CDN již běží a načtení stránky se v USA zkrátilo průměrně o několik vteřin na ~1,5 – 2 vteřiny, což je prakticky stejná hodnota jako v Evropě. V této souvislosti jsme rozšířili naší infrastrukturu do Los Angeles a New Yorku.

Čím dál častěji zaznamenáváme požadavky na implementaci podpory pro http/2 a vzrůstající počet požadavků je také na Let‘s Encrypt. Mnohdy jsou tyto požadavky nekompatibilní se staršími verzemi operačního systému (požadavek na prehistorické verze některého SW ze strany klienta). Objevil se první požadavek na instalaci PHP 7.1, která zatím není podporována.

V našem labu jsme testovali některé nové technologie, mezi které patří například Netflix/dynamite, jako zajímavější alternativa pro redis / memcached cluster. Produkčně jsme dynamite nasadili již na naši novou službu CloudMail. Naším testem prošla také PostgreSQL 9.6 a Postgres-XL – oboje letošní novinky. Test se zaměřoval především na možnost clusterování a zajištění vysoké dostupnosti v náročných systémech. Bohužel ani jeden produkt jsme zatím neshledali vhodným pro produkční provoz, který je extrémně náročný na spolehlivé škálování či high-availability. Z tohoto pohledu se například Galera cluster (MariaDB) jeví zatím podstatně lépe.

Spoustu úsilí věnujeme přípravě nové platformní služby, o které vás budeme informovat tento rok, a dalšímu rozvoji páteřní sítě. Objednali jsme nové routery MX480 (premium edice – plně vnitřně redundantní), vyvíjíme nové prvky síťové bezpečnosti a testujeme nový HW na rychlá propojení storage se servery s nejnižšími možnými latencemi (například 100Gbps technologie omni-path od Intelu).

ServerParku úspěšně plníme II. etapu datacentra a v prosinci proběhla rozsáhlejší zkouška spolehlivosti diesel generátorů před zimními mrazy. Vše proběhlo v pořádku.


Během 17 let jsme provedli úspěšnou migrací stovky klientů. Pomůžeme i vám.

  1. Domluvte se na konzultaci

    Stačí nám zanechat kontakt. Obratem se vám ozveme.

  2. Bezplatný návrh řešení

    Nezávazně probereme, jak vám můžeme pomoct. Navrhneme řešení na míru.

  3. Profesionální realizace

    Připravíme vám prostředí pro bezproblémovou migraci dle společného návrhu.

Zanechte nám svůj e-mail nebo telefon




    Nebo nás kontaktujte napřímo

    +420 246 035 835 V provozu 24/7
    konzultace@vshosting.cz
    Zkopírovat
    Obratem se vám ozveme