LINUX.ORG.RU

c++ контейнеры

 


0

3

Если какая-то часть софтины сломается, то все пойдет по сегфолту и более не оживет, так? Надо ставить собаку, которая будет регулярно `ps aux` и запускаем заново если нашего процесса там нету.

Плохо, отвратительно.

Есть, например, Ерланг, где let it crash в крови. Есть Java OSGi.

Что есть такого бы для плюсов, которое бы мониторило контейнеры?

Нагуглилось вот это:

  • Apache Celix [Language: C, License: Apache License 2.0]
  • SOF [Language: C++, License: Unknown]
  • CTK [Language: C++, License: Apache License 2.0]
  • nOSGi [Language: C++, License: GPLv3]
  • Poco OSP [Language: C++, License: Commercial]

Все что ЖПЛ и проприетарщина от греха подальше сразу выбрасываем, остаются, Celix и CTK. Кто-нибудь их видел, это вообще юзабельно? (Контекст: веб-сервер, модули веб-сервера, fail proof).

Есть также экстремистское предположение, что можно заюзать прямо сам Ерланг и Жабу. Ерланг умеет генерить стабы для крестов, Жаба умеет ЖНИ. Как вам такая идея? Как ведет себя Жаба-ОСГи в случае сегфолтов в ЖНИ, само ОСГи не упадет?

★★★★☆

Если у тебя происходит непредсказуемая хрень на уровне нативного кода, то ты _ничего_ не сможешь с этим сделать в рамках одного процесса. Независимо от того, что там уровнем выше - JVM с JNI или что-то ещё.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)

Jobs, stivejobs - с++ контейнеры это мап, вектор а иже с ними.

Все что ЖПЛ и проприетарщина от греха подальше сразу выбрасываем

Jobs, такой jobs. :)

zJes ★★
()

Если какая-то часть софтины сломается, то все пойдет по сегфолту и более не оживет, так?

Да, совершенно верно. Но с другой стороны, если подумать, то эрланговский let it crash это посути взяли юниксовый sysv init (помнится когда-то в /etc/inittab были такие стоки:

2:123:respawn:/sbin/mingetty tty2
которые перезапускали mingetty каждый раз когда он останавливался) И сделали такое же, только на прологе. Так что запросто можно сделать свой „инит“, который будет ждеть SIGCHLD от списка процессов и в случае чего их перезапускать. Останеться только организовать обмен сообщениями через какой-нибудь man 2 msgrcv и делов то. Только всё будет немного медленее работать из-за sysv ipc. Ну а целом всё так же.

Есть также экстремистское предположение, что можно заюзать прямо сам Ерланг и Жабу.

Да, да, да! Только смотри шире, может ещё чего годного найдёшь.

nanoolinux ★★★★
()

persistent state и /bin/sh -c «while [ true ]; do ./myapp || exit; done;» спасут отца русской демократии. Работать после SIGSEGV можно, но это для самых отчаянных идиотов.

dib2 ★★★★★
()

Если какая-то часть софтины сломается, то все пойдет по сегфолту и более не оживет, так?

значит надо софтину чинить, чтобы не сегфолтилась

Harald ★★★★★
()
Ответ на: комментарий от nanoolinux

короче, я решил применить обратную оптимизацию и юзать в качестве гипервизора эрланг. Капец должен случаться не так часто, чтобы это стало горлышком )))) Как ты выразился, «инитом» будет нода эрланга, к которой по TCP через Erlang Distributed Protocol будут подключены другие эрланг-ноды, в которые Си будет впаян через драйвер/ниф (а в запущенных случаях - еще один уровень of indirection, каждая дочерняя нода родит одну C-Node и подключится к ней по EDP). Т.е. при краше ноды центральный гипервизор это никак не затронет. На инит будет повешана любая собака (например, та строчка из баша), таки эрланг иногда падает. Затраты - 4 мегабайта оверхеда на одну ноду (один эрланг-вм), при количестве нод в пределах 10 - считай 0-price hypervisor, очень по-сишному. Плюс мы из коробки получаем бесплатный искаробочный RPC для общения между нодами, для которого не нужно писать вообще никакого кода (все функции ноды искаропки по умолчанию доступны по рпц).

