The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от opennews (ok), 31-Май-18, 22:21 
Компания Яндекс опубликовала исходные тексты специализированного прокси-сервера Odyssey (https://github.com/yandex/odyssey), предназначенного для поддержания пула открытых соединений к СУБД PostgreSQL и организации маршрутизации запросов. Приложение построено с использованием многопоточной архитектуры, базирующейся на движке сопрограмм machinarium (https://github.com/yandex/odyssey/tree/master/third_party/ma...), позволяющем создавать приложения для обработки событий в асинхронном режиме с использованием  традиционных методов процедурного программирования без применения callback-вызовов. Код написан (https://github.com/yandex/odyssey) на языке Си и распространяется под лицензией BSD.


Основные возможности Odyssey:

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

-  Отслеживается состояния транзакций и  выполняется их автоматическая отмена (Rollback) в случае преждевременного отсоединения клиента;

-  Запоминается последний сервер, к которому был подключен клиент, для возобновления подключения к тому же серверу в случае повторного соединения;

-  Возможность определения пулов соединений с учётом привязки к пользователю и БД. Каждый пул может иметь раздельную аутентификацию, режим работы и ограничения;


-  Полная поддержка SSL/TLS и типовых методов аутентификации клиента и сервера. Возможность выборочной блокировки пользователей для разных пулов;

-  Ведение лога с идентификацией соединений клиента и сервера через UUID, который позволяет связать различные события в логе и сообщения об ошибках с определённым клиентом.


URL: https://github.com/yandex/odyssey
Новость: https://www.opennet.dev/opennews/art.shtml?num=48684

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по времени | RSS]


1. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –8 +/
Сообщение от Xasd (ok), 31-Май-18, 22:21 
в кои-то веке Яндекс решил написать что-то на C а не на наколеночном (как он обычно любит) C++ ..

что произошло вдруг ?? :-)

Ответить | Правка | Наверх | Cообщить модератору

2. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +6 +/
Сообщение от A.Stahl (ok), 31-Май-18, 22:24 
Будешь ныть -- перейдут на Раст или ещё чего похуже.
Ответить | Правка | Наверх | Cообщить модератору

9. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –1 +/
Сообщение от Аноним (-), 01-Июн-18, 00:08 
Пусть переходят, давно пора C++17 кизяк
Ответить | Правка | Наверх | Cообщить модератору

33. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от Anonim (??), 02-Июн-18, 12:30 
Чем плох раст? Драйвер для PG, написанный на нём, вполне хорош. Или плохо всё, что на слуху?
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

6. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –6 +/
Сообщение от Отражение луны (ok), 31-Май-18, 22:56 
Жаль что не на go.
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

8. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от Аноним (-), 31-Май-18, 23:40 
> Жаль что не на go.

В go медленный TLS. Наверное, из-за этого.

Ответить | Правка | Наверх | Cообщить модератору

7. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +9 +/
Сообщение от XoRe (ok), 31-Май-18, 23:29 
> в кои-то веке Яндекс решил написать что-то на C а не на
> наколеночном (как он обычно любит) C++ ..

Это просто новый уровень предъяв.

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

11. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +2 +/
Сообщение от хрю (?), 01-Июн-18, 07:12 
>позволяющем создавать приложения для обработки событий в асинхронном режиме с использованием традиционных методов процедурного программирования без применения callback-вызовов.

надо же, кто-то ещё умеет программировать...

Ответить | Правка | Наверх | Cообщить модератору

13. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –4 +/
Сообщение от ыы (?), 01-Июн-18, 07:40 
>>позволяющем создавать приложения для обработки событий в асинхронном режиме с использованием традиционных методов процедурного программирования без применения callback-вызовов.
> надо же, кто-то ещё умеет программировать...

а в чем проблема с callback-вызовами?

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

Ответить | Правка | Наверх | Cообщить модератору

29. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +2 +/
Сообщение от Orduemail (ok), 01-Июн-18, 16:15 
Коллбеки размазывают логику происходящего по многим функциям. Если язык позволяет создавать замыкания под коллбеки, то результат ещё может быть пристойным, а может и нет. Помимо этого лезут проблемы с асинхронностью этих самых коллбеков, и потенциальными проблемами синхронизации. Ещё очень интересно делать сложные атомарные операции, с откатом их назад, если что-то пошло не так. Логику происходящего по коду разобрать становится вообще никак -- использовать размотку стека для откатов не удастся, соответственно, ... ну ты понел

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

Ответить | Правка | Наверх | Cообщить модератору

14. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от Аноним (-), 01-Июн-18, 07:40 
>>позволяющем создавать приложения для обработки событий в асинхронном режиме с использованием традиционных методов процедурного программирования без применения callback-вызовов.
> надо же, кто-то ещё умеет программировать...

а казалось бы наоборот. 1 thread per connection per task - это не самая лучшая парадигма.
Тред имеет привычку блокироваться на операциях - и когда можно было его отложить и заняться полезным делом, он будет продолжать жрать ресурсы системы.

Ответить | Правка | К родителю #11 | Наверх | Cообщить модератору

18. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –1 +/
Сообщение от Andrey Mitrofanov (?), 01-Июн-18, 09:48 
>>>позволяющем создавать приложения для обработки событий в асинхронном режиме с использованием традиционных методов процедурного программирования без применения callback-вызовов.
>> надо же, кто-то ещё умеет программировать...
> а казалось бы наоборот. 1 thread per connection per task - это
> не самая лучшая парадигма.

Они сделали не nginx, а apache (надеюсь, пока не "2.4"...) для Pg.

Они круты как Skype!

Ответить | Правка | Наверх | Cообщить модератору

24. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от 1 (??), 01-Июн-18, 11:51 
По умолчанию оно работает в два потока, один воркер и один DNS-резолвер.
Ответить | Правка | Наверх | Cообщить модератору

20. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от КО (?), 01-Июн-18, 10:15 
Для программки вся деятельность которой сводится к трем шагам - бери больше, кидай дальше, отдыхай пока летит. И никакой другой деятельностью не занимающейся. Самопальные подходы к пробуждению ото сна (читай "асинхронное программирование") вестимо выиграют у операционной системы. Ее то писали не такие любители смузи. :)
Ответить | Правка | К родителю #14 | Наверх | Cообщить модератору

17. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +1 +/
Сообщение от Andrey Mitrofanov (?), 01-Июн-18, 09:45 
>>позволяющем создавать приложения для обработки событий в асинхронном режиме с использованием традиционных методов процедурного программирования без применения callback-вызовов.
> надо же, кто-то ещё умеет программировать...

Ну-да, ну-да...

 * machinarium.
* cooperative multitasking engine.
---Вызываю дух Гринспена! Фи Фил! Вы с нами??
Ответить | Правка | К родителю #11 | Наверх | Cообщить модератору

21. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –1 +/
Сообщение от Анонимemail (21), 01-Июн-18, 11:07 
100 лет не видел goto в коде  Яндекс порадовал !!!


rc = machine_io_attach(obj);
    if (rc == -1)
        goto error;
    return 0;
error:
if (io->fd != -1) {

Ответить | Правка | Наверх | Cообщить модератору

23. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –2 +/
Сообщение от VladSh (?), 01-Июн-18, 11:37 
rc = machine_io_attach(obj);
if (rc != -1) return 0;
if (io->fd != -1) {
Ответить | Правка | Наверх | Cообщить модератору

25. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –1 +/
Сообщение от Аноним (-), 01-Июн-18, 12:05 
кто io->fd закрывать будет?
Ответить | Правка | Наверх | Cообщить модератору

31. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от VladSh (?), 01-Июн-18, 17:39 
А при rc != -1 он разве закрывается?
Ответить | Правка | Наверх | Cообщить модератору

26. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от КО (?), 01-Июн-18, 12:09 
Код слегка не эквивалентен, если goto error встречается больше 1 раза. :)
Ответить | Правка | К родителю #23 | Наверх | Cообщить модератору

32. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от VladSh (?), 01-Июн-18, 17:41 
Верно, но здесь изображён 1 раз :)
Ответить | Правка | Наверх | Cообщить модератору

37. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от Анонимemail (21), 04-Июн-18, 15:48 
/*
* machinarium.
*
* cooperative multitasking engine.
*/

#include <machinarium.h>
#include <machinarium_private.h>

MACHINE_API int
machine_bind(machine_io_t *obj, struct sockaddr *sa)
{
    mm_io_t *io = mm_cast(mm_io_t*, obj);
    mm_errno_set(0);
    if (io->connected) {
        mm_errno_set(EINPROGRESS);
        return -1;
    }
    int rc;
    rc = mm_io_socket(io, sa);
    if (rc == -1)
        goto error;
    rc = mm_socket_set_reuseaddr(io->fd, 1);
    if (rc == -1) {
        mm_errno_set(errno);
        goto error;
    }
    if (sa->sa_family == AF_INET6) {
        rc = mm_socket_set_ipv6only(io->fd, 1);
        if (rc == -1) {
            mm_errno_set(errno);
            goto error;
        }
    }
    rc = mm_socket_bind(io->fd, sa);
    if (rc == -1) {
        mm_errno_set(errno);
        goto error;
    }
    rc = machine_io_attach(obj);
    if (rc == -1)
        goto error;
    return 0;
error:
    if (io->fd != -1) {
        close(io->fd);
        io->fd = -1;
    }
    io->handle.fd = -1;
    return -1;
}

Ответить | Правка | Наверх | Cообщить модератору

27. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от Andrey Mitrofanov (?), 01-Июн-18, 13:42 
> 100 лет не видел goto в коде  Яндекс порадовал !!!

Вы невнимательно следите за Инновациями Микрософт.


09.04.2018 18:43  Microsoft открыл код классического фейлового [,,,]

27.03.2018 11:41  Microsoft открыл код для адаптации [,,,]

15.05.2017 09:51  Первый выпуск компилятора Perl 5 в JVM от проекта Perlito

22.02.2017 21:14  Уязвимость в ядре Linux, позволяющая [,,,]

05.03.2014 11:34  Критическая уязвимость в GnuTLS, существенно влияющая на безопасность дистрибутивов Linux

Ответить | Правка | К родителю #21 | Наверх | Cообщить модератору

30. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +1 +/
Сообщение от Orduemail (ok), 01-Июн-18, 16:24 
> 100 лет не видел goto в коде  Яндекс порадовал !!!

Кто-то 100 лет не заглядывал в сорцы ядра? Если тебе интересен C, то я очень рекомендую заглядывать туда, хоть иногда. И хоть чего-нибудь пилить в свободное время, работающее в ядерном контексте. Хотя бы развлечения ради. Развивает.

Ответить | Правка | К родителю #21 | Наверх | Cообщить модератору

34. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от Аноним (-), 02-Июн-18, 13:40 
goto error - одно из немногих применений goto, которое не осуждается. Ради интереса посмотрите код ядра Linux, например.
Ответить | Правка | К родителю #21 | Наверх | Cообщить модератору

22. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  –2 +/
Сообщение от anonymous (??), 01-Июн-18, 11:33 
с code style у них большие проблемы
Ответить | Правка | Наверх | Cообщить модератору

28. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +1 +/
Сообщение от Stop (?), 01-Июн-18, 15:11 
В отличии от многих контор, единого кодестайла у просто Яндекса нет. А если учесть, что куча сильных ребят уходит что бы уехать (тот же Гугл, например), то это и не удивительно: новая волна несет новый мусор в головах.
Ответить | Правка | Наверх | Cообщить модератору

35. "Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."  +/
Сообщение от ананимас (?), 03-Июн-18, 20:20 
>shapito_stream_reset

как корабль назовешь

Ответить | Правка | Наверх | Cообщить модератору

36. "путаница в  терминах  'возможности' и 'детали реализации'"  +/
Сообщение от тот самый парень (?), 04-Июн-18, 09:38 
Под видом возможностей тут подсунута возможность использовать софт, который написан с использованием таких-то технологий. Это или hype driven development в чистом виде, или же просто несоответствие техписов/аналитиков/тестеров команды нагрузочного тестирования занимаемым. Следуя волне хайп-драйвен-чекин надо проверить всех причастных на синдром самозванца.
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру