Технологические стеки: Современный ландшафт
Технологии развиваются быстрее, чем любая другая отрасль бизнеса. В мгновение ока появляется что-то новое и становится любимцем корпоративных компаний. Возьмем, к примеру, контейнеры.
До появления контейнерных технологий (и особенно Kubernetes) предприятия полагались на монолитные стеки приложений для развертывания приложений и сервисов. Одним из ярких примеров монолитного стека является LAMP (Linux, Apache, MySQL, PHP). Этот стек уже несколько десятилетий помогает предприятиям расширять свои возможности.
Но, как мы уже говорили, эволюция происходит, и происходит очень быстро.
В наши дни полностью реализованные технологические стеки появляются так же быстро, как когда-то простые приложения. А разработчики берут кусочки и соединяют их воедино все более креативными способами, пока рынок не наводнится новыми и новыми стеками.
Отсюда, конечно, вытекает наш первый вопрос.
Что такое технологический стек?
Проще говоря, технологический стек - это комбинация языков программирования, фреймворков и инструментов, которые вместе позволяют разработчикам создавать веб- или мобильные приложения и сервисы.
В качестве примера рассмотрим стек LAMP. Этот очень популярный стек включает в себя:
- Язык программирования (в частности, язык для написания CGI-сценариев) - PHP
- Веб-сервер - Apache
- Операционная система - Linux
- База данных - MySQL или MariaDB.
С помощью этого стека можно развернуть мощные и динамичные приложения для самых разных целей. Однако такое сочетание не является стандартом де-факто, по которому строятся все стеки.
Это особенно актуально в современную мобильную эпоху. Сегодня инженерам-программистам требуется возможность разрабатывать и развертывать свои приложения гораздо быстрее, чем это позволяет сделать стек LAMP. Вот тут-то и приходит на помощь фреймворк. При добавлении фреймворка работа становится более эффективной и менее избыточной.
Современный стек можно разбить на 7 различных категорий. Каждый стек или сервис может быть затем наложен на другие стеки/сервисы для создания надежного и полного приложения или сервиса.
Операционные системы/языки программирования
Это базовый стек, на котором строится все остальное. Для этого стека необходимо выбрать операционную систему и необходимые для проекта языки программирования. Выбор операционной системы в основном зависит либо от вашего уровня комфорта, либо от требований других стеков, которые вы будете использовать. Во многих случаях наиболее популярной операционной системой для технологических стеков является Linux.
Язык программирования, с другой стороны, определяется проектом. Вы можете использовать Java, JavaScript, .NET, C++, Ruby, Python или любой другой язык, позволяющий разрабатывать приложение или сервис.
Серверы и балансировка нагрузки
Здесь мы имеем дело с серверами, а также с программно-аппаратным обеспечением для сетей распространения контента, маршрутизации, кэширования, управления ресурсами, RBAC, фундаментальными сервисами (такими как вычислительные, хранилища и сети). Именно этот стек позволяет приложениям и сервисам получать запросы от пользователей и приложений, работать бесперебойно и масштабироваться по мере роста спроса. Примером может служить AzureStack, включающий компонент балансировки нагрузки.
Хранение данных и запросы к данным
На этом уровне находится стек, состоящий из реляционных и нереляционных баз данных, а также хранилищ данных, озер данных и конвейеров данных. Без этого стека приложения не могут быть динамичными по своей природе и не могут хранить данные для последующего запроса или использования.
Стек данных зависит от поступления данных из источников, которые могут поступать из многочисленных сервисов, таких как Facebook, Twitter, пользовательские данные, Google Analytics, Salesforce и (конечно же) базы данных. После получения данных стек данных может выдавать информацию для бизнес-аналитики.
Стек на стороне сервера
Стек серверной части (или бэкенда) добавляет большую часть базовой функциональности, необходимой для создания приложений для бэкенда вашего стека приложений. Он предоставляет необходимые компоненты для взаимодействия с базой данных, обработки запросов пользователей и сброса паролей. Этот стек невидим для конечных пользователей и является основой приложения.
Наиболее распространенными компонентами стека серверной стороны являются языки программирования Python и Ruby, фреймворки Django и Ruby on Rails, среда выполнения JavaScript Node.js. В состав серверного стека также могут входить базы данных (например, MySQL) и веб-серверы (например, Apache).
Стек на стороне клиента
Стек клиентской части (также известный как стек фронтенда) - это то, что видят конечные пользователи на своих экранах. Этот стек включает в себя все необходимые компоненты для создания графических интерфейсов приложений, такие как HTML, CSS и JavaScript, а также фреймворки React и Angular. Некоторые разработчики предпочитают быть разработчиками полного стека, что означает, что они могут вести разработку как на стороне сервера, так и на стороне клиента.
Стек API
Это не столько стек как таковой, сколько важнейший компонент для создания реально функционирующих стеков. API-стек позволяет соединить все инструменты в рамках всего технологического стека. Многие из этих стеков API состоят из тысяч готовых API и разбиты на два уровня - для сервисов и для инфраструктуры.
Инструменты и сервисы мониторинга
По мере создания своего стека (или использования готового) вам также понадобятся необходимые инструменты и сервисы для мониторинга состояния и производительности компонентов и сервисов. Вы можете считать, что можно обойтись только мониторингом производительности всего приложения в целом, но, возможно, вам потребуется (в зависимости от того, как вы создавали свое приложение или службу) контролировать некоторые отдельные стеки. Возможно, потребуется установить специальный монитор для стека серверной части, стека хранения данных или стека операционной системы.
Гранулярный мониторинг позволяет более последовательно и надежно оптимизировать работу стека в целом. Кроме того, данные, полученные в результате мониторинга отдельных стеков, могут оказаться бесценными для настройки производительности каждой отдельной части. В конечном итоге такая детализация позволяет настроить стек на максимальную производительность.
Какой технологический стек выбрать?
Ответить на этот вопрос сложно, поскольку он полностью зависит от характера вашего проекта. Однако очень важно с самого начала выбрать правильный технологический стек. Если вы выберете неправильный путь, то на полпути к созданию проекта вам придется начинать все сначала. А потерянное время - это потерянные деньги.
Также важно выбрать технологический стек, способный масштабироваться в соответствии с вашими потребностями. Например, если вы добавите реляционную базу данных в стек, который будет использоваться для приложения, обрабатывающего миллионы запросов в час, то ваш стек не сможет масштабироваться в соответствии с такими потребностями. Вместо этого следует использовать базу данных NoSQL.
Существует целый ряд очень популярных технологических стеков. Рассмотрим некоторые из них.
MEAN
Стек MEAN - один из самых популярных стеков для создания динамических сайтов и веб-приложений. Этот стек основан на JavaScript и состоит из:
- MongoDB - база данных
- Express.js - backend-фреймворк
- Angular.js - фронтенд-фреймворк
- Node.js - кроссплатформенный сервер
Основная причина популярности MEAN заключается в том, что он ориентирован на JavaScript. Это означает, что вашим разработчикам приходится концентрироваться только на одном языке (вместо того чтобы собирать множество языков для одного проекта). Это позволяет быстро создавать такие приложения и сервисы, как:
- Инструменты для управления рабочими процессами
- Приложения для учета расходов
- Сайты-агрегаторы новостей
- Картографические приложения и приложения для определения местоположения
- Приложения для ведения дел и календарей
- Интерактивные форумы
Причина важности MEAN заключается в том, что он позволяет создавать масштабируемые, облачные нативные приложения с оптимизированным жизненным циклом разработки на одном языке. С помощью MongoDB приложения на базе MEAN могут работать с большими объемами данных, поэтому они идеально подходят для корпоративных предприятий. Наконец, поскольку MEAN имеет встроенный веб-сервер, его развертывание достаточно просто.
MEVN
MEVN похож на MEAN, но в нем Angular.js заменен на Vue.js. Почему? Vue.js считается отличным выбором для разработки как фронт-, так и бэк-сайда и позволяет легко развертывать динамические веб-приложения, ориентированные на пользователя. MEVN означает:
- MongoDB - база данных
- Express.js - backend-фреймворк
- Vue.js - фронтенд-фреймворк
- Node.js - кроссплатформенный сервер
Для любого разработчика, которому требуется быстрое развертывание фронтенд-веб-приложений, MEVN - это тот стек, который необходимо использовать. Благодаря способности Vue.js работать со сторонними сервисами, он достаточно гибок и может предоставить лучшее из мира Angular и React. С добавлением Vue.js ваши веб-приложения получат потрясающую производительность.
Два основных преимущества стека MEVN - использование JavaScript на протяжении всего жизненного цикла разработки и более четкое разделение на клиентскую и серверную части. А поскольку Vue.js проще в использовании, чем Angular, вашим разработчикам будет легче освоить этот стек.
MERN
Это еще один стек, похожий на MEAN, только в нем фронтенд-фреймворк Angular.js заменен на React. Поскольку React является одним из самых популярных фреймворков для создания одностраничных мобильных приложений, вы можете быть уверены, что MERN - один из лучших стеков для создания приложений в мобильном пространстве.
MERN расшифровывается как:
- MongoDB - база данных
- Express.js - backend-фреймворк
- React - фронтенд-фреймворк
- Node.js - кроссплатформенный сервер
Преимущество MERN аналогично преимуществу MEAN, поскольку он использует JavaScript на протяжении всего жизненного цикла разработки. А поскольку MERN использует архитектуру MVC (Model-View-Controller), процесс разработки должен быть хорошо знаком вашим инженерам. Благодаря React и его асинхронному поведению можно добиться невероятной производительности во фронтенд-приложениях. Наконец, React используется на самых популярных сайтах в мире, таких как Facebook и Dropbox, поэтому он способен удовлетворить потребности компании любого размера.
LAMP
Мы уже упоминали о стеке LAMP, но он обязательно должен быть включен в этот список, поскольку этот стек очень распространен и имеет огромное значение. В состав стека LAMP входят:
- Linux - операционная система
- Apache - веб-сервер
- MySQL (или MariaDB) - база данных
- PHP - язык CGI
Стек LAMP часто является базовым для развертывания сайтов WordPress. При этом можно менять местами различные компоненты. Например, можно заменить Linux на Windows для создания стека WAMP или macOS для создания стека MAMP. Вместо PHP можно поставить Perl или Python. Но как бы вы ни собирали этот стек, он является одним из самых популярных стеков веб-серверов на рынке и используется миллионами веб-сайтов по всему миру.
Стек Meteor.js
Это еще один стек веб-разработки с открытым исходным кодом. Meteor.js полностью сфокусирован на JavaScript, что делает разработку приложений гораздо более эффективной. С помощью Meteor.js можно разрабатывать настольные, мобильные и веб-приложения и даже интегрировать их с различными фреймворками и инструментами. Единственным недостатком Meteor.js является то, что он работает только с NoSQL-базой данных MongoDB, поэтому для успешной работы с этим стеком ваши разработчики должны знать этот инструмент.
Преимущество Meteor.js заключается в том, что вы можете писать приложения с гораздо меньшим количеством кода, чем в других стеках. Meteor.js также позволяет создавать высокомасштабируемые приложения. К другим преимуществам относятся:
- Невероятная простота использования
- Бесшовная связь между клиентом и сервером
- Инструменты тестирования в реальном времени
- Выдающиеся возможности отладки
- Большое количество пакетов и библиотек для работы
Бессерверный
Вы можете не думать, что это стек, но это так. Но что такое бессерверная система? По сути, это отказ от управления серверами. Облачные платформы, такие как AWS, Google Cloud и Azure, предлагают бессерверные решения. И все эти сторонние хостеры предлагают полные стеки, которые включают в себя все необходимое для создания и развертывания.
Существует три основных преимущества перехода на бессерверные решения:
- Экономическая эффективность
- Не нужно беспокоиться о выделении аппаратного обеспечения
- Масштабируемость
Бессерверный стек является расширением AWS CDK и включает живую среду разработки Lambda, поддержку установки точек останова и отладки в VS Code, поддержку развертывания в различных регионах и средах, включает конструкции более высокого уровня, а также поддержку JavaScript, TypeScript, Go, Python, C# и F# с нулевой конфигурацией.
JAMstack
JAMstack не так популярен, как другие стеки в этом списке, но он становится все более полезным для современной веб-разработки.
JAM расшифровывается как:
- JavaScript
- API
- Разметка
JAMstack предназначен именно для разработки веб-сайтов. Важно понимать, что в JAMstack разработка полностью отделена от хостинга. Благодаря этому вы можете создавать сайты в выбранной вами среде, а затем все изменения, внесенные в сборку, развертываются в генераторе статических сайтов или CDN. После развертывания сборки создается новый сайт.
JAMstack - отличный вариант для быстрого создания статических сайтов и даже автоматизации этого процесса (аналогично CI/CD). Важно понимать, что для каждого раздела можно выбрать те компоненты, которые вам больше нравятся (например, React для JavaScript, Elastic для API и Gatsby для разметки). Это делает JAMstack достаточно гибким.
СДЕЛАЙ САМ
Это одна из лучших особенностей технологических стеков. Вы можете не найти актуального стека, отвечающего потребностям вашего проекта. Вы точно знаете, что вам нужно создать, но ни один из стеков не дает вам всего необходимого.
Вот тогда и приходит на помощь принцип "сделай сам". При наличии большого количества доступных технологий вы можете собрать совершенно новый стек, чтобы создать именно то, что нужно вашему проекту. Возможно, проекту нужен стек LAMA: Linux, Apache, MongoDB, Angular. А может быть, все дело в стеке JAN (JavaScript, Apache, Node.js). Возможно, вам даже придется основывать свой проект на LAN-стеке (Linux, NGINX, Node.js).
Прелесть технологических стеков в том, что они не являются неизменными. Фактически, нет никаких ограничений на то, какие стеки вы можете придумать. Но если вы пойдете по этому пути, очень важно, чтобы вы знали, для чего вам нужен стек, чтобы его составные части могли взаимодействовать друг с другом и чтобы стек обеспечивал надежность, время работы, масштабируемость и гибкость.
Если вы соберете свой собственный стек, а в середине проекта обнаружите, что он не работает, вы вернетесь к исходной точке. В мире современных вычислений шаг назад сродни взрыву. Ваши разработчики и ваша компания должны постоянно двигаться вперед. Если вы решили пойти по пути создания стека "сделай сам", сделайте это правильно, и он будет служить вам долго.
Заключение
Технологические стеки существуют уже очень давно. Но за это время они превратились в специализированные инструменты, облегчающие работу разработчиков и позволяющие развернуть масштабируемые, удобные приложения, с помощью которых пользователи могут взаимодействовать с вашей компанией.
Самое главное, что необходимо понимать, - это то, что технологические стеки позволяют разработчикам использовать уже готовое программное обеспечение, что избавляет их от необходимости изобретать велосипед каждый раз, когда они начинают новый проект.
Благодаря наличию всех этих технологий разработка приложений переживает один из самых быстрых и масштабных периодов роста в истории. Благодаря облачной, контейнерной, веб- и мобильной разработке приложений технологические стеки сегодня важны как никогда.