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
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 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.
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.
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 izolasyonuCloud 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ğiAçı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üşürmeAçı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üzeltmesiCloud 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ğerAçı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.
Ş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.
Ş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