2015-03-30 41 views
6

5 + milyon bağlantı, 5+ milyon konu (istemci başına bir adet), 300k ileti/saniye işlemek için bir sunucu grubu oluşturmaya ihtiyacım var.Max MQTT bağlantıları

Çeşitli ileti aracısı özelliklerinin neler olduğunu görmeye çalıştım, bu yüzden şu anda çok sayıda kaynak yapmak için iki RHEL EC2 örneği (r3.4xlarge) kullanıyorum. Yani bakmaya gerek yok, 16vCPU, 122GB RAM var. Ben kullanımdaki bu sınırın yakınında değilim.

600k bağlantı sınırını geçemiyorum. İstemci veya sunucuda herhangi bir O/S sınırlaması (bol miktarda RAM/CPU/vb.) Olmadığı için, beni sınırlandıran bir şey var mı? Apollo için

net.ipv4.ip_local_port_range = 1024 65535 
net.ipv4.tcp_tw_reuse = 1 
net.ipv4.tcp_mem = 5242880 5242880 5242880 
net.ipv4.tcp_tw_recycle = 1 
fs.file-max = 20000000 
fs.nr_open = 20000000 
net.ipv4.tcp_syncookies = 0 

net.ipv4.tcp_max_syn_backlog = 10000 
net.ipv4.tcp_synack_retries = 3 
net.core.somaxconn=65536 
net.core.netdev_max_backlog=100000 
net.core.optmem_max = 20480000 

: şu şekildedir: Ben /etc/sysctl.conf düzenledikten

* soft nofile 20000000 
* hard nofile 20000000 

* soft nproc 20000000 
* hard nproc 20000000 

root soft nofile 20000000 
root hard nofile 20000000 

şu şekildedir:

Ben /etc/security/limits.conf düzenledikten ihracat ActiveMQ için APOLLO_ULIMIT = 20000000

:

ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.UseDedicatedTaskRunner=false" 
ACTIVEMQ_OPTS_MEMORY="-Xms50G -Xmx115G" 

ben istemci üzerinde eth0 20 ek özel adresler yarattı, sonra bunları atanan: ıp adr eklemek 11.22.33.44/24 dev eth0

yaptım neden olan 65k liman sınırları TAMAMEN farkındayım Yukarıdaki. Tavşan için 592.891

  • Ben 90k lazım ama günlük korkunç ve ben her ne kadar yükseğe çıkmak için ne çözemedim: 574309
  • Apollo ben lazım: için

    • ActiveMQ için aldım mümkün biliyorum.
    • Kovan için 1000 deneme sınırına ulaştım. Lisans bekleniyor
    • IBM, evimin maliyetini kullanmak için kullanmak istiyor - nah!
  • +0

    gerçekten yeteneğini artırmak için nasıl söyleyemem. Ancak, ödeme http://kafka.apache.org/. MQTT desteği hakkında emin değilim, ancak aşırı iş çıkışı/# istemcisi yetenekli görünüyor. –

    +0

    mosquitto'yu denedin mi? (http://mosquitto.org/) –

    +0

    Hive, Apollo, Sivrisinek, Aktif, Tavşan, Sivrisinek'i Denemek – redboy

    cevap

    4

    CEVAP: ben için /etc/sysctl.conf dosya içinde ayarını müvekkilime bir yazım yanlışı olduğunu fark Bunu yaparken: Şimdi bağlantı kurabiliyorum net.ipv4.ip_local_port_range

    958.591 MQTT istemcileri 188sec'teki Apollo sunucusuna.


    diğer bilgiler: bu bir O/S bağlantı sınırlama veya Broker ise izole etmek çalışılıyor, basit bir istemci/sunucu yazmaya karar verdi.

    sunucusu:

    Socket client = null; 
        server = new ServerSocket(1884); 
        while (true) { 
         client = server.accept(); 
         clients.add(client); 
        } 
    

    Müşteri: 21 IP'leri ile

    while (true) { 
         InetAddress clientIPToBindTo = getNextClientVIP(); 
         Socket client = new Socket(hostname, 1884, clientIPToBindTo, 0); 
         clients.add(client); 
        } 
    

    , ben 65535-1024 * 21 = 1354731 sınır olması beklenebilir.Gerçekte ben

    [[email protected] ec2-user]# cat /proc/net/sockstat 
    sockets: used 1231734 
    TCP: inuse 5 orphan 0 tw 0 alloc 1231307 mem 2 
    UDP: inuse 4 mem 1 
    UDPLITE: inuse 0 
    RAW: inuse 0 
    FRAG: inuse 0 memory 0 
    

    1231734 Yani soket/kernel/io şeyler üzerinde çalışılmış ulaşmak mümkün.

    Herhangi bir komisyoncu kullanarak bunu gerçekleştiremiyorum STILL.

    Yine istemci/sunucu sınamasından sonra bu çekirdek ayarlarıdır.

    Müşteri:

    [[email protected] ec2-user]# sysctl -p 
    net.ipv4.ip_local_port_range = 1024  65535 
    net.ipv4.tcp_tw_reuse = 1 
    net.ipv4.tcp_mem = 5242880  5242880 15242880 
    net.ipv4.tcp_tw_recycle = 1 
    fs.file-max = 20000000 
    fs.nr_open = 20000000 
    
    [[email protected] ec2-user]# cat /etc/security/limits.conf 
    * soft nofile 2000000 
    * hard nofile 2000000  
    root soft nofile 2000000 
    root hard nofile 2000000 
    

    Sunucu:

    [[email protected] ec2-user]# sysctl -p 
    net.ipv4.tcp_tw_reuse = 1 
    net.ipv4.tcp_mem = 5242880  5242880 5242880 
    net.ipv4.tcp_tw_recycle = 1 
    fs.file-max = 20000000 
    fs.nr_open = 20000000 
    net.ipv4.tcp_syncookies = 0 
    net.ipv4.tcp_max_syn_backlog = 1000000 
    net.ipv4.tcp_synack_retries = 3 
    net.core.somaxconn = 65535 
    net.core.netdev_max_backlog = 1000000 
    net.core.optmem_max = 20480000 
    
    +0

    Farklı platformlarda denedik ve CPU/RAM'den bağımsız olarak, Apollo'da 20K bağlantılarının ötesine geçemedik. Bağlantı açmak için bir test mqTT istemcisi (Paho kitaplığını kullanır) çalıştırıyoruz. Baska öneri? –

    +0

    Gözlemlediğimiz 20K bağlantıların ötesinde, yeni bağlantılar yavaş bir hızda açılıyor. CPU kullanımı, sunucudaki bellek kontrol altında. Ayrıca, müşterileri farklı sunuculardan çalıştırmayı denedik. Aynı sonuç. –