Disk destekli ileti arabelleği davranışını yapılandırma
Önemli
Bu ayar, Aracı kaynağının değiştirilmesini gerektirir ve yalnızca Azure CLI veya Azure Portal kullanılarak ilk dağıtım zamanında yapılandırılabilir. Aracı yapılandırma değişiklikleri gerekiyorsa yeni bir dağıtım gerekir. Daha fazla bilgi edinmek için bkz . Varsayılan Aracıyı özelleştirme.
Disk destekli ileti arabelleği özelliği, MQTT aracısı dağıtılmış MQTT aracısı içinde ileti kuyruklarının verimli yönetimi için kullanılır. Avantajlara şunlar dahildir:
Verimli kuyruk yönetimi: MQTT aracısında her abone bir ileti kuyruğuyla ilişkilendirilir. Abonenin iletileri işleme hızı kuyruğun boyutunu doğrudan etkiler. Abone iletileri yavaş işlerse veya bağlantıyı keserse ancak bir MQTT kalıcı oturumu isterse, kuyruk kullanılabilir bellekten daha büyük olabilir.
Kalıcı oturumlar için veri koruma: Disk destekli ileti arabelleği özelliği, bir kuyruk kullanılabilir belleği aştığında diske sorunsuz bir şekilde arabelleğe alındığından emin olur. Bu özellik, veri kaybını önler ve MQTT kalıcı oturumlarını destekler ve abonelerin yeniden bağlandığınızda ileti kuyrukları olduğu gibi oturumlarını sürdürmesine olanak sağlar. Disk kısa ömürlü depolama olarak kullanılır ve bellekten taşma görevi görür. Diske yazılan veriler dayanıklı değildir ve pod çıktığında kaybolur, ancak her arka uç zincirindeki en az bir pod işlevsel kaldığı sürece, bir bütün olarak aracı veri kaybetmez.
Bağlantı sorunlarını işleme: Bulut bağlayıcıları, ağ bağlantısının kesilmesi nedeniyle Event Grid MQTT aracısı gibi dış sistemlerle iletişim kurulamadığında bağlantı sorunlarıyla karşılaşabilen kalıcı oturumlara sahip aboneler olarak kabul edilir. Bu tür senaryolarda iletiler (PUBLISHes) birikir. MQTT aracısı, bağlantı geri yüklenene kadar bu iletileri akıllı bir şekilde belleğe veya diske arabelleğe alır ve ileti bütünlüğünü sağlar.
Varsayılan olarak, disk destekli ileti arabelleği özelliği devre dışıdır. Bu durumda, okuyucu havuzu veya karalama havuzu abone kuyruğu sınırı tarafından tanımlanan sınıra ulaştığında iletiler bellekte kalır ve istemcilere geri baskı uygulanır.
Disk destekli ileti arabelleğinin yapılandırılması, özellikle ileti işleme hızının ve bağlantısının kritik olduğu senaryolarda güçlü ve güvenilir bir ileti kuyruğa alma sisteminin korunması için gereklidir.
Not
MQTT aracısı, ek şifreleme olmadan istemcilerden alınan verileri diske tam olarak yazar. Diskin güvenliğini sağlamak, aracı tarafından depolanan verileri korumak için gereklidir.
Yapılandırma seçenekleri
Disk destekli ileti arabelleği yapılandırmak için Aracı kaynağındaki bölümü düzenleyin diskBackedMessageBuffer
. Şu anda bu yalnızca komutunu kullanarak --broker-config-file
Azure IoT İşlemlerini dağıttığınızda bayrağı kullanılarak az iot ops create
desteklenir.
Başlamak için DiskBackedMessageBuffer API başvurusundan sonra bir Broker yapılandırma dosyası hazırlayın.
Örneğin, en basit yapılandırma yalnızca en büyük boyutu belirtmeyi içerir. Bu durumda, bir emptyDir
birim bağlanır. maxSize
Değeri birimin boyut sınırı emptyDir
olarak kullanılır. Ancak bu, birim sınırlamalarını veren en az tercih edilen seçenektir emptyDir
.
{
"diskBackedMessageBuffer": {
"maxSize": "<SIZE>"
}
}
Daha iyi bir disk destekli ileti arabelleği yapılandırması elde etmek için kısa ömürlü birim veya kalıcı birim talebi belirterek ileti arabelleğinize ayrılmış bir depolama birimi bağlayın. Örneğin:
{
"diskBackedMessageBuffer": {
"maxSize": "<SIZE>",
"ephemeralVolumeClaimSpec": {
"storageClassName": "<NAME>",
"accessModes": [
"<MODE>"
]
}
}
}
{
"persistentVolumeClaimSpec": {
"maxSize": "<SIZE>",
"ephemeralVolumeClaimSpec": {
"storageClassName": "<NAME>",
"accessModes": [
"<MODE>"
]
}
}
}
Aşağıdaki ayarları yaparak aracı iletisi arabelleği seçeneklerini uyarlayın:
Birimi yapılandırma: İleti arabelleğiniz için ayrılmış bir depolama birimi bağlamak üzere bir birim talep şablonu belirtin.
Bir depolama sınıfı seçin: özelliğini kullanarak istenen StorageClass'ı
storageClassName
tanımlayın.Erişim modlarını tanımlama: Biriminiz için ihtiyacınız olan erişim modlarını belirleyin. Daha fazla bilgi için bkz . kalıcı birim erişim modları.
Farklı ses düzeyi modlarını anlamak için aşağıdaki bölümleri kullanın:
- Kısa ömürlü birim tercih edilen seçenektir,
- Kalıcı birim daha sonra tercih edilir ve
emptyDir
en az tercih edilen birimdir .
Hem kalıcı hem de kısa ömürlü birimler genellikle aynı depolama sınıfları tarafından sağlanır. Her iki seçenek de kullanılabiliyorsa kısa ömürlü seçeneğini belirleyin. Kısa ömürlü birimlerin Kubernetes 1.23 veya üzerini gerektirdiğini unutmayın.
İpucu
Kısa Ömürlü Birim Talebi (EVC) veya Kalıcı Birim Talebi (PVC) şablonu belirtmek, seçtiğiniz bir depolama sınıfını kullanmanıza olanak sağlayarak bazı dağıtım senaryolarında esnekliği artırır. Örneğin, PVC şablonu kullanılarak sağlanan Kalıcı Birimler (PV) gibi kubectl get pv
komutlarda görünür ve bu, küme durumunu incelemek için yararlı olabilir.
Kubernetes düğümlerinizde ileti arabelleği için yeterli yerel disk alanı yoksa Azure Blobları gibi ağ depolama alanı sağlayan bir depolama sınıfı kullanın. Ancak, ileti arabelleği hızlı erişimden yararlandığından ve dayanıklılık gerektirmediğinden daha küçük maxSize
bir değere sahip yerel disk kullanmak genellikle daha iyidir.
Azure IoT İşlemlerini disk destekli ileti arabelleği ile dağıtma
Disk destekli ileti arabelleği kullanmak için bayrağıyla komutunu kullanarak Azure IoT İşlemleri'ni az iot ops create
dağıtın --broker-config-file
. Aşağıdaki komuta bakın (kısa süre için atlanmış diğer parametreler):
az iot ops create ... --broker-config-file <FILE>.json
Bu ayar dağıtımdan sonra değiştirilemez. Disk destekli ileti arabelleği yapılandırmasını değiştirmek için Azure IoT İşlemleri örneğini yeniden dağıtın.
Kısa ömürlü birim
Kısa ömürlü birim , ileti arabelleğiniz için tercih edilen seçenektir.
Kısa ömürlü birim için Depolama sağlayıcılarıyla ilgili dikkat edilmesi gerekenler bölümündeki önerileri izleyin.
özelliğinin ephemeralVolumeClaimSpec
değeri, arka uç zincirlerinin StatefulSet belirtimlerinde birimin özelliği olarak ephemeral.volumeClaimTemplate.spec
kullanılır.
Örneğin, 1 gigabayt kapasiteli kısa ömürlü bir birim kullanmak için Aracı kaynağınızda aşağıdaki parametreleri belirtin:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"ephemeralVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
Kalıcı birim
Kalıcı birim, kısa ömürlü birimden sonra ileti arabelleğiniz için bir sonraki tercih edilen seçenektir.
Kalıcı birim için Depolama sağlayıcılarıyla ilgili dikkat edilmesi gerekenler bölümündeki önerileri izleyin.
özelliğinin persistentVolumeClaimSpec
değeri, arka uç zincirlerinin StatefulSet belirtimlerinin özelliği olarak volumeClaimTemplates.spec
kullanılır.
Örneğin, 1 gigabayt kapasiteli kalıcı bir birim kullanmak için Aracı kaynağınızda aşağıdaki parametreleri belirtin:
{
"diskBackedMessageBuffer": {
"maxSize": "1G",
"persistentVolumeClaimSpec": {
"storageClassName": "foo",
"accessModes": [
"ReadWriteOnce"
]
}
}
}
emptyDir
hacim
EmptyDir birimi, kalıcı birimden sonra en az tercih edilen seçenektir.
Dosya sistemi kotalarına sahip bir küme kullanırken yalnızca emptyDir birimi kullanın. Daha fazla bilgi için Dosya Sistemi proje kotası sekmesindeki ayrıntılara bakın. Özellik etkinleştirilmemişse, küme herhangi bir sınırı zorlamayan düzenli taramalar yapar ve konak düğümün disk alanını doldurmasına ve tüm konak düğümünü iyi durumda değil olarak işaretlemesine izin verir.
Örneğin, 1 gigabayt kapasiteli bir emptyDir birimi kullanmak için Aracı kaynağınızda aşağıdaki parametreleri belirtin:
{
"diskBackedMessageBuffer": {
"maxSize": "1G"
}
}
Depolama sağlayıcıları için dikkat edilmesi gerekenler
Seçtiğiniz depolama sağlayıcısının davranışını göz önünde bulundurun. Örneğin, gibi rancher.io/local-path
sağlayıcılar kullanılırken. Sağlayıcı sınırları desteklemiyorsa birimi doldurmak düğümün disk alanını tüketir. Bu, Kubernetes'in düğümü ve ilişkili tüm podları iyi durumda değil olarak işaretlemesine neden olabilir. Depolama sağlayıcınızın bu tür senaryolarda nasıl davrandığını anlamak çok önemlidir.
Devre dışı
Disk destekli ileti arabelleği kullanmak istemiyorsanız Aracı kaynağınıza özelliğini eklemeyin diskBackedMessageBufferSettings
. Bu aynı zamanda varsayılan davranıştır.
Kalıcılık
Disk destekli ileti arabelleği özelliğinin kalıcılık ile eş anlamlı olmadığını anlamak önemlidir. Bu bağlamda kalıcılık, pod yeniden başlatmaları arasında devam eden verileri ifade eder. Ancak bu özellik, verilerin diske kaydedilmesi için geçici depolama alanı sağlayarak pod yeniden başlatmaları sırasında bellek taşmalarını ve veri kaybını önler.