Все домены мира в RAM процесса Бэкенд, теория программирования
Ведущий разработчик компании RU-CENTER. Разработка сетевых и высоконагруженных приложений на языках C и Perl.
В мире в настоящее время зарегистрировано, зарезервировано и имеет специальную цену регистрации около полумиллиарда доменных имен. Данные об их состоянии приходят в виде набора snapshot'ов на сотни миллионов строк. Как хранить эту информацию, обновлять ее по полученным спискам и быстро находить в ней состояние нужного домена?
Мы пробовали использовать для этой цели postresql, redis и остановились на встраиваемом разделенном kv-хранилище собственной разработки. В результате мы получили скорость добавления новых данных 3M ключей в секунду (3 минуты в сутки на обновление/восстановление всей БД вместо часов), скорость чтения 4M ключей на CPU сервера и минимальную инфраструктуру.
В докладе рассказывается о технических проблемах, с которыми мы столкнулись, и о способах их решения.
Будет рассказано о том, как мы:
- оптимизировали хэш-таблицу под кэш CPU;
- ускорили добавление новых данных;
- решили проблемы user-space RCU для нескольких процессов в Linux-системе;
- комбинировали способы lock-free-синхронизации;
- боролись с дисковым кэшем Linux и проиграли;
- неожиданно написали очень быстрый IPC-модуль для Perl.