Günlük blogÇoğullama, tek bir sunucu milyon düzeyinde RPS verimine ulaşır

Açık kaynaklı Çin OSC manşetlerine dikkat edin ve en son teknik bilgileri alın

Çoğullama aslında yeni bir teknoloji değildir, işlevi, tek bir iletişim bağlantısı temelinde aynı anda birden çok istek ve yanıtı işlemektir. Ağ iletişimi için böyle bir argüman yoktur, çünkü ağ katmanı yalnızca veri aktarımından sorumludur; üst katman uygulama protokollerinin formülasyonu nedeniyle, birçok geleneksel hizmet çoğullamayı destekleyemez; örneğin: http1.1, sqlserver ve redis, vb. vb. Bazı hizmetler toplu işleme sunsa da, bu işlemlerin tümü tek bir RPS'ye dayalıdır. Aşağıdaki diyagramlar, tek kanallı ve çoğullama arasındaki farkı açıklamaktadır.

Tek yönlü problemler

Her istek yanıtı tek bir bağlantı işgal eder ve bağlantı ağı okur ve yazar; bu, bağlantının uzun süre boşta kalmasına ve ağ kaynaklarından daha iyi yararlanamamasına neden olur. Özel okuma ve yazma IO'su nedeniyle, RPS işlem hacmi IO tarafından karşılanmalıdır ve IO işlemi performansı tüketir, böylece yüksek RPS işlemede performans sorunları ortaya çıkar. IO'nun etkin bir şekilde birleştirilememesi, özellikle nispeten küçük istek paketleri için iletişimde bant genişliğinin boşa harcanmasına da yol açar. İletişimde gecikme Çok sayıda RPS gerektiğinde, daha fazla bağlantının desteklenmesi gerekir ve bağlantı sayısındaki artış da kaynak yükünü artırır.

Çoğullamanın Avantajları

Çoğullama, aynı anda bir bağlantıda birden çok istek yanıtını işleyebilir, bu da bağlantı sayısını büyük ölçüde azaltabilir ve ağın işleme kapasitesini artırabilir. Paylaşılan bir bağlantı olduğu için, farklı istek ve yanıt paketleri, işleme için tek bir GÇ'de birleştirilebilir; bu, GÇ'nin işlem hacmini büyük ölçüde azaltabilir ve performansı daha iyi hale getirebilir.

Çoğullama yoluyla milyonlarca RPS elde etme

Çoğullama gerçekten bu kadar iyi mi?Aşağıda, tek bir hizmet milyon RPS çıktısı elde etmek için .net çekirdeğinde çoğullama kullanılır ve nispeten düşük gecikme süresi elde edilebilir. Aşağıdaki test akışıdır:

Temel iletişim, mesaj paketi birleştirme işlevine sahip olmadığı için entegrasyon testi BeetleX bazında yapılır.Temel olarak, BeetleX mesajları otomatik olarak bir Tamponda birleştirir, böylece IO'nun okuma ve yazma işlemlerini azaltır.

Test mesajı yapısı

Bu test, temel etkileşim mesajı olarak Protobuf'u kullanır, sonuçta Protobuf zaten bir ikili serileştirme standardıdır.

istek mesajı

public int kimliği { get; set; } public Double RequestTime { get; set; }

yanıt mesajı

public int Çalışan Kimliği { get; set; } public string Soyadı { get; set; } public string FirstName { get; set; } public string Adres { get; set; } public string Şehir { get; set; } public string Bölge { get; set; } public string Ülke { get; set; } public Double RequestTime { get; set; }

**Sunucu işleme kodu**

public static void Response(Tuple < IServer, ISession, SearchEmployee > değer) { Çalışan em = Employee.GetEmployee(); emp.RequestTime = value.Item3.RequestTime; value.Item1.Send(emp, value.Item2); System.Threading.Interlocked.Increment(ref Count); } genel geçersiz kılma geçersiz SessionPacketDecodeCompleted(IServer sunucusu, PacketDecodeCompletedEventArgs e) { SearchEmployee emp = (SearchEmployee)e.Message; multiThreadDispatcher.Enqueue(yeni Tuple < IServer, ISession, SearchEmployee > (sunucu, e.Oturum, emp)); }

Hizmet yanıtı nesne içeriği

Çalışan sonucu = yeni Çalışan(); sonuç.ÇalışanKimliği = 1; sonuç.LastName = "Davolio"; sonuç.FirstName = "Nancy"; sonuç.Adres = "ja"; sonuç.Şehir = "Seattle"; sonuç.Bölge = "WA"; sonuç.Ülke = "ABD";

Mesaj alındıktan sonra kuyruğa alınır ve daha sonra yanıt kuyruk tarafından işlenir, talebin karşılık gelen istek süresi ayarlanır ve işlenen toplam mesaj sayısı kaydedilir.

müşteri istek kodu

