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

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

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

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

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

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

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

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

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

2. Клієнти

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

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

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

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

  • 📄 HTML
  • 🎨 CSS
  • ⚡ JavaScript

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

Чистий CSS теж уже майже ніхто не використовує. Існують CSS-препроцесори, які допомагають його генерувати, і цілі CSS-фреймворки. Ба більше, навіть для email-листів є спеціальні 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.

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

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

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