2.1 Сучасні продукти
Сучасні продукти вже ніхто не називає програмами. Сучасний продукт може включати в себе десятки програм, сотні інтернет-сервісів і багато API, які забезпечуються хмарним дата-центром (їх ще називають центрами обробки даних), де він розгорнутий.
Багато сучасних продуктів (якщо не всі) працюють по парадигмі Клієнт-Сервер. Це коли на вашому пристрої (телефоні, ноутбуці, комп'ютері) знаходиться програма, яка відповідає за комунікацію з користувачем (тобто вами), а критична функціональність розташована на віддаленому сервері, де і відбувається все важливе.
Іноді ваш клієнт може спілкуватися з кількома незалежними серверами, ну або сервер одного продукту може звертатися до сервера іншого продукту. Це виходить така глобальна мережа з клієнтів і серверів, і всі вони працюють один з одним.
Тому сучасну модель додатків, можливо, краще буде описувати парадигма Клієнт-Інтернет-Сервер. Занадто вже там стало багато різної складної комунікації. Появилися навіть так звані «розумні канали зв'язку», які самостійно вирішують, кому і коли відправити ваш запит.
2.2 Клієнти
Програми-клієнти умовно можна розділити на 4 категорії:
- Desktop-клієнт — програма, що працює на комп'ютері
- Mobile-клієнт — додаток для iOS або Android.
- Веб-клієнт — сайт/веб-додаток, що працює в браузері.
- Server-клієнт — додаток, який запущено на іншому сервері.
А кожну з них можна в свою чергу знову поділити на частини. Наприклад, web-клієнт - це сайт або веб-додаток, а значить він складається з Браузера і Сайту, який у нього завантажується. Браузери теж не всі однакові і можуть працювати по-різному.
Але навіть якщо ми візьмемо найпоширеніший браузер, залишається ж ще сайт, який у нього завантажується. Сайт зазвичай складається з трьох речей:
- HTML
- CSS
- JavaScript
"Немає нічого простішого," скажете ви. Тільки от сьогодні ніхто не пише сайти просто на HTML і JavaScript. Для розробки сайтів тепер використовують не просто бібліотеки, а повноцінні фреймворки, такі як React, Angular чи Vue. І це вже не сайти, а повноцінні веб-додатки зі своїми збірками, тестами і парадигмами.
Чистий CSS теж тепер ніхто не використовує. Вже існують CSS-препроцесори, які допомагають його генерувати, і цілі CSS-фреймворки. Та що там, навіть для email-листів є спеціальні CSS-фреймворки, щоб ваше лист виглядало гарно як у браузері, так і в більшості поштових клієнтів.
На чистому JavaScript теж вже мало хто пише – всі великі веб-додатки створюються на TypeScript, який потім компілюється в JavaScript. Ну, ви зрозуміли...
2.3 Інтернет та інфраструктура
Комунікація клієнта і сервера – що може бути простіше? Але навіть у їх відносинах вже все змінилося.
Ваш продукт, швидше за все, буде розміщений в одному з сучасних дата-центрів. Багато компаній по всьому світу пропонують різні послуги хостингу для ваших продуктів, будь то на їх серверах або на ваших власних фізичних серверах. Будь-який каприз за ваші гроші.
Фізичний сервер більше не фізичний. Всі сучасні дата-центри пропонують оренду віртуальних серверів. Віртуальний сервер — це певний віртуальний комп'ютер, і на одному фізичному сервері їх може бути десятки. Зате це зручно в плані апгрейду сервера. Якщо вам потрібно більше пам'яті, ви можете додати її до вашого віртуального сервера за кілька хвилин.
Але навіть такий підхід вже застаріває. Зараз в моді переїзд у хмари – це коли ваш продукт не просто розгорнутий на віртуальному сервері у дата-центрі, а активно користується інфраструктурою та великим набором сервісів цих дата-центрів.
Вам потрібен сервер для зберігання бекапів – під це є готова зручна інфраструктура у хмарі. Вам потрібна база даних з надійністю 99.9999999%? Така теж є. Kafka, RabbitMQ, NoSQL? Все вже є і легко налаштовується. Тільки гроші плати.
І ці дата-центри і хмари починають ставати частиною вашого продукту. Наприклад, Amazon має купу дата-центрів по всьому світу, тому вони пропонують послугу CDN: ваш публічний контент буде кешуватися на всіх дата-центрах Amazon, і ваші користувачі по всьому світу будуть отримувати його швидше.
Або звернення до API вашого додатку можна пропустити через сервіс Amazon Gateway API, який дозволяє дуже гнучко налаштувати роботу з вашими сервісами. Можна розподіляти навантаження на різні сервіси, відбивати DDoS-атаки, автоматизувати завантаження файлів, налаштувати розумне кешування, та багато ще всього.
Таким чином, між додатком-клієнтом і вашими сервісами виникає багато «розумних комунікацій», які можна і потрібно налаштовувати. Навіть якщо ви ніколи не будете робити це особисто, ви повинні знати, що вони існують і можуть суттєво впливати на роботу вашої програми.
І це ми ще не торкнулися таких тем, як маршрутизатори, вежі 5G, супутники та інтернет-кабелі по дну океану. Ви відправляєте відеопотік з вашого сервера вашому клієнту, а він збоїть, оскільки у клієнта поганий зв'язок і з'єднання постійно обривається. Вгадайте, хто буде вирішувати цю проблему?
2.4 Сервер
Під словом "сервер" можуть ховатися зовсім різні поняття. Вам буде корисно дізнатися про найпоширеніші з них.
Фізичний серверФізичний сервер — це обладнання, що представляє собою окремий комп'ютер з ресурсами (процесор, пам'ять, сховище), який використовується для обробки даних і забезпечення роботи різних програмних додатків. Ці сервери встановлюються в центрах обробки даних, де вони забезпечують потужності для хостингу веб-сайтів, додатків, баз даних та інших служб.
Віртуальний серверВіртуальний сервер — це програмно емітований сервер, який працює в середовищі фізичного сервера. За допомогою технологій віртуалізації один фізичний сервер може бути розділений на кілька ізольованих віртуальних серверів, кожен з яких має свою операційну систему і може бути незалежно перезавантажений і налаштований.
Програма-сервер (наприклад, Nginx)Програма-сервер, така як Nginx, представляє собою серверне програмне забезпечення, що використовується для обробки запитів до веб-ресурсів. Nginx широко відомий як веб-сервер, який може також виконувати функції поштового проксі-сервера і зворотного проксі-сервера в архітектурах з мікросервісами, а також як балансувальник навантаження.
Сервер бази данихСервер бази даних — це спеціалізований сервер, що використовується для управління базами даних і обробки запитів до них. Він забезпечує централізоване зберігання даних та їх обробку, надаючи доступ до даних через мережу. Сервери баз даних підтримують обробку транзакцій, пошук і зміну даних, забезпечуючи при цьому надійність і безпеку зберігання інформації. Приклади серверів баз даних включають MySQL, PostgreSQL, Oracle Database і Microsoft SQL Server.
І ось десь у дата-центрі на одному з віртуальних серверів буде крутитися ваш проект на Python і Django. Він працюватиме з базою даних, отримувати запити від NginX, і слати логи своїх дій у Splank.
Але саме завдяки вашому коду мільйони користувачів вашого продукту будуть щасливі. Вони будуть користуватися продуктом, платити за нього гроші, а в такому разі буде щасливий і власник продукту. Акції компанії будуть рости, ви будете отримувати бонуси акціями і теж будете щасливі. Прямо круговорот щастя в природі якийсь :)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