Свежие комментарии

Title Comment
Я вижу два варианта а) accept делают все (ну, точнее, в sel

Я вижу два варианта
а) accept делают все (ну, точнее, в select или там в kqueue загоняем все сокеты). Проблема на самом деле минимальная - лишние wake up (по числу процессов) по приходу соединения.

б) если мы успеваем проверять семафор быстрее, чем заполняется backlog (нет долгих операций в FSM), то mutex отвечает не за accept, а за помещение хэндла в select/whatever

:) для этой задачи я подходящего варианта не нахожу. Класси

:) для этой задачи я подходящего варианта не нахожу.

Классический префорк как в апаче где один процесс на одного клиента отлично работает с SYSV семафорами - делаем сокет, слушаем, делаем semget с одним семафором в наборе, увеличиваем его на один, расфоркиваемся.. после этого дочерние пытаются уменьшить значение семафора на 1, потом accept, увеличиваем обратно на 1...в итоге только один процесс разблокируется и получает клиента.. все как в книжках.

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

Боюсь что не понятно получается.

<i>Давайте с точки зрения бизнеса на все это посмотрим.</i>

Давайте с точки зрения бизнеса на все это посмотрим.

Давай. Тем более, что я им и занимаюсь :)

опенсорс с неясным количеством ошибок - это риски. Даже при очень большой разборчивости - ненулевые

Это не только риски поимать дыру, про которую будет знать весь мир, кроме нас :), это еще и некоторая сумма на развитие и сопровождение, если продукт не устраивает нас хоть чем-то. Плюс, возможно, какие-то лицензионные проблемы (привет, GPL).

* изобретение всех велосипедов с нуля - это и риски и альтернативные издержки.

Это ДРУГИЕ риски. Обеспечение безопасности черного ящика, экземпляр которого не доступен хакерам для изучения, намного проще, чем общеизвестного продукта.

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

Компания рискует на рынке труда (найти внятных сотрудников вообще сложно, а с фильтром по lua - просто труба).

Нет проблемы организовать обучение внутрифирменным инструментам (если найдены вменяемые работники). "Готовые специалисты по PHP/perl" актуальны, когда мы берем на работу невменяемых, не способных к обучению. Но тут свои проблемы - невменяемые часто работают очень плохо. Их хорошо использовать на аутсорсе, продавая их труд закачику за затраты времени (чем индусы успешно занимаются), и методы организации процесса при использовании "индусов" общеизвестны. Но при внутренней разработке, при которой за все платишь ты из своего кармана, а клиент платит за продукт независимо от затрат человекочасов, с это не так выгодно :)

Кроме того, если есть сотрудники, которые одной левой пишут http-cервер, то не лучше ли их занять чем-то полезным, по профилю компании.

А что больше "по профилю" для условного "яндекса", чем собственный сервер приложений и стек? Да и о чем базар? HTTP-сервер с кип-аливом, пайплайном и чанкед энкодингом - это примерно 130К исходников, включая до кучи простенького HTTP-клиента и проксю для фронтенда, использование openSSL и интерфейс со скриптом. Плюс еще килобайт 100 - инструменты (универсальный сокет-менеджер с шарингом тредов, кеш и т.д.).

Тут просто нет темы для базара - задача-то совсем небольшая.

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

Ну у меня всяко захватили :) Но не программисты - архитекторы. 50% "гаек" делаем сами. "универсальная платформа всего" имеется и продается.

Естественно, если компания этим программистам и принадлежит, то развлекаться за собственные деньги - есть их неотъемлемое право.

Ага. Что характерно - развлекаемся мы "гайками" намного меньше, чем задачами непосредственно под клиента, и намного меньше, чем в случае перетачивания готовых гаек :) Как ты заметил, у меня много свободного времени и на "поездить" и на "попи####ть в сети", и с панорамами повозиться. Но вот чужие гайки перетачивать уже лень в порядке хобби, а раньше постоянно возился с чем-то, типа твоего libRAW.

К операционной системе применимы те же принципы, что и ко вс

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

Поэтому, в соответствии с этим принципом, она обычно чужая - не переписывается за разумное время под наши требования :)

