JavaRush /Курси /Swift SELF /Модель ІТ-продукту

Модель ІТ-продукту

Swift SELF
Рівень 9 , Лекція 6
Відкрита

Модель ІТ-продукту

1. Сучасні продукти

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

Більшість сучасних продуктів, якщо не всі, працюють за парадигмою Клієнт-Сервер. Це означає, що на вашому пристрої (телефоні, ноутбуці, компʼютері) є програма, яка відповідає за взаємодію з користувачем, тобто з вами, а критична функціональність розміщена на віддаленому сервері, де й відбувається все важливе ➡️🖥️

Іноді клієнт спілкується з кількома незалежними серверами, а сервер одного продукту звертається до сервера іншого продукту. У результаті виникає своєрідна глобальна мережа клієнтів і серверів, які працюють між собою.

Тому сучасну модель застосунків, можливо, краще описує парадигма Клієнт-Інтернет-Сервер. Надто вже багато стало складної й різноманітної комунікації. Зʼявилися навіть так звані «розумні канали звʼязку», які самостійно вирішують, кому й коли надсилати ваш запит.🛰️📡

2. Клієнти

Програми-клієнти умовно можна поділити на чотири категорії:

  • 🖥️ Десктоп-клієнт — програма, що працює на компʼютері.
  • 📲 Мобільний клієнт — застосунок для iOS або Android.
  • 🌐 Веб-клієнт — сайт або вебзастосунок, що працює в браузері.
  • 🌍 Серверний клієнт — застосунок, запущений на іншому сервері.

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

Але навіть якщо візьмемо найпоширеніший браузер, усе одно залишається сайт, який у ньому завантажується. Зазвичай сайт складається з трьох складників:

  • 📄 HTML
  • 🎨 CSS
  • ⚡ JavaScript

«Немає нічого простішого», скажете ви. Сьогодні ніхто не пише сайти лише на HTML і JavaScript. Для розроблення сайтів тепер використовують не просто бібліотеки, а повноцінні фреймворки, такі як React, Angular або Vue ⚛️. Та й це вже не просто сайти, а повноцінні вебзастосунки зі своїми збірками, тестами й підходами.

Чистий CSS теж тепер ніхто не використовує. Уже існують CSS-препроцесори, які допомагають його генерувати, і цілі CSS-фреймворки. Та що вже казати: навіть для електронних листів є спеціальні CSS-фреймворки, щоб лист виглядав гарно і в браузері, і в більшості поштових клієнтів 💌.

На чистому JavaScript теж уже майже ніхто не пише — усі великі вебзастосунки створюють на TypeScript, а потім компілюють у JavaScript. Ну, ви зрозуміли…

3. Інтернет та інфраструктура

Комунікація між клієнтом і сервером — що може бути простішим? Але й тут усе давно змінилося.

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

зображення

Фізичний сервер уже не зовсім фізичний. Усі сучасні дата-центри пропонують оренду віртуальних серверів. Віртуальний сервер — це певний віртуальний компʼютер, і на одному фізичному сервері їх може бути десятки. Зате це зручно, особливо коли йдеться про оновлення сервера. Якщо вам потрібно більше памʼяті, ви можете додати її до вашого віртуального сервера за кілька хвилин ⏱️.

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

Потрібен сервер для резервних копій — для цього в хмарі вже є готова зручна інфраструктура. Потрібна база даних із надійністю 99,9999999 %? Така теж є. Kafka, RabbitMQ, NoSQL? Усе вже є й легко налаштовується. Потрібно лише платити.

І дата-центри, і хмари поступово стають частиною вашого продукту. Наприклад, Amazon має безліч дата-центрів по всьому світу, тому пропонує CDN: ваш публічний контент кешуватиметься у всіх дата-центрах Amazon, а користувачі по всьому світу отримуватимуть його швидше 🛰️.

Або звернення до API вашого застосунку можна пропустити через сервіс Amazon API Gateway, який дозволяє дуже гнучко налаштувати роботу з вашими сервісами. Можна розподіляти навантаження між різними сервісами, відбивати DDoS-атаки, автоматизувати завантаження файлів, налаштовувати розумне кешування і багато чого ще 🛡️.

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

І це ми ще не зачепили роутери, вишки 5G, супутники та інтернет-кабелі на дні океану. Ви надсилаєте відеопотік із вашого сервера до клієнта, а передавання дає збій, оскільки в клієнта поганий звʼязок і зʼєднання постійно обривається. Хто, на вашу думку, розвʼязуватиме цю проблему? Ви 😅

4. Сервер

Під словом «сервер» можуть ховатися зовсім різні поняття. Вам буде корисно дізнатися про найпоширеніші з них.

🖥️ Фізичний сервер

Фізичний сервер — це окремий компʼютер із власними ресурсами: процесором, памʼяттю та сховищем. Його використовують для оброблення даних і забезпечення роботи різних застосунків. Такі сервери встановлюють у центрах оброблення даних, де вони забезпечують обчислювальні потужності для хостингу вебсайтів, застосунків, баз даних та інших служб.

🪐 Віртуальний сервер

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

🕹️ Програма-сервер (наприклад, Nginx)

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

💾 Сервер баз даних

Сервер баз даних — це спеціалізований сервер, який використовують для керування базами даних і оброблення запитів до них. Він забезпечує централізоване зберігання й оброблення даних, надаючи до них доступ через мережу. Сервери баз даних підтримують оброблення транзакцій, пошук і зміну даних, забезпечуючи при цьому надійність і безпеку зберігання інформації. Прикладами серверів баз даних є MySQL, PostgreSQL, Oracle Database і Microsoft SQL Server.

І ось десь у дата-центрі, в Linux-середовищі, на одному з віртуальних серверів працюватиме ваш бекенд-проєкт на Swift 6.2 і створений на фреймворку Vapor. Він працюватиме з базою даних, наприклад через Fluent ORM, прийматиме HTTP-запити через зворотний проксі на кшталт Nginx або через балансувальник навантаження в AWS Elastic Load Balancing чи Google Cloud Load Balancer, а журнали своїх дій (через стандартний API SwiftLog) надсилатиме до систем моніторингу на кшталт Prometheus + Grafana, Elastic Stack (ELK) або Splunk 📈.

Але саме завдяки вашому коду мільйони користувачів будуть задоволені вашим продуктом. Вони користуватимуться сервісом, платитимуть за нього, і зрештою задоволеним буде й власник продукту. Акції компанії зростатимуть, ви отримуватимете бонуси у вигляді акцій — і будете щасливі 💸. Справжній кругообіг щастя в індустрії :)

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