Модель ІТ-продукту
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. Інтернет та інфраструктура
Комунікація між клієнтом і сервером — що може бути простіше? Але навіть у цих взаєминах багато чого змінилося.
Ваш продукт, найімовірніше, буде розміщено в одному із сучасних дата-центрів. Безліч компаній у всьому світі пропонують різні послуги хостингу для ваших продуктів — чи то на їхніх серверах, чи то на ваших власних фізичних серверах. Будь-який каприз за ваші гроші.
Фізичний сервер тепер часто не зовсім фізичний. Сучасні дата-центри пропонують оренду віртуальних серверів. Віртуальний сервер — це, по суті, віртуальний компʼютер. На одному фізичному сервері їх може бути десятки. Зате це зручно з погляду масштабування ресурсів. Якщо вам потрібно більше памʼяті, ви можете додати її до свого віртуального сервера за кілька хвилин.
Але й такий підхід поступово застаріває. Зараз у моді переїзд у хмари: це коли ваш продукт не просто розгорнутий на віртуальному сервері в дата-центрі, а й активно користується великим набором інфраструктури та сервісів цього дата-центру.
Вам потрібен сервер для зберігання резервних копій — для цього є готова зручна інфраструктура в хмарі. Вам потрібна база даних із надійністю 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.
Але саме завдяки вашому коду мільйони користувачів вашого продукту будуть задоволені. Вони користуватимуться сервісом, платитимуть за нього, і в підсумку буде задоволений і власник продукту. Акції компанії зростатимуть, ви отримаєте бонуси акціями — і будете щасливі. Справжній кругообіг щастя в індустрії :)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