кстати, на этом можно было бы переписать запускалку демонов системд, системд сосет с причмокиванием =)

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

короче, я решил применить обратную оптимизацию и юзать в качестве гипервизора эрланг

Отлично, отлично. Неплохо бы еще и сам сервер игры написать на чем-то нескучном. На Adga, например. Вычислительную часть на Хаскеле. Клиент на Forth, конечно. Протокол обмена - SOAP и Diameter. Никакой поддержки венды, да, там же компилятор кривой.

системд сосет с причмокиванием

И это только начало!

anonymous
()
Ответ на: комментарий от stevejobs

кстати, на этом можно было бы переписать запускалку демонов системд, системд сосет с причмокиванием =)

Хаха, вот это тебя накрыло ) Но вообще правильной дорогой идёшь!

nanoolinux ★★★★
()
man daemon

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

Перед этим кончено надо не забыть

sudo apt-get install daemon

trex6 ★★★★★
()
Последнее исправление: trex6 (всего исправлений: 1)

daemontools

/thread

anonymous
()

Жаба при сегфолте натива сама рухнет всем жвмом с присвистом и osgi тут ничего не решает. Даже без натива osgi не для того.

Жаба абсолютно никаким образом тебе не поможет при сегфолтах в нативе

vertexua ★★★★★
()
Последнее исправление: vertexua (всего исправлений: 1)
Ответ на: комментарий от anonymous

Зачем писать на си гипервизор самому, если за тебя его уже написали (30 лет как пишут) и назвали «эрланг»? Конечно, печально, что не будет «настоящих» контейнеров, но их судя по треду и без эрланга не будет.

кода там почти 0, чтобы замутить это на эрланге, эрланг надо знать не далее чем хэлловорлд

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от stevejobs

И миграцию данных тоже назад? Или ты умудришься писать софт поддерживающий все версии данных одновременно?

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

это же игра, таймфрейм пока данные актуальны - небольшой. Что-то пошло не так - так и пишем, «ой, что-то пошло не так» и останавливаем матч. Игрокам неприятно? А нам неприятно поддерживать миграции, чье мнение важнее? Или вот Слоник ругается на протобуф: типа, обновим клиент не синхронно с сервером - все упадет. А да ну и черт с ним, пусть падает! С сообщением, что юзер должен пройти на сайт и обновить игровой клиент. А то и вообще автоматически автообновление запустить. Плохо? А Близзарду хорошо, довольно небедная контора. А реально долгоживущие данные типа рейтинга в общей таблице игроков - ну это одна чиселка типа инт, схема этих данных может годами не меняться.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от vertexua

ну и естественно релизы должны быть небольшие. Оптимально раз в день, и не реже чем раз в неделю. Максимальное время (ахтунг) - это три недели, если не обновлялось три недели - можно играть похоронный марш. Если релизы маленькие, вред от ошибок, вносимых релизом можно пофиксать быстро. В крайнем-крайнем случае вообще просто базу откатить на полдня назад.

stevejobs ★★★★☆
() автор топика
Последнее исправление: stevejobs (всего исправлений: 1)
Ответ на: комментарий от stevejobs

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

vertexua ★★★★★
()
Ответ на: комментарий от stevejobs

печально, что не будет «настоящих» контейнеров

Это ты так издеваешься над нами? Написали же уже, что такое С++ контейнеры

Зачем писать на си гипервизор

И тебе же скорее всего нужен не гипервизор, а резервирование? Ну там упал процесс или узел целиком, а все продолжает работать на другом процессе или узле, ага? Ну да, тут только эрланг. Кстати, между клиентом и сервером можно обмениваться не какими-то данными, а программами на лиспе. А? Какие горизонты сразу открываются

anonymous
()
Ответ на: комментарий от anonymous

Я вообще планировал жаваскрипт вместо лиспа. Какие аргументы в пользу лиспа?

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от vertexua

Только если добавленное - необязательно, иначе инстант фейл

stevejobs ★★★★☆
() автор топика
Ответ на: комментарий от stevejobs

кстати, на этом можно было бы переписать запускалку демонов системд, системд сосет с причмокиванием =)

Пока ты там решаешь что-то делать, systemd уже умеет перезапускать упавшие программы.

AlexKiriukha ★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.