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.ru/opennews/art.shtml?num=48684

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

Оглавление

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #2, #6, #7

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

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

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

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

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

8. Сообщение от Аноним (-), 31-Май-18, 23:40   +/
> Жаль что не на go.

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #13, #14, #17

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #29

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #11 Ответы: #18, #20

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

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

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

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #14 Ответы: #24

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

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


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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #23, #27, #30, #34

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

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

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

25. Сообщение от Аноним (-), 01-Июн-18, 12:05   –1 +/
кто io->fd закрывать будет?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #23 Ответы: #31

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

27. Сообщение от 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

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

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

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

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

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

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

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

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

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

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

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

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

35. Сообщение от ананимас (?), 03-Июн-18, 20:20   +/
>shapito_stream_reset

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

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

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

37. Сообщение от Аноним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ообщить модератору
Родитель: #32


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

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




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

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