Хмарні технології: переваги та навички, потрібні для роботи з клаудами
Усі статті, обговорення, новини для початківців — в одному місці. Підписуйтеся на телеграм-канал!
Всім привіт! Мене звати Андрій Євчак, і я розробник в компанії N-iX. Зараз працюю на проєкті Orbus Software — це британська технологічна компанія, яка розробляє ентерпрайз-рішення для своїх клієнтів по всьому світу. Я спеціалізуюсь на Azure та нещодавно отримав сертифікацію від Microsoft.
Згідно з LinkedIn, станом на серпень 2021, в Україні 11,000 AWS, 5,500 Azure, i 6,100 Google cloud-інженерів. І ринок продовжує рости.
Це — одна з причин, чому я вирішив написати цю статтю і розповісти про свій досвід роботи з хмарою. Я розкажу про основних провайдерів хмари, навички та сертифікації, якими варто володіти програмістам, аби працювати на потужному клауд-проекті, та багато іншого. Оскільки маю найбільше досвіду з Microsoft Azure, то і розповідати про хмару буду з точки зору саме цього провайдера.
Та почнемо з історії :)
Чому я обрав Azure
Azure створено та оптимізовано для роботи як зі старими, так і з новими програмами, розробленими за допомогою .NET фреймворку. Саме тому набагато простіше переносити сервіси Windows у хмару Azure, ніж на AWS або інші. Таким чином, для компаній, які використовують корпоративний софт на основі .NET, Azure є очевидним вибором. Тому як .NET інженер я надаю перевагу Azure.
Також — це підтримка автоматизованого DevOps процесу. У середовища розробки Visual Studio кращі механізми для роботи саме з Azure, тож це суттєво полегшує процес розробки та розгортання аплікацій, якщо немає налаштованого DevOps процесу, оскільки ми можемо публікувати їх у хмару безпосередньо з VS.
Крім Azure, найбільш популярними провайдерами хмари є AWS i GCP. Кожен з них надає безпечне хмарне середовище і ряд інструментів для полегшення роботи. Тому, на мій погляд, у виборі провайдера варто покладатись більше на індивідуальні потреби замовника.
Переваги роботи в хмарі
З кожним роком хмарні технології набирають все більшої популярності, адже з допомогою хмари можна отримати такі переваги:
Оптимізація витрат
Для деяких компаній перехід на хмарну інфраструктуру — це чудовий шлях оптимізації витрат. Застосовуючи хмару, клієнт може не хвилюватись про обслуговування фізичних серверів, безпеку цієї системи та багато іншого. В результаті потрібно менше людей, які підтримують інфраструктуру, а це зменшує витрати. Вільний ресурс же можна використовувати для експериментів з оптимізації та розширення бізнесу.
У N-iX ми неодноразово допомагали клієнтам з оптимізацією інфраструктури. Наприклад, один з наших клієнтів — міжнародний стрімінговий сервіс — потребував рішення, яке б витримувало високе навантаження в 36 мільйонів унікальних відвідувачів та понад 10 мільярдів запитів на тиждень і яке б було дешевше утримувати. Ми обрали оптимізацію шляхом створення Kubernetes кластеру у хмарі AWS. Наші розробники створили 30 мікросервісів, утримання яких обходиться клієнту приблизно у 2000 USD щомісяця.
Для порівняння, неоптимізована архітектура, що складалась з EC2 OnDemand instances обходилась нашому в клієнту більше ніж у 38000 USD на місяць.
Ось класичний приклад капітальних та операційних витрат:
Якщо нам більше не потрібен якийсь сервер, у варіанті OpEx ми зможемо його просто видалити, не використовувати далі та не витрачати кошти. У випадку з CapEx ми будемо мати інфраструктуру, потенціал якої ми не використовуємо на повну потужність.
Також, великі хмарні провайдери надають готові інструменти для управління коштами, оптимізацією та рекомендаціями. Зокрема, Azure Cost Management надає декілька інструментів, які можна використовувати для коригування бюджету, відстеження хмарних витрат, оптимізації витрат тощо. Цей ресурс є у вільному доступі для користувачів Azure і пропонує такі інструменти:
- Cost Analysis надає детальний розподіл витрат на всі послуги, які використовуються, показуючи подробиці хмарних витрат.
- Cost Alerts надсилає автоматичні сповіщення, коли витрати перевищують попередньо встановлений поріг. До них відносяться сповіщення про бюджетні та кредитні витрати.
- Budgets дозволяє створювати бюджет у межах підписки на Azure. Він також допомагає відстежувати хмарні витрати, встановлюючи обмеження та сповіщення.
- Pricing Calculator надає оцінки вартості Azure сервісів.
- Azure Advisor аналізує хмарні конфігурації та статистику використання, щоб запропонувати рекомендації щодо використання хмарних ресурсів та скорочення витрат Azure.
Час до виходу на ринок
TTM — це час від початку планування ідеї до кінцевого запуску рішення і його виходу на ринок. Для стартапів та MVP цей показник особливо критичний, адже якщо запуск продукту затягується, компанія може програти конкурентам.
Інфраструктура в хмарі розгортається набагато швидше. На закупівлю і підготовку фізичних серверів нерідко йдуть місяці. Потім архітектуру потрібно довго налаштовувати під потреби компанії. Отримати аналогічний — повністю готовий до роботи хмарний ресурс — можна за кілька хвилин.
У хмарі розробники можуть легко протестувати нові ідеї та проєктувати архітектуру сервісів, оскільки вони не залежать від обмежень обладнання. Крім того хмарні провайдери мають готові рішення для Continuous Integration та Continuous Delivery які не потребують складного налаштування, тому, за допомогою хмари можна легко імплементувати й нові версії продукту. Це дозволяє пришвидшити вихід нових версій, надаючи користувачам все більше функцій щомісяця, щотижня та в деяких випадках навіть щоденно.
Хмарні середовища також інтегруються із загальними інструментами DevOps та системами логування, що полегшує моніторинг та виявлення проблем у продакшені.
Масштабування
Легке масштабування — це, мабуть, найбільша перевага хмари.
Що робити, якщо наступного тижня вам доведеться розширити рішення, щоб, наприклад, вивести його на новий ринок? А якщо це потрібно зробити завтра? Саме тут на допомогу приходить хмара. Якщо вимоги вашого замовника змінюються, можна легко збільшити або зменшити пропускну здатність системи, не інвестуючи у фізичну інфраструктуру.
Існує два способи масштабування в хмарі: горизонтальне та вертикальне.
Вертикальне масштабування відбувається шляхом підвищення потужності окремого обчислювального пристрою. Це зазвичай досягається збільшенням кількості обчислювальних ядер, пам’яті або ресурсів вводу-виводу у сервер. Такий підхід має свої обмеження, адже кількість процесорів не може зростати необмежено. Крім того, вартість багатопроцесорних комп’ютерів непропорційно зростає з кількістю обчислювальних ядер, що може підтримувати система.
Горизонтальне масштабування полягає у наданні додаткових серверів для задоволення певних вимог. У цьому випадку також часто розподіляють навантаження між серверами, щоб обмежити кількість запитів, які отримує будь-який окремий сервер.
Хмарні служби мають багато різних варіантів масштабування. Наприклад в Azure є така функція як Azure AutoScale.
Azure AutoScale це вбудована функція, яка налаштовує розподіл ресурсів для сервісів залежно від їхніх обчислювальних вимог. Можна масштабувати свої хмарні служби, віртуальні машини, веб сервіси та інші ресурси згідно з певними критеріями (розмір процесора, пам’ять, пропускна здатність або використання диска). Azure AutoScale — це спосіб більш ефективного використання хмарних ресурсів та оптимізація витрат одночасно. Azure автоматично підвищить обчислювальну продуктивність під час пікових годин роботи та зменшить швидкість роботи тоді, коли навантаження не буде таким інтенсивним. За допомогою автоматичного масштабування Azure не потрібно буде сплачувати за будь-які обчислювальні потужності, які не є потрібними, що істотно економить кошти.
Аварійне відновлення
Що станеться, якщо ви втратите дані клієнта?
Втрата даних — серйозний ризик для будь-якої організації. Втрата доходу під час простою, і зусиль, необхідних для відновлення інформації, можуть коштувати компанії сотні тисяч, якщо не мільйони.
Azure має інструмент під назвою Azure Site Recovery, який дозволяє компаніям створювати плани відновлення, які включають процедури реплікації та відновлення збоїв. Azure Site Recovery також дозволяє компаніям резервувати IP-адреси, встановлювати та налаштовувати балансування навантаження та інтегрувати Azure Traffic Manager для безперебійного перемикання трафіку.
Безпека
Провайдери хмари зазвичай забезпечують хостинг та сертифікований PCI-DSS, що надзвичайно важливо для дотримання GDPR. Крім того, хмара пропонує розширені заходи безпеки для захисту вашого вебсайту від DDoS-атак або інших загроз.
Ці переваги й сприяють поширенню хмарних технологій на ринку. Все більше компаній шукають досвідчених експертів для розробки хмарних рішень, або міграції з on-premise на клауд.
Мабуть, на кожному проєкті, де працюють з хмарою, є напрацьовані власні підходи до роботи. Проєкт Orbus, на якому працюю я в N-іХ— не виключення. Тому я розгляну, що використовували ми.
Найефективніші практики для роботи з хмарою
Розробка стратегії хмарної інфраструктури залежить від глибокого розуміння цілей та вимог бізнесу, тому дуже складно однозначно відповісти, які підходи найефективніші. Проте, необхідно дотримуватись кількох кращих методів хмарної інфраструктури, які покривають ключові потреби з якими зіштовхуються компанії: безпеки, продуктивності, зв’язності та надійності.
Microsoft пропонує ряд шаблонів для покращення ефективності роботи з клаудом. Деякі з них дозволили нам розв’язати певні проблеми при розробці хмарних рішень:
● Deployment Stamps pattern
Цей шаблон забезпечує підготовку, управління, моніторинг та масштабування ресурсів. Кожна окрема копія називається штампом або одиницею масштабування (scale unit). У середовищі з кількома клієнтами кожен штамп може служити окремому клієнту. Можна розгорнути кілька штампів, щоб розширити аплікацію і обслуговувати більшу кількість клієнтів. Такий підхід може поліпшити масштабованість, дозволяючи розгортати сервіси у кількох регіонах і розділяти дані клієнта.
На проєкті наша команда зіштовхнулися з проблемою повільного доступу до наших веб ресурсів з інших регіонів. Сервіс був розташований у північній Європі, тому оптимізація слабких місць та покращення продуктивності її не вирішило б. Саме тому ми пішли шляхом гео-дистрибуції з допомогою Deployment Stamps pattern.
Щоб уникнути таких проблем в майбутньому, ми згрупували усі необхідні ресурси, які використовувала аплікація, в незалежну дистрибутивну одиницю (scale unit). Далі почали DevOps процес.
Для того, аби відчути усі переваги цього шаблону, потрібно описати інфраструктуру у вигляді програмного коду (infrastructure as code). Його побудова зараз має декілька альтернатив, наприклад, JSON Azure Resource Manager Тemplates (ARM templates), Terraform, AWS CloudFormation та інші. Оскільки наші сервіси розміщені в хмарі Azure і в нас у команді вже була певна експертиза з ARM templates — ми вирішили вибрати цю технологію. Створили шаблонний файл для усіх ресурсів аплікації та по одному файлу з параметрами для кожного регіону. Для маршрутизації трафіку між регіонам використали Azure traffic manager, адже його функції покривали усі наші потреби. Інтегрували шаблони з Azure Pipelines для координації розгортання в кожному регіоні.
І як результат, отримали більш стабільну веб аплікацію з швидким доступом до неї з різних регіонів.
● Competing Consumers Pattern
Дозволяє кільком сервісам одночасно обробляти повідомлення, отримані на одному каналі обміну. Це потрібно для оптимізації пропускної здатності, покращення масштабованості, доступності та збалансування робочого навантаження.
● Circuit Breaker Pattern
Допомагає опрацювати помилки, на відновлення яких може знадобитися різний час під час підключення до віддаленої служби чи ресурсу. Це може покращити стабільність та стійкість програми.
● Retry Pattern
Дозволяє обробляти тимчасові збої при спробі підключення до ресурсів за допомогою повторних спроб виконання операції, що завершилася збоєм. Таким чином додаток буде працювати стабільніше.
● Saga Distributed Transactions Pattern
Saga — це шаблон, який допомагає узгодити дані між мікросервісами в сценаріях розподілених транзакцій. Це послідовність транзакцій, яка оновлює кожен сервіс і повертає повідомлення, щоб ініціювати наступний крок транзакції. Якщо крок виявляється невдалим, Saga ініціює транзакції, які нівелюють попередні транзакції, щоб дані залишались актуальними.
Використання готових шаблонів значно полегшує і пришвидшує роботу з хмарою.
Які сертифікації потрібні для роботи в клауді?
Існує ряд сертифікацій, які допомагають покращити навички роботи в хмарі. У N-iX є цілий підрозділ — Software Development Office, який запровадив ініціативу підготовчих груп до сloud-сертифікацій. Вони зібрали та структурували матеріали для ефективної підготовки. Також, спеціалісти всередині груп обмінюються своїм досвідом та інформацією, яка допомогла їм успішно скласти екзамен.
Як результат підготовчих груп, у N-iX сформувалася спільнота сloud-спеціалістів, де ми обмінюємося знаннями. Власне, одна з таких груп і допомогла мені отримати Microsoft- сертифікацію.
Тип сертифікації потрібно обирати в залежності від рівня знань, досвіду роботи з хмарою, спеціальності, і того, куди ви хочете рухатись. Немає значення, ви інженер, чи нетехнічний фахівець. Сертифікації є різних рівнів та класів.
Azure має 4 рівні сертифікації: Fundamentals, Associate, Expert та Specialty.
Наприклад, сертифікати Microsoft Azure для початківців (Fundamentals). Жоден з них не допоможе отримати будь-який вищий сертифікат Azure, але вони, на мою думку, ідеальний початок для тих, хто не знайомий з хмарними сервісами або Azure зокрема.
Є 3 сертифікації цього рівня:
● Azure Fundamentals (AZ-900)
● Azure Data Fundamentals (DP-900)
● Azure AI Fundamentals (AI-900)
Associate
Якщо ви вже добре знайомі з Azure, вам може бути комфортно починати з таких сертифікацій:
● Azure Administrator Associate (AZ-104)
● Azure Security Engineer Associate (AZ-500)
● Azure Database Administrator Associate (DP-300)
● Azure Developer Associate (AZ-204)
● Azure AI Engineer Associate (AI-100)
● Azure Data Engineer Associate (DP-200, DP-201)
● Azure Data Scientist Associate (DP-100)
Expert
Якщо у вас є хороші технічні знання та досвід і вас вважають «Мілорд інженером», то ви можете бути готові до сертифікацій експертного рівня. Сертифікат Associate (або Azure Developer Associate, чи Azure Administrator Associate) необхідний для Azure DevOps Engineer Expert.
До цього рівня належать такі сертифікації:
● Azure Solutions Architect Expert (AZ-303, AZ-304)
● Azure DevOps Engineer Expert (AZ-400)
Specialty
Цей рівень потребує хороших знань і досвіду у більш специфікованих напрямках. До нього належать:
● Azure IoT Developer Specialty (AZ-220)
● Azure for SAP Workloads Specialty (AZ-120)
Є багато шляхів до тієї, чи іншої сертифікації, але я б радив завжди починати з Azure Fundamentals. Для початківців — це хороший варіант для здобуття нових базових навичок, а для більш досвідчених працівників — це хороша можливість протестувати свої знання.
Навички, які вам знадобляться
Технологічний стек, з яким працюють клауд-експерти, відрізняється на різних проєктах і залежить від складності продукту та конкретних вимог. Однак, є ряд навичок, необхідних для роботи на більшості проєктів. Це, наприклад, розуміння різних типів хостингу, принципів безпеки, масштабування тощо.
Що стосується створення команди для розміщення рішення в хмарі, до неї зазвичай входять такі експерти:
● Архітектори: професіонали, які приймають критичні рішення стосовно архітектури;
● Техлід: відповідає за технічну частину та підтримку архітектурних рішень;
● Розробники: відповідальні за розробку коду;
● DevOps-професіонали: відповідальні за інфраструктуру, безпеку тощо;
● QA-професіонали, що відповідають забезпечення якості продукту.
Загалом, у випадку з хмарними технологіями все залежить від конкретних потреб бізнесу. Проте, все ж є певні базові знання, які потрібно здобути перед тим, як починати впроваджувати хмарні рішення.
1. Досвід з ключовими провайдерами хмари
Досвідчений розробник, який працює з хмарою, повинен знати плюси та мінуси трьох основних постачальників хмар: AWS, Google Cloud та Azure. Крім того, дуже важливо вміти визначити, яка хмара надає найкращі послуги для вирішення певного завдання.
Зазвичай, якщо продукт створений в екосистемі Microsoft, то провайдером хмари вибирають саме Azure, оскільки це надає можливість нативно використовувати стек Microsoft. Якщо ж на проєкті використовуються мови Java та Javascript (стек Node.js), то в основному використовують хмару AWS чи Google Cloud.
2. Досвід міграції даних на хмару
Міграцію даних на хмару супроводжує низка проблем. Щоб подолати ці труднощі, потрібно забезпечити плавний перехід до хмари, скоротити витрати на інфраструктуру та досягти більшої гнучкості.
3. Експертиза у різних моделях хмарних сервісів (IaaS, PaaS i SaaS)
Поняття інфраструктури як послуги (IaaS), платформи як послуги (PaaS) та програмного забезпечення як послуги (SaaS) мають вирішальне значення для розміщення ваших даних у хмарі. І ось чому:
IaaS надає обчислювальні ресурси, такі як сервери, програмне забезпечення операційної системи, сховище, мережеву інфраструктуру, центр обробки даних. Простіше кажучи, ви орендуєте фізичну ІТ-інфраструктуру, щоб побудувати власний центр обробки даних у хмарі.
IaaS — це найбільш гнучка модель хмарних послуг з простим процесом розгортання обладнання. Вартість IaaS залежить від потреб клієнта в CPU і RAM. IaaS — це також економна модель, в тому числі через високу масштабованість та автоматизацію хмарних послуг.
За допомогою цієї моделі споживач отримує інформаційно-технологічні ресурси — віртуальні сервери з певною обчислювальною потужністю та обсягами пам’яті. Всім «залізом» займається провайдер. Він встановлює на нього ПЗ для створення віртуальних машин, але не займається установкою і підтримкою ПЗ користувача. Провайдер контролює тільки фізичну та віртуальну інфраструктуру.
Віртуальні машини Azure — це IaaS.
PaaS надає хмарну платформу для розробки, запуску та управління програмами. Ваш провайдер PaaS розміщує сервери, мережі, сховище, програмне забезпечення операційної системи та бази даних у своєму центрі обробки даних.
Головна перевага PaaS — можливість швидко запускати додатки, в тому числі для невеликих команд. Крім того, використовуючи хмарні сервіси, розробники можуть збирати статистику по роботі свого ПЗ, аналізувати та приймати оптимальні для бізнесу рішення.
PaaS вимагає менше керування з боку користувачів і не забезпечує доступу до операційної системи. Це означає, що PaaS це повне середовище розробки та розгортання в хмарі. PaaS забезпечує фреймворк, який можна використовувати для розробки чи налаштування хмарних програм.
Наприклад, служба Azure Web Apps надає середовище для розміщення вебпрограм, без необхідності звертатися до віртуальної машини та операційної системи. База даних SQL Azure є повністю керованою платформою, яка обробляє більшість функцій управління базами даних (оновлення, виправлення, резервне копіювання та моніторинг) без участі користувачів.
SaaS — це програмне рішення в хмарі, до якого можна отримати доступ через Інтернет або API постачальників, як правило, за окрему плату (щомісячно або щорічно). Постачальник повністю керує програмами SaaS і бере на себе відповідальність за середовище, проміжне програмне забезпечення, сервери, сховище та мережі. Ви відповідаєте лише за дані.
Експерти N-iX надавали SaaS-рішення багатьом клієнтам. Наприклад, міжнародній інженерно-технологічній компанії, що входить до списку Global Fortune 100. Щоб покращити логістику між 400+ складами у більш ніж 60 країнах, наш клієнт запровадив внутрішню логістичну платформу, яка була неефективною через свою монолітну архітектуру. Саме тому вони вирішили почати співпрацю з N-iX.
Наш архітектор розробив нову хмарну інфраструктуру платформи на основі Azure Kubernetes, запропонував стек технологій та дорожню карту реалізації проєкту. Наші експерти перенесли рішення на мікросервіси, які дозволяють плавно додавати нові послуги SaaS. Це, наприклад, виявлення аномалій, рекомендації щодо маршрутів, оптичне розпізнавання символів на коробках, інтелектуальний аналіз даних та обробка даних з датчиків.
Для успішної роботи в хмарі потрібно мати значний досвід роботи з IaaS, PaaS та SaaS.
4. DevOps-експертиза
Для роботи на хмарних проєктах необхідна і DevOps-експертиза. Команді потрібно:
● розуміти, які ресурси використовуються;
● проаналізувати, що можна оптимізувати і як це зробити;
● дослідити нові послуги, спрямовані на ще більшу оптимізацію інфраструктури.
5. Досвід з контейнеризацією
Такі технології, як Open Container Initiative (OCI), RedHat CoreOS Rkt або Docker, допоможуть зробити додаток портативним. Контейнери можна, за незначними винятками, запускати на будь-якій платформі без налаштування середовища.
Контейнер також збільшує щільність робочого навантаження. У порівнянні з віртуальними машинами (VM) контейнери набагато ефективніше використовують обчислювальні ресурси, що оптимізує витрати та час.
6. Досвід з оркестрацією
Без оркестрації, контейнеризація не була б настільки цінною. Існує чимало популярних платформ, які можуть запускати контейнерні робочі навантаження для різних видів інфраструктури, включаючи публічну хмару IaaS, приватні хмари або on-prem: Cloud Foundry, DC/OS (розподілена хмарна операційна система), Docker Swarm, Hashicorp Nomad, та Kubernetes, який став промисловим стандартом.
Отже, щоб успішно працювати з хмарою, варто використовувати вже готові шаблони, які надають провайдери хмари, вміти мігрувати дані, мати досвід з різними хмарними моделями (IaaS, PaaS, SaaS), та мати DevOps експертизу. Крім того, бажано мати клауд-сертифікацію. У нас в N-iX є багато клауд-проєктів, де Ви можете розвивати всі ці навички. Так що приєднуйтесь до нашої клауд комм’юніті!
Якщо є питання — ставте в коментарях!
128 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарів