@nadonado

Как организовать процесс разработки масштабируемой системы?

Здравствуйте.

Есть понимание архитектурного устройства веб-приложений, ориентированных под высокие нагрузки. Однако опыта разработки сколько-нибудь серьезных проектов не было, и хотелось узнать, каким образом организовать начальный этап этой разработки? Каков стек необходимого ПО и/или иных инструментов для этого? Под стеком не имею в виду на каком языке делать бэк, какую использовать БД и что использовать для кэширования, а интересует больше то, каким должно быть окружение процесса разработки - нужно ли с самого начала поддерживать "версионность" и если да, то как это делать? Где вообще изначально разворачивать систему - на локалке или нет? если да, то хотелось бы более подробно какие инструменты для этого нужны и как, к примеру, потом с локалки проецировать на боевой сервак без танцев с бубном? Нужно ли с самого начала задействовать несколько нод - для самого простого случая одна под базу, одна под бэк, одна под фронт или можно на одной все делать а потом как-то относительно просто масштабировать на другие ноды? В целом хочется получить рекомендации исходя из вашего опыта участия в разработке подобных систем, которые упростят жизнь.

Если вдруг имеет значение, основная связка: Python(Django) + PostgreSQL + Nginx. Если есть причины, по которым связка выбрана не самая удачная, тоже буду рад их "услышать". Цель мероприятия: получить практическое представление и опыт построения масштабируемой на всех уровнях системы, пусть и на простеньком "домашнем" примере. Спасибо
  • Вопрос задан
  • 265 просмотров
Пригласить эксперта
Ответы на вопрос 3
sim3x
@sim3x
Ваш вопрос вцелом не имеет смысла
Хайлоад появляется только на успешных проектах

Если вас просто мандраж перед термином
Возьмите свой проект, любой
Поставьте себе локально на виртуалку
И поставьте себе задачу завалить его
Потом отбейте свой ДДОС без потери легитимных пользователей

каким образом организовать начальный этап этой разработки?Каков стек необходимого ПО и/или иных инструментов для этого?
полностью зависит от ТЗ

Под стеком не имею в виду на каком языке делать бэк, какую использовать БД и что использовать для кэширования, а интересует больше то, каким должно быть окружение процесса разработки - нужно ли с самого начала поддерживать "версионность" и если да, то как это делать?
гит нужно использовать всегда
Версионность данных желательно
Как их хранить? - Делайте консистентные бекапы

Где вообще изначально разворачивать систему - на локалке или нет?
у вас джанга. При разработке используйте встроенный сервер, при деплое -nginx/uWSGI/postgreqsl

если да, то хотелось бы более подробно какие инструменты для этого нужны и как, к примеру, потом с локалки проецировать на боевой сервак без танцев с бубном?
ansible

Нужно ли с самого начала задействовать несколько нод - для самого простого случая одна под базу, одна под бэк, одна под фронт или можно на одной все делать а потом как-то относительно просто масштабировать на другие ноды?
нет. Вначале просто докупают больше мощности, потом выселяют субд на отдельный сервер, и только после такого думают как разделять бекенд.
Или у вас в задаче прямо сказано, что у вас будет строго больше 10k RPS
Ответ написан
@stratosmi
Соглашусь с sim3x
Ваш вопрос вцелом не имеет смысла


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

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

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

P.S.:
Полагаю, что в реальности речь ни о каких высоких нагрузках не идет.

Было бы интересно услышать какое именно число вы называете высокими нагрузками.
Ответ написан
index0h
@index0h
PHP, Golang. https://youtube.com/index0h
> Как организовать процесс разработки масштабируемой системы?

Чта касается организации процесса. Опишите последовательность действий каждой роли в проекте. Например дев получив задачу переволит ее в статус "в работе", далее переводит ее на тл-а с статусом "в ревью", и т.д.

По техничке: начните с стандартизации. Это кодстайл, это общее для всех дев окружение, смотрите в сторону вагранта, или докера. Это правила именования веток и коммитов. Продумайте и опишите систему диплоя без даунтайма, флоу проведения миграций и отката в случае чего.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы