Redis в кубернетах - sidecar или клиент-серверная модель?
В чем преимущество и недостаток использования Redis в качестве сопутствующего элемента в кубернетах? Можно ли иметь кеш сохранения, когда контейнер Redis добавляется в каждый модуль приложения? Повлияет ли это на доступность и масштабируемость кеша?
2 ответа
Мне трудно думать о каких-либо преимуществах использования Redis в качестве коляски. Я бы всегда запускал его как отдельное развертывание (или набор с отслеживанием состояния, если включено сохранение) с отдельной службой.
Если Redis находится в отдельном модуле, то:
- Если ваше приложение имеет несколько реплик, все они будут использовать один и тот же Redis.
- При повторном развертывании приложения оно также не завершает работу и не перезапускает Redis.
- Если для Redis включена персистентность, вам не нужно настраивать модули приложений с постоянным хранилищем.
Учитывая общие возможности Redis (в основном хранилище в памяти, ограниченная поддержка типов данных), простое сохранение этих данных кеша в одноэлементных объектах в вашем приложении будет более или менее эквивалентно запуску Redis в качестве сопутствующего элемента (одна копия данных кеша на каждый модуль)., данные теряются при удалении модуля).
Я согласен с ответом Дэвида Мейза. В этой операции REDIS является обычным долговременным кешем. Все поды помещаются в один и тот же кеш, поэтому они повторно используют его, и он имеет согласованный вывод.
С другой стороны, я также оцениваю модель sidecar для кеша Redis, и в двух словах все зависит от ваших потребностей в согласованности.
Этот Redis-sidecar означает, что у каждого модуля микросервисов будет свой Redis. Поэтому, когда каждый микросервис переходит в базу данных, он сохраняет объект в своем собственном Redis. При чтении одного и того же объекта микросервис переходит к redis, а не к базе данных. Это экономит много чтений базы данных, но ухудшает согласованность. И это сэкономит мне $ на чтении облачной базы данных.
В моем случае срок действия кеша истекает через 1 минуту или около того, поэтому отсутствие согласованности между ними в моем случае нормально.
Что касается масштабируемости и доступности, я бы даже сказал, что это может увеличить ее, так как вы можете легко запустить много подов. И даже установив максимальный объем памяти в модуле Redis, вы можете легко перезапустить его при достижении лимита (150 МБ?).