Софтуер

Инфраструктурата като код: между ползите и възможностите

Мария Динкова

Традиционно управлението на ИТ инфраструктурата представлява трудоемка задача, която включва часове работа и множество ръчни процеси. В повечето случаи отговорността за това пада върху системните администратори, които са натоварени с настройването, инсталирането и конфигурирането на целия хардуер и софтуер, необходим за работата на приложенията и операционните системи. През последните години обаче това се променя, а навлизането на облачните изчисления и виртуализацията улесняват значително обновяването и поддръжката на ИТ инфраструктурата, елиминирайки до голяма степен проблемите, свързани с цялостното управление на физическия хардуер.

В този смисъл една от последните тенденции в сферата и следващата крачка към по-голямата автоматизация се нарича "инфраструктура като код" (Infrastructure as Code, IaC), известна още като "програмируема инфраструктура". Концепцията стъпва върху идеята за управление на инфраструктурата чрез конфигурационни файлове вместо чрез ръчни процеси. С други думи, с ИТ инфраструктурата започва да се работи като със софтуер, тъй като това позволява по-бързо и лесно да се въвеждат промени, като в същото време се гарантира по-голяма сигурност и надеждност. В този смисъл донякъде започва да се размива границата между писането на приложения и създаването на средите, в които те да работят.

Какво стои в основата на IaC?
IaC е подход за управление на ИТ инфраструктурата в епохата на облака, микроуслугите и непрекъснатото внедряване. Преди всичко IaC не представлява продукт, а методология, в чиято основа стоят три концепции: процеси за гъвкава разработка, DevOps среда и инструменти за писане на код.

DevOps и гъвкавостта вървят ръка за ръка, тъй като и при двете става дума за ускоряване процеса на разработката и по-бързо изпълнение на задачите. Всъщност концепцията за IaC е рамката, благодарение на която започна възходът на DevOps. Нейното въвеждане води до отпадане на голяма част от усилията по подготовка от страна на разработчиците, които в крайна сметка трябва само да изпълнят скрипт, за да подготвят инфраструктурата. По този начин внедряването на приложенията не остава на изчакване и не се създава излишно забавяне, докато системните администратори извършват ръчни и времеотнемащи процеси.

На последно място трябва да се споменат инструментите за писане на код, като в повечето случаи става дума или за Chef, или за Puppet. И двата езика са създадени за тази IaC - Chef подпомага бързото сътрудничество в DevOps среда, а Puppet е насочен към автоматизиране на процеса по изграждане на дадена инфраструктура. Разбира се, има и други варианти за инструменти за управление на конфигурацията, включително Ansible, SaltStack и Terraform. С времето всички те са се развили и могат да бъдат използвани за различни приложения и да отговарят на повечето IaC нужди. За по-голяма ефективност обаче експертите препоръчват при избор на език да се разгледат конкретните типове задачи и да се прецени кой инструмент ще бъде по-подходящ.

Какви проблеми решава IaC?
Както беше споменато вече, традиционното управление на ИТ инфраструктурата е ръчен процес и изисква сериозна физическа работа по настройването и конфигурирането на сървърите спрямо изискванията на операционните системи и приложенията. Съответно едва след като всички тези процеси бъдат завършени, експертите могат да се фокусират върху самите приложения, а оттук произтичат и редица проблеми.

На първо място излиза въпросът за разходите, които обикновено са необходими за наемането на различни специалисти - от мрежови инженери до техници по поддръжката на хардуера. Съответно всички тези експерти трябва да бъдат управлявани и координирани, което също води до нуждата от инвестиране на допълнителни средства в мениджмънт. А ако се добави и сметката по поддръжката на собствени центрове за данни, то сумите скачат значително.

Друг сериозен проблем е свързан със скалабилността и достъпността, които определено не са лесни за постигане при традиционните решения за управление на ИТ инфраструктура. В крайна сметка всичко се свежда до скоростта, а ръчната конфигурация е бавен процес и затова стартирането на приложенията често отнема дълго време. В резултат на това даденото приложение може да не бъде достъпно за часове или дни, а това на свой ред ще донесе сериозни и негативни последствия за конкретната организация.

Не на последно място остава предизвикателство с непоследователността. Ако в една компания няколко души са натоварени със задължението ръчно да извършват конфигурации по ИТ инфраструктурата, то е неизбежно в даден момент да се появят несъответствия. Същевременно при липсата на автоматизация не може да се осигури достатъчна проследимост, така че бързо да се изчисти проблемът.