Но для проекта большого масштаба я бы рассмотрел вариант создания своего дистрибутива линакса. Собственно говоря, гугль вроде бы тем путем и пошел.

Я не имею ничего против lua - ничего про него не знаю и не с

Я не имею ничего против lua - ничего про него не знаю и не собираюсь пока.

Но если ваш HR попробует найти lua-программиста, то будут проблемы.

К сожалению у нас дела обстоят несколько по иному, к мнению

К сожалению у нас дела обстоят несколько по иному, к мнению программистов и админов никто не прислушивается. С бизнесом такая политика никак не связана, просто мы в этом ничего не понимаем.

Никто тут свои операционки, web-сервера и мега-фреймворки не пишет, все занимаются своим делом, я пытаюсь сказать другое - если есть возможность (время и скилы) лучше не рисковать и написать самому (понятное дело openssl я не буду переписывать).

А что Вы имеете против lua? Это отличный клей.. маленький, быстрый, расширяемый, много на чем собирается с сями вяжется на ура. Конечно Java Script мне ближе по синтаксису, но пока, на мой взгляд, идеальна луа (питон совсем не перевариваю). И не надо изобретать свой скриптинг :)

Приходилось с сями вязать Perl, Java, Lua (питон сам не пробовал, но показывали) - интереснее всего показалась луа.

Правда после выхода v8 может многое измениться.

Почему не получается? Можно atomic get/set на mmap-ed памят

Почему не получается?
Можно atomic get/set на mmap-ed памяти, как nginx делает.
Можно заблокироваться на файловом дескрипторе, как apache делает.
Есть SYSV семафоры.

Вообще, вариантов синхронизации в современных ос скока хочешь.

Если сервер многопоточный, то тут вопросов нет, а я говорю о

Если сервер многопоточный, то тут вопросов нет, а я говорю о многопроцессном.
Тут семафоры никак не получается приладить. В серверах на основе FSM
все вертится вокруг мультиплексинга ввода/вывода кучи файловых описателей (серверные сокеты, клиентские сокеты, пайпы с сигналами и т.д.). Т.е. сердце всего это системный вызов типа select, poll и epoll_wait, а там к сожалению нет лишнего параметра на тему семафоров. Все что мы можем совместить - операции ввода/вывода и сигналы. Семафоры остаются в стороне, придется придумывать что-то с управляющим процессом, но ничего внятного в голову не приходит. Ну либо тупо ждем события на сокете из нескольких процессов и надеемся что никто не догадается поставить сотню воркеров и выставить это чудо в интернет.

А вот вариант с SCM_RIGHTS довольно интересен, один из сценариев - несколько процессов выстраиваем в цепочку. Пока клиентов мало все работает как с одним процессом, если места не хватает можно пульнуть сокет следующему процессу (и так по цепочке).
Тут я вижу следующие недостатки - падает основной процесс и привет, не грамотно юзаем проц. Получается мы тупо повышаем максимальное количество клиентов. В общем смысла не очень много.

Интереснее вариант со звездой, основной процесс расфоркивается, потом ждет соединений и раскидывает их по очереди между потомками (ну и себя не забывает). Дальше все работает как FSM.
Получаем тупейшую схему как и на потоках только с изоляцией. Без проблем можно что-то придумать что бы при падении основного процесса его обязанности переходили к другому.

Насколько все это будет эффективным надо пробовать... может кто-то что-то подобное делал?

Давайте с точки зрения бизнеса на все это посмотрим. * опен

Давайте с точки зрения бизнеса на все это посмотрим.
* опенсорс с неясным количеством ошибок - это риски. Даже при очень большой разборчивости - ненулевые (libz, libpng, да тот же apache chunked - тому примеры)
* изобретение всех велосипедов с нуля - это и риски и альтернативные издержки. Компания рискует на рынке труда (найти внятных сотрудников вообще сложно, а с фильтром по lua - просто труба). Кроме того, если есть сотрудники, которые одной левой пишут http-cервер, то не лучше ли их занять чем-то полезным, по профилю компании.

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

Естественно, если компания этим программистам и принадлежит, то развлекаться за собственные деньги - есть их неотъемлемое право.

Нет, операционная система не своя, там дыры пускай латают сп

