Etherpad-lite: Etherpad без сохранения состояния

Созданный на 8 апр. 2020  ·  12Комментарии  ·  Источник: ether/etherpad-lite

Мы представили Etherpad для использования в качестве части более крупного решения, когда оказалось, что он не имеет состояния. Мы строим решение на облачных ресурсах и хотели бы по-настоящему использовать доступные услуги, предоставляя нам высокую доступность (HA). В настоящее время ищутся обходные пути с точки зрения нашего решения, но остается вопрос - есть ли какая-либо инициатива по отмене состояния Etherpad?

Похоже, вокруг этой темы уже поднималось несколько вопросов. Среди возможных других я мог найти следующие:

Question wontfix

Самый полезный комментарий

На данный момент нет инициативы по отмене состояния Etherpad, мы поощряем и приглашаем вас возглавить ее, потому что это стоит того.

Вместо того, чтобы идти без сохранения состояния, мы оптимизировали производительность в потоке, это означало, что наши результаты нагрузочного тестирования при моделировании (см. Инструменты, которые мы предоставляем) довольно впечатляют. Это удовлетворяет почти всех наших клиентов.

Другие наши крупные клиенты (M планшетов, 5 тысяч пользователей в день) имеют систему сегментирования, в которой планшеты с определенным URL-адресом передаются на заданное оборудование. Добавляет на сервер 1, oz на сервер 2 и любые другие случайные символы #! '; и т. д. на сервер 3. У каждого сервера тоже есть свой бэкэнд. Это не оптимально, потому что, как вы сказали, проблема HA ... :)

Дело в том, что мы хотим сохранить все операции оперативного преобразования для данной площадки в данном потоке, чтобы мы могли оптимизировать и поддерживать низкий уровень трафика. Нет смысла иметь 10 серверов, обрабатывающих OT для 5 пользователей, это приведет к задержкам и хрупкости. Итак, в конечном итоге я придерживаюсь мнения, что даже если вы перейдете без гражданства, вы захотите сохранить содержимое данного блокнота в одном экземпляре.

Тем не менее, звучит так, будто вы знаете больше о том, чтобы стать безгражданством / HA, больше, чем я, и прошло уже 5+ лет с тех пор, как я изучал это, поэтому я все слышу, чтобы знать, можем ли мы вообще помочь, и я был бы очень рад это увидеть. реализовано 👍

Все 12 Комментарий

На данный момент нет инициативы по отмене состояния Etherpad, мы поощряем и приглашаем вас возглавить ее, потому что это стоит того.

Вместо того, чтобы идти без сохранения состояния, мы оптимизировали производительность в потоке, это означало, что наши результаты нагрузочного тестирования при моделировании (см. Инструменты, которые мы предоставляем) довольно впечатляют. Это удовлетворяет почти всех наших клиентов.

Другие наши крупные клиенты (M планшетов, 5 тысяч пользователей в день) имеют систему сегментирования, в которой планшеты с определенным URL-адресом передаются на заданное оборудование. Добавляет на сервер 1, oz на сервер 2 и любые другие случайные символы #! '; и т. д. на сервер 3. У каждого сервера тоже есть свой бэкэнд. Это не оптимально, потому что, как вы сказали, проблема HA ... :)

Дело в том, что мы хотим сохранить все операции оперативного преобразования для данной площадки в данном потоке, чтобы мы могли оптимизировать и поддерживать низкий уровень трафика. Нет смысла иметь 10 серверов, обрабатывающих OT для 5 пользователей, это приведет к задержкам и хрупкости. Итак, в конечном итоге я придерживаюсь мнения, что даже если вы перейдете без гражданства, вы захотите сохранить содержимое данного блокнота в одном экземпляре.

Тем не менее, звучит так, будто вы знаете больше о том, чтобы стать безгражданством / HA, больше, чем я, и прошло уже 5+ лет с тех пор, как я изучал это, поэтому я все слышу, чтобы знать, можем ли мы вообще помочь, и я был бы очень рад это увидеть. реализовано 👍

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

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

Огромное спасибо; держите нас в курсе и не стесняйтесь снимать любые антипатии / причуды / отчеты об ошибках, и мы постараемся принять меры по их ASPAP.

Привет: волна:

Мы (OpenFUN) разработали образ Docker без сохранения состояния для etherpad-lite : https://github.com/openfun/etherpad-docker

