Ringkasan: Evolusi layanan dalam keadaan normal Mari kita mulai dari awal. 1. Aplikasi Monolitik Setiap perusahaan startup pada dasarnya berbasis arsitektur seperti SSM dan SSH, tidak ada yang bisa dikatakan, pada dasarnya setiap programmer pernah mengalaminya. 2. Penerapan RPC Ketika bisnis menjadi semakin besar, kita perlu memperluas layanan secara horizontal. Perluasan sangat sederhana. Selama layanannya stateless, itu sudah cukup, seperti yang ditunjukkan pada gambar di bawah ini: Ketika bisnis menjadi semakin besar, hubungan layanan kita rumit Pada saat yang sama, ada banyak akses layanan yang tidak perlu dihubungkan ke DB, hanya perlu terhubung ke cache, kemudian dapat dibuat terpisah, mengurangi koneksi DB yang berharga.
Evolusi layanan dalam keadaan normal
Mari kita mulai dari awal.
1. Aplikasi tunggal
Setiap start-up company pada dasarnya berbasis arsitektur seperti SSM dan SSH. Tidak ada yang perlu dibicarakan. Pada dasarnya setiap programmer pernah mengalaminya.
2. Aplikasi RPC
Ketika bisnis semakin besar dan besar, kita perlu memperluas layanan secara horizontal. Perluasan sangat sederhana. Pastikan layanan tersebut stateless, seperti gambar di bawah ini:
Ketika bisnis semakin besar dan besar, hubungan layanan kami rumit dan rumit. Di saat yang sama, ada banyak akses layanan yang tidak perlu terhubung ke DB. Cukup sambungkan ke cache. Kemudian dapat dipisahkan dan mengurangi koneksi DB yang berharga. Seperti yang ditunjukkan di bawah ini:
Saya yakin sebagian besar perusahaan berada pada tahap ini. Dubbo lahir untuk mengatasi masalah ini.
3. Sub-database dan sub-tabel
Jika produk perusahaan Anda sangat populer, bisnis Anda terus berkembang dengan kecepatan tinggi, semakin banyak data, dan operasi SQL menjadi semakin lambat, maka database akan menjadi hambatan. Kemudian Anda pasti akan memikirkan sub-database dan sub-tabel, terlepas dari hash atau rentang ID Dengan cara apapun. Seperti yang ditunjukkan di bawah ini:
Seharusnya tidak ada masalah sekarang. Tidak peduli berapa banyak pengguna yang Anda miliki, tidak peduli seberapa tinggi konkurensinya, saya hanya perlu memperluas database tanpa batas, dan memperluas aplikasi tanpa batas.
Demikian juga judul artikel ini, dapatkah sub-database dan sub-tabel menyelesaikan ekspansi tanpa batas?
Padahal, struktur seperti di atas tidak bisa dipecahkan.
Faktanya, masalah ini mirip dengan masalah RPC: terlalu banyak koneksi database! ! !
Biasanya, karena aplikasi RPC kita menggunakan middleware untuk mengakses database, aplikasi sebenarnya tidak mengetahui database mana yang akan diakses. Aturan untuk mengakses database ditentukan oleh middleware, seperti sharding JDBC. Akibatnya, aplikasi ini harus terhubung ke semua database.Sama seperti diagram arsitektur kita di atas, aplikasi RPC harus terhubung ke 3 mysql.Jika ada 30 aplikasi RPC, ukuran pool koneksi database untuk setiap RPC adalah 8. Setiap mysql perlu memelihara 240 koneksi.Kita tahu bahwa jumlah default koneksi mysql adalah 100, dan jumlah koneksi maksimum adalah 16384. Artinya, dengan asumsi bahwa ukuran kumpulan koneksi dari setiap aplikasi adalah 8, lebih dari 2048 aplikasi tidak dapat terus terhubung. , Itu tidak bisa terus berkembang. Perhatikan bahwa karena setiap perpustakaan fisik memiliki banyak perpustakaan logis, dan gerakan layanan mikro sedang berjalan lancar, 2048 tidak sebesar yang terlihat.
Mungkin Anda bilang saya bisa mengatasi masalah jumlah koneksi dengan menambahkan proxy di depan, ternyata kinerja proxy juga akan menjadi masalah, kenapa? Jumlah koneksi proxy tidak dapat melebihi 16384. Jika konkurensi melebihi 16384, menjadi 163840, dan proxy tidak dapat menyelesaikan masalah.
Bagaimana melakukan? Mari kita lihat lagi diagram arsitektur di atas:
Kami menemukan bahwa masalahnya adalah "setiap aplikasi RPC harus terhubung ke semua pustaka", yang menyebabkan peningkatan jumlah koneksi per database saat aplikasi berkembang. Bahkan jika database bertambah, masalah jumlah koneksi tidak dapat diselesaikan.
lalu apa yang harus kita lakukan?
Unitisasi
Penyatuan kedengarannya sulit. Biasanya di beberapa konferensi XXX, saat Anda berbagi istilah keren seperti "tentang dua tempat dan tiga pusat", "tiga tempat dan lima pusat", "lebih banyak tinggal di tempat berbeda", dll., Penyatuan juga akan bekerja sama muncul.
Disini kita tidak membahas begitu dahsyat, hanya membicarakan masalah "terlalu banyak koneksi database".
Sebenarnya, idenya sangat sederhana: Kami hanya tidak membiarkan aplikasi terhubung ke semua database.
Misalkan kita bagi menjadi 10 library sesuai dengan range. Sekarang ada 10 aplikasi.Kita biarkan setiap aplikasi terkoneksi ke satu library saja. Ketika jumlah aplikasi bertambah menjadi 20 dan koneksi database tidak cukup, kita bagi 10 library menjadi 20 Perpustakaan, dengan cara ini, tidak peduli berapa banyak aplikasi yang Anda kembangkan, Anda dapat memecahkan masalah koneksi database yang berlebihan.
Catatan: Prasyarat untuk melakukan ini adalah: Anda harus memastikan bahwa akses ke database yang diminta oleh aplikasi Anda harus ada dalam aplikasi ini. s
Dengan kata lain, ketika pengguna masuk dari DNS, mereka tahu aplikasi mana yang akan mereka tuju. Oleh karena itu, aturan ditetapkan sebelum DNS. Meskipun ini agak dibesar-besarkan, mereka harus tahu pustaka mana yang harus dituju sebelum memasuki aplikasi.
Oleh karena itu, ini biasanya memerlukan aturan, seperti hash ID pengguna, dan pusat konfigurasi menyiarkan aturan hash. Dengan cara ini, semua komponen dapat mempertahankan aturan yang konsisten untuk mengakses database dengan benar. Seperti yang ditunjukkan di bawah ini:
Pada titik ini, kami akhirnya memecahkan masalah ekspansi tanpa batas.
Akhirnya
Artikel ini dimulai dengan satu aplikasi, dan secara bertahap menjelaskan evolusi latar belakang normal. Saya tahu bahwa sub-database dan sub-tabel tidak dapat memecahkan masalah "perluasan kapasitas tidak terbatas". Hanya unitisasi yang dapat menyelesaikan masalah ini. Namun, unitisasi membawa lebih banyak kerumitan. Tetapi manfaatnya terbukti dengan sendirinya.
Lebih banyak ide dibawa oleh unitisasi.
Dengan unitisasi, masalah perluasan tidak terbatas diselesaikan, tetapi kami belum mempertimbangkan masalah titik tunggal, yaitu ketersediaan layanan. Anda tahu, database kami di sini adalah satu titik.
Transfer dari: https://yq.aliyun.com/articles/700692?spm=a2c4e.11154873.tagmain.6.67c74a71FJ5huk
- Didirikan selama satu setengah tahun, kehilangan 2,2 miliar yuan. Platform siaran langsung Douyu bersama
- Tembakan geng dalam drama film dan televisi, drama internet yang muncul dalam drama klasik, Zhang Yishan "sembuh sendiri"
- Juara dunia tinju kelas berat sempat kesal dan tersingkir, Zhang Junlong punya kekuatan memimpin kebangkitan kuat tinju Tiongkok
- "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!