Röportajcı: Mesaj ara yazılımı, saniyede yüzbinlerce yüksek eşzamanlı yazma işlemini nasıl başarır?

"Bu yazıda, aynı zamanda internet şirketi görüşmeleri için oldukça yüksek frekanslı bir teknik test sitesi olan Kafka'nın mimari tasarım ilkelerinden bazılarından bahsedelim.

Kafka, büyük veri alanında yaygın olarak kullanılan, yüksek verimli, düşük gecikmeli, yüksek eş zamanlı, yüksek performanslı bir mesajlaşma ara yazılımıdır. İyi yapılandırılmış bir Kafka kümesi, saniyede yüz binlerce veya milyonlarca çok yüksek eşzamanlı yazma işlemi bile gerçekleştirebilir.

Öyleyse Kafka bu kadar yüksek verim ve performansa nasıl ulaşır? Bu yazıda biraz bundan bahsedelim.

1. Sayfa önbelleğe alma teknolojisi + disk sıralı yazma

İlk olarak Kafka, aşağıdaki şekilde gösterildiği gibi her veri aldığında diske yazar.

Yani burada yardım edemeyiz ama bir sorumuz var: Veriler bir diskte saklanıyorsa ve veriler sık sık disk dosyasına yazılıyorsa, performans düşük mü olacak? Herkes disk yazma performansının son derece düşük olduğunu düşünmelidir.

Evet, yukarıdaki resim kadar basitse, performans gerçekten de nispeten zayıftır.

Ama aslında Kafka'nın burada mükemmel ve göze çarpan bir tasarımı var, sırf veri yazmanın performansını garantilemek için ... Her şeyden önce Kafka, işletim sisteminin sayfa önbelleğine göre dosya yazımı gerçekleştiriyor.

İşletim sisteminin kendisi, bellekte bir önbellek olan sayfa önbelleği adı verilen bir önbellek katmanına sahiptir.Buna ayrıca işletim sisteminin kendisi tarafından yönetilen önbellek anlamına gelen os önbellek de diyebiliriz.

Bir disk dosyası yazdığınızda, doğrudan os önbelleğine yazabilirsiniz, yani yalnızca belleğe yazabilirsiniz ve ardından işletim sistemi, işletim sistemi önbelleğindeki verileri ne zaman disk dosyasına boşaltacağına karar verir.

Sadece bu adımla, disk dosyası yazma performansı çok geliştirilebilir, çünkü aslında bu diske değil belleğe yazmaya eşdeğerdir.Aşağıdaki şekle bakın.

Sonra bir diğeri de Kafka veri yazarken, önemli olan nokta disk sıralı yazmada yazmasıdır. Başka bir deyişle, verileri dosyada rastgele bir konumda değiştirmeyin, yalnızca dosyanın sonuna ekleyin.

Sıradan mekanik diskler, rastgele yazarsanız son derece düşük performansa sahiptir, yani veri yazmak için dosyanın belirli bir konumunu bulabilirsiniz.

Ancak ekli dosyanın sonuna sırayla veri yazarsanız, bu disk sıralı yazma performansı temelde belleğin kendisine yazma performansıyla aynı olabilir.

Yani herkes bilir: Yukarıdaki resimde Kafka veri yazarken, bir yandan OS düzeyinde sayfa önbelleğine dayalı olarak veri yazar, bu nedenle performans yüksektir ve özü bellek yazmaktır.

Diğeri, disk sıralı yazmayı kullanmasıdır, bu nedenle veriler diske flaşlandığında bile, performans son derece yüksektir, bu da belleğe yazmaya benzer.

Yukarıdaki iki noktaya dayanarak Kafka, veri yazmak için ultra yüksek performans elde etti.

Öyleyse bir düşünün, Kafka'nın bir veri parçası yazması 1 milisaniye sürüyorsa, saniyede 1.000 parça veri yazmak mümkün müdür?

Peki ya Kafka'nın performansı aşırı derecede yüksekse ve bir veri parçası yazmak yalnızca 0,01 milisaniye sürerse? Peki saniyede 100.000 kayıt yazılabilir mi?

Bu nedenle, saniyede on binlerce hatta yüzbinlerce veri yazmanın temel noktasının, her veri yazma performansını mümkün olduğunca artırmak, böylece birim zaman ve üretim başına daha fazla veri yazılabilmesini sağlamaktır. .

2. Sıfır kopyalama teknolojisi

Bu yazıyı yazdıktan sonra tüketimden bahsedelim.

Herkes sık sık Kafka'dan veri aldığımızı bilmeli, bu nedenle verileri tükettiğimizde, aslında Kafka'nın disk dosyasından bir veri parçası okuruz ve aşağıdaki şekilde gösterildiği gibi alt tüketicilere göndeririz.

Öyleyse, veriler sık sık diskten okunup tüketicilere gönderiliyorsa, performans darboğazı nerede?

Kafka'nın optimize etmek için hiçbir şey yapmadığı varsayılırsa, verileri diskten okur ve aşağı akım tüketicilere gönderir, o zaman yaklaşık süreç aşağıdaki gibidir:

Öncelikle okunacak verilerin işletim sistemi önbelleğinde olup olmadığını kontrol edin, yoksa verileri disk dosyasından okuyun ve işletim sistemi önbelleğine koyun.

