VULTR Coupon Promo Code

Thứ Sáu, 23 tháng 1, 2015

Cara: mempercepat Internet Anda dengan Memcached

Website Anda berjalan ke dalam bottleneck kinerja? Apakah database atau backend merasa seperti sumber daya yang benar-benar mahal, meskipun Anda sudah punya sebuah cluster besar yang dibentuk untuk meningkatkan pemrosesan paralel? Baca terus untuk mengetahui mengapa Anda harus termasuk Memcached, cache didistribusikan, dalam aplikasi berbasis Internet Anda.

Caching adalah sebuah konsep yang digunakan oleh hampir semua pengembang dalam beberapa bentuk atau lain dalam aplikasi mereka. Itu adalah pada dasarnya tentang menyimpan sepotong informasi dalam memori sehingga dapat diperoleh dengan cepat, kemudian, dengan demikian mempercepat aplikasi Anda. Caching sebagian besar digunakan untuk data yang diakses berulang kali, jadi bahwa alih-alih menghitung/mengambil dari disk berulang-ulang, yang membutuhkan waktu, kita dapat malah langsung mencarinya dalam cache, yang jauh lebih cepat.

Dalam konteks aplikasi Web, misalnya, halaman Web dinamis dapat di-cache pada server, sehingga kita tidak perlu untuk menghasilkan lagi ketika permintaan baru datang, disediakan data dinamis yang hadir dalam halaman tidak berubah dalam jangka waktu tersebut. Itu bagian yang mudah, tapi cache dapat digunakan di beberapa tempat di tumpukan aplikasi, sehingga Anda memiliki beberapa pilihan ketika datang untuk memilih mana untuk men-cache, apa yang harus cache dan bagaimana untuk men-cache.

Tanpa terlalu banyak jargon, berikut adalah beberapa teknik pada bagaimana dan di mana Anda mungkin seperti untuk cache data:

Browser caching: sebagai Web developer mungkin menyadari, beberapa data dapat di-cache di sisi klien di browser, seperti gambar, dll, sehingga mereka secara otomatis digunakan ketika diulang permintaan untuk sumberdaya yang dibuat.
Pengiriman konten jaringan (CDN): CDN adalah jaringan server yang tersebar secara geografis; pengguna yang terdekat ke server tertentu di CDN kemudian disajikan oleh server, mengurangi waktu transfer data dari server jauh, dan juga mengambil beban dari server utama.
Membalikkan caching proxy: reverse caching proxy adalah pilihan arsitektur yang lain, di mana proxy server duduk antara klien dan server. Di sini klien permintaan sumber daya dari server proxy, yang pada gilirannya mengambil sumber daya atas nama klien atau mengembalikan data hadir dalam cache. Jadi, klien merasa seolah-olah proxy server sumber informasi.
Sisi server cache: Data atau objek dapat atau di-cache di sisi server itu sendiri. Ini dapat menjadi server lokal cache, cache server terpusat atau didistribusikan cache.
Cache query database lokal: database baik cache query database atau data internal, sehingga dapat meningkatkan kecepatan mencari data serta kinerja database.

Anda dapat memilih untuk menerapkan cache dalam satu atau lain cara, atau Anda mungkin menggunakan kombinasi dari lebih dari satu teknik untuk cache berbeda jenis data pada tingkat yang terpisah. Tetapi lebih penting lagi, membantu untuk mengetahui apakah Anda bahkan perlu caching di aplikasi/penggunaan-kasus tertentu Anda berpikir tentang.

Kebanyakan orang, dalam proses pelaksanaan cache, benar-benar kehilangan karena hal itu salah dilaksanakan. Jadi cache berakhir memperlambat aplikasi, alih-alih mempercepat itu. Mendapatkan mewah software dengan fitur mewah tidak selalu masuk akal, tetapi menggunakan bahkan yang sederhana dengan cara yang benar, tidak.

Mengapa Anda perlu Memcached