özel statik geçersiz Yanıt (Tuple < AsyncTcpClient, Çalışan > veri) { System.Threading.Interlocked.Increment(ref mCount); if (mCount > 100) { if (data.Item2.RequestTime > 0) { çift tik = mWatch.Elapsed.TotalMilisaniye - data.Item2.RequestTime; AddToLevel(onay); } } var s = new SearchEmployee(); s.RequestTime = mWatch.Elapsed.TotalMilisaniye; data.Item1.Send(ler); }

İstemci Testi Başlatma Kodu

for (int i = 0; ben < mBağlantılar; i++) { var client = SocketFactory.CreateClient < BeetleX.Clients.AsyncTcpClient, TestMessages.ProtobufClientPacket > (mIPAdresi, 9090); client.ReceivePacket = (o, e) = > { Çalışan = (Çalışan)e; multiThreadDispatcher.Enqueue(yeni Tuple < AsyncTcpClient, Çalışan > ((AsyncTcpClient)o, emp)); }; client.ClientError = (o, e) = > { Console.WriteLine(e.Mesaj); }; mClients.Add(istemci); } for (int i = 0; ben < 200; ben++) { foreach (mClients'ta var öğesi) { SearchEmployee araması = yeni SearchEmployee(); Görev.Çalıştır(() = > { item.Send(ara); }); } }

Testin tamamı 10 bağlantı açar ve istekler ve yanıtlar bu 10 bağlantı temelinde çoğullanır.

Test yapılandırması

Test ortamı iki sunucudur ve yapılandırma Alibaba Cloud üzerinde 12 çekirdekli bir sunucudur (ilgili fiziksel makine 6 çekirdek ve 12 iş parçacığı olmalıdır)

Hem hizmet hem de istemci sistemleri şunlardır: Ubuntu 16.04

Dotnet çekirdek sürümü: 2.14

Test sonuçları

Müşteri İstatistikleri

Sunucu İstatistikleri

Bant Genişliği İstatistikleri

Test, çoğullama için 10 bağlantı kullanır, saniyede alınan yanıt hacmi 100 W'dir ve çoğu yanıt gecikmesi 1-3 milisaniye arasındadır.

Blog Yazarı: Mud Shui Guy

Günlük blog sütunu, her gün sizin için mükemmel blog yazarlarından yüksek kaliteli teknik makaleler önerir. Aynı zamanda, kullanıcılar katkıda bulunabilirler.Makale resmi hesaba eklendiğinde, web sitesinin ana sayfasında ve diğer yerlerde tavsiye edeceğiz. Her gün yüksek kaliteli anında iletme bildirimleri almak için Açık Kaynak Çin OSC'yi takip edin, " daha fazla bilgi edin "Orijinal makaleyi okuyun ve test kodunu indirin.

Yeni Mercedes-Benz A-Serisi'ni deneyimleyin: MBUX sistemi "sözde zekaya" güçlü bir şekilde yanıt veriyor mu?
önceki
Xiaopeng satın alıyor musunuz? Didi panikledi!
Sonraki
Yeterince sürpriz! Mi 7 Plus görünüm yapılandırması pozlaması: Liu Haiping + Snapdragon 845 + ekranın altındaki parmak izi
Ubuntu kullanıcı istatistiklerini yayınladı: Çinli kullanıcılar% 4'ü hesaplıyor
299 yuan! Xiaomi bluetooth yakalı kulaklık piyasaya sürüldü: 8 saat boyunca yalnızca 40g / şarkı dinleme
"Hayat, güvenli ve medeni yolculukla ilgili ayrıntılar", Sarı Vinç Kulesi altında 122 trafik güvenliği partisi yapıldı
Üniversite öğrencileri mahjong'dan daha kültürel olduğunu söyleyerek mahjong yerine "Çin Güneş Koşulları Kültür Kartı" nı tanıtmaya kararlılar
Pakistan I.Dünya Savaşı'nda ünlendi ve Xiaolong savaşçıları için büyük bir reklam Orta Doğu'daki yerel tiranların satın alınmasını çekti.
Beceriler aynı kökte doğar, öyleyse neden çok endişelisiniz? Hindistan ile Pakistan arasındaki kin ne zaman bitecek?
2018 Çin Optik Vadisi Yapay Zeka Uluslararası Forumu bugün Han'da düzenlendi
Redmi 5PLUS uygulamalı deneyim: tam ekran süper uygun maliyetli, sürprizlerle dolu
299 yuan! Xiaomi Bluetooth Yaka Kulaklıkları Çıktı: Ultra hafif + 8 saat pil ömrü
Deneme için kutudan çıkan başka bir Xiaomi oyuncak Mi Rabbit parça yapı taşı elektrikli tren
Döviz piyasası "flaş" ve yen "dalgalanması". Bahar Şenliği sırasında Japonya'ya gitmek istiyorsanız, daha fazla ödeme yapmanız gerekebilir
To Top