Нет, операционная система не своя, там дыры пускай латают специально обученные люди. А вот риски поиметь гемороя на прикладном уровне из-за того, что я в своей программе использую сомнительный чужой код на порядок выше (да и логика может быть посложнее). Ключевое слово - "своей", за свое ПО несу ответственность только я, за операционную систему те кто просят за нее деньги или те, кто принял решение заюзать на продакшене open source :)

Я сторонник open source но не будем кривить душой, множество проектов ведут криворукие программеры или куча народа по очереди исправляет друг за другом непонятные места и случайно искажают оригинальные идеи автора.

Я ни на что не претендую, поэтому ничего и не выкладываю.

В общем поддерживаю опасения Анатолия.

Ну есть такая штука. Я ее лет 10 назад обнаружил, потестиров

Ну есть такая штука. Я ее лет 10 назад обнаружил, потестировал и никогда более не использовал, ибо не могу придумать разумного применения.

А параллельные процессы на одном сокете - обычно делают висение на mutex, отчего accept происходит только в одном из процессов. Так сделано в apache, думаю что у Игоря - аналогично.

Антон, а операционная система тоже своя?

Антон, а операционная система тоже своя?

Но что-то я не нагуглил готовых реализаций

Но что-то я не нагуглил готовых реализаций

в SSE4 есть много оптимизаций для CRC и криптографии, возмож

в SSE4 есть много оптимизаций для CRC и криптографии, возможно результаты CPU резко возрастут.

Во, а GPU-версия фигачит 410 на 8800GTX плюс 218-219 на CPU,

Во, а GPU-версия фигачит 410 на 8800GTX плюс 218-219 на CPU, аффтар молодец, все что нашел - зайдействует.

Машина тормозит - просто труба!

Не, это на двух ядрах. У меня на 4 ядрах @3Ghz - 219 мегакл

Не, это на двух ядрах.

У меня на 4 ядрах @3Ghz - 219 мегаключей в секунду.

Я правильно понимаю, что CPU с SSE2 - 110 миллионов ключей.

Я правильно понимаю, что CPU с SSE2 - 110 миллионов ключей. 4х ядерный процессор должен перебирать 440 миллионов в секунду?

Хотел спросить, что вы думаете по поводу кашерности передачи

Хотел спросить, что вы думаете по поводу кашерности передачи файловых описателей между процессами с использованием локальных сокетов, sendmsg и SCM_RIGHTS? Недавно об этом узнал и немного удивился, на линуксе проверил, все ОК, на бсде тоже должно работать. Такое есть в винде в winsock2, юзал когда писал мультипроцессный сервер под нее.

В принципе можно обойтись без этого хака, но это единственноый способ, который я смог найти, для раелизации FSM на наскольких процессах без гонок. Интересно как поступил Сысоев в nginx, у него же можно поднять несколько воркеров. Не думаю что у него они все тупо ждут соединения на сокете а потом кто успел.

Тоже стараюсь юзать поменьше чужого кода т.к. когда проимеют

Тоже стараюсь юзать поменьше чужого кода т.к. когда проимеются чужие бабки аргумент - "это либа Васи Пупкина" не прокатит :) Хочется отвечать только за себя и иметь возможность оперативно что-то поменять.

Я тоже люблю все сам, когда-то COM-объекты микрософтовские р

Я тоже люблю все сам, когда-то COM-объекты микрософтовские руками стряпал (свою либу писал).. дошел до автоматизации, но дальше уже не рискнул, смыла городить такое самому нет. Но для самообразования очень полезно. Боюсь лет через 10 никто уже и знать не будет как оно там работает.

Народ приходит на собеседование... за последний год только 2 человека внятно смогли рассказать как работает sizeof, что такое vtable, какие бывают сегменты памяти и назвали несколько подходов к построению параллельных серверов. Правда и они были зациклины на pthreads... как пользоваться разделяемой памятью и что там за semset`ы такие не в теме. Один ушел в Яндекс, второй в Суп... оба мимо.

В принципе выставить собственный web-сервер наружу я бы рискнул, но пока нет смысла, по крайней мере пока поток не начнем на 7-м уровне делить между апачем и самопиской в зависимости от типа запросов (лень из-за веба cgi, ssl и прочие радости реализовывать).

По поводу HTTP - на позопрошлой неделе на плюсах налабал реализацию с keep-alive, chunked encoding (в сторону клиента), digest авторизацией (правда для упрощения stateless вариант без контроля за значением nonce counter`а) и lua. На все про все ушло порядка 4-х дней. Для внутренних вопросов вполне достаточно, а тратить жизнь на полноценный сервак тоже желания нет, боюсь дальше пойдет рутина и негитавные отзывы избалованных пользователей :)