Diskusi ini mengasumsikan bahwa Anda telah mengatur sebuah cluster, dan Anda ingin menerapkan caching. Dalam kasus ini, apa yang terjadi jika Anda mulai caching pada setiap node mandiri? Anda akan melihat bahwa beberapa node menghadapi masalah memori, sementara yang lain memiliki sedikit memori kiri. Selain itu, sebagian besar data yang disimpan dalam cache individual mereka berlebihan.

Ini panggilan untuk mekanisme caching yang terpusat yang masuk akal dalam domain internet, sehingga data yang sedang ditembolok dalam sebuah cluster unik untuk cluster seluruh dan didistribusikan secara merata. Dan ya, jawabannya adalah Memcached.

Memcached adalah potongan teka-teki yang tanpa implementasi Internet Anda tidak bahkan masuk akal. Menyediakan solusi di mana memori yang tersedia dalam cache adalah jumlah yang di semua node yang menjalankan contoh Memcached. Jadi jika, misalnya, Anda memiliki 10 node, dengan masing-masing yang dialokasikan memori 1 GB untuk caching, Anda mendapatkan total 10 GB cache yang tersedia untuk seluruh cluster. Berikut adalah beberapa fitur di Memcached yang mungkin memikat Anda ke dalam menggunakannya dalam konteks aplikasi Anda:

Mudah skalabilitas: fitur ini ini berlaku untuk hampir semua perangkat lunak dengan tag "didistribusikan", tapi tetap saja, it's worth dicatat bahwa Memcached membutuhkan minimal konfigurasi untuk menambahkan suatu node baru, dengan hampir tidak ada yang istimewa interkoneksi persyaratan. Memori yang tersedia dalam cache hanya meningkat dengan cepat.
Tersembunyi kompleksitas: Memcached menyembunyikan di bawahnya semua kompleksitas yang terkait dengan menyimpan/mengambil data dari cache dalam sebuah cluster. Semua kita perlu untuk menyediakan adalah kunci yang terkait dengan data. Tugas seluruh menentukan mana node untuk menyimpan data pada, atau untuk mengambilnya, dilakukan oleh klien Memcached itu sendiri.
Dampak minimal kegagalan node: bahkan jika node Memcached tertentu gagal, itu hampir tidak memiliki dampak pada keseluruhan cache Selain mengurangi memori yang tersedia, dan peningkatan jumlah cache yang kecil merindukan.
Arsitektur yang fleksibel: Memcached tidak memaksakan pembatasan semua node memiliki ukuran cache seragam. Jadi, sebagian dari Anda node dengan memori kurang fisik dapat mengatur untuk berkontribusi mungkin hanya 512 MB hingga klaster, sementara yang lain mungkin memiliki 2 GB memori yang didedikasikan untuk contoh Memcached. Selain itu, Anda bahkan dapat menjalankan lebih dari satu contoh dari Memcached pada node tunggal.
Beberapa klien tersedia: Memcached memiliki klien api tersedia untuk berbagai bahasa seperti PHP, C++, Java, Python, Ruby, Perl, .NET, Erlang, ColdFusion dan bahkan lebih.
Cross-platform: Memcached ini tersedia untuk berbagai macam platform, termasuk Linux, BSD dan Windows.
Mengambil Multi: Dengan bantuan fitur ini, kita dapat meminta nilai untuk lebih dari satu kunci di sekali, bukan keraguan mereka dalam sebuah loop, satu per satu, yang membutuhkan banyak jaringan round-trips.
Konstan saat fungsi: dibutuhkan jumlah yang sama waktu untuk melakukan operasi dalam memori, apakah itu satu tombol atau seratus. Ini sesuai dengan fitur multi fetch dibahas sebelumnya.

Ada banyak fitur yang saya mungkin telah kehilangan, tapi aku hanya skimming permukaan pada tingkat arsitektur.
Cara kerjanya

Memcached bekerja pada beberapa sangat kuat dan unik prinsip, yang, sebagai pengembang, harus Anda ketahui tentang untuk mengembangkan aplikasi yang efektif dengan itu. Tercantum di bawah ini adalah beberapa prinsip utama di balik bagaimana Memcached menangani data di bawah tenda.
Hashing konsisten

