При разработке любого приложения клиентам всегда важно получить результат, а разработчикам — найти самый оптимальный путь для достижения этого результата. Эффективность приложений зависит от множества факторов, важнейшим из которых является правильно подобранный стек технологий.


В этой статье мы рассмотрим, что из себя представляет тех. стек, рассмотрим факторы, которые стоит учитывать при выборе стека, а также готовые решения для проектов. Если интересно, добро пожаловать под кат.




Коротко о стеке


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


Заключение


Основа любого успешного проекта — правильно подобранный стек технологий.


Перед тем, как приступить к выбору технологий, необходимо тщательно проанализировать проект и учесть тип, требования к проекту, опыт и ресурсы своей команды, а также такие вещи, как масштабируемость, скорость и безопасность.


Не смотря на то, что существуют уже готовые решения, они не всегда могут позволить разработать проект в соответствии со всеми требованиями. Поэтому при формировании тех стека предпочтение часто отдается индивидуальному подходу.