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

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

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

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

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

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

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

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

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

2. Клієнти

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

  • Desktop-клієнт — програма, що працює на компʼютері.
  • Mobile-клієнт — застосунок під iOS або Android.
  • Веб-клієнт — сайт або вебзастосунок, що працює в браузері.
  • Server-клієнт — застосунок, який запущено на іншому сервері.

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

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

  • HTML
  • CSS
  • JavaScript

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

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

На «чистому JavaScript» також пишуть дедалі рідше: більшість великих вебзастосунків створюють на TypeScript, який потім компілюється в JavaScript. Гадаю, ви вже зрозуміли ідею.

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

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

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

img

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

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

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

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

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

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

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

4. Сервер

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

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

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

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

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

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

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

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

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

І ось десь у дата-центрі, на одному з віртуальних серверів, працюватиме ваш проєкт на Kotlin 2.3 і Ktor. Він взаємодіятиме з базою даних, прийматиме запити через Nginx, Apache HTTP Server або балансувальник навантаження в AWS Elastic Load Balancing чи Google Cloud Load Balancer, а логи своїх дій надсилатиме в системи моніторингу на кшталт Prometheus + Grafana, Elastic Stack (ELK) або Splunk.

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

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