Memcached memutuskan node untuk toko/mengambil data, ketika ia menerima permintaan, terlepas dari jumlah node Memcached aktif. Daripada memilih sebuah node acak, atau menggunakan metode round-robin untuk beban-keseimbangan semua node, itu hash semua tombol yang masuk, yang menentukan node yang data yang akan disimpan. Ini fungsi hash merata mendistribusikan kunci di antara semua node.

Algoritma yang digunakan untuk hashing cukup kompleks untuk mengkompensasi kegagalan simpul, sehingga perhitungan tidak berubah ketika perubahan jumlah node, dan tidak ada ambiguitas sementara mengambil data. Aplikasi pada dasarnya harus berhati-hati tentang semua node yang di gugus Memcached, dan Anda perlu mengisi dengan daftar semua IP dan Port di mana server Memcached aktif.

Untuk mengetahui lebih lanjut tentang algoritma ini, baca artikel "Hashing konsisten di memcache-klien."
LRU algoritma

Memcached menggunakan sebagian standar memori maksimum, jadi jika Anda meminta untuk menggunakan maksimum 1 GB RAM, itu akan mencoba untuk tidak menggunakan memori lebih dari itu. Tapi apa yang terjadi jika permintaan masuk untuk menyimpan data, dan Anda tidak memiliki memori yang ditinggalkan? Memcached menggunakan LRU (paling terakhir digunakan) algoritma untuk menentukan data di memori telah paling aktif, dan membuang itu untuk membuat ruang untuk data baru.

Ini adalah di mana konsep utama di balik caching kebohongan, yaitu, Anda tidak dapat mengandalkan Memcached untuk menyimpan beberapa data setelah telah diminta untuk menyimpannya ke memori. Itu semua tergantung pada jumlah lalu lintas yang menerima kunci tertentu, dan benar-benar

Alokasi memori

Memcached ditulis dalam bahasa pemrograman C, sehingga memiliki untuk mengelola skema alokasi memori sendiri. Banyak yang berpikir menggunakan fungsi malloc untuk mengalokasikan memori gratis dari RAM — tapi yang mengakibatkan beberapa ruang alamat utama fragmentasi isu setelah Anda mulai mengalokasikan potongan besar memori. Itu juga mengakibatkan penurunan kinerja setelah aplikasi telah berjalan cukup banyak waktu dan ada banyak mengalokasikan-mengalokasikan siklus.

Hindari seperti skenario, menggunakan Memcached pengalokasi memori lempengan. Untuk mengoptimalkan cache penggunaan aplikasi Anda, Anda perlu tahu bagaimana alokasi lempengan ini bekerja. Pada dasarnya, hal ini seperti setiap lain memori skema manajemen, mana memori terbagi menjadi adil jumlah halaman. Setiap halaman diberikan kelas tertentu lempengan, yang halaman terbagi dalam potongan seukuran sama jumlah terbatas. Potongan ukuran tergantung pada kelas lempengan yang halaman yang telah ditetapkan.

Halaman data tertentu yang ditugaskan untuk tergantung pada ukuran sebenarnya dari data, termasuk kunci dan nilai, yang diberikan halaman kelas lempengan yang relevan. Misalnya, halaman yang 1 MB dalam ukuran dan milik lempengan kelas 1 akan memiliki delapan 128 KB, ukuran potongan. Jadi, jika pasangan kunci-nilai 109 KB dalam ukuran, sangat mungkin akan diberikan sepotong 128 KB dalam Halaman ini kelas lempengan (ya, 19 KB yang terbuang, tapi itulah trade-off).

Sekarang, penting untuk dicatat bahwa algoritma LRU dibahas karya sebelumnya hanya pada setiap lempengan dasar. Jadi, kunci ini cenderung diusir sebelumnya jika slab milik sedang digunakan lebih dari yang lain.
Menginstal Memcached

Ketika menginstal Memcached, kita perlu menginstal daemon dan client Perpustakaan. Juga, Memcached memiliki ketergantungan pada libevent, yang Anda butuhkan untuk menginstal sebelum Memcached. Tetapi, pada sebagian besar distribusi Linux, hampir semudah sudo apt-get install memcached atau yum install memcached.

