Страница 1 из 4 123 ... ПоследняяПоследняя
Показано с 1 по 20 из 80

Тема: project Mayuri - chat rebuild

  1. #1
    Активный участник Аватар для shr
    Регистрация
    17.05.2010
    Сообщений
    4,347

    project Mayuri - chat rebuild

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

    Предыстория

    По словам Panasonic1 чат был написан Pupsk8 за 3 дня, серверная и клиентская части представляли классический пример спагетти-кода, поэтому долгое время другие программисты не меняли его. Затем под давлением команды ск2тв и посетителей все-таки пришлось добавлять новый функционал через "костыли".

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

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

    Последние полгода где-то вы могли ощущать тормоза сайта. На данный момент мы предполагаем 2 основные причины: модуль troll в движке сайта Drupal и истории чата, в том числе страница с логом автомодерации. Все они непосредственно относятся к функционалу модерирования, поэтому когда перед нами стал выбор - тормозящий постоянно сайт или функционал для морераторов, мы отключили его, создав предпосылки к проблемам у последних.

    troll фиксит rentgen, вроде бы там наметился значительный успех. С чатом есть проблемы.

    Проблемы чата

    1. Архитектура, которую условно можно назвать auto refresh.

    Алгоритм работы чата простой: javascript-код в браузере периодически запрашивает с сервера ск2тв файл chat.txt и отображает его на сайте, при необходимости делаются запросы к серверу на выполнение операций - пост сообщения, бан, голос за бан в автомодерации и т.п.

    Чат фактически DDoS'ит сервер ск2тв, т.к.
    а) у каждого посетителя по умолчанию чат включен, при чем почти всегда в нескольких вкладках;
    б) если в режиме чтения браузер каждые 10 секунд запрашивает chat.txt и веб-сервер nginx с этим справляется, то при постинге сообщения в чат каждый раз происходит авторизация (обычно 4!!! запроса к базе), всевозможные обработки текста, вроде замены кодов смайлов на картинки, проверок на капс и мат.

    Именно поэтому если вы пишите что-то в чат, а сервер хорошо нагружен, или модератор и баните кого-то, то у вас виснет чат, а иногда и браузер (chrome).

    Если в автомодерации изначально одним из требований была производительность, то большая часть чата представляли собой костыли.

    2. Архитектура базы данных и неправильные запросы.

    Т.к. чат не был хорошо спроектирован изначально и обрастал функционалом постепенно, то многие проблемы, как это не печально, вросли в самое сердце чата - таблицы базы данных. Ошибок там очень много, например поле с id канала не int, а varchar, и содержит записи вида stream1234, 2 поля со временем чч:мм и полное, неиспользуемые поля с NULL. В таблицы чата копируются имена пользователей, при бане - имена модераторов и текст сообщения, за которое выдается бан. И т.д. Какие-то ошибки, наверное, связаны с тем, что чат создавался отдельно от движка сайта Drupal, другие объяснить сложно

    Добавьте к этому то, что все сообщений с создания чата хранятся в базе и не удаляются (на данный момент таблицы чата весят около 1,6 Гб), и странные запросы от Vodochnik, который когда-то давно через shell получил файлы, а потом все-таки запилил кое-что для чата (вроде бы то, что вы можете видеть сейчас по ссылке /chat/view.php).

    3. Отсутствие ограничений в истории чата.

    Я сделал передачу параметров через GET, чтобы люди могли делиться ссылками на историю и сразу же видеть нужные логи. Понимание, что нужно запилить капчу и ограничения на период выборки было, но это дело откладывалось в долгий ящик. И в один прекрасный день уже не помню кто выложил на форум ссылки на историю, дабы выявить топ флудеров. Сравнивал он размеры генерируемого html, который доходил до 9 и 18 мб, могу ошибаться. Каждый раз при переходе кого-то по ссылкам, делался адский запрос к базе.

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

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

    Работа над чатом

    Архитектуру auto refresh на данный момент, к сожалению, быстро заменить не получится. Aulust работает с node.js, но это скорее далекая перспектива. Поэтому, увы, остается только пытаться свести к минимуму проблемы.

    Я полностью переписал ядро серверной части чата где-то на 60%.

    Основные изменения:
    - изменена структура базы
    - авторизация работает через memcache;
    - вместо одного файла будут файлы для каждого канала, с одной стороны это решит проблему с пропаданием сообщений на менее активных каналах из-за потока на более активных, с другой стороны это должно снизить общее количество траффика, создаваемого чатом;
    - данные с сервера будут запрашиваться в JSON, html будет генерироваться на клиенте - с сервера уходит 100500^100500 замен смайлов, проверок на капс, мат, побочный эффект - приватных смайлов не будет принципиально.

    На данный момент правится автомодерация, т.к. она была создана при старой структуре базы чата.

    Сложно оценить, насколько эффективны будут эти изменения, но я надеюсь, что, по крайней мере, нагрузка на ресурсы сервера ск2тв будет снижена. Хорошо, если на порядок или пару

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

    Поддержка разработки чата

    На ЧК 16 пользователь Zwork предложил систему, стимулирующую работу программистов, стримеров и т.д.

    Задачи:

    0. Переписать чат, чтобы он оптимальнее использовал ресурсы сервера ск2тв. Об этом было рассказано выше.
    1. Сделать в http://sc2tv.ru/chat/automoderation_ban_history.php возможность поиска всех нарушений пользователя.
    2. Сделать напротив каждого бана на странице http://sc2tv.ru/chat/automoderation_ban_history.php ссылку на страницу http://sc2tv.ru/chat/history.php , где будет лог сообщений забаненого в диапазоне от 20 минут до времени бана.
    3. На странице http://sc2tv.ru/chat/history.php выделять цветом удалённые сообщения и сделать возможность поиска только удалённых сообщений.
    4. Выпилить http://sc2tv.ru/chat/view.php и сделать так, что забаненый пользователь имеет ссылку на список своих банов на странице http://sc2tv.ru/chat/automoderation_ban_history.php
    5. Сделать опциональную возможность просмотра только пользовательских банов.
    6. При выдаче ответки по ссылке http://sc2tv.ru/chat/automoderation_ban_history.php в качестве причины ответки выдавать зараннее заготовленную фразу «выдача несправедливого бана» вместо записи в причину бана причины снятия.
    7. Пофиксить подпись названия канала при наведении на ник юзера в чате
    8. Убрать у модеров кнопку ignore/unignore
    9. Сделать в чате кнопку просмотра истории сообщений юзера за последние сутки.
    10. Баг с неработающим баном.
    11. Баг с баном системы.
    12. Баг с автобаном.
    13. Для модеров добавить кнопку отключения показа сообщений всех каналов: чтобы показывались сообщения только в текущем канале, а не во всех

    Сроки и стоимость поэтапно:

    0. Самый трудоемкий этап - 4 недели, 5000 р.
    Последний раз редактировалось shr; 13.02.2014 в 22:34.

  2. #2
    Активный участник Аватар для ReD-EyeD
    Регистрация
    17.05.2010
    Сообщений
    2,942
    Отмена! Отмена! Изменение чата повлечет еще большие проблемы, чем сейчас. Пишу из будущего, инфа соточка.
    El. Psy. Congroo.

  3. #3
    Новичок
    Регистрация
    13.04.2011
    Сообщений
    17
    Вообщем-то пофиг на автомодерацию, мне бы лично хотелось видить нормально реализованную функцию игнора, которая бы позволяла навсегда игнорировать все сообщения от разного рода личностей. С таким подходом и гражданская модерация становится не особо актуальной. Каждый решает сам с кем ему общатся, а с кем нет. А если вы не можете реализовать данную функцию у себя на сервере (в силу нагрузок, или нехватки свободного пространства), то возможно стоит подумать об создании плагинов для браузеров.

  4. #4
    Активный участник Аватар для ilyuzhko
    Регистрация
    02.08.2010
    Адрес
    Троллололэнд
    Сообщений
    1,558
    Проскользнула инфа "4 запроса", вы имели ввиду 4 столбца данных или именно 4 запроса, ака SELECT?
    Интересно зачем если второй вариант.

  5. #5
    Активный участник Аватар для Satoi.aka.proFILE
    Регистрация
    17.05.2010
    Адрес
    Japan, Tokyo
    Сообщений
    4,325

  6. #6
    Активный участник Аватар для pnd
    Регистрация
    17.05.2010
    Адрес
    http://www.twitch.tv/dota2ka
    Сообщений
    894
    Цитата Сообщение от Okarin Посмотреть сообщение
    Я полностью переписал ядро серверной части чата где-то на 60%.

    Основные изменения:
    - изменена структура базы
    - авторизация работает через memcache;
    - вместо одного файла будут файлы для каждого канала, с одной стороны это решит проблему с пропаданием сообщений на менее активных каналах из-за потока на более активных, с другой стороны это должно снизить общее количество траффика, создаваемого чатом;
    - данные с сервера будут запрашиваться в JSON, html будет генерироваться на клиенте - с сервера уходит 100500^100500 замен смайлов, проверок на капс, мат, побочный эффект - приватных смайлов не будет принципиально.
    Вот почему бизнесмены с дикостью смотрят на технарей)))) Какое дело рядовому юзверу до memcache и прочего "птичьего языка" =)) В понимании юзверя есть только понятия, "красиво", "быстрее", "не виснет", "удобно" и т.п. Я не пытаюсь умалить достижения автора, просто публикация этих деталей имеет очень низкий КПД по информативности для рядового юзера)

    Канал на Twitch: TWITCH.TV
    Канал на Cybergame: CYBERGAME

  7. #7
    забанен навсегда
    Регистрация
    08.06.2010
    Сообщений
    2,976
    Цитата Сообщение от Okarin Посмотреть сообщение
    а) у каждого посетителя по умолчанию чат включен, при чем почти всегда в нескольких вкладках;
    А что мешает на всех страницах кроме главной отображать по умолчанию вкладку "анонсы"? Или не показывать блок с плеерами и чатом вообще, как это изначально было запланировано?

  8. #8
    Администратор
    Регистрация
    19.04.2010
    Сообщений
    8,409
    Спасибо, очень подробно и интересно.

  9. #9
    Активный участник Аватар для shr
    Регистрация
    17.05.2010
    Сообщений
    4,347
    bobos, будет нормальная. Это легко. Я не знаю, почему rentgen сделал через цвет
    ilyuzhko, 1 запрос - uid из сессии, которую Drupal хранит в БД, 2 - проверка на бан на сайте, 3 - на бан в чате, 4 - права, юзер или модер\админ.
    pnd, это да Надо было просто написать, что все будет лучше.
    Ramen, я только за, но боюсь, что другие будут против. Хотя бы потому, что чат создает эффект присутствия - интерактив с другими посетителями, обсуждение стрима сразу напрашивается, когда видишь что-то по нему в чатике и т.п.

  10. #10
    Активный участник Аватар для MyIE
    Регистрация
    17.05.2010
    Адрес
    Russia/Penza
    Сообщений
    519
    А сколько всего на данный момент выполняется запросов к БД на главной? (в идеале не должно превышать 10-ти)

  11. #11
    забанен навсегда
    Регистрация
    08.06.2010
    Сообщений
    2,976
    Цитата Сообщение от Okarin Посмотреть сообщение
    я только за, но боюсь, что другие будут против. Хотя бы потому, что чат создает эффект присутствия - интерактив с другими посетителями, обсуждение стрима сразу напрашивается, когда видишь что-то по нему в чатике и т.п.
    Так стримы же всё равно с главной смотрят. Зачем отображать чат при заходе в новость, например?

    Цитата Сообщение от Okarin Посмотреть сообщение
    1 запрос - uid из сессии, которую Drupal хранит в БД, 2 - проверка на бан на сайте, 3 - на бан в чате, 4 - права, юзер или модер\админ.
    Это всё можно одним запросом же сделать.

    P.S. А может стоит подождать, пока во всех браузерах появится поддержка вебсокетов, и тогда уже переделать чатик по-человечески?

  12. #12
    Активный участник Аватар для VitaL
    Регистрация
    06.09.2010
    Сообщений
    1,937
    Цитата Сообщение от Okarin Посмотреть сообщение
    Именно поэтому если вы пишите что-то в чат, а сервер хорошо нагружен, или модератор и баните кого-то, то у вас виснет чат, а иногда и браузер (chrome).
    Это происходит потому, что используется блокирующий вызов. Если заменить вызов на неблокирующий с выключением формы отправки до получения ответа от сервера, то все будешь хорошо. Проверено на себе.

    Цитата Сообщение от Okarin Посмотреть сообщение
    Добавьте к этому то, что все сообщений с создания чата хранятся в базе и не удаляются (на данный момент таблицы чата весят около 1,6 Гб)
    Зачем хранить все в рабочей базе? Сообщения х месячной давности необходимы крайне редко для текущих нужд. Куда лучше иметь архив, куда все это складируется и обращение к чему идет крайне редко и основу, с которой идет основная работа.

    Цитата Сообщение от Okarin Посмотреть сообщение
    Архитектуру auto refresh на данный момент, к сожалению, быстро заменить не получится. Aulust работает с node.js, но это скорее далекая перспектива. Поэтому, увы, остается только пытаться свести к минимуму проблемы.
    А тем временем на форуме давненько предлагали готовое решение, для использования которого нужно будет лишь немного подправить существующий php. Понять-то можно, хочется поиграться и освоить что-то новое, но гнаться надо не за новейшими технологиями, а за решением текущей проблемы.

    Цитата Сообщение от Okarin Посмотреть сообщение
    - авторизация работает через memcache;
    Очень давно пора и не только для чата.

    Цитата Сообщение от Okarin Посмотреть сообщение
    - вместо одного файла будут файлы для каждого канала, с одной стороны это решит проблему с пропаданием сообщений на менее активных каналах из-за потока на более активных, с другой стороны это должно снизить общее количество траффика, создаваемого чатом;
    То, что предлагалось сделать еще с вводом этих самых каналов, вместе с индивидуальным временем нового запроса, основанным на активности в чате.

    Цитата Сообщение от Okarin Посмотреть сообщение
    - данные с сервера будут запрашиваться в JSON, html будет генерироваться на клиенте - с сервера уходит 100500^100500 замен смайлов, проверок на капс, мат, побочный эффект - приватных смайлов не будет принципиально.
    Давно пора.

    Цитата Сообщение от bobos Посмотреть сообщение
    мне бы лично хотелось видить нормально реализованную функцию игнора
    Там 1 функцию немного исправить и еще одну для отображения списка всех заигнореных добавить. Все это делается и на стороне клиента.

    Цитата Сообщение от Okarin Посмотреть сообщение
    ilyuzhko, 1 запрос - uid из сессии, которую Drupal хранит в БД, 2 - проверка на бан на сайте, 3 - на бан в чате, 4 - права, юзер или модер\админ.
    Все эти данные надо хранить в сессии.
    Последний раз редактировалось VitaL; 31.10.2011 в 14:43.

  13. #13
    Активный участник Аватар для ilyuzhko
    Регистрация
    02.08.2010
    Адрес
    Троллололэнд
    Сообщений
    1,558
    Цитата Сообщение от Okarin Посмотреть сообщение
    bobos, будет нормальная. Это легко. Я не знаю, почему rentgen сделал через цвет
    ilyuzhko, 1 запрос - uid из сессии, которую Drupal хранит в БД, 2 - проверка на бан на сайте, 3 - на бан в чате, 4 - права, юзер или модер\админ.
    pnd, это да Надо было просто написать, что все будет лучше.
    Ramen, я только за, но боюсь, что другие будут против. Хотя бы потому, что чат создает эффект присутствия - интерактив с другими посетителями, обсуждение стрима сразу напрашивается, когда видишь что-то по нему в чатике и т.п.
    омг, т.е. чат сделали так что (left) join нельзя?

  14. #14
    Активный участник
    Регистрация
    17.05.2010
    Сообщений
    389
    Чат, который родится из проекта с анимушным названием, обречён на провал.

  15. #15
    Активный участник Аватар для shr
    Регистрация
    17.05.2010
    Сообщений
    4,347
    MyIE, для неавторизованных пользователей nginx отдает из кэша, обновляется вроде раз в 7 минут. А вот сколько запросов делает Drupal - было бы самому интересно узнать.
    Цитата Сообщение от Ramen Посмотреть сообщение
    Так стримы же всё равно с главной смотрят. Зачем отображать чат при заходе в новость, например?
    Я сам вообще считаю, что плеер и чат должны быть отдельно от новостей. Но меня не слушают...
    Цитата Сообщение от Ramen Посмотреть сообщение
    Это всё можно одним запросом же сделать.

    P.S. А может стоит подождать, пока во всех браузерах появится поддержка вебсокетов, и тогда уже переделать чатик по-человечески?
    Возможно. С другой стороны, зачем делать выборки для забаненых или тех, кто перелогинился в другом браузере? uid=0.
    Цитата Сообщение от VitaL Посмотреть сообщение
    Это происходит потому, что используется блокирующий вызов. Если заменить вызов на неблокирующий с выключением формы отправки до получения ответа от сервера, то все будешь хорошо. Проверено на себе.
    Увы, не все так просто. Как-то rentgen сделал неблокирующий и чатик колбасило пару дней.

  16. #16
    Активный участник
    Регистрация
    15.03.2011
    Сообщений
    301
    Вот он, Shr моей мечты!
    За тему спасибо, интересно почитать. Хотя я с БД пока и на вы, кое-что понятно.

  17. #17
    Активный участник Аватар для VitaL
    Регистрация
    06.09.2010
    Сообщений
    1,937
    Цитата Сообщение от Okarin Посмотреть сообщение
    Увы, не все так просто. Как-то rentgen сделал неблокирующий и чатик колбасило пару дней.
    Не знаю, что там у вас колбасило, но у меня чатик работает так уже очень давно и никаких проблем. Единственная проблема, которая была по началу - это отправка по 2 раза, что вылечилось блокировкой формы.

  18. #18
    забанен навсегда
    Регистрация
    08.06.2010
    Сообщений
    2,976
    Цитата Сообщение от Okarin Посмотреть сообщение
    Я сам вообще считаю, что плеер и чат должны быть отдельно от новостей. Но меня не слушают...
    Эээ... если мне не изменяет память, то когда сайт в этом виде только-только запилили, то пользователи жаловались, что блок со стримами мешает при заходе в новости т.к. занимает большую часть экрана. И его обещали когда-нибудь потом когда дойдут руки оставить только на главной. Вроде даже сам адольф это обещал. А теперь оказывается, что кто-то против этого?

  19. #19
    Новобранец
    Регистрация
    03.11.2010
    Сообщений
    42
    Цитата Сообщение от Okarin Посмотреть сообщение
    2 - проверка на бан на сайте
    а как можно на сайт зайти чтобы в чат писать, будучи забаненным?

  20. #20
    Активный участник Аватар для shr
    Регистрация
    17.05.2010
    Сообщений
    4,347
    Ramen, 1й раз слышу.
    rj rl, проверки вложенные Т.е. если ты забанен на сайте, то до запрос на проверку бана в чате ты не дойдешь, а если наоборот - то 2 проверки. Баны никак не связаны.

Страница 1 из 4 123 ... ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •