URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 114457
[ Назад ]

Исходное сообщение
"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."

Отправлено opennews , 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.me/opennews/art.shtml?num=48684


Содержание

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

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


"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено A.Stahl , 31-Май-18 22:24 
Будешь ныть -- перейдут на Раст или ещё чего похуже.

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

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено Anonim , 02-Июн-18 12:30 
Чем плох раст? Драйвер для PG, написанный на нём, вполне хорош. Или плохо всё, что на слуху?

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено Отражение луны , 31-Май-18 22:56 
Жаль что не на go.

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

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


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

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


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

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


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

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

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


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

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


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

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


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

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

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


"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено 1 , 01-Июн-18 11:51 
По умолчанию оно работает в два потока, один воркер и один DNS-резолвер.

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

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

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

 * machinarium.
* cooperative multitasking engine.
---Вызываю дух Гринспена! Фи Фил! Вы с нами??

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено Аноним , 01-Июн-18 11:07 
100 лет не видел goto в коде  Яндекс порадовал !!!


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


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

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено Аноним , 01-Июн-18 12:05 
кто io->fd закрывать будет?

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено VladSh , 01-Июн-18 17:39 
А при rc != -1 он разве закрывается?

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено КО , 01-Июн-18 12:09 
Код слегка не эквивалентен, если goto error встречается больше 1 раза. :)

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено VladSh , 01-Июн-18 17:41 
Верно, но здесь изображён 1 раз :)

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено Аноним , 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;
}


"Яндекс опубликовал 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


"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено Ordu , 01-Июн-18 16:24 
> 100 лет не видел goto в коде  Яндекс порадовал !!!

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


"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено Аноним , 02-Июн-18 13:40 
goto error - одно из немногих применений goto, которое не осуждается. Ради интереса посмотрите код ядра Linux, например.

"Яндекс опубликовал Odyssey, многопоточный балансировщик соед..."
Отправлено anonymous , 01-Июн-18 11:33 
с code style у них большие проблемы

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

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

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


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