Ardından, işletim sisteminin işletim sistemi önbelleğinden verileri uygulama işleminin önbelleğine kopyalayın, ardından uygulama işleminin önbelleğinden verileri işletim sistemi düzeyinde Soket önbelleğine kopyalayın ve son olarak verileri Soket önbelleğinden çıkarın ve ağ kartına gönderin. Alt tüketime gönderin.

Tüm süreç aşağıdaki şekilde gösterilmektedir:

Yukarıdaki resme bakarsanız, açıkça iki tane gereksiz kopya olduğunu görebilirsiniz!

İşletim sisteminin önbelleğinden uygulama işleminin önbelleğine kopyalandıktan sonra, uygulamanın önbelleğinden işletim sisteminin Soket önbelleğine geri kopyalandı.

Ve bu iki kopyayı oluşturmak için, ortada, biri uygulama yürütülürken ve diğeri bağlam yürütmek için işletim sistemine geçirilirken olmak üzere birkaç bağlam anahtarı oluştu.

Bu nedenle, verileri bu şekilde okumak performansı tüketir.

Kafka, bu sorunu çözmek için verileri okurken sıfır kopya teknolojisini kullanır.

Yani işletim sisteminin önbelleğindeki veriler doğrudan ağ kartına gönderilir ve daha sonra verilerin ortada iki kez kopyalanması adımını atlanarak alt tüketicilere iletilir.Yuva önbelleğine yalnızca bir tanımlayıcı kopyalanacak ve veriler kopyalanmayacaktır. Soket önbelleğine.

Bu hassas süreci deneyimlemek için aşağıdaki resme bakalım:

Sıfır kopyalama teknolojisi ile, işletim sistemi önbelleğindeki verileri uygulama önbelleğine ve ardından uygulama önbelleğinden soket önbelleğine kopyalamaya gerek yoktur.Her iki kopya da atlanır, bu nedenle buna sıfır kopya denir.

Soket önbelleği, yalnızca kopyalanan verilerin tanımlayıcısıdır ve ardından veriler doğrudan işletim sistemi önbelleğinden ağ kartına gönderilir Bu işlem, veri tüketimi sırasında dosya verilerini okuma performansını büyük ölçüde artırır.

Ve herkes diskten veri okurken, önce işletim sistemi önbelleğinde herhangi bir veri olup olmadığını kontrol edeceğini fark edecek, eğer öyleyse, veriler aslında doğrudan bellekten okunacaktır.

Kafka kümesi iyi ayarlanmışsa, büyük miktarda verinin doğrudan işletim sisteminin önbelleğine yazıldığını ve ardından veri okunduğunda, işletim sisteminin önbelleğinden de okunduğunu göreceksiniz.

Kafka'nın tamamen belleğe dayalı veri yazma ve okuma sağlamasına eşdeğerdir, bu nedenle genel performans son derece yüksek olacaktır.

Bir konuyu ele almak için, bir dahaki sefere Elasticsearch'ün mimarisinin prensibinden bahsetme fırsatım var.Aslında, ES'nin alt katmanı, Kafka prensibine benzer şekilde, os önbelleğine dayalı çok sayıda yüksek performanslı veri alımını gerçekleştirir.

3. Nihai özet

Kafka'nın altında yatan sayfa önbellek teknolojisinin kullanımı, disk sıralı yazma fikri ve sıfır kopya teknolojisinin kullanımı hakkındaki bu makale sayesinde herkes, Kafka'nın makinesinin alt kısımdaki verileri yazarken ve okurken ne kullandığını anlamalıdır. Saniyede yüzbinlerce iş hacmine ulaşmak için performansının neden bu kadar yüksek olabileceği fikri.

Bu tür bir tasarım düşüncesi, ara katman mimarisini kendimiz tasarlamamız için veya bir röportaj için dışarı çıktığımızda çok yararlıdır.

Shishan'ın mimari notları (id: shishan100)

Yazar: Çin Shi Shan, BAT mimarlık cüzdanında yılların deneyimi

Orijinal adres: https://www.imooc.com/article/283987

Herhangi bir ihlal varsa, lütfen silmek için iletişime geçin, teşekkür ederim.

2019'da bir cep telefonu satın almak için bu Hengping'i okumak yeterli
önceki
WeChat ile rekabet eden sosyal yazılımı hatırlıyor musunuz?
Sonraki
Peach Blossom Spring hala var mı?
Peach Blossom Spring hala var mı?
Bir taksi çağırma yazılımı daha ortaya çıktı, bu çalkantılı toplumda kendimizi nasıl korumalıyız!
Yükselt! Bilgi August Magic City'nin en kaliteli bilgi dersi sizi bekliyor!
Nanshan, "On Millik Dürüstlük İnşaatı" faaliyetinin başlatılmasına öncülük etti
"Tembel" deki eserler, bu küçük araçlar, doğanızı serbest bırakmanıza izin verir
Tasarımcılar, tüketim yükseltmesinin temel gücüdür! 2017 "Tasarım + Girişimcilik" salonu Hangzhou'da düzenlendi
Sözlerini İncil olarak alan erkek arkadaşın değil
Onunla karşılaştın mı? Kötü kariyer değerlendirmeleri, çevrimiçi ticaretin arkasındaki kirli endüstri
Naipaul'un ölümü: insanların bu dünyada bir yeri yok ve gidecek hiçbir yeri yok
Java Gelişmiş Görüşme Serilerinden Biri: Sistem mimarinize neden mesaj ara yazılımını tanıtmak istiyorsunuz?
Samsung 970EVO Plus değerlendirmesi: en iyisi olacak
To Top