Основни понятия и принципи в Cloud-Native Development

7 април
Петър Вайхански, Старши вицепрезидент в DataArt, финансова дивизия
Основни понятия и принципи в Cloud-Native Development
Когато хората говорят за облачни изчисления, е важно да се направи разлика между това, къде функционират приложенията и как са изградени. В тази публикация ще се съсредоточа върху второто, т.е. върху този тип софтуер, който е проектиран от самото начало, за да работи максимално ефективно чрез модела на изчислителните облаци.

На най-основно ниво облакът може да се разглежда като „инфраструктура като услуга“ (IaaS): при поискване, самообслужване, предоставяне въз основа на абонамент за Elastic computing, съхранение и мрежови ресурси.

Някои от термините, често свързани с облачното развитие, включват микросервизи (Microservices), контейнеризация (Containerization), динамична оркестрация (dynamic orchestration), неизменима инфраструктура(immutable infrastructure) и цялостна автоматизация чрез DevOps.

Микросервизи

Микросервизите са архитектурен подход, при който приложенията са проектирани като пакети от независимо опериращи услуги. Като слабо свързани малки приложения, те са точно обратното на монолитните приложения, които са изградени като едно цяло.

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

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

Контейнеризация

Контейнеризацията е модерен подход за виртуализация, който включва “пакетиране” на софтуерен код и всички негови зависимости, така че да може да работи равномерно и последователно в съответната инфраструктура. Тъй като контейнерите по същество са малки и леки виртуални машини, те позволяват по-ефективно използване на основната инфраструктура. Може да се каже, че контейнерите и микросервизите са като направени един за друг. Заедно те носят множество ползи като преносимост, ефективност на разходите, по-голяма гъвкавост при автоматизацията, възпроизводимост, мащабируемост и сигурност.

Динамично управление и оркестрация

Контейнерните приложения обикновено се управляват динамично и се организират чрез специализиран софтуер. Функции като стартиране или изключване на контейнер, споделяне на всички необходими конфигурационни параметри, балансиране на натоварването между контейнерите или автентикация между тях обикновено се контролират и автоматизират с помощта на софтуер за оркестрация. Такъв софтуер е например Kubernetes, ECS на Amazon или Apache Mesos.

Неизменима инфраструктура

Виртуализацията в облака (и по-специално - контейнерите) позволява мощен подход за управление на производствените натоварвания, наречен “неизменима инфраструктура”. В тази парадигма сървърите не се модифицират, след като вече са внедрени. По-скоро, ако системният компонент трябва да бъде фиксиран или променен по някакъв начин, новите сървъри (или контейнери) се изграждат от общ Image със съответните промени.

За да стане по-ясно, мога да илюстрирам процеса с една проста метафора за домашните любимци и добитъка.

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

Неизменимата инфраструктура, от друга страна, може да помогне за стабилността и прозрачността на системната конфигурация и да гарантира надеждни, повтарящи се внедрявания. Използвайки същата метафора, сървърите и контейнерите могат да се сравнят много повече с добитък . Когато един представител стане проблематичен, вместо да му прилагате персонализирано „лечение“, вие го „изваждате от употреба“, т.е. го изключвате и замествате с друг – работещ и функциониращ.

DevOps и автоматизация

DevOps е набор от практики, които преодоляват границата между разработка на софтуер (Dev) и ИТ операциите (Ops). Екипи, които практикуват DevOps, постигат гъвкавост, като се придържат към модела на Continuous Delivery (CD), където промените и актуализациите на софтуерните системи непрекъснато се внедряват в производство с голяма степен на автоматизация и повтаряемост. 

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

Защо инвестицията в облачни решения е важна?

Защо бизнес организациите трябва да инвестират в облака като цяло и по-специално - в разработката на софтуер в облака?

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