hurtom / toloka

Створення нової Толоки
https://gitter.im/hurtom/toloka
MIT License
55 stars 20 forks source link

Анонсер - Ocelot, XBT тощо #109

Open yukoff opened 7 years ago

yukoff commented 7 years ago

Передісторія тут:

в старій базі тригер (bb_topics_au) вставляв дані в цю (bb_bt_torrents_del) таблицю:

DELIMITER $$
CREATE TRIGGER `bb_topics_au` AFTER UPDATE ON `bb_topics`
FOR EACH ROW if new.topic_type_gold != old.topic_type_gold then
insert into bb_bt_torrents_del (torrent_id,info_hash,is_del,dl_percent)
select torrent_id,info_hash,0
,case new.topic_type_gold when 1 then 0 when 2 then 50 when 3 then 75 when 4 then -1 else 100 end
from bb_bt_torrents t where t.topic_id=new.topic_id
ON DUPLICATE KEY UPDATE dl_percent=values(dl_percent);
end if
$$
DELIMITER ;

та тут: Ця логіка (таблиця + тригер) потрібна для анонсера XBTT, який більше не підтримується апстрімом. Для спрощення, ми почнемо з використання стандартного анонсера на PHP, потім можливо перейдемо або на Ocelot, або на XBTT.

Тобто, поки що дропаємо таблицю і тригер, можливо повернемося до них пізніше.

yukoff commented 7 years ago

Може бути цікаво - https://www.reddit.com/r/golang/comments/4dnlgx/notorious_a_torrenttracker_implemented_in_go/. В основному обговорюються власне Notorious та Chihaya, перший використовує Redis, другий, на відміну від Ocelot, вміє UDP та IPv6

konfuciusu commented 7 years ago

Наш XBTT також вміє IPv6 та UDP, шкода, що Ocelot досі без них.

konfuciusu commented 7 years ago

Сорси: https://github.com/hurtom/xbt

yukoff commented 7 years ago

Гм, цікаво - останнім часом оригінальний проект активний https://github.com/OlafvdSpek/xbt (одначе шлях він подолав - sourceforge -> google code -> github). Подивимось, чи можна замержити

yukoff commented 7 years ago

На вихідних помацав трохи chihaya - заради швидкості він зберігає дані щодо сідів/лічів у пам'яті (redis теж на підході), та має абстракцію middlewhare - за рахунок pre/post гаків (hooks) можна реалізувати необхідну логіку. Плюс це go (наприклад, той же docker написаний на ньому) - по швидкості десь відповідає C/C++, але синтаксис більш лаконічний, та з коробки підтримує багато сучасних технологій (він власне створювався для серверів).

Notorious теж написаний на go, працює і з redis-ом, і з БД (MySQL/PostgreSQL), не такий зрілий, як той же chihaya, але виглядає перспективно.

konfuciusu commented 7 years ago

Якщо говорити про швидкість, ось свіжа статистика XBTT: пірів: 200 тис cpu: 2% mem: 270 MB

дані зберігаються в пам'яті і періодично (120 - 150 с) скидаються одним великим запитом в базу, якмй триває до 0,5 с.

yukoff commented 7 years ago

Цікава статистика, дякую. Я, власне, раніше в тех. деталі протоколу та трекерів не дуже занурювався, а тут за нагоди вирішив і з go дещо розібратись, і з протоколом/роботою трекерів заодне 😉

Власне, щодо xbt - судячи з записів на форумі TP, самим правильним виходом буде переводити його на поточний master OlafvdSpek/xbt з нуля.