пятница, 1 сентября 2017 г.

[prog.c++] RESTinio в конкурсе HighLoad Cup-2017 от Mail.ru

Мы у себя в "СтифСтриме" занимаемся разработкой небольшого C++ного фреймворка RESTinio (последняя публичная версия лежит здесь). Цель в том, чтобы дать C++ разработчикам легковесный, простой в использовании, но мощный и производительный инструмент для разработки RESTful сервисов на C++. А тут Mail.ru объявляет конкурс HighLoad Cup. Естественно, захотелось попробовать RESTinio в чужом бенчмарке, в котором мы ничего не контролируем. В общем, Коля Гродзицкий, который отвечает за разработку RESTinio, и занялся подготовкой конкурсного решения для HighLoad Cup-а.

В качестве технологического стека использовался C++14/17 (в объеме, поддерживавшемся в gcc-6.2), RESTinio, Asio, Node.js http-parser, RapidJSON и json_dto. Отдельного экстрима доставило то, что в этот же момент в RESTinio вливалется поддержка WebSocket-ов. Так что решение приходилось делать на не стабильной версии RESTinio, нестабильность которой увеличивалась за счет выявленных в процесс работы над конкурсным решением недостатков самого RESTinio. В общем, Николаю досталось :)

В итоге Колино решение вошло в финал с 45-го места. И в финале оно оказалось на 44-ом месте (на 2017.09.04).

С учетом того, что в финал, как мне представляется, вошло всего несколько решений, использующих готовые, более-менее полноценные реализации HTTP-серверов, не заточенных под эту конкретную задачу, результат не самый плохой. Как раз рядом с Колиным решением оказалось еще пару решений на Go и fasthttp (а производительность у RESTinio и fasthttp была очень близка, когда мы такие замеры производили в последний раз). Вероятно, четвертый-пятый десяток ТОПа -- это максимум, на который могут претендовать решения, построенные на универсальных инструментах и не оптимизированные на самом низком уровне под конкретные условия.

Но для нас более важным оказалось другое: RESTinio получило первое более-менее серьезное боевое крещение. И мы сами обнаружили целый ряд мест, в которых нужно не только активно дорабатывать напильником, но и вообще довольно глубоко копать в будущих версиях, чтобы дать пользователям RESTinio удобный и настраиваемый под их нужды инструмент. Тем более, что выбор таковых под C++ совсем невелик. В этом плане участие в конкурсе оправдало себя на все 146%.

На github-е начали собирать список исходников решений из конкурса. Коля подчистит код RESTinio и опубликует свое решение где-то в середине-конце следующей недели. Кстати говоря, когда заглядываешь в код лидеров конкурса, то на голове начинают шевелиться остатки волос: понятно, что в коде, заточенном под максимальную скорость, будет жесть. Но не настолько же жестянная жесть :)


От себя лично добавлю, что я не понял логики организаторов турнира в финале. Как по мне, так нужно было либо делать один рейтинговый обстрел (но объемом в 4-5 раз больше, чем в отборочном туре, чтобы нивелировать разные факторы вроде фазы Луны), либо же делать N обстрелов с одинаковыми данными и высчитывать среднее, либо делать N обстрелов с разными данными и суммировать время. А так получается N попыток и в зачет идет лучшее. Что выглядит особенно непонятно в ситуациях, когда какое-то из решений на отдельных обстрелах уходит по времени в бесконечность или вообще падает.

Очевидно, что Колиному решению на RESTinio это бы никак не помогло. Но зато не было бы вопросов по поводу отдельных решений из ТОП-10, которые в некоторых обстрелах показывают времена в районе 150K и более секунд. Или вообще падают. Но находятся на верхних строчках.

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

[life.cinema] Очередной кинообзор (2017/08)

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

Мегрэ расставляет сети (Maigret Sets a Trap, 2016), Мертвец детектива Мегрэ (Maigret's Dead Man, 2016) и Мегрэ: Ночь на перекрёстке (Maigret: Night at the Crossroads, 2017). Вот все хорошо. От картинки так вообще получаешь огромное удовольствие. Но к чему невозможно привыкнуть, так это к худому комиссару Мегрэ. Как въелось с детства, что Мегрэ был грузным и боролся с перееданием, так и не отпускает до сих пор :)

Тайна 7 сестер (Seven Sisters, 2017). Если не придираться к сюжету, то очень даже неплохо. Руми Рапас, сыгравшая сразу семерых персонажей, вызывает уважение.

Дикая история (El bar, 2016). Обажаю такие, по хорошему укуренные, истории. Поэтому мне очень понравилось. Но фильм для ценителей жанра.

Валериан и город тысячи планет (Valerian and the City of a Thousand Planets, 2017). Очень красочный и очень-очень детский фильм. Рассчитан на аудиторию 8-10 лет, как мне показалось. Так что взрослым можно смотреть только за компанию с детьми.

Послание от Кинга (Message from the King, 2016). Неплохо. Не шедевр, но неплохо. Нормальный такой криминальный фильм без претензий на глобальность и масштабность.

Телохранитель киллера (The Hitman's Bodyguard, 2017). Как по мне, так трейлеры фильма оказались круче, чем сам фильм. Экшен-сцены хороши, но все, что между ними, навевает смертельную скуку. Ну и для фильма такого уровня неожиданно было увидеть не очень уж качественно нарисованные на компьютеры взрывы. Так что фильм несколько разочаровал.

Тёмная башня (The Dart Tower, 2017). Оригинальные произведения Стивена Кинга я не читал, так что для меня это все совершенно новая история. Как по мне, так слишком простенько и недорого. Идрис Эльба и Мэттью МакКонахи, конечно, хороши. Но их не хватает, чтобы сказать, что получилось крутое и зрелищное кино.

6 дней (6 Days, 2017). Не плохая, в общем-то история, но как-то слишком уж скучно и схематично рассказана. Как будто смотришь не художественный фильм, а какую-то полудокументальную реконструкцию.

Стена (The Wall, 2017). Противоречивые ощущение. Сначала история захватывает. Потом становится скучно. Потом главный герой начинает подбешивать. Ближе к концу в фильме почти что разочаровываешься. Но финал откровенно доставляет.

Первое убийство (First Kill, 2017). Как-то ни о чем. Можно и не смотреть.