Да, слышал эту историю, но для меня странно... типа у нас бу

Да, слышал эту историю, но для меня странно... типа у нас будет свой HL с блекджеком и шлюхами. Туда мой начальник собирается теперь собирается.

Но у меня, кстати, не все свое - openssl юзаю. Думаю, как бы

Но у меня, кстати, не все свое - openssl юзаю. Думаю, как бы его заизолировать - смущает он меня.

a) Про gzip не скажу (не знаю, зачем он на практике нужен, м

a) Про gzip не скажу (не знаю, зачем он на практике нужен, мне кажется, что каналы нынче дешевле для владельца сервисов, чем ресурс CPU, хотя какие-то предупакованные файлы может и полезно выдавать), а остальное - это плюс-минус неделя-две девелопмента и тестинга. Если руки не кривые и код сервера свой.

в) мне все же выгодней обе уровня иметь свои :) Впрочем, у меня протоколы - это не только HTTP.

причем развитие http-сервера у меня - это крайне редкая эпизодическая деятельность.

И без хлеба. Я ровно о том, что а) писать свой HTTP-layer

И без хлеба.

Я ровно о том, что
а) писать свой HTTP-layer со всеми наворотами (keep-alive, pipelined, chunked, сжатие) - глупо. Протокол сложный, а простой вариант высовывать в сеть под хоть какую-то нагрузку не менее глупо.
б) application layer никто за тебя не напишет
в) разделить понятия ценой 5% производительности - выгодно.

Так нужно и то, и другое. И безопасно. И не превращаясь в пр

Так нужно и то, и другое. И безопасно. И не превращаясь в профессионального апач-админа. И чтобы модули свои удобно было приписывать.

:)

Будет или нет - не знаю, но ребята не странные, а конкуриру

Будет или нет - не знаю, но ребята не странные, а конкурирующие после развода.

Коллеги, а на HL++ что-нибудь стоящее будет? Странные они ка

Коллеги, а на HL++ что-нибудь стоящее будет?
Странные они какие-то ребята, делать подряд два идентичных мероприятия .

HTTP layer вполне безопасен, даже если ты ему не веришь, то

HTTP layer вполне безопасен, даже если ты ему не веришь, то есть простые правила гигиены, которые не позволят даже хакнув - все испортить.

А application layer - да, требует аккуратности, но это как раз повод отнести его в отдельный memory space и без всяких тредов.

У меня уже второй проект, в котором это "высунуто наружу". П

У меня уже второй проект, в котором это "высунуто наружу". Первый правда издох быстро очень. А так - чисто внутрикорпоративный веб-интерфейс к колцентру и прочая лабуда (VoIP, SMS и т.д.)

Я бы не рискнул взять бабки за высовывание наружу апача с прочей опенсорсной обеской - надо тогда превращаться в профессионального админа и заниматься секьюрити этой балалайки. или брать человека на саппорт. А то поставил я как-то phroum на aboutphone.info .... апдейтить - забил, ну так через N лет его и похакали.

А со своим можно спать спокойно - какой бы кривизной он не был, но черные ящики так просто не ломаются.

Ну я вот в вебе уже лет 12-13 примерно. Ну да, я видел неско

Ну я вот в вебе уже лет 12-13 примерно. Ну да, я видел несколько решений, когда web-сервер написали сами. Но это все не было предназначено для высовывания наружу (сюрприз, не меньше половины было поисками).

Но если бы речь шла о решении, которое exposed в дикий интернет и нет желания сделать проект делом всей жизни (смотрим на nginx) - категорически нет. Вот есть Игорь Сысоев, все грабли уже истоптал, мы с ним говорим на одном языке, ему нравится, вот и отлично.

Pages

Subscribe to comments_recent_new