JavaRush /Курси /Модуль 5. Spring /Лекція 165: Навіщо потрібні мікросервіси — приклади з реа...

Лекція 165: Навіщо потрібні мікросервіси — приклади з реального життя (Netflix, Uber)

Модуль 5. Spring
Рівень 11 , Лекція 4
Відкрита

Netflix: потокове мовлення, мікросервіси і мільярди годин контенту

Netflix — це, без перебільшення, король мікросервісів. Компанію можна вважати еталоном у використанні цієї архітектури. Але важливо розуміти, що Netflix не завжди був мікросервісним. Як і більшість компаній, вони починали з монолітного застосунку.

Трохи історії

Коли Netflix запустив свій стрімінговий сервіс (раніше вони, до речі, просто займалися прокатом дисків), вся система будувалася на одному великому моноліті, який відповідав за все: реєстрацію користувачів, каталог фільмів, рекомендаційні алгоритми і стрімінг.

Приблизно у 2008 році стався масштабний збій у роботі сервісу. Моноліт впав під навантаженням, залишивши мільйони користувачів без доступу до улюблених серіалів. Тоді хлопці з Netflix вирішили: "Так більше жити не можна". Почався процес переходу до мікросервісної архітектури.


Як Netflix використовує мікросервіси

Сьогодні Netflix — це понад 2000 мікросервісів, які взаємодіють один з одним, як шестерні в складному механізмі. Кожен сервіс відповідає за строго визначене завдання. Наприклад:

  • Сервіс рекомендацій: підбирає для вас серіали і фільми на основі вашого перегляду (і так, вони знають, що ви дивитесь "Кролик Пітер" вночі, тому порекомендували вам "Полярний експрес").
  • Сервіс потокового мовлення: відповідає за доставку відео на ваш пристрій.
  • Сервіс обліку підписок: керує вашими підписками, сповіщеннями і навіть нагадує оплатити підписку (впевнений, ви з цим стикалися).

Для кожного мікросервісу обрана технологія, яка найкраще підходить для його функції. Стрімінг, наприклад, оптимізований для високої швидкості передачі даних, а аналітика використовує Hadoop і Spark.


Переваги мікросервісів у Netflix

  1. Масштабованість: якщо раптом вся планета вирішила подивитися новий сезон "Дуже дивних справ", Netflix масштабує тільки сервіс потокового мовлення, а не всю систему.
  2. Відмовостійкість: якщо сервіс рекомендацій впав, це не заважає перегляду серіалів. Пізно ввечері рекомендації все одно не такі важливі.
  3. Незалежність команд: кожна команда в 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

  1. Гнучкість технологій: для кожного мікросервісу можна використовувати свій стек технологій. Наприклад, аналітика може використовувати Python, а дорожні карти — Java.
  2. Обробка в реальному часі: мікросервіси дозволяють Uber швидко реагувати на зміни, наприклад, коли раптом пішов дощ і ціни по всьому місту зросли.
  3. Масштабованість: сервіс розрахунку цін можна масштабувати тільки у нічні години або у свята, коли попит зростає.

Особливості і виклики

Uber зіткнувся з масштабними проблемами узгодженості даних. Наприклад, якщо дані про поїздку губляться між мікросервісами, може виникнути невдоволення у водіїв або пасажирів. Тому Uber активно використовує підходи Event-Driven Architecture і системи повідомлень для взаємодії між сервісами.


Загальні уроки з прикладів Netflix і Uber

У випадку Netflix і Uber очевидно, що мікросервіси — це не просто модна штука. Вони дозволяють компаніям:

  • Швидко адаптуватися до змінних умов.
  • Легше справлятися з піковими навантаженнями.
  • Більш ефективно організовувати команди розробників.

Однак не можна ігнорувати й виклики. Впровадження мікросервісів вимагає хорошої інфраструктури, надійних інструментів моніторингу і логування. Це не кажучи вже про необхідність планувати архітектуру так, щоб уникнути антипатерна "distributed monolith" — мікросервісів, які все одно залишаються тісно пов'язаними між собою.


Чому ці приклади важливі для вас як розробника

По-перше, вони показують, що навіть гіганти колись жили з монолітами. Ніхто не народжується мікросервісним архітектором — це процес. По-друге, ці кейси демонструють, що мікросервіси відмінно підходять для масштабованих і відмовостійких систем, але не вирішують всі проблеми чарівною паличкою.

Якщо ви збираєтесь використовувати мікросервіси у своєму проєкті, не забувайте, що їх правильне проєктування — запорука успіху. Почніть з малого, не кидайтеся ділити застосунок на сотні сервісів, якщо їх ще ніде ділити. І, звісно, беріть приклад із таких компаній, як Netflix і Uber, щоб не повторити їхніх помилок.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