Bagikan melalui


Praktik terbaik arsitektur untuk Azure Event Hubs

Azure Event Hubs adalah layanan pemrosesan peristiwa yang dapat diskalakan yang menyerap dan memproses peristiwa dan data dalam volume besar, dengan latensi rendah dan keandalan tinggi. Ini dapat menerima dan memproses jutaan peristiwa per detik. Data yang dikirim ke hub acara dapat diubah dan disimpan dengan menggunakan penyedia analitik waktu nyata atau adaptor penyimpanan dan pemrosesan batch.

Untuk informasi selengkapnya tentang menggunakan Azure Event Hubs, referensikan dokumentasi Azure Event Hubs untuk mempelajari cara menggunakan Azure Event Hubs untuk menyerap jutaan peristiwa per detik dari perangkat dan aplikasi yang terhubung.

Untuk memahami cara menggunakan Azure Event Hubs membantu Anda mencapai keunggulan dan keandalan operasional untuk beban kerja Anda, lihat artikel berikut:

Bagian berikut khusus untuk Azure Event Hubs dari perspektif Well Architected Framework:

  • Pertimbangan desain
  • Daftar periksa konfigurasi
  • Opsi konfigurasi yang direkomendasikan
  • Artefak sumber

Pertimbangan desain

Azure Event Hubs menyediakan SLA waktu aktif. Untuk informasi selengkapnya, lihat SLA untuk Event Hubs.

Daftar pengecekan

Sudahkah Anda mengonfigurasi Azure Event Hubs dengan memperhatikan keunggulan operasional?

  • Buat kebijakan SendOnly dan ListenOnly untuk penerbit peristiwa dan konsumen.
  • Saat menggunakan SDK untuk mengirim peristiwa ke Azure Event Hubs, pastikan pengecualian yang dilemparkan oleh kebijakan coba lagi (EventHubsException atau OperationCancelledException) ditangkap dengan benar.
  • Dalam skenario volume tinggi, gunakan peristiwa yang dikelompokkan.
  • Setiap konsumen dapat membaca peristiwa dari satu hingga partisi maksimum yang didukung oleh SKU Azure Event Hubs
  • Saat mengembangkan aplikasi baru, gunakan EventProcessorClient (.NET dan Java) atau EventHubConsumerClient (Python dan JavaScript) sebagai SDK klien.
  • Sebagai bagian dari strategi ketersediaan menyeluruh solusi dan penanganan pemulihan bencana, pertimbangkan untuk mengaktifkan opsi geo-recovery Event Hubs.
  • Ketika solusi memiliki sejumlah besar penerbit peristiwa independen, pertimbangkan untuk menggunakan Penerbit Peristiwa untuk kontrol akses terperindas.
  • Jangan terbitkan peristiwa ke partisi tertentu.
  • Saat sering menerbitkan peristiwa, gunakan protokol AMQP jika memungkinkan.
  • Jumlah partisi mencerminkan tingkat paralelisme hilir yang dapat Anda capai.
  • Pastikan setiap aplikasi yang menggunakan grup konsumen terpisah dan hanya satu penerima aktif per grup konsumen yang ada.
  • Saat menggunakan fitur Capture, pertimbangkan dengan cermat konfigurasi jendela waktu dan ukuran file, terutama dengan volume peristiwa yang rendah.

Rekomendasi konfigurasi

Pertimbangkan rekomendasi berikut untuk mengoptimalkan keandalan saat mengonfigurasi Azure Event Hubs:

Rekomendasi Deskripsi
Saat menggunakan SDK untuk mengirim peristiwa ke Event Hubs, pastikan pengecualian yang dihasilkan oleh kebijakan coba lagi (EventHubsException atau OperationCancelledException) ditangkap dengan benar. Saat menggunakan HTTPS, pastikan pola coba lagi yang tepat diimplementasikan.
Dalam skenario volume tinggi, gunakan peristiwa yang dikelompokkan. Layanan ini akan mengirimkan json array dengan beberapa peristiwa kepada pelanggan, bukan array dengan satu peristiwa. Aplikasi yang menggunakan harus memproses array ini.
Setiap konsumen dapat membaca data peristiwa dari satu hingga jumlah partisi maksimum yang didukung oleh Event Hubs SKU. Untuk mencapai skala maksimum di sisi aplikasi konsumen, setiap konsumen harus membaca dari satu partisi.
Saat mengembangkan aplikasi baru, gunakan EventProcessorClient (.NET dan Java) atau EventHubConsumerClient (Python dan JavaScript) sebagai SDK klien. EventProcessorHost sudah tidak digunakan lagi.
Sebagai bagian dari strategi ketersediaan solusi menyeluruh dan pemulihan bencana Anda, pertimbangkan untuk mengaktifkan opsi pemulihan bencana geo di Azure Event Hubs. Opsi ini memungkinkan pembuatan namespace sekunder di wilayah yang berbeda. Hanya namespace aktif yang menerima pesan kapan saja. Pesan dan peristiwa tidak direplikasi ke wilayah sekunder. RTO untuk failover regional adalah hingga 30 menit. Pastikan bahwa RTO ini selaras dengan persyaratan pelanggan dan sesuai dengan strategi ketersediaan yang lebih luas. Jika RTO yang lebih tinggi diperlukan, pertimbangkan untuk menerapkan pola failover pada sisi klien.
Ketika solusi memiliki sejumlah besar penerbit peristiwa independen, pertimbangkan untuk menggunakan Penerbit Peristiwa untuk kontrol akses terperindas. Penerbit Peristiwa secara otomatis mengatur kunci partisi ke nama penerbit, sehingga fitur ini hanya boleh digunakan jika peristiwa berasal dari semua penerbit secara merata.
Jangan terbitkan peristiwa ke partisi tertentu. Jika mengurutkan kejadian sangat penting, terapkan pengurutan di jalur hilir atau gunakan layanan pesan yang berbeda sebagai alternatif.
Saat sering menerbitkan peristiwa, gunakan protokol AMQP jika memungkinkan. AMQP memiliki biaya jaringan yang lebih tinggi saat menginisialisasi sesi, tetapi HTTPS memerlukan overhead TLS untuk setiap permintaan. AMQP menyediakan performa yang lebih tinggi untuk penerbitan yang sering dilakukan.
Jumlah partisi mencerminkan tingkat paralelisme hilir yang dapat Anda capai. Untuk throughput maksimum, gunakan jumlah maksimum partisi yang didukung oleh SKU saat membuat Event Hub. Meningkatkan jumlah partisi memungkinkan Anda menskalakan entitas pemrosesan bersamaan agar sesuai dengan partisi, memastikan ketersediaan kirim dan terima yang optimal.
Saat menggunakan fitur Capture, pertimbangkan dengan cermat konfigurasi jendela waktu dan ukuran file, terutama dengan volume peristiwa yang rendah. Data Lake gen2 akan dikenakan biaya untuk ukuran transaksi minimal. Jika Anda mengatur jendela waktu sangat rendah sehingga file belum mencapai ukuran minimum, Anda akan dikenakan biaya tambahan.

Artefak sumber

Untuk menemukan namespace Layanan Pusat Aktivitas dengan SKU Dasar , gunakan kueri berikut:

Resources 
| where type == 'microsoft.eventhub/namespaces'
| where sku.name == 'Basic'
| project resourceGroup, name, sku.name

Langkah berikutnya