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.
Но именно благодаря вашему коду миллионы пользователей вашего продукта будут счастливы. Они будут пользоваться продуктом, платить за него деньги, а в таком случае будет счастлив и владелец продукта. Акции компании будут расти, вы будете получать бонусы акциями и тоже будете счастливы. Прямо круговорот счастья в природе какой-то :)
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