Разработка базы данных на Golang Go в продуктовой разработке

Доклад принят в программу конференции
Тезисы

Мы любим Go прежде всего за высокую продуктивность и производительность. Но расплатой за "лёгкость" и скорость разработки являются задержки на сборку мусора, обработку блокировок и не всегда оптимальное хранение данных в памяти. Данные проблемы часто провоцируют переписывание критичных ко времени отклика сервисов, таких как базы данных, на использование более низкоуровневых языков (C/C++/Rust). Мы рассмотрим, как обойти некоторые ограничения Go и реализовать высоконагруженный сервис для хранения данных в формате ключ/значение, реализовав как компактный движок, мало подверженный проблемам сборки мусора и аллокаций, так и высокопроизводительный сокет-сервер, обслуживающий десятки тысяч запросов в секунду с минимальной задержкой.

Исходный код предлагаемых решений открыт:
* https://github.com/recoilme/sniper — компактное, эффективное решение для хранения данных, сопоставимое по производительности с решениями на низкоуровневых языках;
* https://github.com/recoilme/b52 — экспериментальный, совместимый с мемкэш сервер базы данных ключ/значение.

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

Вадим Кулибаба
Mail.Ru

Любит придумывать новое, запускать в прод и наблюдать — взлетит/не взлетит. Написал интересный проект, за который чуть не "сел". За другой интересный проект был удален из Google. Теперь работает в Mail.Ru — разрабатывает рекомендательные движки, ну и попутно архитектуру для их использования — и спит спокойно.

http://t.me/recoilme

Другие доклады секции Go в продуктовой разработке