вторник, 24 ноября 2015 г.

Темная сторона Aerospike

      Вот уже год как Aerospike работает у нас в продакшене. В связи с этим хотелось бы отметить несколько негативных моментов:

  • Не продуман downtime less upgrade. Чтобы убрать ноду из кластера нужно сказать ей dun. Это в свою очередь порождает процесс решардинга. Если у вас много данных это может быть весьма длинная история.  Потом нужно уверится что клиенты больше не ходят к этой ноде (зависит от вашего приложения). Потом upgrade/изменение настроек и снова добавление в кластер. И снова решардинг. 
  • Многие настройки нельзя менять на лету. То есть это означает необходимость рестарта. А про рестарт ниже.
  • Быстрый рестарт возможен только в Enterprise edition. Рестарт community edition - это весьма медленная операция. Ее длительность зависит от:
    • Настроек heartbeat (timeout, interval). Сразу после старта нода откажется принимать входящие подключения на 3000 порту пока она не присоеденится к кластеру
    • После присоединения к кластеру нода начнет читать либо реплицировать свою порцию данных с других нод кластера (для in memory namespace) либо читать данные с диска. Длительность этого процесса зависит от размера namespace
  • Некоторые настройки для изменения требуют full cluster restart. Это просто не серьезно для production-ready решения.
  • Не стабильное время ответа. В среднем Aerospike демонстрирует довольно хорошее время ответа (0.7-1ms), но время от времени случаются спайки до секунды. Вероятно это совпадает с запуском процесса expiration/eviction thread. А он запускается каждые nsup-period либо при переполнении раздела.
  • Smart клиент не такой уж и smart. Если используются Go client  то после изменения конфигурации кластера скорость работы с Aerospike резко падает. Потому что расположение данных меняется, и клиент начинает ходить за данными не на те ноды. Smart client не получает уведомлений от сервера о том что расположение данных изменилось. 
Не поймите меня не правильно - Aerospike не так и плох. Просто вот такие есть у него недостатки. Но Aerospike очень активно развивается. Как сервер так и клиенты, поэтому некоторые проблемы решаются просто обновлением Aerospike и клиентских библиотек.