If a C programmer asks "do you want to see something cool?", run away.
--John Van Enk

Wednesday, January 30, 2013

MongoDB Gotchas Follow-Up

И пол года не прошло, дошли наконец руки написать продолжение эпопеи с Mongo. В общем на радостях, что получили прирост 30% на двух шардах решили мы это дело выкатить в стейджинг и потестить на реальном датасете. На реальном датасете прирост производительности равнялся 0%. Но т.к. новый монго уже вышел на тот момент, а распределение данных по шардам достаточно дорогостоящая операция, то решили задеплоить 2.2 на стейджинг и тоже погонять на живых данных. Изменить PATH в init.d скрипте дело не хитрое и деплоймент занял минут 5 вместе закачкой. Тестирование показало, что производительность осталась примерно на том же уровне. В общем javascript так и остался однопоточным и map(), reduce(), sort() так и выполняются в одном и том же потоке, не смотря на все чаяния и надежды (http://docs.mongodb.org/manual/faq/concurrency/#faq-concurrency-operations-locks).

Thursday, January 24, 2013

Ruby Concurrency Notes

Ниже мои заметки (именно заметки, без претензии на пост) по тематике обозначенной выше - тезисно.

Похоже все согласны с тем что хорошие примеры concurency done right - это продукты вроде Erlang и Scala.

Версии Ruby и поддержка concurrency:
Concurrency models:
  1. Thread - тут все более менее понятно
  2. Fiber - cooperative scheduling, если один фибер закончил работу передает управление следующему
  3. Reactor pattern - IOC, сложнее для понимания, представлен в виде библиотек http://rubyeventmachine.com/ (libevent), https://github.com/celluloid/celluloid-io (libev). У первой есть свои gotchas (например behaviour после того как в одном из потоков threadpool бросается исключение), со второй пока что не приходилось работать. Есть https://github.com/igrigorik/em-synchrony - позволяет завернуть evented код в fibers и он будет выглядеть как обычный - не evented (оставаясь при этом evented) - некоторым нравится. Есть веб фреймворки (http://cramp.in/) и веб сервера (https://github.com/celluloid/reel, Thin, Goliath)
  4. Proactor pattern - что-то похожее есть в https://github.com/methodmissing/eio но чистой реализации не встречал. keep in mind
  5. Actor pattern - есть в rubinius via https://github.com/rubinius/rubinius-actor, есть celluloid.io (https://github.com/celluloid/celluloid). Celluloid интересен тем что под своей крышей https://github.com/celluloid объединяет несколько проектов каждый из которых интереснее предыдущих (https://github.com/celluloid/dcell, https://github.com/celluloid/reelhttps://github.com/celluloid/lattice). Если JRuby то можно использовать один из Java фреймворков вроде http://akka.io/http://rubyforge.org/projects/concurrent - keep in mind
  6. CSP/Pi Calculushttps://github.com/igrigorik/agent
  7. Software transactional memoryhttp://moonbase.rydia.net/software/ruby-stm/ruby-stm.git/
  8. Dataflowhttps://github.com/larrytheliquid/dataflow
Видео

Monday, January 21, 2013

пару мыслей об Ubuntu Phone

Возможно смарт с этой ОС на борту станет первым смартом, который я себе куплю, если это та же ОС с dm-crypt, GPG, openvpn, etc. До сих пор я все время отговаривал себя от покупки чего-то под управлением Android из-за security & privacy concerns. Современные смарты знают об их владельцах много, но не в состоянии эту информацию защитить от третьих лиц (продуктами Apple я не пользуюсь, насчет remote lock & remote wipe через iCloud нужно дополнительно уточнить). А так - зашифровал файловую систему и все - за сохранность данных можно не беспокоится (если успеешь выключить конечно, ну или хранить особо ценные данные на отдельном партишене, который подключать при необходимости), защищенные каналы коммуникации через GPG enabled email, IM OTR, защищенный канал через openvpn. Определенно на мой взгляд стоит того чтобы попробовать.

P.S.
а еще наверное туда можно BackTrack воткнуть, превратив ubuntu phone тем самым в hacker phone