NetEase Bulut Müzik Mühendisi, mesaj kuyruğunu dönüştürmenin yolunu kişisel olarak ortaya çıkardı! | Teknik Başlıklar

Yazar | Lin Dezhi

Sorumlu Editör | Hu Weiwei

On yıllık metin yazarı tecrübeli bir sürücü, Netease yorum alanı kadar iyi değil.

NetEase Bulut Müzik 2013 2016'da faaliyete geçtikten sonra, işletme hızlı büyümeye devam etti. Bu makale, NetEase Cloud Music Message Queue başkanı Lin Dezhi'nin son Apache FlinkRocketMQ Meetup Shanghai istasyonunda yaptığı paylaşımdan derlenmiştir. Bu makale sayesinde şunları öğreneceksiniz:

  • Netease bulut müzik mesaj sırası dönüşüm arka plan

  • Mesaj kuyrukları için netease bulut müzik iş gereksinimleri

  • Netease bulut müzik mesaj kuyruğu mimari tasarımı

  • NetEase Cloud Music Message Queue'nun bazı gelişmiş özelliklerine giriş

  • Netease bulut müzik mesaj kuyruğu iniş kullanımı

  • NetEase Bulut Müzik Mesaj Sırası Açıklanmayan Planlama

arka fon

NetEase Cloud Music Nisan 2013'te çevrimiçi hale geldiğinden beri, işleri ve kullanıcıları büyük bir hızla büyüdü. Arka plan teknolojisi, geleneksel Tomcat kümelerinden dağıtılmış mikro hizmetlere hızla gelişti ve yinelendi. İşin sürekli büyümesiyle, Cloud Music'in RPC, API ağ geçidi ve bağlantı izleme hizmetleri doğdu. Mesaj kuyrukları da RabbitMQ kümelerinden Kafka kümesi. Mesaj kuyrukları için daha fazlası kullanım aşamasındadır ve kullanımda da birçok sorun ortaya çıkmıştır. Bu nedenle, tamamen kontrol edilebilen, sorunları kendimiz giderebileceğimiz ve izleyebileceğimiz ve iş ihtiyaçlarına göre özelleştirilebilen ve değiştirilebilen bir mesaj kuyruğu sağlamayı umuyoruz.

Anket sonuçları

RabbitMQ, kalıcılık senaryosunda yalnızca 26.000 aktarım hızına sahip olduğundan, iş hacmi gereksinimlerimizi karşılayamaz. Cloud Music, bu nedenle ileti kuyruğunu RabbitMQ'dan Kafka'ya 2017'de taşıdı, bu nedenle artık dikkate alınmıyor. Genel bulut müzik işinin QPS'si nispeten yüksek olduğundan, ActiveMQ dikkate alınmaz.

RocketMQ ve Kafka arasında bir karşılaştırma:

Kafka daha çok büyük veri, günlük işleme, ölü harf eksikliği, tüketim hatalarının otomatik olarak yeniden denenmesi, işlem mesajları, zamanlama mesajları, mesaj filtreleme, yayın mesajları ve diğer özelliklere daha meyillidir.Ayrıca Kafka, disk temizlemeyi senkronize etmez. Cloud Music'in işi daha çok birden fazla konuya meyillidir, ölü mektuplar izlenebilir, tüketim hataları yakınsama, yüksek kullanılabilirlik, otomatik yük devretme ve diğer özelliklerden sonra otomatik olarak yeniden denenebilir. Alışveriş merkezleri ve sosyal işletmeler için şeyler ve sıralı konular daha çok kullanılacaktır. Kafka ve RocketMQ Karşılaştırması:

http : //jm.taobao.org/2016/03/24/rmq-vs-kafka

RabbitMQ, Kafka ve RocketMQ (ActiveMQ performansı zayıftır, şimdilik dikkate alınmamaktadır) araştırması ve analizinden sonra, RocketMQ'nun genel bulut müziği işi için daha uygun olduğunu, ancak açık kaynak RocketMQ'nun da bazı eksiklikleri olduğunu gördük.Sadece bu eksiklikleri çözdüğümüzde işimizde kullanılabilir. Büyük ölçekli kullanım.

Açık kaynak RocketMQ'nun temel mimarisi aşağıdaki gibidir: (Temel giriş referansı)

Açık kaynak RocketMQ'nun temel sorunları şunlardır:

  • Broker yalnızca Master'dan Slave'e replikasyon sağlar ve Failover'ı değiştirme kabiliyetine sahip değildir.

  • İşlem mesajları açık kaynak değildir (Ar-Ge'ye başladığımızda kaynak açmadık).

  • Mesaj gönderimi ve tüketiminin takibi yok (Ar-Ge'ye başladığımızda açık kaynak kodlu değildik).

  • Alarm ve izleme sistemi yoktur.

  • Açık kaynak konsolu mükemmel değil.

Mesaj kuyrukları için bulut müzik iş gereksinimleri

Mesaj kuyruğunun arıza süresi Yük Devretme yeteneklerine sahip olmasını ve kaybedilemeyen alışveriş merkezi mesajları, işlem işlem mesajı desteği, mesaj gönderme tüketimi izleme ve arıza giderme yetenekleri gibi farklı iş senaryolarına göre farklı QOS yetenekleri sağlamasını bekliyoruz.

Aynı zamanda, işle ilgili daha fazla endişe duyan, zaman alan, zaman alan tüketim, tüketim gecikmesi ve anormal tüketim arızalarını göndermek için izleme ve uyarı yetenekleri sağlar. Aynı zamanda, genel işletim suyu seviyesinin ve daha çok işletim ve bakımla ilgili çeşitli göstergelerin izlenmesinin yanı sıra mesaj kuyruğunun kendisinin sorun giderme ve sorun bulma ve uzun vadeli işletim ve bakım yeteneklerini sağlar.

Ayrıca, Cloud Musicin işinin küçük bir kısmı Nodejs ve Python'dur. HTTP Protokol erişim yeteneği.

Mimari tasarım

Genel yapı aşağıdaki gibidir

Çekirdek olarak açık kaynak RocketMQ ile, açık kaynak RocketMQ'nun özelliklerini tamamen miras alır. Yüksek kullanılabilirliği karşılamak için, hızlı anahtarlama yetenekleri sağlamak için aracıda durum kontrolleri gerçekleştirmek üzere bir yük devretme bileşeni ekledik. Bunların arasında, nginx'in hotdoc'u, doğrudan kullanılan açık kaynak RocketMQ'daki bir jmenv'dir.

İş geliştirme endişelerinin izlenmesi için, Müşteri , Zaman alan anormal veriler ve diğer veriler, sistem mesajları biçiminde rapor edilir ve İzleme bileşeni, mesajları tüketir ve bunları ES'ye yazar ve konsol sorgu yetenekleri sağlar. Eşzamanlı Müşteri Alarm ayrıca rapor edilen verilerin bir kopyasını tüketecek, işletme tarafından yapılandırılan izleme öğelerine göre alarmı kontrol edecek ve eşik aşılırsa doğrudan bir alarm gönderecektir.

Ek olarak, mesajlaşma sistemi de kapalı olacak ve ana kesinti süresinin seçilmesi için bir süre (saniye) olacaktır. Müşteri Yeniden deneme yeteneği vardır, ancak bazı senaryolar tatmin edilemez. Bu nedenle, mesaj sırası bozulmuş bir bileşen sağlar. Sistem anormal olduğunda, Müşteri Mesaj, sistem çöktüğünde iş üzerindeki etkiyi azaltmak için yerel olarak veya felaket kurtarma kümesine gönderilecektir.

İşletim ve bakımla daha çok ilgilenen sistem devriye denetimleri için, sistemin kritik durumlarını düzenli olarak incelemek ve anormal olduğunda hızlı bir şekilde alarm göndermek için sistem devriye inceleme yetenekleri sağlıyoruz. İşletim ve bakımla daha fazla ilgilenen genel pazar için, Monitör bileşenine sistem veri toplama ekliyoruz, verileri Influxdb'ye yazıyoruz ve ön uç olarak Grafana ile bir gösterge panosu sağlıyoruz. Ek olarak, Konu, Üretici Grubu, Tüketici Grubu ve yukarı akış ve aşağı akış uygulamaları ilişkilendirmek ve kontrol etmek için konsol kaynak yönetimi ve kontrol yetenekleri de sağlıyoruz.

Her bileşenin etkileşim süreci aşağıdaki gibidir:

  • NameServer, konu yönlendirme bilgisi bulma ve yapılandırma merkezi yetenekleri sağlar.

  • Broker konu mesajı depolama, dizin ve sorgu sağlar. Aynı zamanda, Broker'ın kendisi de HA'nın gerektirdiği replikasyon, rol değiştirme, canlı algılama ve durum edinimi gibi API'leri sağlar. Aynı zamanda, Broker düzenli olarak tüm ad sunucularına kaydolur.

  • Nginx, NameServer'ı keşfetme yeteneği sağlar ve O&M, ad sunucusu listesini hotdoc'a doldurur. NameServer'ın işletmenin yeniden yapılandırmasını değiştirmesinden ve çevrimiçi olmasından kaçının.

  • Sürüm düşürme bileşeni, mesaj gönderme hatalarının işlenmesini sağlar. Mesaj gönderme hatası durumunda, istemci mesajı olağanüstü durum kurtarma kümesine gönderir ve eski sürüme geçme bileşeni, gönderenin işinin istikrarını sağlamak için bunu tek tip bir şekilde ele alır.

  • Yük Devretme bileşeni, Broker durumunu kontrol eder ve Broker, QOS gereksinimlerine göre kapanır.

  • Konsol, kaynak yönetimi ve kontrolü, mesaj sorgulama, yörünge izleme, izleme raporları, alarm yapılandırmasını izleme, teslim edilemeyen harf yeniden oluşturma ve diğer özellikleri sağlar.

  • İnceleme bileşeni, mesaj kuyruğundaki tüm bileşenlerin sağlığını ve hizmet durumunu inceler ve bir anormallik olması durumunda operasyon ve bakım ile mesaj kuyruğu ile ilgili personeli önceden bilgilendirir.

  • İzleme bileşeni, rapor verilerinin toplanmasını ve işlenmesini ve mesaj kuyruğu verilerinin toplanmasını ve işlenmesini sağlar.

  • Alarm bileşeni esas olarak alarm bilgilerini toplar ve konsolda yapılandırılan alarm eşiğine ve personel bilgilerine göre ilgili iş partisine bildirimde bulunur.

  • Mesaj kuyruğu pazarı, mesaj kuyruğu kümesinin kendisinin izleme durumunu, ana ve yedek çoğaltmanın durumunu ve QPS ve diğer küme pazar raporlarını sağlar.

Bazı gelişmiş özelliklere giriş

Bu bölüm, Cloud Music'in kendi iş ihtiyaçlarına göre açık kaynağı değiştirmesi ve genişletmesidir. Açık kaynak RocketMQ'da birçok değişiklik yaptık. Alan sınırlamaları nedeniyle burada yalnızca bu özellikler tanıtılmaktadır, örneğin HTTP Protokol uygulaması ve ikinci seviye gecikme, yüksek kullanılabilirlik vb. Burada tanıtılmayacak ve ilgilenen öğrenciler iletişim kurabilecektir.

Haber parçası

Bu özellik, açık kaynak 4.4'te sağlanan ileti izleme uygulama mekanizmasıyla aynıdır. Açık kaynağın aksine, bulut müzik mesajı kuyruğu, tüketim ve işlem mesajı geri kontrol yörüngesinin gönderilmesini sağlar.Aynı zamanda, tüketim başarısız olduğunda, aynı zamanda yörüngede hata istisna bilgisi de sağlar, böylece hatanın nedeni takip edilebilir.

İşlem mesajı

Cloud Music iş haberleri yaparken, açık kaynak iş haberleri henüz çıkmamıştı. Cloud Music, depolama motorunu değiştirerek kendi iş haberlerini gerçekleştirir. İşlem mesajı back-check için zamanında yakınsama imkanı sağlar, eğer durum kaç kere aşarsa ölü harf içerisine ölü harf girilir.Aynı zamanda ölü harf alarmı ve işlem mesajı geri kontrol ölü harf işleme kabiliyeti sağlar.

Çoklu ortam izolasyonu

Cloud Music'in birçok iş kolu vardır ve her iş kolunun yapılması gereken çok şey vardır.Aynı zamanda her bir iş kolu arasındaki erişim hizmet odaklı bir şekilde gerçekleştirilir.

Geliştirme ve test etme verimliliğini artırmak için, RPC trafiği, trafiği karşılık gelen ortama izole edecek ve tüm yol boyunca iletecek şekilde işaretlenir.

Aynısı mesajlar için de geçerlidir.Aynı gereksinimle gönderilen mesajların ilgili ortamda geliştirilmesi ve test edilmesi gerekir ve birbirini etkilemez. Bu nedenle bulut müzik tasarımı, mesaj kuyruklarının izolasyonunu gerçekleştirir, iş geliştirme ve testi hızlandırır ve hızlı doğrulama yeteneklerini önceden yayınlar.

Tüketici iş parçacığı havuzu özel desteği

Açık kaynak RocketMQ tüketicisi yalnızca bir tüketici iş parçacığı havuzuna sahiptir ve birden çok konunun tüketimi birbirini etkileyecektir. Ek olarak, aynı tüketici tarafında yalnızca bir l vardır dır-dir Tener, birden fazla konu varsa, üst düzey iş dağıtımı gerekir. Aynı Bulut Müzik uygulaması, bazıları kadar çok konu tüketimine sahip olacaktır. 30 + adet

Bu nedenle, yüksek öncelikli konuların kendi tüketici iş parçacığı havuzunu özelleştirmesi gerekir ve düşük öncelikli konular genel olarak kullanılır. Ek olarak, her konunun kendine ait bir l dır-dir tener, bu nedenle üst düzey dağıtıma gerek yoktur. Yukarıdaki gereksinimlere göre artırıyoruz abonelik Aynı anda l belirtebilirsiniz dır-dir Tener ve tüketinThreadExecutor yöntemleri.

Tüketim sınırı ve düşürme

Açık kaynak RocketMQ, tüketim akımı sınırlama yetenekleri sağlamaz, Sentinel tabanlı çekme modu, itme modu değil, bulut müziğinin iş ihtiyaçlarını karşılayamaz.

Cloud Music'in mesaj tüketiminin çoğu, veritabanına yazmayı veya üçüncü taraflara erişmeyi gerektirir. Bu tüketimler ve çevrimiçi hizmetler aynı uygulamadır. Mesaj sırasının kendisi zirveleri kesme ve vadileri doldurma yeteneğine sahip olsa da, tüketici tarafı tüketim iş parçacığı havuzunun kullanımını en üst düzeye çıkaracaktır. Bunun çevrimiçi işletmeler üzerinde de etkisi olacaktır. Çevrimiçi ticaretin önceliğini sağlamak için, tüketim hızını sınırlamak ve anlık en yüksek mesaj tüketiminin çevrimiçi iş üzerindeki etkisini azaltmak gerekir.

Bu kısım, tüketim iplik havuzu ve tüketim qps ayarlanarak ayarlanabilir. İzleme verileri ile eşleştirilebilen ve konsolun dinamik ayarlama yeteneklerini sağlayan tüketim qps tüketim akım limiti yöntemini ayarlamayı seçtik.Ayrıca dinamik ayar iş parçacığı havuzu yetenekleri de sağlasak da doğrusal değildir ve ayarlama için referans yoktur. , daha sert. Tüketim akış sınırlaması uygulama katmanı yapmasına izin vermek yerine alt katmanda yapılır Üst katmandan farklı olarak üst katman akış sınırlaması mesaj tüketimini bir kez tetikler ve başarısız olur Alt katman başarısız olmaz ve üst katman işi teslim edilmediği için tüketim olarak sayılmaz.

Çok odalı ağ hata düzeltmesi

Cloud Music hizmetlerinden bazıları Jiande'de dağıtılır ve Hangzhou'dan veri tüketmesi gerekir. Tüketen makinelerin bu kısmı her üç farkta bir zaman aşımı rapor eder. İncelemeden sonra, müşteri tarafından oluşturulan yeni bağlantının her zaman çok dengesiz olan oluşturma döngüsünü kapattığı görüldü.Araştırmanın uzak katmanındaki kodun bu kısmı, bağlantıyı kuran istemciyle eşzamanlı bir sorun olduğunu ve kurulan bağlantının kapatılacağını buldu. Açık kaynak istemcisinin uzaktaki hatasını bulduktan sonra düzelttik.

Buna ek olarak, birkaç gün sonra, Quku'nun iş sınıfı arkadaşları da gönderme için 3 saniye zaman aşımı olduğunu bildirdi. Dikkatli bir incelemeden sonra, anormal günlüğün ve bağlantı kurma günlüğünün ağ kurulumu eşzamanlılık günlüğü ile tutarlı olduğu bulundu. Müşteri çözmek. Hizmet çevrimiçi olarak yükseltildikten sonra, yukarıda gösterildiği gibi, gönderme çok kararlıdır ve artık zaman aşımı olmaz.

diğer

Açık kaynak yararlanıcısı olarak, resmi Apache RocketMQ'da tüketim akımı sınırı, tüketim iş parçacığı havuzu, ağ hata düzeltmeleri gibi bazı değişiklikler sunacağız.

Cloud Music'te Message Queue Kullanımı

Şimdiye kadar, RocketMQ dönüşümünü temel alan mesaj kuyruğu, NetEase bulut müzik üretim ortamında 6 kümeye sahiptir. Sıralı mesajlar, ortak mesajlar ve çok sayıda yüksek kullanılabilirlik ve yüksek güvenilirlik gereksinimleri içerir.

Erişim uygulamalarının sayısı 200'ün üzerindedir ve her iş kolunun ilgili temel hizmetleri vardır. Zirve QPS'ye ulaşıldı 30 w +, konu 800+. Test ortamındaki tek bir kümede, birçok ortam nedeniyle konu sayısı çılgınca artarak 4000'den fazla oldu.Gelecekte Kafka daha fazla göç ettikçe konu sayısı artmaya devam edecek.

Kasım 2018'den itibaren Cloud Music Kafka, çevrimiçi iş erişimini yasaklıyor ve tüm yenileri RocketMQ kullanıyor.Ayrıca, 2019'un 1. çeyreğinde, daha önce Kafka'yı RocketMQ'ya kullanan çevrimiçi işi taşımak için işleri organize etmeye ve koordine etmeye başladık. Şimdiye kadar, işletmenin% 70'ten fazlası taşındı. Genel stabilite büyük ölçüde iyileştirildi.

RocketMQ'ya iş erişiminin artmasıyla, aşağı akış büyük veri ekosistemine erişim ve kullanım da devam etti. Cloud Music Big Data esas olarak flink kullanıyor. Şu anda flink, RocketMQ'nun mesaj hacmi günde 800 milyon + 'a ulaşan 60'tan fazla iş yürütüyor.Gelecekte bu alanda büyüme için hala çok yer var.

Gelecek planlama ve görünüm

Şu anda, bulut müzik mesajı kuyruğu birçok özelliğe sahiptir ve işletmenin ihtiyaçlarını iyi bir şekilde karşılayabilir. Temel çalma listesi ve müzik kitaplığı işinden yüksek QPS push işine kadar, ancak günlük henüz dahil edilmedi.

Günlük aktarımına gelince, RocketMQ'nun optimize edilmesi gereken bazı performans sorunları var.Şu anda optimizasyonun bu bölümünü tamamladık.Öncelik nedeniyle, aktarımla ilgili uygulamaları günlüğe genişletmek için genişletilmedi. Cloud Music'in mesaj kuyruğunun günlük yönüne genişletilebileceğini ve mesaj kuyruğunun eksiksiz izleme ve alarm yeteneklerinin büyük veri, NDC'ye güçleneceğini umuyoruz. abonelik (Veritabanı güncellemesi abonelik hizmet). Aynı zamanda, birden çok makine odasının çapraz makine odası erişimini azaltmak için yönlendirme yeteneği artırılır.

Buna ek olarak, RocketMQ mesaj kuyruğu bulut müziği dışında tüm NetEase'de kullanılmamaktadır.Gelecekte, mesaj kuyruğunu diğer ana ürün gruplarına tanıtmak ve mesaj kuyruğu iyileştirme ve özelliklerine bulut müziği getirmek için Hangzhou Research ile işbirliği yapacağız. Diğer büyük ürünler.

Yazar hakkında: NetEase Cloud Music Message Queue başkanı Lin Dezhi, dağıtılmış mesajlaşma sistemleri gibi ara yazılım mimarisinin tasarımı ve geliştirilmesinde uzun yıllara dayanan deneyime sahiptir ve dağıtılmış sistemler hakkında derin bir anlayışa sahiptir. Şu anda bulut müzik mesajı kuyruğundan ve bulut müziğinin bazı kararlılık performansıyla ilgili çalışmalarından sorumlu.

SON

Onmyoji SP Arakawanın ana zaman çizelgesi spekülasyonu: eski arkadaşlar yeni düşman olur, Xiaolang "gamalı haç" mı?
önceki
En ince siyah dizi, bu yaz iyi görünmek ve sıkıcı olmamak için nasıl eşleşmeli?
Sonraki
Yeni ev teslim edildi ve kadın sahibi kapıyı açtı ve korktu! Aman tanrım, çok iğrenç
programcı! Python öğrenmeyi bırak
Bir saat içinde 5 çocuğu kurtardı, "sert" amca ağladı ...
Üç başlangıç, üç geçiş, bu sefer GitHub Top 1'de 100.000 satırlık çekirdek C kodu ile
"Hyperledger Fabric sahte bir blok zinciridir!"
Düzinelerce önerilen sistem belgesi onaylandı ve çoğaltılamaz: kaynak kodu ve veri kümesi eksik
GitHub hesaplarının birçok yerde kullanımı sınırlıdır; Python'un babası, yorumlayıcıyı yeniden düzenlemeyi düşünür; 62 yaşındaki programcı bir mantık bombası yerleştirdi | Developer Weekly
Ali Dharma Akademisi, son iki yıldır AI yapıyor
Üç gün üst üste sıcak arama, "Haber Ağı" keskin eleştirmenleri de yeterince seviyor
wxPython + PyOpenGL ile 3B veri analizi için güçlü bir araç oluşturun! | CSDN blog seçimi
Boom out 8-0 kilit kazanın! Japonya'nın ilk Asya Oyunları şampiyonu Kento Momota sezonun beşinci tacını kazandı
React, ön uç geliştirme boşluğunda nasıl bir köprü haline geliyor?
To Top