Netflix: потокове мовлення, мікросервіси і мільярди годин контенту
Netflix — це, без перебільшення, король мікросервісів. Компанію можна вважати еталоном у використанні цієї архітектури. Але важливо розуміти, що Netflix не завжди був мікросервісним. Як і більшість компаній, вони починали з монолітного застосунку.
Трохи історії
Коли Netflix запустив свій стрімінговий сервіс (раніше вони, до речі, просто займалися прокатом дисків), вся система будувалася на одному великому моноліті, який відповідав за все: реєстрацію користувачів, каталог фільмів, рекомендаційні алгоритми і стрімінг.
Приблизно у 2008 році стався масштабний збій у роботі сервісу. Моноліт впав під навантаженням, залишивши мільйони користувачів без доступу до улюблених серіалів. Тоді хлопці з Netflix вирішили: "Так більше жити не можна". Почався процес переходу до мікросервісної архітектури.
Як Netflix використовує мікросервіси
Сьогодні Netflix — це понад 2000 мікросервісів, які взаємодіють один з одним, як шестерні в складному механізмі. Кожен сервіс відповідає за строго визначене завдання. Наприклад:
- Сервіс рекомендацій: підбирає для вас серіали і фільми на основі вашого перегляду (і так, вони знають, що ви дивитесь "Кролик Пітер" вночі, тому порекомендували вам "Полярний експрес").
- Сервіс потокового мовлення: відповідає за доставку відео на ваш пристрій.
- Сервіс обліку підписок: керує вашими підписками, сповіщеннями і навіть нагадує оплатити підписку (впевнений, ви з цим стикалися).
Для кожного мікросервісу обрана технологія, яка найкраще підходить для його функції. Стрімінг, наприклад, оптимізований для високої швидкості передачі даних, а аналітика використовує Hadoop і Spark.
Переваги мікросервісів у Netflix
- Масштабованість: якщо раптом вся планета вирішила подивитися новий сезон "Дуже дивних справ", Netflix масштабує тільки сервіс потокового мовлення, а не всю систему.
- Відмовостійкість: якщо сервіс рекомендацій впав, це не заважає перегляду серіалів. Пізно ввечері рекомендації все одно не такі важливі.
- Незалежність команд: кожна команда в Netflix займається певним мікросервісом. Команда, що відповідає за відео, ніяк не перетинається з командою, яка працює над рекомендаціями. Ніхто не ламає чуже коду і не заважає релізам.
Особливості і виклики
Тут все не так вже безхмарно. Управління 2000 мікросервісами вимагає потужних інструментів. Netflix розробив цілий набір бібліотек і інструментів, які сьогодні використовують багато компаній:
- Hystrix: Circuit Breaker для обробки відмов.
- Eureka: система Service Discovery.
- Zuul: API Gateway для керування запитами.
- Ribbon: бібліотека для балансування навантаження.
До речі, багато з цих рішень були опубліковані Netflix як Open Source. Якщо ви вже уявляєте проект, де хочете використовувати мікросервіси, можете подивитися їхню документацію на GitHub.
Uber: динамічне ціноутворення, маршрутизація і "усе в реальному часі"
Uber — ще один гігант, який довів, що мікросервіси працюють. Початок історії Uber схожий на Netflix: компанія теж стартувала з моноліту.
Трохи історії
У 2011 році Uber функціонував як невеликий стартап у Сан-Франциско. Система була відносно простою: один застосунок, одна база даних. Але в якийсь момент сервіс почав швидко масштабуватися, і моноліт одразу показав свої обмеження. Особливо важко стало керувати процесами в режимі реального часу, такими як динамічне ціноутворення під час великого попиту.
Як Uber використовує мікросервіси
Сьогодні Uber — це сотні мікросервісів, кожен з яких покриває окрему частину функціональності:
- Сервіс пошуку водіїв: знаходить найближчих водіїв і оцінює час прибуття.
- Сервіс ціноутворення: рахує вартість поїздки в реальному часі, враховуючи затори, попит і навіть погоду.
- Сервіс маршрутизації: визначає оптимальний маршрут, щоб водій не заїжджав за вами через Арктику.
- Сервіс сповіщень: надсилає push-повідомлення з інформацією про поїздку.
Кожен із цих сервісів працює як незалежна одиниця і обмінюється даними через API (до речі, у Uber є навіть свій протокол міжсервісної комунікації — TChannel).
Переваги мікросервісів у Uber
- Гнучкість технологій: для кожного мікросервісу можна використовувати свій стек технологій. Наприклад, аналітика може використовувати Python, а дорожні карти — Java.
- Обробка в реальному часі: мікросервіси дозволяють Uber швидко реагувати на зміни, наприклад, коли раптом пішов дощ і ціни по всьому місту зросли.
- Масштабованість: сервіс розрахунку цін можна масштабувати тільки у нічні години або у свята, коли попит зростає.
Особливості і виклики
Uber зіткнувся з масштабними проблемами узгодженості даних. Наприклад, якщо дані про поїздку губляться між мікросервісами, може виникнути невдоволення у водіїв або пасажирів. Тому Uber активно використовує підходи Event-Driven Architecture і системи повідомлень для взаємодії між сервісами.
Загальні уроки з прикладів Netflix і Uber
У випадку Netflix і Uber очевидно, що мікросервіси — це не просто модна штука. Вони дозволяють компаніям:
- Швидко адаптуватися до змінних умов.
- Легше справлятися з піковими навантаженнями.
- Більш ефективно організовувати команди розробників.
Однак не можна ігнорувати й виклики. Впровадження мікросервісів вимагає хорошої інфраструктури, надійних інструментів моніторингу і логування. Це не кажучи вже про необхідність планувати архітектуру так, щоб уникнути антипатерна "distributed monolith" — мікросервісів, які все одно залишаються тісно пов'язаними між собою.
Чому ці приклади важливі для вас як розробника
По-перше, вони показують, що навіть гіганти колись жили з монолітами. Ніхто не народжується мікросервісним архітектором — це процес. По-друге, ці кейси демонструють, що мікросервіси відмінно підходять для масштабованих і відмовостійких систем, але не вирішують всі проблеми чарівною паличкою.
Якщо ви збираєтесь використовувати мікросервіси у своєму проєкті, не забувайте, що їх правильне проєктування — запорука успіху. Почніть з малого, не кидайтеся ділити застосунок на сотні сервісів, якщо їх ще ніде ділити. І, звісно, беріть приклад із таких компаній, як Netflix і Uber, щоб не повторити їхніх помилок.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