1. Сучасні продукти
Сучасні продукти вже рідко називають просто програмами. Один продукт може поєднувати десятки програм, сотні інтернет-сервісів і безліч API, що працюють у хмарному центрі обробки даних (їх ще називають центрами обробки даних), у якому його розгорнуто.
Більшість сучасних продуктів працює за парадигмою «клієнт—сервер». На вашому пристрої (телефон, ноутбук, компʼютер) є програма, що взаємодіє з користувачем (тобто з вами), а критична функціональність розміщена на віддаленому сервері — саме там і відбувається все важливе ➡️🖥️
Іноді ваш клієнт може спілкуватися з кількома незалежними серверами, або сервер одного продукту може звертатися до сервера іншого продукту. Постає глобальна мережа з клієнтів і серверів, що працюють разом.
Тож сучасну модель застосунків, мабуть, точніше описувати як парадигму «клієнт—інтернет—сервер». Там уже надто багато різних складних комунікацій. Зʼявилися навіть так звані «розумні канали звʼязку», які самі вирішують, кому й коли надіслати ваш запит.🛰️📡
2. Клієнти
Клієнтські застосунки умовно можна поділити на 4 категорії:
- 🖥️ Настільний клієнт — програма, що працює на компʼютері.
- 📲 Мобільний клієнт — застосунок для 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 Gateway API, який дає змогу дуже гнучко налаштувати роботу з вашими сервісами. Можна розподіляти навантаження між різними сервісами, відбивати DDoS-атаки, автоматизувати завантаження файлів, налаштувати розумне кешування — і багато іншого 🛡️.
Отже, між клієнтським застосунком і вашими сервісами зʼявляється безліч «розумних комунікацій», які можна й потрібно налаштовувати. Навіть якщо ви ніколи не робитимете це особисто, варто знати, що вони існують і можуть істотно впливати на роботу вашого застосунку.
І це ми ще не торкнулися таких тем, як маршрутизатори, вишки 5G, супутники й інтернет-кабелі на дні океану. Ви надсилаєте відеопотік зі свого сервера клієнтові, а він «підвисає», бо в клієнта поганий звʼязок і зʼєднання постійно обривається. Здогадайтеся, кому доведеться це розвʼязувати? Вам 😅
4. Сервер
Під словом «сервер» можуть ховатися зовсім різні поняття. Вам буде корисно дізнатися про найпоширеніші з них.
- 🖥️ Фізичний сервер
Фізичний сервер — це обладнання, окремий компʼютер із ресурсами (процесор, памʼять, сховище), який використовують для обробки даних і забезпечення роботи різних програмних застосунків. Ці сервери встановлюють у центрах обробки даних, де вони надають потужності для хостингу веб-сайтів, застосунків, баз даних та інших служб. - 🪐 Віртуальний сервер
Віртуальний сервер — це програмно емульований сервер, який працює в середовищі фізичного сервера. За допомогою технологій віртуалізації один фізичний сервер може бути розділений на кілька ізольованих віртуальних серверів, кожен з яких має свою операційну систему й може бути незалежно перезавантажений і налаштований. - 🕹️ Програма-сервер (наприклад, Nginx)
Програма-сервер, така як Nginx, — це серверне програмне забезпечення, яке використовують для обробки запитів до веб-ресурсів. Nginx широко відомий як веб-сервер, який також може виконувати функції поштового проксі-сервера й зворотного проксі-сервера в архітектурах з мікросервісами, а також як балансувальник навантаження. - 💾 Сервер баз даних
Сервер баз даних — це спеціалізований сервер, який використовують для керування базами даних і обробки запитів до них. Він забезпечує централізоване зберігання даних та їх обробку, надаючи доступ до даних через мережу. Сервери баз даних підтримують обробку транзакцій, пошук і зміну даних, забезпечуючи при цьому надійність і безпеку зберігання інформації. Приклади серверів баз даних: MySQL, PostgreSQL, Oracle Database і Microsoft SQL Server.
І ось десь у центрі обробки даних, на одному з віртуальних серверів, працюватиме ваш проєкт на C# і ASP.NET Core. Він взаємодіятиме з базою даних, отримуватиме запити через Nginx або Azure Application Gateway, а журнали своєї роботи надсилатиме в системи моніторингу на кшталт Azure Monitor чи Splunk 📈.
Але саме завдяки вашому коду мільйони користувачів вашого продукту будуть задоволені. Вони користуватимуться сервісом і платитимуть за нього, і зрештою буде задоволений і власник продукту. Акції компанії зростатимуть, ви отримаєте бонус у вигляді акцій — і будете щасливі 💸. Справжній кругообіг щастя в індустрії :)
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