1. Apakah ketersediaan tinggi
High Availability HA (High Availability) merupakan salah satu faktor yang harus diperhatikan dalam perancangan arsitektur sistem terdistribusi, biasanya mengacu pada, Mengurangi waktu ketika sistem tidak dapat menyediakan layanan melalui desain .
Dengan asumsi sistem telah mampu memberikan layanan, maka ketersediaan sistem adalah 100%. Jika sistem berjalan untuk 100 satuan waktu maka akan ada 1 satuan waktu yang tidak dapat memberikan layanan, dikatakan bahwa ketersediaan sistemnya 99%. Target ketersediaan tinggi dari banyak perusahaan adalah 49s, atau 99,99%, yang berarti waktu henti sistem tahunan adalah 8,76 jam.
Situs pencarian Baidu dikenal di industri sebagai sistem dengan jaminan ketersediaan tinggi yang sangat baik. Orang-orang bahkan akan menilai "konektivitas jaringan" berdasarkan apakah www.baidu.com dapat diakses. Layanan Baidu yang sangat tersedia membuat orang-orang memiliki "konektivitas jaringan". , Baidu dapat mengakses "," Baidu tidak dapat membuka, seharusnya jaringan tidak dapat terhubung "kesan, ini sebenarnya pujian tertinggi untuk Baidu HA.
2. Bagaimana memastikan ketersediaan tinggi sistem
Kita semua tahu bahwa satu titik adalah musuh ketersediaan sistem yang tinggi, dan satu titik sering kali merupakan risiko terbesar dan musuh dari ketersediaan tinggi sistem. Titik tunggal harus dihindari dalam proses desain sistem. Secara metodologis, prinsip jaminan ketersediaan tinggi adalah "pengelompokan", atau "redundansi" : Hanya ada satu titik, dan layanan akan terpengaruh jika ditutup; jika ada cadangan yang berlebihan, ada cadangan lain yang dapat diisi ulang.
Untuk memastikan ketersediaan sistem yang tinggi, prinsip inti dari desain arsitektur adalah redundansi. Dengan redundansi, itu tidak cukup. Setiap kali terjadi kesalahan, intervensi manual dan pemulihan pasti akan meningkatkan praktik sistem yang tidak dapat diperbaiki. Jadi, seringkali Sadarilah ketersediaan tinggi sistem melalui "kegagalan otomatis" . Selanjutnya, mari kita lihat bagaimana memastikan ketersediaan tinggi sistem melalui redundansi + failover otomatis dalam arsitektur Internet yang khas.
3. Arsitektur berlapis Internet yang umum
Arsitektur terdistribusi Internet yang umum adalah seperti di atas, dibagi menjadi:
- (1) Lapisan klien: Penelepon biasa adalah browser atau aplikasi aplikasi ponsel
- (2) Lapisan proxy terbalik: pintu masuk sistem, proxy terbalik
- (3) Lapisan aplikasi situs: menerapkan logika aplikasi inti dan mengembalikan html atau json
- (4) Lapisan layanan: Jika layanan direalisasikan, akan ada lapisan ini
- (5) Lapisan Data-Cache: Cache mempercepat akses ke penyimpanan
- (6) Lapisan data-database: penyimpanan data solidifikasi database
Ketersediaan tinggi dari seluruh sistem dicapai melalui redundansi setiap lapisan + failover otomatis.
Empat, praktik arsitektur ketersediaan tinggi berlapis
1. Lapisan klien- > Membalik lapisan proxy Ketersediaan tinggi
Lapisan klien Untuk Membalik lapisan proxy Ketersediaan tinggi dicapai melalui redundansi lapisan proxy balik. Ambil nginx sebagai contoh: ada dua nginx, satu menyediakan layanan online, dan yang lainnya redundan untuk memastikan ketersediaan yang tinggi. Praktik umum adalah keepalived survival detection, dan virtual IP yang sama menyediakan layanan.
Kegagalan otomatis: Ketika nginx hang, keepalived dapat mendeteksinya, dan secara otomatis akan melakukan failover dan secara otomatis memigrasi lalu lintas ke shadow-nginx. Karena IP virtual yang sama digunakan, proses pengalihan ini transparan bagi pemanggil .
2. Membalik lapisan proxy- > Tingkat situs Ketersediaan tinggi
Membalik lapisan proxy Untuk Tingkat situs Ketersediaan tinggi dicapai melalui redundansi di tingkat situs. Dengan asumsi bahwa lapisan reverse proxy adalah nginx, beberapa backend web dapat dikonfigurasi di nginx.conf, dan nginx dapat mendeteksi viabilitas beberapa backend.
Kegagalan otomatis: Saat server web tidak aktif, nginx dapat mendeteksinya, dan secara otomatis akan melakukan failover dan secara otomatis memigrasi lalu lintas ke server web lain. Seluruh proses secara otomatis diselesaikan oleh nginx dan transparan bagi pemanggil.
3. Tingkat situs- > Lapisan layanan Ketersediaan tinggi
Tingkat situs Untuk Lapisan layanan Ketersediaan tinggi dicapai melalui redundansi di lapisan layanan. "Kumpulan koneksi layanan" akan membuat beberapa koneksi dengan layanan downstream, dan setiap permintaan akan "secara acak" memilih koneksi untuk mengakses layanan downstream.
Pengalihan otomatis: Saat layanan tidak aktif, kumpulan sambungan layanan dapat mendeteksinya, dan secara otomatis akan melakukan failover dan secara otomatis memigrasi lalu lintas ke layanan lain. Seluruh proses secara otomatis diselesaikan oleh kumpulan sambungan, yang transparan bagi pemanggil (Jadi kumpulan koneksi layanan di RPC-klien adalah komponen dasar yang sangat penting).
4. Lapisan layanan > Lapisan cache Ketersediaan tinggi
Lapisan layanan Untuk Lapisan cache Ketersediaan tinggi dicapai melalui redundansi data cache. Ada beberapa cara redundansi data di lapisan cache: Yang pertama adalah menggunakan enkapsulasi sisi klien, dan layanan membaca dua kali atau menulis dua kali cache.
Lapisan cache juga dapat memecahkan masalah ketersediaan tinggi lapisan cache dengan mendukung cluster cache yang mendukung sinkronisasi master-slave.
Ambil redis sebagai contoh. Redis secara alami mendukung sinkronisasi master-slave, dan redis secara resmi juga memiliki mekanisme sentinel untuk deteksi viabilitas redis.
Pengalihan otomatis: Saat master redis hang, sentinel dapat mendeteksinya dan memberi tahu pemanggil untuk mengakses redis baru. Seluruh proses diselesaikan oleh sentinel dan kluster redis, yang transparan bagi pemanggil.
Setelah berbicara tentang ketersediaan tinggi dari cache, saya harus mengatakan satu hal lagi di sini. Bisnis tidak selalu memiliki persyaratan "ketersediaan tinggi" untuk cache. Kasus penggunaan lebih banyak untuk cache digunakan untuk "mempercepat akses data": menaruh beberapa data di cache Di sini, jika cache hang atau cache hilang, Anda dapat pergi ke database back-end untuk mengambil data.
Untuk skenario bisnis yang memungkinkan "cache miss", rekomendasi untuk arsitektur cache adalah:
Kemas cache kv menjadi cluster layanan , Siapkan proxy upstream (proxy dapat menggunakan cluster untuk memastikan ketersediaan tinggi), bagian belakang proxy dibagi menjadi beberapa instance sesuai dengan level kunci akses cache, dan akses setiap instance tidak terlalu tersedia.
Instance cache diblokir : Saat instance yang terpecah secara horizontal menutup, lapisan proxy langsung mengembalikan cache yang tidak ada. Saat ini, cache hangup juga transparan bagi pemanggil. Ada lebih sedikit contoh segmentasi horizontal utama. Pencirian ulang tidak disarankan, karena ini akan dengan mudah menyebabkan ketidakkonsistenan dalam data cache.
5. Lapisan layanan > Lapisan database Ketersediaan tinggi
Untuk sebagian besar teknologi Internet, lapisan database menggunakan arsitektur "sinkronisasi master-slave, pemisahan baca-tulis", sehingga ketersediaan tinggi dari lapisan database dibagi menjadi dua jenis: "ketersediaan tinggi perpustakaan baca" dan "ketersediaan tinggi perpustakaan tulis".
- Lapisan layanan > Lapisan database "baca" Ketersediaan tinggi
Lapisan layanan Untuk Pembacaan database Ketersediaan tinggi dicapai melalui redundansi perpustakaan baca.
Karena pustaka baca redundan, umumnya ada setidaknya dua pustaka budak. "Kumpulan koneksi database" akan membuat beberapa koneksi ke pustaka baca, dan setiap permintaan akan diarahkan ke pustaka baca ini.
otomatis Failover : Saat perpustakaan membaca ditutup, db-connection-pool dapat mendeteksinya, dan secara otomatis akan melakukan failover dan secara otomatis memigrasi lalu lintas ke perpustakaan membaca lainnya. Seluruh proses secara otomatis diselesaikan oleh kumpulan koneksi, yang transparan bagi pemanggil ( Jadi kumpulan koneksi database di DAO adalah komponen dasar yang sangat penting).
- Lapisan layanan > Lapisan database "tulis" Ketersediaan tinggi
Lapisan layanan Untuk Penulisan database Ketersediaan tinggi dicapai melalui redundansi perpustakaan menulis.
Ambil mysql sebagai contoh. Anda dapat mengatur dua sinkronisasi master ganda mysql, satu untuk menyediakan layanan online, dan yang lainnya untuk menyediakan redundansi untuk memastikan ketersediaan yang tinggi. Praktik umum adalah untuk menjaga deteksi kelangsungan hidup, dan IP virtual yang sama menyediakan layanan.
otomatis Failover : Saat pustaka penulisan hang, keepalived dapat mendeteksinya, dan secara otomatis akan melakukan failover dan secara otomatis memigrasikan lalu lintas ke shadow-db-master. Karena IP virtual yang sama digunakan, proses pengalihan ini transparan bagi pemanggil. .
Lima, ringkasan
High Availability HA (High Availability) merupakan salah satu faktor yang harus diperhatikan dalam perancangan arsitektur sistem terdistribusi, biasanya mengacu pada pengurangan waktu ketika sistem tidak dapat memberikan layanan melalui perancangan.
Secara metodologis, ketersediaan tinggi melalui redundansi + otomatis Failover Untuk mencapai.
Ketersediaan tinggi dari seluruh arsitektur sistem hierarki Internet secara komprehensif diwujudkan melalui redundansi + kegagalan otomatis setiap lapisan, khususnya:
- (1) Lapisan klien Untuk Membalik lapisan proxy Ketersediaan tinggi dicapai melalui redundansi lapisan reverse proxy. Praktik umum adalah keepalived + failover otomatis IP virtual.
- (2) Membalik lapisan proxy Untuk Tingkat situs Ketersediaan tinggi dicapai melalui redundansi tingkat situs. Praktik umum adalah deteksi survivabilitas dan failover otomatis antara nginx dan server web.
- (3) Tingkat situs Untuk Lapisan layanan Ketersediaan tinggi dicapai melalui redundansi di lapisan layanan. Praktik yang umum dilakukan adalah memastikan pengalihan otomatis melalui kumpulan sambungan layanan.
- (4) Lapisan layanan Untuk Lapisan cache Ketersediaan tinggi dicapai melalui redundansi data yang di-cache. Praktik umum adalah meng-cache klien dengan baca ganda dan tulis ganda, atau gunakan sinkronisasi data master-slave dari kluster cache dan pengamanan sentinel tetap-hidup dan failover otomatis; lebih banyak skenario bisnis, benar Cache tidak memiliki persyaratan ketersediaan yang tinggi, dan layanan cache dapat digunakan untuk melindungi pemanggil dari kompleksitas yang mendasarinya.
- (5) Lapisan layanan Untuk Database "membaca" Ketersediaan tinggi dicapai melalui redundansi pustaka baca. Praktik yang umum adalah memastikan failover otomatis melalui db-connection-pool.
- (6) Lapisan layanan Untuk Database "tulis" Ketersediaan tinggi dicapai melalui redundansi pustaka penulisan. Praktik umum adalah keepalived + failover otomatis IP virtual.
Transfer dari:
- "Shen Cong" dimana kamu? Anak laki-laki itu diculik di Guangzhou pada usia satu tahun, dan ayahnya berhenti dari pekerjaannya dan menjual rumahnya untuk mencari seorang putra selama 14 tahun.
- Juara dunia tinju kelas berat sempat kesal dan tersingkir, Zhang Junlong punya kekuatan memimpin kebangkitan kuat tinju Tiongkok
- Lihatlah bagaimana Reba memperlakukan asisten, lalu lihat bagaimana bayi memperlakukan asisten. Inilah celahnya!