Penyeimbangan beban

Penyeimbangan beban, dalam arti luas, adalah salah satu pilar Orleans runtime. Orleans Runtime mencoba menjaga semuanya tetap seimbang, karena penyeimbangan memaksimalkan penggunaan sumber daya, menghindari hotspot, mengarah pada performa yang lebih baik, dan membantu elastisitas. Penyeimbangan beban pada Orleans berlaku di beberapa tempat. Di bawah ini adalah daftar yang tidak lengkap di mana runtime melakukan penyeimbangan:

  1. Strategi penempatan aktor default bersifat acak; aktivasi baru ditempatkan secara acak di seluruh silo. Ini menghasilkan penempatan yang seimbang dan mencegah hotspot untuk sebagian besar skenario.
  2. Strategi yang lebih canggih ActivationCountBasedPlacement mencoba menyamakan jumlah aktivasi pada semua silo, menghasilkan distribusi yang lebih merata di seluruh silo. Ini sangat penting untuk elastisitas.
  3. Layanan direktori biji-bijian dibangun di atas tabel hash terdistribusi, yang secara inheren seimbang. Layanan direktori memetakan butir ke aktivasi. Setiap silo memiliki bagian dari tabel pemetaan global, dan tabel ini dipartisi secara global dengan cara yang seimbang di semua silo menggunakan hashing yang konsisten dengan wadah virtual.
  4. Klien terhubung ke semua gateway dan menyebarkan permintaan mereka ke seluruhnya dengan cara yang seimbang.
  5. Layanan pengingat adalah layanan runtime terdistribusi dan dipartisi. Penugasan silo mana yang bertanggung jawab untuk melayani pengingat tertentu diatur secara merata di semua silo menggunakan teknik hashing konsisten, mirip dengan direktori biji-bijian.
  6. Komponen yang kritis terhadap kinerja dalam silo dipisahkan, dan pekerjaan yang dilakukan di antara komponen-komponen tersebut diseimbangkan secara lokal. Ini memungkinkan runtime silo untuk sepenuhnya memanfaatkan semua inti CPU yang tersedia dan menghindari kemacetan dalam silo. Ini berlaku untuk semua sumber daya lokal: alokasi tugas ke utas, soket, tanggung jawab pengiriman, antrean, dll.
  7. QueueBalancerBase bertanggung jawab untuk menyeimbangkan penarikan peristiwa dari antrean persistensi di seluruh silo dalam kluster.

Penyeimbangan tidak selalu berarti hilangnya lokalitas. Anda dapat mencapai keseimbangan dengan tetap mempertahankan lokalitas yang baik. Misalnya, saat penyeimbangan melibatkan sharding/partisi, Anda dapat membagi tanggung jawab untuk tugas logis tertentu sambil mempertahankan lokalitas dalam setiap partisi. Ini berlaku untuk penyeimbangan lokal dan terdistribusi.