Saya sedang menulis rencana bisnis dan saya harus mensimulasikan biaya ketika situs web saya akan mencapai dari 500.000 pengunjung unik.
- pengunjung: 500.000
- tampilan halaman: 1.500.000
- tayangan laman laba-laba: 500.000
- total tampilan halaman: 2.000.000
Setiap halaman melakukan 50 pertanyaan + -
- pertanyaan per hari: 100 Juta
- per jam: 4 Juta
- per menit: 70.000
- per detik: 1.200
- puncak: 3.000
Melakukan perhitungan ini, saya perlu 3.000 pertanyaan kedua ... jenis server apa yang bisa mengatasinya?
Masalahnya adalah: sebenarnya situs saya melakukan 2.000 kunjungan hari, dan memiliki - + 150/200 kueri / detik ... mulai dari titik ini saya akan mengharapkan 50.000 kueri / detik.
Berapa banyak server yang saya butuhkan di cluster atau replikasi mengelola pekerjaan ini?
Jawaban:
Saya dulu bekerja untuk perusahaan e-commerce dengan situs web yang memiliki beberapa juta klik halaman per hari. Kami memiliki DELL PE 1750 tunggal dengan 2 CPU single core dan 2GB RAM, ukuran perkiraan basis data. 4GB. Pada masa puncaknya server ini menangani hingga 50rb + kueri per detik.
Setelah mengatakan ini: database terstruktur dengan baik, semua kueri disetel dengan halus (kami memiliki sesi mingguan menganalisis log kueri lambat dan memperbaiki kueri dan indeks) dan pengaturan server juga disetel dengan baik. Caching jelas merupakan ide yang bagus, tetapi MySQL tetap melakukannya, Anda hanya perlu menganalisis kinerjanya dan kemudian menyelaraskan bagaimana memori Anda digunakan (cache permintaan vs opsi lain).
Dari pengalaman itu saya dapat memberi tahu Anda bahwa dampak tertinggi disebabkan oleh indeks yang hilang, indeks yang salah, dan desain basis data yang buruk (misalnya bidang string panjang sebagai kunci utama dan omong kosong serupa).
sumber
Itu semua tergantung pada seberapa kompleks kueri itu, dan berapa banyak memori yang dimiliki server, dan seberapa cepat disk.
Jika kueri sangat sederhana, atau disetel dengan sangat baik maka satu server database besar dapat mengatasinya. Namun jika pertanyaannya sangat kompleks (atau sederhana tetapi tidak disetel dengan benar) maka Anda akan memerlukan beberapa server.
sumber
Ini benar-benar tidak dapat diperkirakan tanpa mengetahui apa pun tentang kueri spesifik yang Anda jalankan, skema database dan ukurannya.
SELECT sederhana pada kolom yang diindeks adalah binatang yang sangat berbeda dari beberapa BERGABUNG berdasarkan yang tidak diindeks ... dan tentu saja banyak yang berubah jika tabel yang terlibat berisi catatan 1K atau 1M.
Juga:
sumber
Seperti yang dikatakan Ignacio, Anda mungkin ingin melihat caching. Dalam cm atau bahkan di depan tumpukan. 50+ pertanyaan untuk setiap (setiap!) Halaman benar-benar banyak.
sumber
Menilai dari komentar Anda, faktor terbesar adalah ukuran kumpulan data Anda, atau setidaknya ukuran kumpulan data "panas". 3,000qps atau bahkan 8,000qps pada server 16-inti tidak menjadi masalah sama sekali selama server jarang harus pergi ke disk untuk memenuhi permintaan. Setelah kumpulan data aktif melebihi jumlah memori yang digunakan InnoDB untuk menyimpannya, kinerja Anda akan menurun dengan cepat.
sumber
Untuk kumpulan data "panas" besar, mungkin bernilai investasi pada waktunya untuk dikonversi ke skema "data besar", itu adalah untuk apa mereka. Misalnya, jika Anda memiliki sejumlah besar data untuk diambil, tetapi Anda tidak pernah menulis ulang, tetapi hanya menambahkan data baru, lihat Apache Hive. Jelajahi sekitar, mereka biasanya rasa Anda dapat antarmuka cukup mudah untuk kode yang ada, yang juga akan mencegah mulas kehabisan ruang cache.
sumber
Ada terlalu banyak hal yang dapat mempengaruhi kueri Anda per detik, jangan percaya data saya tanpa menguji diri Anda. Saya memposting hasil tes kecepatan saya di sini untuk membantu seseorang memperkirakan qps dengan basis data dan mesin mysql (2018-09) saat ini. Dalam pengujian saya ukuran data kurang dari memori server (yang secara dramatis mengurangi IO dan meningkatkan banyak kinerja).
Saya menggunakan memori 3.75GB satu cpu, 100GB SSD, server cloud mysql gcp dan mendapatkan:
sumber