Mengkonfigurasi ElastiCache klien Anda untuk penyeimbangan beban yang efisien (Memcached) - Amazon ElastiCache

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Mengkonfigurasi ElastiCache klien Anda untuk penyeimbangan beban yang efisien (Memcached)

catatan

Bagian ini berlaku untuk klaster Memcached multisimpul yang dirancang sendiri.

Untuk secara efektif menggunakan beberapa node ElastiCache Memcached, Anda harus dapat menyebarkan kunci cache Anda di seluruh node. Cara mudah untuk menyeimbangkan beban klaster dengan simpul n adalah dengan menghitung hash dari kunci objek dan melakukan modulus pada hasilnya dengan n - hash(key) mod n. Nilai yang dihasilkan (0 sampai n–1) adalah jumlah simpul tempat Anda menempatkan objek.

Pendekatan ini sederhana dan berfungsi dengan baik selama jumlah simpul (n) adalah konstan. Namun, setiap kali Anda menambahkan atau menghapus simpul dari klaster, jumlah kunci yang perlu dipindahkan adalah (n - 1)/n (dengan n adalah jumlah baru simpul). Jadi, pendekatan ini menghasilkan sejumlah besar kunci yang dipindahkan, yang berarti ada sejumlah besar cache miss awal, terutama seiring bertambahnya jumlah simpul. Dalam kasus terbaik, penskalaan dari 1 ke 2 simpul menghasilkan pemindahan kunci (2-1) / 2 (50 persen). Penskalaan dari 9 ke 10 simpul menghasilkan pemindahan kunci (10–1)/10 (90 persen). Jika Anda menaikkan skala karena lonjakan lalu lintas, Anda tidak ingin memiliki banyak cache miss. Banyaknya jumlah cache miss akan menghasilkan hit pada basis data, yang sudah kelebihan beban karena lonjakan lalu lintas.

Solusi untuk dilema ini adalah melakukan hashing secara konsisten. Hashing konsisten menggunakan algoritma sehingga setiap kali simpul ditambahkan atau dihapus dari klaster, jumlah kunci yang harus dipindahkan adalah kira-kira 1 / n (dengan n adalah jumlah baru simpul). Dalam kasus terburuk, penskalaan dari 1 ke 2 simpul menghasilkan pemindahan kunci 1/2 (50 persen). Penskalaan dari 9 ke 10 simpul menghasilkan pemindahan kunci 1/10 (10 persen).

Sebagai pengguna, Anda mengontrol jenis algoritma hashing yang digunakan untuk klaster multisimpul. Sebaiknya konfigurasikan klien Anda untuk menggunakan hashing konsisten. Untungnya, ada banyak pustaka klien Memcached dalam bahasa yang paling populer yang menerapkan hashing konsisten. Periksa dokumentasi untuk pustaka yang Anda gunakan untuk melihat apakah mendukung hashing konsisten dan cara menerapkannya.

Jika Anda bekerja di Jawa,PHP, atau. NET, kami sarankan Anda menggunakan salah satu perpustakaan ElastiCache klien Amazon.

Hashing konsisten Menggunakan Java

Klien Java ElastiCache Memcached didasarkan pada klien Java spymemcached open-source, yang memiliki kemampuan hashing yang konsisten bawaan. Pustaka menyertakan KetamaConnectionFactory kelas yang mengimplementasikan hashing yang konsisten. Secara default, hashing konsisten dinonaktifkan pada spymemcached.

Untuk informasi lebih lanjut, lihat KetamaConnectionFactory dokumentasi di KetamaConnectionFactory.

Hashing yang konsisten menggunakan PHP dengan Memcached

PHPKlien ElastiCache Memcached adalah pembungkus di sekitar pustaka Memcached bawaan. PHP Secara default, hashing konsisten dimatikan oleh pustaka MemcachedPHP.

Gunakan kode berikut untuk mengaktifkan hashing konsisten.

$m = new Memcached(); $m->setOption(Memcached::OPT_DISTRIBUTION, Memcached::DISTRIBUTION_CONSISTENT);

Selain kode sebelumnya, sebaiknya Anda juga mengaktifkan memcached.sess_consistent_hash pada file php.ini Anda.

Untuk informasi selengkapnya, lihat dokumentasi konfigurasi run-time untuk Memcached PHP di http://php.net/manual/en/memcached.configuration.php. Perhatikan secara khusus parameter memcached.sess_consistent_hash.

Menggunakan hashing yang konsisten. NETdengan Memcached

ElastiCache Memcached. NETklien adalah pembungkus di sekitar Enyim Memcached. Secara default, hashing konsisten diaktifkan oleh klien Enyim Memcached.

Untuk informasi selengkapnya, lihat memcached/locator dokumentasi di https://github.com/enyim/EnyimMemcachedMemcachedClient/wiki/ -Configuration#. user-content-memcachedlocator