Мы запускаем этот образ через k8s (OKD), и он отлично работает в производственной среде (см. Https://pad.education), но мы страдаем от проблем с веб-сокетами при попытке масштабировать наши поды. Мы разработали уровень абстракции на основе Redis для решения этой проблемы, но, к сожалению, не все события, похоже, переходят на этот уровень абстракции ... Вы можете проверить наш POC здесь: https://github.com/openfun/etherpad- докер / тянуть / 8

@ottomattas Я не уверен, что вы пытаетесь запустить свой экземпляр в контексте k8s или даже в контейнере Docker, но мы можем объединить усилия, если это так: молитесь:

@JohnMcLear, любой совет по использованию адаптера socket.io-redis будет большим подспорьем. :молиться:

Pad.education не загружает планшеты?

Рад помочь, если смогу, как выглядит ваше расписание?

Pad.education не загружает планшеты?

Нет, это погрузочные площадки! Но у нас работает только один экземпляр etherpad, и мы не можем масштабировать «по-кубернетски» (т.е. добавляя дополнительные реплики приложения и маршрутизируя запросы с помощью алгоритма циклического перебора).

Сначала я думал, что это произошло только из-за веб-сокетов, и поэтому мы попытались использовать адаптер socket.io-redis чтобы экземпляр etherpad не был привязан к клиенту. Но это не работает, поскольку некоторые события не отправляются на этот адаптер Redis, и, FWIU [1], мы столкнемся с другими проблемами, связанными с состоянием приложения. Я прав?

Рад помочь, если смогу, как выглядит ваше расписание?

На данный момент масштабирование этого нового сервиса для нас не критично (все работает нормально), но мы планируем будущее. Мне интересно, что нужно сделать, чтобы приложение не имело состояния? Адаптер redis socket.io зашел в тупик?

Если создание etherpad без сохранения состояния не является приоритетом или требует слишком больших изменений в основном приложении, то у нас есть другие альтернативные планы, близкие к подходу сегментирования, который вы объяснили ранее [2]. Я собираю отзывы, чтобы выбрать более эффективный / прагматичный подход к масштабированию приложения.

[1] https://github.com/ether/etherpad-lite/issues/3680#issuecomment -566809617
[2] https://github.com/ether/etherpad-lite/issues/3848#issuecomment -610942249

@jmaupetit , сейчас самый прагматичный способ горизонтального масштабирования Etherpad - это сегментирование имен пэдов.

Меня тоже очень интересует такая функция, нам также нужны HA и балансировка нагрузки.
Я только новичок в etherpad, но в ожидании я развернул его на 2 серверах и распределяю доступ в зависимости от типа моих пользователей, у нас может быть около 5000 пользователей одновременно, а может и больше. 2 сервера etherpads запрашивают одну и ту же базу данных, и для аварийного переключения я разместил второй сервер в качестве резервного.

@JohnMcLear

Другие наши крупные клиенты (M планшетов, 5 тысяч пользователей в день) имеют систему сегментирования, в которой планшеты с определенным URL-адресом передаются на заданное оборудование. Добавляет на сервер 1, oz на сервер 2 и любые другие случайные символы #! '; и т. д. на сервер 3. У каждого сервера тоже есть свой бэкэнд. Это не оптимально, потому что, как вы сказали, проблема HA ... :)

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

@jgribonvald Полный отказ от ответственности здесь: я делаю эту работу для коммерческих клиентов, так что это действительно та работа, которую я выполняю ежедневно. Но в духе Open Source и поддержки нашего сообщества здесь VCL Varnish, которым вы можете манипулировать, чтобы работать.

Шардинг

    vcl 4.0;

    backend static {
        .host = "staticcontent.etherpad.com";
        .port = "9001";
        .connect_timeout = 6000s;
        .first_byte_timeout = 6000s;
        .between_bytes_timeout = 6000s;
    }

    backend ep1 {
        .host = "192.168.0.1";
        .port = "9001";
        .connect_timeout = 6000s;
        .first_byte_timeout = 6000s;
        .between_bytes_timeout = 6000s;
    }

    backend ep2 {
        .host = "192.168.0.2";
        .port = "9001";
        .connect_timeout = 6000s;
        .first_byte_timeout = 6000s;
        .between_bytes_timeout = 6000s;
    }

    sub vcl_recv {
           if (req.url == "^/static/*$") {
              set req.backend_hint = static;
           } else {
        set req.backend_hint = vm1;
        }

   .. logic for socket header stickiness [ secret sauce I can't copy/pasta (see below for understanding)]

    sub vcl_recv {
           if (req.url == "^/[a-g]/*$") {
              set req.backend_hint = ep1;
           }

    sub vcl_recv {
           if (req.url == "^/[h-z]/*$") {
              set req.backend_hint = ep2;
           }

Вероятно, вы захотите установить перезапись на основе req.http.header которая должна включать padId для подключения к сокету. URI всегда равен /socket.io/ . Вам нужно будет расширить etherpad, чтобы включить в заголовки padId . Это очень легко сделать с помощью плагина.

Прилипание

Используя любую систему «ключ-значение», вы можете легко реализовать систему маршрутизации на уровне площадок. В основном ваша конечная точка перезаписи будет иметь общее (в идеале быстрый доступ к памяти) пространство Server <> padId [отношение 1 к 1], и каждая конечная точка маршрутизации знает об этой взаимосвязи, поэтому направляет пользователя на сервер на основе padId. Так работают другие большие платформы, потому что, как я уже сказал ранее, вы действительно не хотите, чтобы соединение с одним сокетом было распределено. Это все еще сегментирование, но оно динамическое, основанное на критериях, которые вы оговариваете (географическая близость IE к создателю пэдов), а, скорее всего, это то, что делает Google.

Как это сделать

Причина, по которой мы не делаем этого как разработчики Etherpad, заключается в том, что количество развертываний варьируется (огромное количество), поэтому мы доверяем нашим друзьям-администраторам DevOps / sys развернуть текущее популярное решение для достижения необходимого им масштаба. Поэтому, хотя этот вопрос можно только приветствовать, я просто хочу рассказать о причинах, по которым он не встроен в Etherpad.

@JohnMcLear Большое спасибо, я

Эта проблема была автоматически помечена как устаревшая, поскольку в последнее время не было активности. Он будет закрыт, если больше не будет активности. Спасибо за ваш вклад.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги