WeChat asenkron kuyruk MQ 2.0'ın fonksiyon optimizasyonu ve genişletme fikirlerini ayrıntılı olarak açıklayın

Yazar Liao Wenxin

Düzenle Xiaozhi

MQ eşzamansız kuyruk, çeşitli iş senaryolarında ayırma, arabelleğe alma ve eşzamansızlaştırma gibi hizmetler sağlamak için yaygın olarak kullanılan WeChat arka planının önemli bir bileşenidir. Bu makale, kuyruk tasarımı için bir referans sağlamak üzere bileşenin 2.0 sürümünün özelliklerini ve optimizasyonlarını tanıtır.

Arka plan tanıtımı

MQ 1.0 sürümünün başlangıcında, temelde genel iş senaryolarının asenkron gereksinimlerini karşıladı ve tek bir makine altında yüksek performanslı görev sürekliliği ve tüketim planlaması gerçekleştirdi. 1.0'ın temel çerçevesi aşağıda gösterilmiştir:

Gördüğünüz gibi, esas olarak iki bölüme ayrılıyor: MQ ve Worker. MQ bir görev sürekliliği ve zamanlama çerçevesidir ve Worker bir görev işleme çerçevesidir. Yaygın kuyruklarla karşılaştırıldığında, bu bileşenin birkaç özelliği vardır:

  • Bağımsız performansa, tek makineli görev sürekliliğine ve yerel tüketime odaklanın;

  • Çerçeve, ekibe girme ve yerleştirme, gönderme, işleme, sonuçları gönderme ve yok etme dahil olmak üzere görevin tüm yaşam döngüsüyle ilgilidir. İş, çerçeveye dayalı olarak geliştirilir ve görevin işleme mantığına odaklanır.

İşin gelişmesiyle ve giderek karmaşıklaşan iş senaryolarıyla karşı karşıya kaldıkça, sürüm 1.0 yavaş yavaş bunaltıcı hale geldi. Bu nedenle, 1.0 temelinde, MQ 2.0 sürümünü uyguladık. Ana optimizasyon noktaları aşağıdaki hususları içerir:

  • Daha iyi görev zamanlaması

  • Daha verimli görev işleme

  • Daha güçlü aşırı yük koruması

Her optimizasyon noktası aşağıda ayrıntılı olarak açıklanmıştır.

Daha iyi görev zamanlaması

Durum analizi

