AWS ElastiCache / SimpleQueue vs DynamoDB

13

Saya bertanya-tanya tentang alasan untuk menggunakan ElastiCache / SimpleQueue vs hanya memiliki "Cache" dan "Antrian" tabel di dalam DynamoDB masing-masing.

Tampaknya latensi jaringan ke layanan Cache / Antrian akan mengalahkan banyak peningkatan kinerja, dan memiliki EC2 memperlakukan Dynamo sebagai layanan cache / antrian akan menawarkan latensi dan throughput yang sama (karena Dynamo memungkinkan latensi tetap rendah di bawah setiap beban).

Apakah ini terutama tentang harga dinamo vs layanan lain yang dimuat?

Adakah yang memiliki angka latensi kasar yang membandingkan Dynamo dengan ElastiCache / SQS?

Apakah ada pertimbangan lain yang lebih penting yang saya lewatkan yang membenarkan kerumitan tambahan?

Terima kasih.

Scott Klarenbach
sumber

Jawaban:

9

Kami menggunakan DynamoDB dan ElastiCache Redis untuk alasan berbeda.

DynamoDB:

  • Memiliki bahasa permintaan yang mampu melakukan hal-hal yang lebih kompleks (lebih besar dari, di antara dll.)
  • Dapat dijangkau melalui API eksternal yang menghadap internet (berbagai wilayah dapat dijangkau tanpa perubahan atau infrastruktur sendiri)
  • Izin berdasarkan tabel atau bahkan baris dimungkinkan
  • Skala dalam hal ukuran data hingga tak terbatas
  • Anda membayar per permintaan -> angka permintaan rendah berarti tagihan lebih kecil, angka permintaan tinggi berarti tagihan lebih tinggi
  • Baca dan Tulis berbeda dalam biaya
  • Data disimpan berlebihan oleh AWS di berbagai fasilitas
  • DynamoDB sangat tersedia di luar kotak
  • Autoscaling tersedia dalam layanan itu sendiri

ElastiCache Redis:

  • Bahasa permintaan sederhana - tidak ada fitur kompleks
  • Apakah (out-of-the-box) tidak dapat dijangkau dari daerah lain.
  • Anda selalu terbatas pada jumlah memori (atau jumlah semua instance utama dalam sebuah cluster)
  • Berputar di beberapa instance hanya mungkin dalam aplikasi Anda - Redis tidak melakukan apa pun di sini (Cluster Redis membantu di sini tetapi logika sharding masih ada di dalam driver / SDK yang Anda gunakan dalam aplikasi Anda) - scale-in dan scale- keluar tidak mungkin tanpa downtime saat ini
  • Anda membayar per instance, tidak peduli berapa pun banyaknya atau jumlah permintaan.
  • Jika Anda ingin redundansi data, Anda perlu mengatur replikasi (tidak mungkin antar wilayah yang berbeda)
  • Anda perlu menggunakan replika untuk ketersediaan tinggi
  • Tidak ada penskalaan otomatis (lihat bagian tentang penskalaan sama sekali di atas)

Jadi pengaturan kami sebagian besar waktu adalah: cache sederhana dengan volume tinggi permintaan di Redis didukung oleh DynamoDB sebagai penyimpanan permanen dan tahan lama. Dengan ini kami membatasi biaya karena kami mendapatkan diskon implisit untuk bacaan kami oleh model bayar per contoh dari Redis tetapi juga mendapatkan manfaat redundansi DynamoDB dan bahkan dapat menggunakan bahasa query DynamoDB untuk hal-hal yang lebih kompleks ( jika kita membutuhkannya).

Semoga itu bisa membantu!

Pembaruan: Dengan pengumuman Amazon DynamoDB Accelerator ( https://aws.amazon.com/de/dynamodb/dax/ ) kami beralih untuk menggunakan DAX sebagaimana adanya (pada akhirnya) persis apa yang kami lakukan dengan kombinasi DynamoDB dan Redis. Sebagai DAX, sepenuhnya dikelola oleh AWS dan memberi kami kesempatan untuk selalu menggunakan bahasa DynamoDB dalam aplikasi kami, tetapi juga mendapatkan manfaat dari cache write-through seperti Redis.

Osterjour
sumber
Terima kasih banyak. Yang tidak saya mengerti adalah bagaimana Anda membuat cadangan redis dengan dynamodb: Apakah ini fitur AWS? atau kapan dan bagaimana Anda membuat cadangan? Terima kasih, jika Anda bisa menjelaskannya!
badera
"Didukung oleh" saya tidak dimaksudkan sebagai cadangan dengan cara tradisional. Kami sebenarnya menulis ke DynamoDB sepanjang waktu dan menggunakan Redis untuk membaca terlebih dahulu. Jadi, bahkan jika Redis kehilangan data, kami memiliki itu di DynamoDB tersedia. Dengan penggunaan DAX ( aws.amazon.com/de/dynamodb/dax ) kasing ini menjadi jauh lebih mudah sekarang!
Osterjour
7

Alasan utama kami menggunakan Elasticache daripada DynamoDB adalah kecepatan - Anda mendapatkan latensi round trip sub 1ms untuk objek kecil. Kotak ini sangat dekat dengan mesin EC2 Anda, dan memori jauh lebih cepat daripada disk, bahkan SSD.

Mungkin juga ada keuntungan biaya mengingat model penetapan harga yang berbeda, meskipun saya belum terlalu detail di sana.

Maximilian
sumber
Apakah masih relevan? Tidak DAX mengubahnya?
dmigo
1
DAX akan menyelesaikan banyak masalah latensi, ya. Saya tidak yakin tentang perbedaan kecepatan yang tepat - untuk jaringan benda kecil akan menjadi kontributor utama latensi.
Maximilian
1

Redis / memcached adalah penyimpanan dalam-memori dan umumnya harus lebih cepat daripada DynamoDB untuk data tipe cache / antrian. Mereka juga memiliki item tambahan yang berguna seperti kunci kedaluwarsa, Pub / Sub di Redis, dll. Yang mungkin tidak dimiliki Dynamo.

ceejayoz
sumber
1
Terima kasih. Saya menyadari bahwa cache ada dalam memori tetapi saya telah membaca bahwa seseorang dapat mengharapkan setidaknya ~ 10 ms pulang pergi untuk memukul cache dan kembali, yang membuat karakteristik kinerja sama dengan Dynamo. Saya kira Anda benar bahwa Anda mungkin ingin fitur tertentu dalam memcached tidak tersedia dalam dinamo. Tetapi bagi saya, keunggulan utama cache RAM adalah pesanan peningkatan kinerja yang lebih besar daripada toko yang tahan lama, yang tampaknya tidak berlaku di sini.
Scott Klarenbach