Anda punya masalah besar. Menurut saya cara Anda berpikir tentang suatu masalah adalah masalah yang lebih besar. Mari kita bahas beberapa hal mendasar.
Clustering digunakan untuk memecahkan masalah besar, seperti masalah “makan gajah”. Untuk mengatasi masalah ini, Anda dapat merancang predator unik yang lebih besar dan bermulut besar. Namun sejarah dan paleontologi telah menunjukkan kepada kita bahwa predator besar tidak mudah bertahan hidup (mereka merugikan lingkungan).
Jadi untuk mengatasi masalah Anda, Anda bisa menggunakan server yang lebih besar dan lebih kuat.
Atau, Anda bisa menggunakan pengelompokan.
Pengelompokan memecahkan masalah “makan gajah” dengan cara yang sangat berbeda. Alih-alih mengirimkan predator besar yang unik dengan mulut besar untuk memakan gajah, mereka akan menggunakan konsep pemrosesan terdistribusi dan berbagi untuk memakannya satu gigitan dalam satu waktu. Jika dilakukan dengan benar, semut bisa memakan gajah. Jika jumlahnya cukup dan situasinya tepat.
Namun perhatikan dalam contoh saya, semut berukuran sangat kecil... Seekor semut tidak akan pernah membawa seluruh gajah. Anda dapat membawa seluruh gajah jika semua semut bekerja sama tetapi kemudian Anda mengalami masalah konkurensi dan penguncian (Anda harus mengoordinasikan semut).
Semut telah menunjukkan kepada kita cara yang lebih baik untuk mengatasi hal ini. Mereka akan mengambil sepotong gajah dan menangani masalahnya dalam bagian yang lebih kecil.
Di sistem Anda, Anda bertanya bagaimana Anda dapat menyinkronkan data antar node... Pertanyaan saya adalah mengapa? Jika Anda menyinkronkan data maka Anda melakukan mirroring dan masalah Anda menjadi lebih besar (Anda mengkloning gajah tetapi hanya bisa memakan yang asli).
Solusi untuk masalah Anda adalah memikirkan kembali solusinya dan melihat apakah Anda dapat memecah masalah menjadi bagian-bagian yang lebih kecil.
Dalam pola Akka dan Aktor, cara terbaik untuk mengatasi masalah adalah dengan menggunakan "proses" yang lebih kecil (satu semut). Walaupun prosesnya sendiri hampir tidak ada gunanya, namun bila digunakan dalam skala besar, proses ini bisa menjadi sangat berguna. Ketika arsitekturnya dikerjakan dengan benar, Anda akan melihat bahwa membawa penyembur api ke semut tidak akan mengalahkan mereka... Lebih banyak semut akan datang, mereka akan terus mengatasi masalahnya.
Menyalin dan menyinkronkan data bukanlah solusi Anda, melainkan mengelompokkannya. Anda harus mengambil data Anda dan memecahnya hingga Anda dapat memberikannya kepada seekor semut. Jika Anda bisa melakukan ini maka Anda bisa menggunakan Akka. Jika pendekatan ini tampak menggelikan maka Akka bukan untuk Anda.
Namun pertimbangkan ini... Anda jelas memiliki kekhawatiran terhadap backend database Anda - Anda tidak ingin meningkatkan IO dan menyebabkan satu titik kegagalan. Saya harus setuju dengan Anda. Namun Anda perlu memikirkan kembali beberapa hal. Anda dapat melakukan pencerminan basis data untuk menghilangkan satu titik kegagalan tetapi Anda benar bahwa ini tidak akan menghilangkan hambatan. Jadi katakanlah cermin menghilangkan satu titik kegagalan... Sekarang mari kita serang bagian kemacetannya.
Jika Anda dapat membagi data Anda menjadi potongan-potongan yang cukup kecil sehingga semut dapat menanganinya maka saya akan mendorong Anda untuk memberitahu semut Anda untuk hanya melaporkan ke database ketika data berubah... Anda dapat membacanya sekali pada inisialisasi (Anda memerlukan backend simpan, jangan menipu diri sendiri, listrik bisa cepat hilang... harus disimpan di suatu tempat) tetapi jika Anda menyuruh semut Anda untuk tetap bertahan hanya data yang diubah maka Anda akan menghapus semua pertanyaan dari persamaan yang akan secara drastis menggeser ke mana bebannya. berasal dari. Setelah Anda hanya memiliki pembaruan, penyisipan, dan penghapusan untuk ditangani... keseluruhan lanskap akan jauh lebih sederhana.
Clustering seharusnya menjadi solusi bagi Anda, tetapi hanya jika Anda dapat menghilangkan konsep cermin dari pikiran Anda.
Node cluster dapat dan akan crash... Namun node tersebut dapat direspawn di tempat lain ke node lain, sehingga Anda selalu memiliki sistem yang cepat. Hanya ketika Anda menghadapi kerusakan atau kehilangan sebuah node/proses pekerja/semut Anda harus memuat ulang data...
Semoga berhasil... Anda telah menguraikan masalah berat yang saya lihat orang-orang dengan gelar rekayasa perangkat lunak gagal memecahkannya.
person
Karell Ste-Marie
schedule
17.11.2016