При разработке любого приложения клиентам всегда важно получить результат, а разработчикам — найти самый оптимальный путь для достижения этого результата. Эффективность приложений зависит от множества факторов, важнейшим из которых является правильно подобранный стек технологий.
В этой статье мы рассмотрим, что из себя представляет тех. стек, рассмотрим факторы, которые стоит учитывать при выборе стека, а также готовые решения для проектов. Если интересно, добро пожаловать под кат.
Коротко о стеке
Tech Stack — это набор средств для реализации задуманной IT идеи. Как правило, стек состоит из языков программирования, фреймворков, библиотек, различных инструментов для разработки и самих подходов к программированию. Синтез всего перечисленного предопределяет жизнеспособность и конкурентоспособность приложения, его функциональность, масштабируемость и дальнейшее обслуживание.
Тех. стек можно условно разделить на 2 части: клиентскую (front-end) и серверную (back-end).
Front-end технологии включают в себя:
- язык разметки HTML;
- таблицы стилей CSS;
- язык программирования JavaScript;
- UI-фреймворки и библиотеки: React, Angular, Node.js, jQuery и др.
Back-end технологии включают в себя:
- операционную систему;
- веб сервер: Nginx, Apache;
- языки программирования C#, Java, PHP, Python, Objective-C и др;
- различные фреймворки, надстроенные над языками программирования: Node.js, .NET, Django и др;
- базы данных: Microsoft SQL Server, MySQL, PostgreSQL, Oracle, Neo4j и др;
- облачные инфраструктуры и сервисы: AWS, Microsoft Azure, Google Cloud, Heroku и др.
Что стоит учитывать при подборе стека
1. Требования и особенности проекта
При формировании тех. стека прежде всего необходимо учитывать размер и цель проекта, так как они значительно влияют на выбор технологий. Чем больше и масштабнее проект, тем больше и сложнее будет стек.
Так, например, для небольших проектов (MVP или одностраничные приложения) идеально могут подойти такие устоявшиеся стеки как Python-Django или Node.js-React.
Проекты средней величины, например, онлайн-магазины и приложения для среднего бизнеса, требуют немного более сложных технических стеков с несколькими уровнями языков программирования и фреймворками.
Крупные проекты, например, сложные торговые площадки или enterprise приложения, требуют масштабного стека для поддержания целостности и производительности приложений. Такие крупные технические стеки обычно используют несколько уровней языков программирования и фреймворков. Они созданы и используются для работы в условиях большого объема данных.
Важно помнить о том, что не стоит нагружать проект дополнительными технологиями. Их должно быть ровно столько, сколько необходимо для эффективного решения поставленной задачи.
2. Опыт и ресурсы
Для того, чтобы подобрать тех стек, необходим хороший технический и архитектурный опыт и знания. Для грамотного подбора технологий необходимо ориентироваться в тонкостях и различиях каждой из них.
Соответственно, при формировании стека стоит отдавать предпочтение тем технологиям, с которыми вы работаете уверенно. Не стоит выбирать новую технологию ради новой технологии: часто новые фреймворки и языки программирования либо сырые, либо опытных разработчиков, работающих с этими технологиями, попросту нет. Выбор таких технологий может привести к тому, что разработчики проекта будут сидеть и разбирать новую технологию вместо эффективного движения вперед. Но, в тоже время, не стоит отдавать предпочтение чему-то устаревшему и неэффективному по причине того, что есть “знающие люди”. В подобных случаях могут возникнуть сложности с поддержкой и эффективностью проекта. Определяясь с технологиями, необходимо найти ту самую золотую середину.
Также, стоит учитывать наличие ресурсов для реализации проекта. Например, если в вашей команде нет специалиста, работающего с определенной технологией, добавлять ее в проект просто не имеет смысла. “Внушительный” стек не несет в себе никакой пользы, если нет разработчиков, способных успешно и быстро работать с выбранными технологиями.
3. Масштабируемость
Архитектура вашего приложения должна быть масштабируемой, так как масштабируемость — жизненно важна для дальнейшего развития. От масштабируемости зависит, справится ли ваше приложение с нагрузкой. Например, если количество пользователей увеличивается, ваш технологический стек должен позволять приложению справляться с этим ростом.
Существует два типа масштабируемости — горизонтальная и вертикальная. Первый означает возможность работы на разных устройствах и позволяет справляться с увеличивающимся количеством пользователей. Вертикальная масштабируемость означает возможность добавлять новые функции или элементы в приложение в будущем.
Для достижения хорошей масштабируемости лучше использовать мощные языки программирования, такие как JavaScript. Такие языки сами по себе гибкие, так как имеют в арсенале различные библиотеки и структуры.
4. Удобство обслуживания
Удобство обслуживания является одним из основных факторов при создании приложений. Обслуживание вашего приложения должно осуществляться без усилий даже при масштабировании.
В частности, есть два фактора, от которых зависит удобство обслуживания вашего приложения:
- архитектура: должна поддерживать возможность повторного использования (reusability), быть мобильной и масштабируемой;
- кодовая база (codebase): не должна быть слишком длинной и слишком краткой, так как для обработки длинного кода потребуется больше времени, а сжатый код может привести к ошибкам во время дебага.
5. Безопасность
Любой конечный пользователь хочет быть уверенным, что его личные данные в безопасности. Поэтому, при формировании стека, необходимо выбирать технологии, которые обеспечивают высокий уровень безопасности. Эта проблема существенна, особенно если говорить об онлайн-платежах.
6. Скорость разработки
Скорость разработки проекта — один из важнейших факторов. В случае, если проект должен быть разработан в сжатые сроки, оптимальным вариантом будет выбор готовых решений тех. стека, обеспечивающих простую интеграцию. Подобные комбинации технологий сокращают общее время разработки за счет сторонних интеграций.
Готовые решения
В стремительно развивающемся мире технологий и бизнеса было бы глупо не предусмотреть готовых решений тех стека, которые упрощают работу и позволяют сэкономить время команде разработчиков.
Рассмотрим некоторые из них.
Совмещает в себе рабочий фреймворк Linux, веб-сервер Apache, базу данных MySQL, PHP/Perl/Python. Этот тех стек можно назвать отраслевым стандартом. Он используется для разработки web-приложений и пользуется популярностью благодаря своей адаптивности, безопасности и открытому исходному коду. LAMP часто выбирают для повышения производительности и снижения затрат на разработку.
MEAN стек — это совокупность JavaScript технологий для разработки сложных, быстрых и надежных приложений. Сюда входят: MongoDB, Express, Angular и Node.js. Простыми словами, MEAN — это JavaScript фреймворк, который упрощает и ускоряет разработку. Использование одного языка (JavaScript) как для разработки на стороне клиента, так и на стороне сервера улучшает взаимодействие внутри команды. Кроме того, все компоненты MEAN "говорят" на языке JSON, что обеспечивает бесперебойную передачу данных между уровнями.
Еще одним сильным преимуществом MEAN-стека можно назвать то, что все базовые технологии являются бесплатными, а их исходный код находится в открытом доступе. Если при разработке возникнет какая-либо проблема, вы всегда можете рассчитывать на поддержку сообщества.
Эта модель включает в себя MongoDB, Express, React/Redux и Node.js. Также как и MEAN, MERN полностью охватывает весь процесс разработки о клиентской до серверной части.
Учитывая используемость React в улучшении front-end части, и Node.js — в улучшении back-end части, это сочетание технологий часто используется в разработке E-Commerce проектов.
Эта модель также является ответвлением MEAN-стека, где вместо Angular используется Vue.js.
Vue.js сам по себе совмещает лучшие особенности React и Angular. Его основными преимуществами являются отличная производительность, лаконичный стиль программирования и большая система инструментов.
Все вышеперечисленные модели являются готовыми решениями для разработки средних и больших проектов.
Конечно, универсальные решения позволяют сэкономить время, но они всё же уступают специализированным, так как они являются лишь привычным подходом, и не могут быть применимы ко всем проектам.
Если говорить о действительно сложных проектах, которые по своей логике выбиваются из массы, либо о проектах с особыми требованиями к безопасности и производительности — банки, гос сектор — в таких случаях необходимо формировать индивидуальный тех стек, с помощью которого реально удовлетворить все поставленные требования.
Tech Stack популярных проектов
В качестве примера хорошо подобранного стека рассмотрим несколько известных проектов.
Spotify
Сервер: Nginx
Базы данных: Cassandra, PostgreSQL
Фреймворк на стороне сервера: Django
Языки программирования: Java, Python, Bootstrap
Airbnb
Сервер: Nginx
Базы данных: MySQL, Amazon, Redis, Hadoop
Фреймворк на стороне сервера: Rails
Языки программирования: JavaScript, Ruby
Pinterest
Сервер: Nginx
Базы данных: MySQL, Redis, Hadoop, HBase
Фреймворк на стороне сервера: Django, Javascript MVC
Языки программирования: Java, Python, GO
Shopify
Сервер: Nginx
Базы данных: MySQL, Redis, Hadoop,
Фреймворк на стороне сервера: Rails
Языки программирования: Ruby, GO
Заключение
Основа любого успешного проекта — правильно подобранный стек технологий.
Перед тем, как приступить к выбору технологий, необходимо тщательно проанализировать проект и учесть тип, требования к проекту, опыт и ресурсы своей команды, а также такие вещи, как масштабируемость, скорость и безопасность.
Не смотря на то, что существуют уже готовые решения, они не всегда могут позволить разработать проект в соответствии со всеми требованиями. Поэтому при формировании тех стека предпочтение часто отдается индивидуальному подходу.