| Lev Walkin ( @ 2007-12-12 04:42:00 |
| Entry tags: | erlang |
Смотрел Махоткина. Смотрел "О высокой производительности". Смотрел Scaling Twitter. Наткнулся на RabbitMQ. Наткнулся на следующий вывод Моторолы:
A case study by Motorola comparing the use of C++ and Erlang for telecoms software, circa 2006.
Чистый Erlang примерно в два-три раза более производителен чем C++ на их задаче, при этом имея фиксированную стоимость по памяти.
По моим же данным, в JS-Kit использование Erlang позволило сократить код в 8-16 раз (в зависимости от подсистемы) и позволило поднять capacity системы в ~5 раз за две недели, построив масштабируемый KV-storage кластер a-la Amazon Dynamo. Про Dynamo я прочитал уже постфактум и был удивлён тем, насколько у нас совпадают требования к сервисам и методы решения проблем с масштабируемостью.
У меня в итоге получилось 2240 строк кода на Erlang, на всё про всё. Этот код делает следующее:
- Динамическое кеширование
- Replication with differential updates to Key-Value pairs
- Multi-node fault-tolerance
- Обслуживает четыре порта, в том числе висит на порту 80 (HTTP), на двух других TCP портах для статистики и общения с C и Perl, а также на UDP для мелких запросов
- Ведёт exponential moving average статистику по куче параметров для каждого клиента
- Умеет ходит к memcached за данными, но смысл в этом исчезает
Короче, я доволен. После опыта с Erlang слайды со scalability-конференций типа "используйте memcached!", "денормализуйте таблицы!", "сегментируйте базу!" и т.п. смотрятся как призывы заточить шуруп об асфальт, ибо в арсенале только молоток.