1. Сучасні продукти
Сучасні продукти вже рідко називають просто «програмами». Один сучасний продукт може містити десятки проєктів, сотні інтернет‑сервісів і безліч API, розгорнутих у хмарі або в дата‑центрі.
Багато продуктів (якщо не більшість) працюють за парадигмою Клієнт—Сервер. На вашому пристрої (телефоні, ноутбуку, ПК) запускається застосунок, що відповідає за взаємодію з користувачем, а ключова функціональність виконується на віддалених серверах.
Іноді клієнт може спілкуватися з кількома незалежними серверами або сервер одного проєкту звертається до сервера іншого проєкту. Так формується глобальна мережа клієнтів і серверів, що взаємодіють між собою.
Тому сучасну модель застосунків частіше описують як Клієнт—Інтернет—Сервер — це скупчення складних комунікацій і проміжних сервісів. Зʼявилися також так звані «розумні канали звʼязку», які автоматично визначають, куди й коли передати запит.
2. Клієнти
Програми‑клієнти умовно можна поділити на чотири категорії:
- 🖥️ Desktop‑клієнт — застосунок, що працює на настільному компʼютері або ноутбуку.
- 📲 Mobile‑клієнт — застосунок для iOS або Android.
- 🌐 Веб‑клієнт — сайт або веб‑застосунок, який працює в браузері.
- 🌍 Server‑клієнт — застосунок, запущений на іншому сервері та звертається до ваших сервісів.
Кожен із них можна додатково розібрати на складові. Наприклад, веб‑клієнт — це браузер і сайт, що завантажується в нього. Браузери теж відрізняються між собою й можуть по‑різному інтерпретувати вміст.
Навіть у найпоширеніших випадках сайт складається з трьох базових технологій:
- 📄 HTML
- 🎨 CSS
- ⚡ JavaScript
Хоча на перший погляд це виглядає просто, сучасна розробка сайтів уже не обмежується чистим HTML і JavaScript. Для великих проєктів використовують фреймворки, такі як React, Angular або Vue. Це вже не просто сайти, а повноцінні веб‑застосунки зі збірками, тестами й власними парадигмами.
Чистий CSS теж рідко застосовують у великих проєктах: використовують CSS‑препроцесори й фреймворки. Навіть для електронних листів існують спеціальні інструменти, щоб повідомлення коректно відображалися в різних поштових клієнтах.
Так само чистий JavaScript часто замінюють на TypeScript, який компілюється в JavaScript для запуску в браузері.
3. Інтернет і інфраструктура
Комунікація між клієнтом і сервером здається простою, проте вона теж зазнала значних змін.
Ваш продукт, ймовірно, буде розміщено в одному з сучасних дата‑центрів або в хмарі. Багато компаній пропонують різні моделі хостингу — від виділених фізичних серверів до повністю керованих хмарних сервісів.
Фізичний сервер уже не обовʼязково означає лише апаратне забезпечення. Сучасні дата‑центри надають віртуальні сервери — програмно емульовані машини на базі фізичних хостів. Один фізичний сервер може містити кілька віртуальних, що полегшує масштабування: потрібно більше памʼяті або CPU — ви можете додати ресурси віртуальному серверу за кілька хвилин.
Ще один крок уперед — хмара. Це означає, що ваш продукт не лише розгорнуто на віртуальному сервері, а й активно використовує набір інфраструктурних сервісів провайдера.
Потрібен сервіс для зберігання резервних копій? У хмарі є готові рішення. Потрібна база даних із надзвичайно високою доступністю? Такі сервіси теж є. Kafka, RabbitMQ, NoSQL‑сервери — усе це можна підключити й налаштувати через інфраструктуру провайдера.
Хмарні сервіси стають частиною вашого застосунку. Наприклад, великі провайдери (AWS, Azure, Google Cloud) пропонують CDN‑мережі: ваш публічний вміст кешується на багатьох точках присутності, і користувачі в різних регіонах отримують його швидше.
Запити до API можна спрямовувати через шлюзи (API Gateway), які дають змогу гнучко налаштовувати маршрутизацію, розподіл навантаження, захист від DDoS‑атак, автоматизоване завантаження файлів і налаштування кешування.
Отже, між клієнтом і сервісами зʼявляється багато «розумних комунікацій», які слід враховувати під час проєктування системи. Навіть якщо ви не налаштовуватимете їх самостійно, корисно розуміти їхній вплив на роботу застосунку.
Це ще не повний перелік тем: маршрутизатори, базові станції 5G, супутники й підводні інтернет‑кабелі теж впливають на доставлення вмісту. Якщо відеопотік із сервера переривається через нестабільне зʼєднання клієнта, розв’язання таких проблем часто залежить від інженерів, які підтримують проєкт.
4. Сервер
Під поняттям «сервер» можуть ховатися різні сутності. Варто розглянути найпоширеніші варіанти.
- 🖥️ Фізичний сервер
Фізичний сервер — це апаратне обладнання, окремий компʼютер із процесором, памʼяттю та накопичувачем, призначений для обробки даних і хостингу різних застосунків. Такі сервери встановлюють у центрах обробки даних, де вони забезпечують ресурси для веб‑сайтів, застосунків, баз даних та інших служб. - 🪐 Віртуальний сервер
Віртуальний сервер — програмно емульована машина, що працює в середовищі фізичного хоста. За допомогою віртуалізації один фізичний сервер можна розбити на кілька ізольованих віртуальних машин, кожна з яких має власну операційну систему та може бути незалежно перезавантажена й налаштована. - 🕹️ Програмний сервер (наприклад, Nginx)
Програмний сервер, такий як Nginx, — це серверне програмне забезпечення для обробки запитів до веб‑ресурсів. Nginx широко використовують як веб‑сервер, зворотний проксі, поштовий проксі та балансувальник навантаження в архітектурах із мікросервісами. - 💾 Сервер баз даних
Сервер баз даних забезпечує керування базами даних і обробку запитів до них. Він надає централізоване зберігання даних, підтримку транзакцій, пошук і зміну даних із гарантіями надійності та безпеки. Приклади серверів баз даних: MySQL, PostgreSQL, Oracle Database, Microsoft SQL Server.
І ось десь у дата‑центрі, на віртуальному сервері, працюватиме ваш проєкт на C# і ASP.NET Core. Він взаємодіятиме з базою даних, отримуватиме запити через Nginx або Azure Application Gateway, а журнали надсилатиме до систем моніторингу на кшталт Azure Monitor або Splunk.
Саме завдяки якісному коду користувачі будуть задоволені роботою продукту. Вони користуватимуться сервісом, платитимуть за нього, а власник отримуватиме дохід. У результаті команда може отримати бонуси або опціони — і це одна з мотивацій в індустрії.
Додаткові лекції до рівня
На цьому рівні ми розглянули кілька нових тем: що таке літерали, що таке екранування і для чого воно потрібно. А також продовжили знайомитися з класами. Цього разу ми розглянули клас String та особливості роботи з рядками. Перш ніж рухатися далі, переконайтеся, що ви все зрозуміли як слід.
Літерали в Java
На етапі створення програми розробник зазвичай знає тільки її структуру й не думає про те, які дані вона оброблятиме. Проте є ситуації, коли в коді програми потрібно явно вказувати певні дані (наприклад, кількість ітерацій або повідомлення для виведення). Тоді на допомогу приходять літерали. У цій статті ще раз розглянемо відомі типи літералів і дізнаємося, як їх правильно застосовувати.
Екранування символів
Ви поступово запам'ятаєте, як екранувати символи, навіть якщо вам здається, що правил надто багато. Тож не завадить почитати ще щось на цю тему. Наприклад, оцю корисну статтю. До того ж ви можете додати її до закладок і час від часу підглядати в неї, доки не відпаде потреба!
Клас String у Java
Це дуже важлива тема, а ця стаття — дуже змістовна й корисна для систематизації знань. Вона дає змогу ще раз переглянути основні характеристики класу String, освіжити в пам'яті приклади роботи з ним і подивитися, як відбувається створення, додавання й порівняння рядків, як перетворюють об'єкт/примітив на рядок, а рядок — на число і т. ін. Наприкінці наведено кілька джерел, які допоможуть глибше розібратися в темі та навіть підготуватися до можливих запитань на співбесіді.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