Bagikan melalui


Penyeimbangan Beban

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

  1. Strategi penempatan aktor default acak, aktivasi baru ditempatkan secara acak di seluruh silo. Itu menghasilkan penempatan seimbang dan mencegah hotspot untuk sebagian besar skenario.
  2. Yang lebih canggih ActivationCountBasedPlacement mencoba untuk menyamakan jumlah aktivasi pada semua silo, yang menghasilkan distribusi aktivasi yang lebih merata di seluruh silo. Ini sangat penting untuk elastisitas.
  3. Layanan direktori grain dibangun di atas tabel hash terdistribusi, yang secara inheren seimbang. Layanan direktori memetakan butiran ke aktivasi, setiap silo memiliki bagian dari tabel pemetaan global, dan tabel ini dipartisi secara global dengan cara yang seimbang di semua silo. Kami menggunakan hashing yang konsisten dengan wadah virtual untuk itu.
  4. Klien terhubung ke semua gateway dan menyebarkan permintaan mereka di seluruh gateway, dengan cara yang seimbang.
  5. Layanan pengingat adalah layanan runtime terdistribusi yang dipartisi. Penugasan silo mana yang bertanggung jawab untuk melayani pengingat mana yang seimbang di semua silo melalui hashing yang konsisten, sama seperti di direktori biji-bijian.
  6. Komponen penting performa dalam silo dipartisi, dan pekerjaan di seluruhnya seimbang secara lokal. Dengan begitu runtime silo dapat sepenuhnya menggunakan semua inti CPU yang tersedia dan tidak membuat penyempitan in-silo. Ini berlaku untuk semua sumber daya lokal: alokasi pekerjaan ke utas, soket, tanggung jawab pengiriman, antrean, dll.
  7. Menyeimbangkan QueueBalancerBase tanggung jawab menarik peristiwa dari antrean persistensi di seluruh silo dalam kluster.

Penyeimbangan tidak selalu berarti hilangnya lokalitas. Seseorang dapat diseimbangkan dan masih mempertahankan lokalitas yang baik. Misalnya, saat menyeimbangkan berarti sharding/partisi, Anda dapat mempartisi tanggung jawab untuk tugas logis tertentu, sambil tetap mempertahankan lokalitas dalam setiap partisi. Itu berlaku baik untuk penyeimbangan lokal maupun terdistribusi.