Selain itu, Anda mungkin ingin untuk kompilasi dari sumber, jika Anda ingin versi yang lebih baru. Dalam hal ini, Anda bisa mendapatkan libevent ketergantungan pada website, dan Memcached di sini. Anda akan, tentu saja, juga memerlukan semua dependensi membangun.

Karena semua Memcached server dalam klaster tidak perlu tahu tentang satu sama lain, ada hampir tidak ada konfigurasi yang perlu Anda lakukan dalam rangka untuk bangun dan berjalan. Untuk memulai contoh Memcached, menjalankan berikut:
memcached -d -m 1024 -u memcache -l 127.0.0.1 -p 11211

Opsi ini menentukan bahwa Memcached menjalankan sebagai daemon, dengan pemakaian memori maks 1 GB. Sebagai pengguna "memcache", mendengarkan pada alamat IP 127.0.0.1 dan pelabuhan 11211. Selain itu, Anda mungkin ingin mencoba menjalankan dengan bendera - vv di latar depan, untuk melihat apa yang terjadi di balik layar:
memcached - vv -m 1024 -u memcache -l 127.0.0.1 -p 11211

Menginstal klien Memcached dan menggunakan sebagian besar tergantung pada bahasa/lingkungan Anda menggunakannya, sehingga Anda dapat melihat dokumentasi untuk lingkungan tertentu jika Anda memerlukan bantuan. Sekarang ini, kita akan hanya berhubungan dengan sesi telnet, dan melihat beberapa statistik dengan perintah. Saya lebih suka tidak pergi ke pemrograman, dan akan menjaga diskusi ini lebih agnostik bahasa.
$ telnet 127.0.0.1 11211
Mencoba 127.0.0.1...
Terhubung ke 127.0.0.1.
Karakter Escape adalah ' ^]'.
Statistik

Setelah Anda memasukkan perintah statistik seperti ditunjukkan di atas, Anda akan melihat daftar panjang statistik yang terkait dengan cache, yang meliputi uptime, cache hit dan cache meleset, antara lain. Ini akan menyerupai apa yang ditampilkan di bawah ini:
STAT pid 1233
STAT uptime 23530
….
STAT get_hits 0
STAT get_misses 0
STAT delete_misses 0
….
AKHIR
Fungsi penting

Klien Memcached sebagian besar memiliki fungsi-fungsi berikut yang tersedia, apa pun lingkungan pemrograman mungkin:

Get(Key)-mengambil nilai yang terkait dengan tombol tertentu
set (kunci, nilai, kadaluwarsa) — Tambah atau mengganti kunci diberikan nilai bersama dengan kedaluwarsa diberikan kali
Tambahkan (kunci, nilai, kadaluwarsa) — menambah nilai yang terkait dengan tombol baru di Memcached; Jika tombol sudah ada, mengembalikan kesalahan.
append(Key)-menambahkan data saat ini pada akhir dari nilai yang sudah terkait dengan kunci.
prepend(Key)-menambahkan data saat ini sebelum apa yang sudah ada, dan yang dikaitkan dengan kunci.
Delete(Key)-menghapus atau membatalkan kunci.
Ganti (kunci, nilai) — mengganti nilai kunci yang ada Memcached. Mengembalikan kesalahan jika tombol terkait tidak sudah ada.
flush_all()-membatalkan semua kunci dalam memori Memcached.

Sepuluh perintah Allah untuk cache baik kinerja

Berikut adalah beberapa petunjuk yang saya ingin Anda untuk diingat ketika bekerja dengan Memcached.

Mengurus data basi dan waktu kedaluwarsa. Pastikan bahwa ketika nilai diperbarui dalam backend database, nilai baru juga diperbarui dalam cache. Juga, waktu kedaluwarsa data harus optimal; membuatnya terlalu lama tidak akan mengambil lebih banyak memori.
Selalu diingat bahwa Memcached bukanlah database. Jangan berpikir bahwa nilai, Onk

Không có nhận xét nào:

Đăng nhận xét