IOS mesaj bildirim işlevi, MQ bileşenlerinin tipik bir uygulama senaryosudur. WeChat'in arka planı çoklu IDC dağıtımı özelliklerine sahiptir.Farklı IDC'ler ve Apple Push Hizmeti (APN'ler) arasındaki ağ kalitesi eşit değildir ve bazı bağlantı hataları sık sık meydana gelir.

MQ 1.0'ın görevleri yalnızca makine tarafından kullanılabildiğinden, ağ kalitesindeki düşüş doğrudan İşçinin tüketim yeteneğinin azalmasına yol açacak ve bu da bir birikime neden olacak ve sonuçta mesaj hizmetinin kalitesini bozacaktır.

Bu amaçla önerdik Makineler arası tüketim modu. Amaç, bir Merkezi olmayan ve uyarlanabilir Sistemdeki yerel birikim sorununu çözmek için esnek tüketim ağı.

Görev planlaması, makineler arası tüketimin temel sorunudur

Tüketim modeli tek bir makineden birden çok makineye genişledikten sonra, yüzleşmemiz gereken temel soru, hangi görevlerin hangi işçi tarafından ele alınması gerektiğidir. Aslında, birden çok bilgisayar odası, birden çok IDC, bant genişliği maliyetleri, görev gecikmeleri vb. Gibi faktörleri göz önünde bulundurarak kolayca sezgisel ve basit bir fikir edinebiliriz:

Görevler önce yerel makinede tüketilir ve bir biriktirme listesi olduğunda makineler arası tüketim gerçekleşir.

İstediğimiz çapraz makine tüketimine nasıl ulaşılır? Düşündükten sonra sorunu üç alt probleme ayırdık:

  • Görev mi yoksa zorlama görevi mi?

  • İşçi, MQ'nun birikmiş iş yığınını nasıl algılıyor?

  • İşçi, MQ'nun birikmiş birikimini nasıl ortadan kaldırır?

Bunları aşağıda tek tek tartışalım.

Görevi çek veya görevi it

MQ 1.0 altında MQ, yerel çalışanların yük durumunu doğru bir şekilde gözlemleyebilir ve görevleri işlenmek üzere boştaki çalışanlara gönderebilir. İtme yöntemi, son derece düşük görev işleme gecikmesi sağlayabilir.

Makineler arası tüketime genişledikten sonra, Çalışan herhangi bir MQ görevini kullanabilir. MQ için, tüm ağdaki her çalışanın durumunu doğru bir şekilde korumak zordu. Zorla görev yöntemini kullanmaya devam ederseniz, Çalışanın işleme kapasitesinden daha fazla görev alması muhtemeldir ve bu da bir birikime neden olur.

Görevleri çekmek için İşçiyi kullanırsanız, çekme hızı İşçinin kendi tüketim yeteneğine göre ayarlanabilir, ancak görev gecikmesinde bir fedakarlık vardır.

  • İtme görevleri: avantajlar, düşük gecikme; dezavantajlar, görevler İşçi tarafında biriktirilir ve yeniden planlanamaz;

  • Çekme görevleri: Avantajlar, görevler MQ tarafında geriye dönüktür ve boşta çalışanlar tarafından geri çekilebilir; dezavantajlar, gecikme biraz daha yüksektir;

Basit bir değiş tokuşun ardından, görevleri çekme yöntemini seçtik Sonuçta, İşçi tarafındaki görevlerin birikmesini kabul etmek bizim için zor.

İşçiler MQ'nun birikmiş işlerini nasıl algılıyor?

Daha önce de belirtildiği gibi, sistem yalnızca bir görev biriktirme listesi olduğunda makineler arası tüketim üretmelidir. Bu nedenle, MQ bir iş yığını oluşturduğunda, İşçileri bir şekilde bilgilendirebilmelidir. Aynı zamanda, birikim miktarı hızlı bir şekilde değişir ve bildirim yöntemi aşağıdaki açılardan verimli olmalıdır:

  • Hız: olabildiğince hızlı;

  • Hassasiyet: Geçersiz bildirimlerin gönderilmesini azaltmak için olabildiğince az bildirim gönderin;

Bu amaçla başardık Yayın modu , MQ tarafından oluşturulan birikim bilgilerini birden çok çalışana bir mesaj olarak yayınlayın.

Etkili iş yığını bildirimlerinin gereksinimlerini nasıl karşılar?

  • Hız: Bekleme listesi bilgilerini Çalışan sonuna göndermek için uzun bağlantılar kullanın;

  • Doğruluk: yerel, makineler arası ve IDC arası hiyerarşik yayın elde etmek için esnek abonelik filtreleri aracılığıyla;

Yayın modu sayesinde, MQ iş yığını algı sorununu verimli bir şekilde çözdük.

İşçi MQ'nun İş Listesini Nasıl Ortadan Kaldırır?

Yayın modu aracılığıyla, her bir Çalışan, ilgilendiği tüm MQ'ların birikmiş iş yığınını gözlemleyebilir ve tüm sistemin biriktirme listesi dağıtım istatistiklerini oluşturabilir. Bu bilgiyi aldıktan sonra, Çalışan hangi MQ görevini yapacağına nasıl karar verir?

Veya orijinal cazibemize geri dönün ve yerel tüketimi sağlamak için elimizden gelenin en iyisini yapın. Dolayısıyla stratejimiz, İşçilerin makinenin birikmiş iş yükünü ortadan kaldırmaya öncelik vermesi ve diğer İşçilere yalnızca yedek kapasitesi olduğunda yardım etmesi gerektiğini söylemektir.

Öncelik seviyelerini çekerek, kuyruk sistemi normal olduğunda makineler arası tüketim büyük ölçüde azaltılabilir ve bir arıza meydana geldiğinde yerel biriktirme listesi etkili bir şekilde ortadan kaldırılabilir.

Yük dengeleme analizi

Makineler arası tüketim modeli, tüm sistemin perspektifinden tamamen dağıtılmıştır.Her bir MQ ve İşçi, bağımsız ve özgürce sisteme katılabilir veya sistemden çıkabilir.

Bu rekabetçi tüketici sisteminde, spesifik dağıtım durumuna ve farklı modellerin farklı tüketim yeteneklerine bağlı olarak, tam bir yük dengeleme durumuna ulaşmak imkansızdır. Ancak sistem yerel bir aşırı yük oluşturduğunda, göreceli dengeyi sağlamak için uyarlamalı olarak ayarlanabilir.

Özet

Gerçek uygulama etkisinden MQ 2.0, bildirim itme hizmetinin IDC düzeyinde afet toleransını gerçekleştirir.Yalnızca bir IDC mevcut olsa bile, itme kalitesi korunabilir.

MQ 2.0'ın makineler arası tüketim modu desteği, işletmeler için yeni bir kuyruk felaket toleransı modu sağlar:

  • MQ ve Worker tamamen ayrı ayrı konuşlandırılabilir, makine sayısı ayrı ayrı planlanır ve talep üzerine birbirini etkilemeden devreye alınır;

  • MQ'nun yerel birikimi, Worker'ı genişleterek ortadan kaldırılabilir;

  • İşçinin kısmi tüketim gücü düşüşü, diğer işçiler tarafından otomatik olarak felaketten kurtarma olabilir;

Daha verimli görev işleme

Durum analizi

WeChat 6 yıldan uzun bir süredir piyasaya sürüldü. Arka planın iş mantığı bu güne kadar gelişti ve genellikle çok karmaşık. Şimdi daha uç bir örneğe bakalım Grup sohbeti toplu paralel dağıtım .

Yukarıdaki şekil, grup mesaj teslim hizmetinin basitleştirilmiş bir akış şemasıdır. WeChat grup mesajlarının hacminin hızla artmasıyla birlikte, getirdiği maliyet baskısı artıyor ve işletme öğrencileri, parti paralelizasyonu için bir optimizasyon yöntemi önerdiler. Basitçe ifade etmek gerekirse, her adımda üretilen RPC erişimi, gerçek erişim makinesine göre bir dizi toplu işlemde toplanır ve ardından paralel olarak yürütülür.

Genel olarak konuşursak, tek bir paralelliğin yazılması zor değildir.Genel olarak, işletme öğrencileri çıplak yazmayı seçebilirler. Ancak, birden fazla parti paralelleştirmesi içeriyorsa ve hala iç içe geçme varsa, işler o kadar basit değildir. Sonunda, kod son derece karmaşık hale gelecek ve iş geliştirme öğrencileri perişan olacak. MQ bu tür sorunları çerçeveden çözebilir mi?

MapReduce benzeri görev işleme çerçevesi

Aslında, grup mesajı teslimi için optimizasyon gereksinimlerinin derinlemesine analizinde şunları görebilirsiniz:

  • Bir toplu paralelleştirme işlemi esasen bir MapReduce işlemidir;

  • Tüm grup mesajı teslim süreci, birden çok MapReduce işleminin bir seri ve paralel bağlantısıdır;

Bu nedenle, bu tür bir sorunu temelden çözmek için MQ, işletme için MapReduce benzeri bir görev işleme çerçevesi sağlar.

Çerçeve, eşzamanlı havuzların açlık sorununu çözen eşzamanlı havuz izolasyon yetenekleri sağlarken, genel MR sürecinin ve eşzamanlı zamanlama sürecinin kapsüllenmesini sağlar. İşletme öğrencilerinin sıkıcı kodlardan kurtulmasına ve gerçek işe daha fazla enerji harcamasına izin verin.

Akış görevi işleme çerçevesi

Toplu paralelleştirme gerekliliğine ek olarak, işte sıklıkla bahsedilen bir gereksinim, görev işleme sırasında kuyruğa bazı yeni görevlerin eklenmesi gerekliliğidir. Genel olarak, görevi yürütmek ve ekibe katılmak için bir RPC kullanılır. MQ 2.0 altında, akış görevleri bunu gerçekleştirmeye yardımcı olabilir.

Akış görevi olarak adlandırılan görev, görev işlemenin sonunda, görev sonucunu döndürmenin yanı sıra bir dizi yeni görev de döndürebileceği anlamına gelir. Bu görevler, daha hafif ve daha işlemsel olan MQ dahili çerçevesi aracılığıyla takıma aktarılır.

Geleneksel senkronize işleme modeliyle karşılaştırıldığında, hafif bir mantıksal asenkron model sağlar. Uzun bir mantık, serileştirme ve çoğullama için birçok küçük işlevsel bloğa bölünebilir ve her seviye arasındaki MQ, arabellek ve zamanlama görevi görür.

Bu işleme modeli tüm mantık için uygun olmamakla birlikte, bileşen işlevinin bir parçası olarak yeni bir problem çözme yeteneği sağlar.

Özet

MQ 2.0 tarafından sağlanan MapReduce benzeri görev işleme çerçevesi ve akışlı görev işleme çerçevesi, iş gerçekleştirme için uygun destek sağlar.

Daha güçlü aşırı yük koruması

Durum analizi

MQ'nun önemli rolü, sistemde bir tampon düğümü olarak hareket etmektir ve akış kontrolü yeteneği çok kritiktir. MQ 1.0 altında, akış kontrolü yalnızca kuyruğun görev kuyruktan çıkarma hızı yapılandırılarak elde edilebilir. Birkaç sorun var:

  • Yapılandırmanın manuel olarak ayarlanması gerekir ve arka uca gerçek erişimi tahmin etmek zordur;

  • Arka uç aşırı yüklendiğinde uyarlamalı olarak ayarlanamaz;

  • Kendisi aşırı yük durumundayken uyarlamalı olarak ayarlanamaz;

Problem analizi

Talep açısından bakıldığında, MQ'nun aşırı yük koruma gereksinimlerinin iki yönü vardır, biri kendinizi aşırı yüklemeden korumak, diğeri ise arka ucu aşırı yüklemeden korumaktır.

Aşırı yüklenmeye neden olan birçok faktör vardır MQ açısından bu faktörler iki kategoriye ayrılabilir. Biri, kendi CPU kullanımı, bellek kullanımı ve görev yürütmenin başarı oranı gibi doğrudan gözlemleyebileceği faktörler; diğeri, işletme tarafından arka uca fiilen yapılan çağrıların miktarı gibi doğrudan gözlemlenemeyen faktörlerdir.

Bu iki tür faktörden başlayarak, aşırı yükten korunma stratejisini iki ana stratejiye ayırıyoruz:

  • İleri hız sınırı: MQ, doğrudan kendisi tarafından gözlemlenen veriler aracılığıyla görev gönderme hızını etkin bir şekilde sınırlar;

  • Geriye doğru hız sınırı: MQ, işletme tarafından geri beslenen veriler aracılığıyla görev gönderme hızını pasif olarak sınırlar;

Aşağıda iki strateji tartışılmaktadır.

İleri hız sınırı

CPU kullanımına dayalı akış kontrolü

Hız sınırı stratejisi iyi anlaşılmıştır, yani CPU kullanımı çok yüksek olduğunda, görev işlem hızı, kuyruğun önbellek kapasitesini sağlamak için CPU kaynaklarına öncelik vermek için azaltılır.

Görev başarı oranına dayalı akış kontrolü

Arka uç modülü arızalandığında, genellikle çok sayıda arızaya ve kuyruk görevlerinin yeniden denemelerine yol açar.Bu yeniden denemelerin büyüklüğü genellikle arka uç modül tasarımının etkin çıktısını çok aşar ve bu da arıza kurtarmaya büyük zorluklar getirir.

Akış kontrol stratejisi, görev yürütmenin başarı oranı hakkında bilgi toplar, arka ucun etkin çıktısını değerlendirir ve geri bildirim hesaplamaları yoluyla görevin yeniden deneme hızını sınırlar.

Geri hız sınırı

MQ, evrensel geriye dönük hız sınırlama yeteneğini gerçekleştirir ve işletme, hız kontrolü amacına ulaşmak için belirli bir arayüz aracılığıyla kontrol miktarını MQ'ya geri gönderir.

Arka uç RPC trafiğine dayalı akış kontrolü

Bazı işletmeler görevleri yerine getirirken arka uçta sıklıkla farklı derecelerde çoğalma erişimiyle karşılaşıyoruz. Yalnızca görev işleme hızı sınırlıdır ve arka uca üretilen gerçek çağrı miktarı doğru bir şekilde sınırlanamaz.

Bu strateji, işletme tarafından arka uca yapılan gerçek çağrı miktarını toplayarak görev işlemenin hızını tersine ayarlar.

Özet

MQ 2.0, akış kontrol gereksinimlerini analiz ederek ileri ve geri yönlerde etkili akış kontrol yöntemleri sağlar ve daha sonra daha rafine edilmiş akış kontrol stratejileri için genişletme yeteneğini saklı tutar ve aşırı yük koruma kapasitesini artırır.

Sonuna yaz

Sektördeki diğer kuyruklarla karşılaştırıldığında WeChat'in kuyruk bileşeni, işletme öğrencilerinin üretkenliğini büyük ölçüde özgürleştiren gerçek iş senaryolarıyla daha yakından ilgilidir.

1.0 temelinde, MQ 2.0 görev planlaması, görev işleme ve aşırı yük korumasında birçok çalışma ve girişimde bulundu.Şu anda WeChat'in çeşitli temel iş modüllerinde çalışıyor ve 2017'de Yılbaşı Gecesi trafik zirvesi testine tabi tutuldu.

Gelecekte, bu bileşen görev sürekliliği, felaket toleransı ve zamanlama performansı açısından sürekli olarak optimize edilecektir. MQ hakkında herhangi bir sorunuz veya fikriniz varsa, lütfen yazarla görüşün.

yazar hakkında

2013 yılında Tencent'e katılan Liao Wenxin, WeChat arka plan temel işlevlerinin ve mimarisinin geliştirilmesi ve işletilmesiyle ilgileniyor.Haber bildirim sistemi, görev kuyruğu bileşenleri, Bahar Festivali Gala kırmızı zarf etkinlikleri ve diğer projelerde yer aldı.O büyük dağıtılmış yüksek performanslı sistemlerde geniş deneyime sahiptir. .

Bugünün Tavsiyesi

Okumak için aşağıdaki resme tıklayın

360 Hu Ning: CTO'ya giden yolda dört kelime var ...

"Tucao Konferansı" Yang Mi, Zhou Bichang'ı desteklemek için video kaydetti, ancak parlak elmas elbisesi çok gizli
önceki
2018 yılının 12. haftasında 120 finansman kaydedildi ve Chehejia 3 milyar finansman aldı, yerli ve yabancı işletmelerin hizmet alanı sıcak olmaya devam ediyor | Potansiyel Haftalık
Sonraki
aşk çoktan geçtiğinde
İnsanlar evde oturduğunda, karısı gökten mi çıkıyor? Hu Ge, gizli evliliğe maruz kaldıktan sonra kişisel olarak yanıt verdi, yedi karakter yüksek EQ gösteriyor
Yumuşak bir yıldız hayranının kendi kendini yetiştirmesi üzerine, bu benim "okul ekipmanım"
Siyah takım elbiseli Feynman kilo aldıktan sonra hala yakışıklı ve ödül vermek için sahneye geldiğinde Wu Zhenyu tarafından şaşkına dönecek.
190323 Cesur köprücük kemiği açığa çıktı! Seo Hyun Seul Moda Haftası'nda zarif bir şekilde göründü
"El Listesi" İdeal İlçe İmar Planım
Panorama Network'ün kovuşturma geçmişi: Geri çekilme oranı% 90'ı aşan, günde 11,7 kovuşturma
2018'e geri dönüp baktığımızda new Yeni yılın başında, lütfen bu anlarda "Hunan İyi İnsanlar" ın ekranı yenilemesine izin verin
Yang Mi ve Hawick Lau tarafından boşandıktan sonra yayınlanan ilk röportaj, altın cümleyi defalarca bozdu: İyi yaşamak istiyorsanız, daha düşünceli olmalısınız.
190323 Hua Chenyu, beşinci prens gibi giyinmiş süper sevimli, kafasına dokunuyor ve akimbo, çok tatlı
39 yıllık bir efsane yaratma, yeni Mercedes-Benz G500 test sürüşü deneyimi
88! En güçlü "Örümcek Adam: Paralel Evren" Paskalya yumurtalarının tam analizi, daha ilginç ayrıntılar
To Top