Redis
 sql >> Baza danych >  >> NoSQL >> Redis

Redis:Amazon EC2 kontra Elasticache

tl;dr:Elasticache zmusza do korzystania z pojedynczej instancji redis, co jest nieoptymalne.

Długa wersja:

Zdaję sobie sprawę, że to stary post (2 lata w momencie pisania tego tekstu), ale myślę, że ważne jest, aby zwrócić uwagę na punkt, którego tutaj nie widzę.

W przypadku elasticache Twoim wdrożeniem redis zarządza Amazon. Oznacza to, że utkniesz z tym, jak zdecydują się na uruchomienie Twojego redis.

Redis używa pojedynczego wątku wykonania dla odczytów/zapisów. Zapewnia to spójność bez blokowania. Jest to główny atut pod względem wydajności, który nie pozwala na zarządzanie zamkami i zatrzaskami. Niefortunną konsekwencją jest jednak to, że jeśli twój EC2 ma więcej niż 1 vCPU, nie będą one używane. Tak jest w przypadku wszystkich instancji Elasticache z więcej niż jednym procesorem wirtualnym.

Domyślny rozmiar instancji elasticache to cache.r3.large , który ma dwa rdzenie.

W rzeczywistości istnieje wiele rozmiarów instancji z wieloma procesorami wirtualnymi. Wiele okazji do zamanifestowania się tego problemu.

Wygląda na to, że Amazon jest już świadomy tego problemu, ale wydaje się go nieco lekceważyć.

Częścią, która sprawia, że ​​jest to szczególnie istotne w przypadku tego pytania, jest to, że w EC2 (ponieważ zarządzasz własnym wdrożeniem) możesz zaimplementować wielodostępność . Oznacza to, że masz wiele instancji procesu redis nasłuchujących na różnych portach. Wybierając port do odczytu/zapisu do/z w aplikacji na podstawie skrótu klucza rekordu, możesz wykorzystać wszystkie swoje procesory wirtualne.

Na marginesie; Wdrożenie redis elasticache na maszynie wielordzeniowej powinno zawsze być niewystarczające w porównaniu z wdrożeniem memcached elasticache w rozmiarze instancji. W przypadku wielu najemców redis jest zwykle zwycięzcą.

Aktualizacja:

Amazon udostępnia teraz oddzielne metryki dla procesora instancji redis, EngineCPUUtilization. Nie musisz już obliczać swojego procesora za pomocą tandetnego mnożenia, ale multi-tenancy nadal nie jest zaimplementowane.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. obsługa sytuacji redis maxmemory z railsami podczas korzystania z pamięci podręcznej rails

  2. Funkcja transmisji socket.io i architektura Redis pub/sub

  3. Skonfiguruj limit czasu Jedis

  4. Jak mogę usunąć obiekty z Redis, które są dodawane w czasie rzeczywistym?

  5. Spring Data RedisTemplate:serializacja wartości i wartości HashValue