Jak se rodil náš Knot DNS

Předminulý týden, při vydání první ostré verze autoritativního DNS serveru Knot DNS, jsme vám slíbili článek, který by přiblížil jeho vývoj od počátku až k finální verzi. Ten nám ale posléze narostl pod rukama do rozměrů už nevhodných pro publikaci na blogu, a tak vám zde nabídneme alespoň malou ochutnávku. Kde najdete více se pro jistotu dozvíte až na konci textu :-).

Opatrné začátky
Už je to téměř dva a půl roku, co začal v Laboratořích CZ.NIC pomalu vznikat nový autoritativní DNS server Knot DNS. Na podzim roku 2009 to začalo řadou experimentů a testů, zaměřených hlavně na výběr vhodné datové struktury pro ukládání zónových dat. Ta byla implementována jako první a kolem ní byl následně vystavěn první prototyp serveru s velmi jednoduchou síťovou vrstvou, který dočasně využíval knihovnu ldns pro ukládání dat specifických pro DNS.

Hlavní důraz byl kladen na modularitu návrhu tak, aby kteroukoliv část bylo možné kdykoliv nahradit lepší implementací. Velká část původního návrhu byla zachována i do finální verze. Na funkčním prototypu jsme si ověřili vhodnost zvolené datové struktury a také její potenciál pro vysokou rychlost vyhledání potřebných dat pro zodpovězení příchozího dotazu.

Jde do tuhého
Když na podzim roku 2010 přibyli do týmu další lidé, vývoj se výrazně rozhýbal. Knihovna ldns byla nahrazena vlastní DNS knihovnou, vznikla nová síťová vrstva a obsluha vláken. Během následujících měsíců byly některé části návrhu upraveny tak, aby nás co nejvíce přibližovaly našemu hlavnímu cíli – vyvinout vysoce výkonný DNS server. Při vývoji jsme však nezanedbali ani důkladné testování jak jednotlivých částí, tak celého serveru. Časem vznikl komplexní testovací framework integrující testy na různých úrovních, který je jednoduše rozšířitelný o další funkce a testovací scénáře.

Cílová rovinka (či spíš překážková dráha)
Po dvou letech vývoje, na podzim roku 2011, jsme si byli dostatečně jistí poskytovanou funkcionalitou, a proto jsme představili první veřejné vydání Knot DNS (verze označená jako 0.8). Již krátce po prezentaci na RIPE 63 ve Vídni, a také u nás na konferenci LinuxAlt v Brně, jsme začali dostávat první připomínky od uživatelů, které nám v následujících měsících pomohly vylepšit Knot DNS a opravit mnohé chyby, které jsme „nevychytali“ během předchozího vývoje. Verze 0.9 vydaná na začátku roku 2012 přinesla několik nových funkcí a oprav. Po ní jsme se intenzivně soustředili už jen na testování, hledání chyb a ladění, které nakonec vyústilo v první produkční verzi. Její Release Candidate byl zveřejněn na Valentýna a finální verze 1.0 pak byla vydána ve skutečně výjimečný den 29. února.

A jsme na konci tohoto blogpostu a tedy u toho, kde se o Knot DNS můžete dozvědět více. Jestli jsem vás navnadil, pokračujte v dalším čtení na Root.cz, pro který jsme připravili text skutečně mnohem obsáhlejší.

Ľuboš Slovák

BIND 10 – agilně vyvíjený modulární nameserver

V týdnu od 21. března se v Akademii CZ.NIC uskutečnil BIND 10 Developer Meeting a já, spolu s mými kolegy z Laboratoří, jsem měl možnost podívat se, jak se vyvíjí nová verze téhle nejpoužívanější implementace DNS.

BIND 10 navenek přináší úplně nový design a množství funkcí, samotná koncepce vývoje však také doznala změn. Jak to vyjádřil programový manažer BIND 10 Shane Kerr, BIND 9 vznikal stylem „top-down“ a jeho vývoj byl více řízen někde „shora“. U nové verze se vývojáři snaží více o styl „bottom-up“ a méně o centralizované řízení. Projevem toho prvního je, že se jeho tým snaží o silnou modulárnost nového BINDu, kdy jednotlivé moduly (v praxi reprezentované samostatně běžícími procesy) jsou do velké míry nezávislé. Projevem toho druhého je zase určitá rovnost mezi všemi členy týmu (Shana nevyjímaje). Ta může být na jedné straně přínosná; každý má možnost „dostat se ke slovu“ a pokusit se prosadit svůj nápad či přístup. Na straně druhé to může vést k nekonečným diskusím, ve kterých trochu chybí nějaká autorita, která by ve věci „vynesla soud“ či aspoň nasměrovala diskusi produktivnějším směrem.

Vedení vývojářského týmu je v případě BIND 10 nepochybně náročné. Tvoří ho totiž patnáct lidí z celého světa – USA, Číny, Japonska, Velké Británie, Nizozemska i od nás z Čech. Tito lidé se osobně scházejí čtyřikrát do roka, aby tváří v tvář prodiskutovali jak plán dalšího vývoje, tak některé implementační detaily.


Část vývojářského týmu BIND 10 na setkání v Praze. Druhý zleva stojí Shane Kerr, třetí je Michal Vaner z Laboratoří CZ.NIC.

Byl jsem celkem překvapen jejich disciplínou a pracovním nasazením, když během těch pěti dnů, které tady strávili, věnovali práci devět nebo i více hodin denně. Na druhou stranu, jak už to tak bývá, když několik lidí s různých koutů světa a s různými názory a přístupy o něčem diskutuje, občas se nechá unést k již zmíněným dlouhým a ne zcela produktivním výměnám názorů.

Pravděpodobně největší výzvou je rozdělování a plánování úkolů a koordinace týmu; osobních setkání je málo a většina práce se tak musí plánovat do detailů a dopředu a to na období několika týdnů nebo i měsíců. Tým BIND 10 zvolil pro práci agilní metodu Scrum upravenou pro využití v mezinárodním týmu, který se nemůže setkávat každý den, což ostatně Scrum vyžaduje. Základem jsou za prvé face-to-face meetingy jako ten, kterého jsme se zúčastnili, a za druhé konferenční hovory probíhající téměř každý den. Podle Shanových slov zaberou minimálně 15 procent času celého týmu, pro vývoj jsou ale velice přínosné. Metodu Scrum využívá vývojářský tým teprve od minulého roku a její zavedení je prý skutečně znát.

Dalším výrazným prvkem provázejícím vývoj BIND 10 je testování. Tady musím mezinárodní tým vývojářů pochválit, protože testování věnuje skutečně mnoho času a prostředků. Skutečně bylo vidět, že „test-driven development“ není jen prázdná fráze. Až doposud se věnovali hlavně unit-testům, ale v plánu mají také testování na vyšší úrovni, která by měla ověřovat, jak se bude celý systém chovat v různých situacích. Cílem je zvýšit spolehlivost a důvěru uživatelů v tento systém; k tomuto cíli se podle mě vydali tou správnou cestou. Doufejme, že to dotáhnou do konce a BIND bude mít šanci zbavit se své nepříliš lichotivé přezdívky – Buggy Internet Name Daemon.

Sledovat práci vývojářů BIND 10, poznat lidi, kteří za ním stojí, a vidět, jak vzniká nová verze nejpoužívanějšího DNS softwaru bylo nevšední zkušeností. I když u nás v Laboratořích zatím žádný mezinárodní projekt nevedeme, v mnohém se jistě můžeme z jejich práce poučit či inspirovat.

Ľuboš Slovák