Уведомления

Группа в Telegram: @pythonsu

#1 Июль 17, 2011 15:21:21

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Brubeck фреймворк

http://brubeck.io/

Предназначен для построения масштабируемых вэб-сервисов.
В качестве работающего примера предлагают посмотреть каталогизатор ссылок Listsurf - аналог Deliciuos.

Построен на базе вэб-сервера Mongrel2, библиотеки ZeroMQ (транспорт-уровень на сокетах), Eventlet (сетевая библиотека для параллельной обработки запросов, использующая парадигму сопрограмм) и DictShield (обработка входных данных).
Сами данные можно хранить в любой базе на ваше усмотрение.

На странице http://brubeck.io/design.html авторы дают пояснения относительно выбора инструментов.

Каково ваше мнение по поводу этого фреймворка?



Офлайн

#2 Июль 17, 2011 16:19:47

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Brubeck фреймворк

Что-то я не понимаю, зачем смешивать Mongrel, ZeroMQ и eventlet. Какая польза от неблокирующих сокетов при работе с ZeroMQ (при том что фасад и так спрятан за Mongrel)?



Офлайн

#3 Июль 17, 2011 21:47:57

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Brubeck фреймворк

Андрей Светлов
Какая польза от неблокирующих сокетов при работе с ZeroMQ (при том что фасад и так спрятан за Mongrel)?
Если я правильно понял, ZeroMQ используется внутри масштабируемой системы, чтобы минимизировать время передачи данных и директив, поступающих на Mongrel.
От Mongrel данные передаются на другие узлы, которые и занимаются их непосредственной обработкой.

Что касается Eventlet, авторы объяснили это в соответствующем подразделе описания структуры проекта: http://brubeck.io/design.html
С оговоркой, что это их выбор, а мы может использовать что нам больше нравится: gevent, Twisted, Node.js, Web Machine.



Офлайн

#4 Июль 17, 2011 23:33:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Brubeck фреймворк

Да читал я их объяснение…
У нас фасад zerogw (тоже работает через ZeroMQ с питоноскими процессами).
Так вот, вообще не возникло необходимости в асинхре.
Если один синхронный обработчик не справляется — нужно завести рядом второй такой же.
Асинхронный должен быть фасад (Mongrel это умеет) — и этого достаточно.



Офлайн

#5 Июль 18, 2011 18:55:34

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Brubeck фреймворк

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



Офлайн

#6 Июль 18, 2011 19:03:16

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Brubeck фреймворк

Кажется, сводить все к «4 процесса-обработчика на 4 ядра» совсем не правильно. Заманчиво, но не сработает.
Так или иначе придется разглядывать статистику по нагрузке и потом уже решать.
Зато писать синхронный код намного легче.
Более того, проще собирать статистику в случае мелко гранулированных процессов, а не мегамонстров «всё в себе».



Офлайн

#7 Июль 18, 2011 20:50:17

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

Brubeck фреймворк

Андрей Светлов
Что-то я не понимаю, зачем смешивать Mongrel, ZeroMQ и eventlet. Какая польза от неблокирующих сокетов при работе с ZeroMQ (при том что фасад и так спрятан за Mongrel)?
Давайте не отходить от темы, эта связка оправдана, код на eventlet/gevent тоже выглядит синхронным, серверов надо меньше, обслуживать их проще и дешевле, перегрузки (и атаки) не так страшны… Профит!



Офлайн

#8 Июль 18, 2011 21:35:36

Lexander
От:
Зарегистрирован: 2008-09-19
Сообщения: 1139
Репутация: +  33  -
Профиль   Отправить e-mail  

Brubeck фреймворк

Андрей Светлов
У нас фасад zerogw (тоже работает через ZeroMQ с питоноскими процессами).
Так вот, вообще не возникло необходимости в асинхре.
Если не брать в расчет список TODO zerogw (понятно, что ему еще расти и расти), то у меня пока 1 вопрос.
Как у вас реализовано горячее (если оно есть) подключение в кластер новых нод, занимающихся непосредственной обработкой запросов?



Офлайн

#9 Июль 18, 2011 21:44:46

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Brubeck фреймворк

Запуск процесса-обработчика, которому конфигуратор указывает все необходимые адреса для ZeroMQ sockets. Больше ничего не требуется.
Обработчик имеет верхнеуровневый класс компонента. В классе создаются объекты сокетов, редиса и т.д. Всё, естественно, обёртки над низкоуровневыми I/O.
У каждой такой обертки есть метод configure. Конфигуратор вызывает configure у всех, передавая нужные параметры (каждому свои, он знает).
Различные конфигураторы запускают систему по-боевому, для разработчика (удобно свести обработчики в один процесс и общаться через unix sockets), функциональные и нагрузочные тесты.



Офлайн

#10 Июль 18, 2011 22:03:09

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Brubeck фреймворк

poltergeist, еще раз.
Мелко нарезанные компоненты, запущенные каждая в своем процессе, позволяют легко мониторить память, проц и сетевую нагрузку.
Если монолит в 500 обработчиков на гринлетах занимает 100% CPU и при этом кушает память как не в себя — трудно найти конкретного виновника.
Проблема размазана по всему коду.
Цена «падения процесса», кстати, тоже возрастает, перезапуск медленный и балансировка ресурсами сложнее.
Серверов нужно столько же — запускайте на одном физическом сервере столько компонент, сколько этот сервер вытянет.
Про перегрузки и атаки вообще не понял. Изолированный в рамках процесса проблемный компонент легче локализовать, прибить, перегрузить, сбалансировать и т.д. Если в гринлетах попадется долгоиграющий синхронный процесс, поймать его очень нелегко.

К слову, ZeroMQ отправляет пакеты в отдельном С потоке. Т.е. с точки зрения Питона абсолютно бесплатно. Как мне кажется, zeromq как раз разработан с целью уйти от потоков к процессам при создании архитектуры приложения.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version