Bagaimana memuat-menyeimbangkan SQL Server 2008 untuk aplikasi ASP.NET penggunaan tinggi?

12

Bayangkan Anda memiliki aplikasi web yang sukses yang menggunakan ASP.NET dan IIS 7. Ini menghasilkan banyak panggilan ke database SQL Server 2008, dan diharapkan akan tersedia untuk publik dengan 99,9% waktu aktif (downtime 8 jam, 45 menit per tahun).

Tujuan kami adalah:

  • Instal Pembaruan Windows di server tanpa menyebabkan downtime untuk pelanggan kami
  • Mencegah crash perangkat keras pada server dari memperlambat aplikasi ASP.NET karena batas waktu

Tidak seperti load-balancing aplikasi ASP.NET, load-balancing SQL tampaknya jauh lebih sulit. Apa praktik terbaik Anda untuk menyiapkan SQL Server 2008 R2 cluster sederhana yang seimbang untuk Micro-ISV yang menggunakan Microsoft stack?

Yakov-MIK
sumber
Beberapa komentar: Apa yang kami lakukan adalah menulis aplikasi ASP.NET yang dapat bekerja dalam mode "offline" tanpa terhubung ke database ketika koneksi terputus. Ini menurun ke layanan "dasar" alih-alih aplikasi berfitur lengkap. Saya juga membaca tentang pendekatan Netflix Chaos Monkey yang inspirasional: readwriteweb.com/cloud/2010/12/…
Bagaimana keadaanmu? Apakah Anda berada di lingkungan yang dihosting dengan server terbatas atau Anda meng-hosting barang Anda sendiri dengan akses ke uang tunai dan kemampuan untuk memperluas nomor server Anda?
@ Jay: Seperti banyak Micro-ISV, kami memiliki dua server khusus yang sedang ditransisikan ke hosting Rackspace Cloud. Kami dapat membeli dua kotak SQL Server khusus jika perlu, tetapi saya ingin tahu apakah ada pendekatan yang lebih baik.
Pindahkan database Anda ke SQL Azure. Anda kemudian terbebas dari mimpi buruk kegagalan, pengadaan, dan pembaruan server. Data Anda digandakan dua kali selain copy pekerjaan Anda dan aspek penyeimbangan beban juga ditangani untuk Anda di sebagian kecil dari biaya nyata untuk mengimplementasikan / mengelola SQL Server, misalnya perangkat keras, lisensi perangkat lunak, waktu dukungan server, dll. Dll. .
Brett Rigby

Jawaban:

4

Jika ketersediaan tinggi yang Anda butuhkan, maka Windows / SQL Server Clustering atau SQL Server Database Mirroring menawarkan solusi. Clustering memang membutuhkan banyak perencanaan dan pengenalan jika Anda belum pernah melakukannya sebelumnya, tetapi itu akan transparan untuk aplikasi.

Load balancing dimungkinkan dengan SQL Server, tetapi tidak untuk yang lemah hati. Ini adalah solusi yang menggunakan Windows Network Load Balancing (NLB) di depan SQL Server. SQL Server sendiri di NLB lebih mudah dikelola jika hanya baca, tetapi bisa dibaca-tulis jika Anda menggunakan replikasi transaksional dengan pelanggan yang dapat diperbarui. Jenis replikasi ini ditandai untuk penghentian dalam versi masa depan.

Satu kemungkinan terakhir adalah Scalable Shared Database, tetapi mereka pasti hanya-baca.

Lebih banyak membaca:

Lihat buku Apan Allan Hirt tentang SQL Server 2005 Ketersediaan Tinggi, dan Replikasi Pro SQL Server 2005/2008 dari Apress.

Basis data bersama yang scalable: http://technet.microsoft.com/en-us/library/ms345392.aspx

Peter Schofield
sumber
2

Sistem basis data relasional jarang memuat keseimbangan dengan cara yang sama seperti server web. Masalah dengan pendekatan klasik untuk load balancing adalah bahwa semua database Anda harus selalu dalam sinkronisasi. Model relasional tidak ada gunanya jika dua server tidak memiliki keadaan yang identik pada suatu titik waktu.

Dari pertanyaan Anda, sepertinya Anda bahkan tidak berusaha melakukan load balancing, yang terutama merupakan ukuran kinerja untuk memastikan bahwa hanya sebanyak mungkin pengguna yang memukul setiap server yang dapat ditangani oleh server tersebut. Sepertinya Anda menginginkan pengaturan ketersediaan tinggi . Karena Anda mengatakan bahwa Anda menggunakan SQL Server, saya akan mencari failovers. Ini berarti bahwa, jika basis data primer tidak tersedia, klien akan mencoba mengakses server failover. SQL Server menangani menjaga instance utama dan setiap failover dalam sinkronisasi dan juga menangani sinkronisasi ulang instance primer ke failover ketika primer kembali online dari offline.


sumber
0

Baiklah, ini dia. TIDAK BISA DILAKUKAN. Bukan tanpa perubahan aplikasi.

  • Instal pembaruan - gunakan pengelompokan atau pencerminan untuk memastikan Anda memiliki DUA database yang berfungsi atau gagal lebih cepat ke komputer lain. Mirroring sangat disukai.
  • Menulis ulang aplikasi untuk menangani itu (mis. Koneksi gagal, perlu menyambung kembali secara transparan sehingga kemudian terhubung ke salinan).

Sadarilah bahwa Anda masih perlu menghapus aplikasi untuk pemeliharaan ketika Anda menggunakan salinan baru / membuat perubahan skema db.

TomTom
sumber
0

Sebuah jawaban yang hemat biaya di sini adalah cukup sering untuk buffer database dengan layanan aplikasi hosting server tier server seimbang komoditas murah yang menyediakan pemrosesan logika dan penyimpanan data yang jika tidak akan mengikat sumber daya database. Jelas ini memerlukan beberapa pemikiran tentang volatilitas data dan strategi caching.

andrewbadera
sumber
-1

Biarkan saya memberi Anda jawaban jurassic. Jika sasaran Anda termasuk "instal pembaruan Windows" Anda tidak bisa diselamatkan.

Saya memiliki abu-abu di janggut saya, dan dapat mengingat saat ketika sebuah aplikasi dapat berjalan 10 tahun tanpa harus menderita "pembaruan sistem operasi". Masa manfaat suatu aplikasi diukur dalam beberapa dekade, bukan tahun.

Jadi saran saya adalah ini: buat versi yang berfungsi dari aplikasi + database SQL Server Anda, dan ISOLASI SERVER DATABASE DARI PEMBARUAN MICROSOFT. Jika tidak rusak, jangan memperbaikinya.

Gunakan disk RAID hot-swappable.

Siapkan server database gambar cermin (sesuai saran TomTom) untuk berjaga-jaga seandainya perangkat keras Anda rusak.


sumber
3
Tim, itu seperti mengatakan mengapa bahkan menggunakan database ketika Anda dapat menyimpan hasil dalam file Excel? Ada banyak kelemahan dalam OS, dan tidak menginstal pembaruan rutin / menjaga aturan anti-virus / firewall tetap terkini adalah saran yang buruk. Tidak disarankan pada level apa pun.