11.1 Современные продукты
Современные продукты уже никто не называет программами. Современный продукт может состоять из десятков программ, сотен интернет-сервисов и кучи API, которые предоставляют ему облака дата-центра, в котором продукт развёрнут.
Многие современные продукты (если не все) работают по парадигме Клиент-Сервер. Это когда на вашем устройстве (телефон, ноутбук, компьютер) находится программа, которая отвечает за коммуникацию с пользователем (вами), а весь критический функционал находится на удаленном сервере, где и происходит все важное.
Иногда ваш клиент может общаться с несколькими независимыми серверами, ну или сервер одного продукта может обращаться к серверу другого продукта. Получается некая глобальная сеть из клиентов и серверов, где все работают друг с другом.
Поэтому современную модель приложений, возможно, лучше описать как парадигму Клиент-Интернет-Сервер. Слишком уж там стало много различной сложной коммуникации. Появились даже так называемые «умные каналы связи», которые сами принимают решение, кому отправить ваш запрос и когда.
11.2 Клиенты
Программы-клиенты условно можно разделить на 4 категории:
- Desktop-клиент — программа, работающая на компьютере
- Mobile-клиент — приложение под iOS или Android
- Веб-клиент — сайт/веб-приложение, работающие в браузере
- Server-клиент — приложение, которое запущено на другом сервере
А каждую из них можно опять подробить на части. Например, web-клиент – это сайт или веб-приложение, а значит, оно состоит из Браузера и Сайта, который в него загружается. Браузеры тоже ведь не все одинаковые и могут работать по-разному.
Но даже если мы возьмем самый распространенный браузер, остается еще сайт, который в него грузится. Сайт обычно состоит из трех вещей:
- HTML
- CSS
- JavaScript
Нет ничего проще, скажете вы, но уже никто не пишет сайты просто на HTML и JavaScript. Теперь для разработки сайта используют даже не библиотеки, а полноценные фреймворки, такие как React, Angular или Vue. Да и не сайты это теперь, а полноценные веб-приложения. Со своими сборками, тестами и парадигмами.
Простой CSS тоже никто теперь не использует: уже есть препроцессоры CSS, которые помогают его генерировать, и даже целые CSS фреймворки. Господи, даже есть даже целые CSS фреймворки для email-почты, чтобы ваше письмо красиво выглядело, если человек его просмотрит в браузере или в большинстве почтовых клиентов.
На JavaScript тоже уже никто не пишет: все большие веб-приложения пишутся на TypeScript, который потом компилируется в JavaScript. Ну вы поняли…
11.3 Интернет и инфраструктура
Коммуникация клиента и сервера — что может быть проще? Но и тут уже все поменялось.
Во-первых, ваш продукт скорее всего будет хоститься в одном из современных дата-центров. Очень много компаний по всему миру предлагают различные услуги хостинга ваших продуктов как на их серверах, так и на ваших физических серверах. Любой каприз за ваши деньги.
Физический сервер больше не физический. Все современные дата-центры предлагают вам аренду виртуальных серверов. Это некий виртуальный компьютер, и на одном физическом сервере их могут быть десятки. Зато это удобно в плане апгрейда сервера. Если вам нужно больше памяти, вы можете добавить ее к вашему виртуальному серверу за несколько минут.
Но и такой подход уже устаревает. Сейчас в моде переезд в облака — это когда ваш продукт не просто развернут на виртуальном сервере в дата-центре, а активно пользуется большим набором инфраструктуры и сервисов этих дата-центров.
Вам нужен сервер для хранения бэкапов: под это есть целая удобная инфраструктура в облаке. Вам нужна база данных с надежностью 99.9999999%? Такая тоже есть. Kafka, RabbitMQ, NoSQL? Все уже есть и легко настраивается. Только денежки плати.
Эти дата-центры и облака начинают становиться частью вашего продукта. Например, у Amazon есть куча дата-центров по всему миру, поэтому они предлагают услугу CDN: ваш публичный контент будет кешироваться на всех дата-центрах Amazon, и ваши пользователи по всему миру будут получать его быстрее.
Или обращение к API вашего приложения можно пропустить через сервис Amazon Gateway API, который позволяет очень гибко настроить работу с вашими сервисами. Можно распределять нагрузку на разные сервисы, отражать DDoS-атаки, автоматизировать загрузку файлов, настроить умное кеширование, да много еще всего.
Таким образом между приложением-клиентом и вашими сервисами возникает куча «умных коммуникаций», которые можно настраивать и нужно настраивать. Даже если вы никогда не будете делать это лично, вы должны знать, что они существуют и могут значительно влиять на работу вашей программы.
И это мы еще не коснулись такой темы, как роутеры, вышки 5G, спутники и интернет-кабеля по дну океана. Вы шлете видеопоток с вашего сервера вашему клиенту, а оно сбоит, т. к. у клиента плохая связь и соединение постоянно обрывается. Угадайте, кто будет решать эту проблему?
11.4 Сервер
Словом серверная часть обозначают очень много довольно различных понятий, так что вам будет полезно узнать о самых популярных из них.
Физический сервер
Физический сервер — это оборудование, представляющее собой отдельный компьютер с ресурсами (процессор, память, хранилище), который используется для обработки данных и обеспечения работы различных программных приложений. Эти серверы устанавливаются в дата-центрах, где они обеспечивают мощности для хостинга веб-сайтов, приложений, баз данных и других служб.
Виртуальный сервер
Виртуальный сервер — это программно эмулированный сервер, который работает в среде физического сервера. С помощью технологий виртуализации один физический сервер может быть разделен на несколько изолированных виртуальных серверов, каждый из которых имеет свою операционную систему и может быть независимо перезагружен и настроен.
Программа-сервер (пример Nginx)
Программа-сервер, такая как Nginx, представляет собой серверное программное обеспечение, используемое для обработки запросов к веб-ресурсам. Nginx широко известен как веб-сервер, который может также выполнять функции почтового прокси-сервера и обратного прокси-сервера в архитектурах с микросервисами и как балансировщик нагрузки.
Сервер баз данных
Сервер баз данных — это специализированный сервер, используемый для управления базами данных и обработки запросов к ним. Он обеспечивает централизованное хранение данных и их обработку, предоставляя доступ к данным через сеть. Серверы баз данных поддерживают обработку транзакций, поиск и изменение данных, обеспечивая при этом надежность и безопасность хранения информации. Примеры серверов баз данных включают MySQL, PostgreSQL, Oracle Database и Microsoft SQL Server.
И вот где-то в дата-центре на одном из виртуальных серверов будет крутиться ваш проект на React и Node.js, который будет работать с базой данных, получать запросы от NginX и слать логи своих действий в Splank.
Но именно благодаря вашему коду миллионы пользователей вашего продукта будут счастливы. Они будут пользоваться продуктом, платить за него деньги, и тогда будет счастлив и владелец продукта. Акции компании будут расти, вы будете получать бонусы акциями, и тоже будете счастливы. Прямо круговорот счастья в природе какой-то :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