Какви са предимствата?
Инфраструктурата като код позволява на виртуалните машини да бъдат управлявани като програма, с което отпада нуждата за ръчно конфигуриране и ъпдейти на всеки отделен хардуер в компанията. По този начин инфраструктурата става изключително "еластична", т.е. може да бъде мащабирана и повтаряна. Един оператор може да внедри и управлява една машина или 1000, използвайки един и същ код. Скоростта, намаляването на риска и спестяването на разходите са сред водещите ползи от IаC.

Бързина - първата сериозна полза от IaC със сигурност е по-голямата скорост. Инфраструктурата като код позволява бързо да се изгради цялата инфраструктура, като се използва скрипт. Това може да се направи за всяка среда - от разработката, през QA до внедряването и т.н. По този начин се увеличава ефективността на целия жизнен цикъл на софтуерната разработка.

Съгласуваност - при ръчните процеси често може да се допуснат грешки. Освен това комуникацията между много служители винаги може да доведе до неразбиране и несъответствия, а впоследствие да възникнат трудности при внедряването, уязвимости в сигурността и рискове при разработката на приложения и услуги, които трябва да отговорят на строги регулаторни стандарти. С IaC се гарантира, че същите конфигурации се внедряват всеки път, без да се стига до разминаване.

Отчетност - благодарение на IaC всички направени промени могат да бъдат проследени. С други думи, слага се край на опитите да се познае кой какво и кога е модифицирал в ИТ инфраструктурата.

Ниски разходи - едно от основните предимства при IaC освен спестеното време и усилия със сигурност е намаляването на разходите за управлението на инфраструктурата. Същевременно, ако IaC се комбинира с облачните изчисления, отпада и необходимостта от влагане на средства в хардуер, наемане на служители, които да го поддържат, както и от построяването или наемането на пространство, в което машините да се съхраняват.
В допълнение с прилагането на този подход за управление на инфраструктурата компаниите могат да освободят своите висококвалифицирани специалисти от ръчните и времеотнемащи задачи. Това, от друга страна, ще им позволи да се фокусират върху онези задължения, които имат най-голямо значение и носят стойност за организацията - например каквато е разработката на иновативни и критични за компанията софтуерни решения.

Императивен или декларативен подход?
IaC инструментите могат да бъдат различни, но като цяло те се разделят на два основни типа и следват императивен или декларативен подход. При императивния подход се "дават заповеди", като се определя последователност от команди или инструкции, които трябва да бъдат изпълнени в правилния ред, за да може инфраструктурата да постигне крайния целен резултат.

При декларативния подход, от друга страна, се посочва желаното финално състояние на системата, включително какви ресурси са нужни и какви възможности те трябва да имат. Тогава IaC инструментът ще ги изпълни автоматично. Всъщност, вместо ясно да се очертае последователността от стъпките, през които инфраструктурата трябва да достигне до крайния резултат, в този случай се подава какъв трябва да бъде той.

Много IaC инструменти използват декларативния подход и автоматично осигуряват желаната инфраструктура. С този подход, ако бъдат въведени промени в състоянието на системата, те ще бъдат приложени. За сравнение - императивният инструмент ще изисква да бъде уточнено как точно промените трябва да бъдат реализирани.

Изменима или неизменима инфраструктура?
На последно място, макар не и по важност, в процеса на инфраструктурна автоматизация трябва да се вземе и решение дали да се избере изменима или неизменима инфраструктура.

Изменимата IaC базирана инфраструктура може да бъде променяна и обновявана след първоначалното й внедряване, което осигурява на разработчиците гъвкавост по отношение на въвеждането на сървърни персонализации. Това дава възможност по-точно да се изпълняват изискванията за приложенията и по-лесно да се реагира при потенциални проблеми със сигурността. Разбира се, тези ползи идват на определена цена - изменимата инфраструктура може да затрудни поддържането на съгласуваност при внедряването, както и да усложни проследяването на инфраструктурните версии.

Именно и затова при повечето IaC модели се предпочита използването на неизменима инфраструктура. При нея не могат да бъдат въвеждани модификации след първоначалното внедряване. Когато е нужно да се направят промени, инфраструктурата трябва просто да бъде заменена с нова такава, а това се случва лесно в условията на облака.

Инфраструктурата като код представлява естествено продължение на облачните изчисления и е следващата логична стъпка за освобождаването от ръчното управление на ИТ процесите, въвеждането на по-голяма автоматизация и гарантирането на по-голяма скорост и надеждност в процеса на разработка.

X