Архивы по Категориям: Разное

К слову о многопоточности

Довелось по работе столкнуться с сервисом шифрования, который был написан по словам авторов, вроде бы очень просто и примитивно, но протокол был очень неприятный: обмен шёл 18-байтовыми блоками символов через TCP-порт. Решил сделать к нему небольшой проксирующий сервис на twisted, который бы вёл приём данных через HTTP POST запросы, выдавая результат в ответ. Стал проверять на скорость работы, и, этот «лёгкий простой» Java-сервис шифрования оказалось не выдержал и 100 единовременных запросов. Пришлось в тестах ограничиться 10-ю потоками, а заодно озадачиться вопросом как twisted переиспользует объекты протокола в многопоточном доступе (об этом другая история).

Мораль такова: как и бывший коллега в тестах обнаружил, что twisted выдерживает на удивление столько потоков, что падаёт то, что стоит за ним, так и здесь получилось, что то, что кажется кому-то простым и надёжным, на деле оказывается весьма падуче-тяжеловесным, когда речь идёт о высокой нагрузке. И спасибо разработчикам twisted за столь стремительный фреймворк :)

Wi-Fi в Ubuntu 11.04

После установки свежей Ubuntu 11.04 (Natty Narwhal) на свой Ideapad U165 обнаружил, что Wi-Fi теперь не включается, даже если включить галочку «Беспроводные соединения» в Network Manager. Полдня было убито на копание в форумах, чтобы вытащить работающий рецепт для устройств broadcom с идентификатором 14e4:4727 (BCM4313): достаточно запретить модуль acer-wmi


modprobe -r acer-wmi

И после этого включить его в /etc/modprobe.d/blacklist.conf, чтобы этот поганец не мешался после перезагрузки.

Твиттерасты

Когда смотришь конференцию вроде HTML5 Camp всегда так смешно наблюдать как в модной колонке «Twitter» стадо повторяет одно и то-же друг за другом, стремясь засветиться.

Оперативность = любовь клиентов

Вчера, на волне регистрации доменов в зоне .рф завёл пару адресов для своих проектов и собрался уже было использовать Linode в качестве DNS, как выяснилось, что у них национальные домены не поддерживаются. Огорчённый сим фактом завёл тикет и, не успел дойти до дома, как поддержка появилась и работает! Ещё один плюс в копилку карму этой компании.

А вот один игровой сервис уже два года шлёт мне письма о всяких своих новостях, из-за регистрации, сделанной там по глупости. А ведь ещё тогда завёл у них запрос на удаление аккаунта (опции такой в интерфейсе не было вообще). На днях повторил запрос, а воз и ныне там — ни прекратить слать своё говно ни стереть регистрацию они не могут/не хотят.

Ещё про почтовые сервера

Возвращаясь к предыдущей записи: одна весьма крупная и известная телекомпания не гнушается настроить свой почтовый сервер так, чтобы он в команде HELO называл себя «bender». Всем конечно приятно вспомнить героя с именем Остап-Сулейман-Берта-Мария-Бендер-Бей из хорошей книги (да, здесь должен быть тег irony), но правильно настроенные против спама почтовые системы разорвут соединение при такой команде HELO и вы не сможете ни восстановить пароль, ни получить код активации вашего профиля.

Халатность в SPF

Довольно давно пользуюсь на своём почтовом сервере модулем проверки письма на соответствие SPF-записям в DNS отправителя. Сегодня попался первый случай, когда она зарезала письмо, из-за халатности администраторов. С одного довольно серьёзного сайта с сериалами было отправлено мне письмо с приглашением (иначе попасть было никак), и доставлять его мне напрямую взялся сервер, отсутствующий в SPF-записи как возможный отправитель. Причём глупо выглядит когда проект, использующий явно не один сервер, представляется в SMTP совершенно другим доменом (но ладно, может у них до почтового сервера руки не дошли). Но факт — письмо зарезано, администраторам отправлено описание проблемы, но пока они молчат с решением.

Получение приватного SSL-ключа без пароля

Защищать приватный ключ SSL-соединений паролем в большинстве случаев очень хорошая идея, но некоторое ПО (в частности некоторые классы PHP) не всегда нормально воспринимают такие файлы, особенно в формате PEM. Чтобы дать им счастье и умиротворение достаточно с помощью openssl провести пару простых операций импорта-экспорта и получить желаемый файл без паролей:

cat my.crt my.key > my.pem
openssl pkcs12 -export -in my.pem -nodes -out my.pfx
openssl pkcs12 -in my.pfx -out my-nodes.key -nodes -nocerts

В примере из файлов my.crt и my.key получаем незащищенный файл my-nodes.key. Взято отсюда.

Unknown SSL protocol error

При запросе из PHP с помощью HTTPRequest к интерфейсу одной серьёзной биллинговой системы получал постоянно ошибку «Unknown SSL protocol error in connection to xxx.xxx.xxx.xxx:443». Быстрый взгляд в гугл подсказал только перебирать параметры, что оказалось вполне верной догадкой: оказывается хост нормальное работал с SSLv2, который не использовался при соединении. Пришлось указать принудительно строкой:

$req->setOptions(array('ssl' => array('version' => SSL_VERSION_SSLv2)));

Потом правда всплыли и другие прелести, вроде отдачи XML в UTF-8 с типом «text/html; charset=ISO-8859-1», но такие шутки находятся быстрее и решаются проще.

Загадка бытия

Почему в Eclipse до сих пор не сделали такой банальной вещи как цветовая схема?

Чудны дела

Удивительно, но совсем рядом с теми людьми, кто проводит конференции разработчиков высоконагруженных систем находятся довольно забавные люди. Кто-то сравнивает непонятно что, непонятно с чем, а кто-то, видимо, начитавшись подобного пишет платёжные системы на ASP.NET, сталкивается с проблемами нагрузки и, вместо того чтобы заниматься оптимизацией БД, репликацией, установкой load balancer’а, делает такой финт: ставит несколько серверов, обслуживающих веб-запросы, которые за собой лезут к единой базе. Клиентам предлагает самостоятельно искать, какой-же из серверов сейчас доступен. Но даже, если ты счастливо находишь этот доступный сервер, это не значит, что ты совершишь свою операцию: база то одна на всех, и задержка ответов у неё дикая, и, например, список доступных провайдеров выдать быстро уже не может. Ну хорошо, отвечают они, вот вы действительно не можете получить этот список, так попробуйте увеличить время ожидания ответа. Но, максимальный таймаут прописан уже на их стороне, в обслуживающем веб-сервере и увеличить его никак! Задаюсь теперь вопросом: сколько же должно быть записей, чтобы для их получения и форматирования в SOAP-ответ требовалось более 3 минут? Вопрос почему же нельзя сделать простейший master (read/write) — slave (read) и брать статусы, списки и т.п. со второго сервера, а так-же почему бы не сделать простейший скрипт распределения нагрузки самим уже отпал :)

Дополнение: В процессе работы выяснился момент, что у ребят в WSDL были указаны неверные адреса сервиса, из-за этого и происходили проблемы с получением списка. Но перебор серверов всё-равно требуется.