2015-03-30 15 views
6

Tôi có nhu cầu tạo trang trại máy chủ có thể xử lý hơn 5 triệu kết nối, hơn 5 triệu chủ đề (mỗi khách hàng), xử lý 300k thư/giây.Kết nối Max MQTT

Tôi đã cố gắng xem những nhà môi giới thư khác nhau có khả năng như thế nào vì hiện tại tôi đang sử dụng hai cá thể RHEL EC2 (r3.4xlarge) để tạo nhiều tài nguyên có sẵn. Vì vậy, bạn không cần phải tìm kiếm nó, nó có 16vCPU, RAM 122GB. Tôi không ở đâu gần giới hạn sử dụng đó.

Tôi không thể vượt qua giới hạn kết nối 600k. Vì dường như không có bất kỳ giới hạn O/S nào (nhiều RAM/CPU/v.v.) trên máy khách hay máy chủ, điều gì đang hạn chế tôi?

Tôi đã chỉnh sửa /etc/security/limits.conf như sau:

* soft nofile 20000000 
* hard nofile 20000000 

* soft nproc 20000000 
* hard nproc 20000000 

root soft nofile 20000000 
root hard nofile 20000000 

Tôi đã chỉnh sửa /etc/sysctl.conf như sau:

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 

Đối với Apollo: xuất khẩu APOLLO_ULIMIT = 20000000

Đối với ActiveMQ:

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

Tôi tạo ra 20 địa chỉ tin bổ sung cho eth0 trên máy khách, sau đó được giao cho họ: ip addr thêm 11.22.33.44/24 dev eth0

tôi hoàn toàn nhận thức được giới hạn cổng 65k đó là lý do tôi đã làm ở trên.

  • Đối với ActiveMQ tôi đã đến: 574309
  • Đối với Apollo tôi đã đến: 592891
  • Đối với Thỏ tôi đến 90k nhưng khai thác gỗ là khủng khiếp và không thể tìm ra những gì phải làm để đi cao hơn mặc dù tôi biết nó có thể.
  • Đối với Hive tôi đã đạt đến giới hạn dùng thử là 1000. Đang chờ giấy phép
  • IBM muốn giao dịch chi phí nhà của tôi để sử dụng chúng - không!
+0

có thể không thực sự biết làm thế nào để tăng thông lượng. Tuy nhiên, thanh toán http://kafka.apache.org/. Bạn không chắc chắn về sự hỗ trợ MQTT, nhưng nó có vẻ có khả năng thông lượng cực/# khách hàng. –

+0

bạn đã thử dùng Mosquitto chưa? (http://mosquitto.org/) –

+0

Thử Hive, Apollo, Muỗi, Hoạt động, Thỏ, muỗi – redboy

Trả lời

4

ĐÁP: khi làm điều này tôi nhận ra rằng tôi đã có một lỗi chính tả trong ứng dụng của tôi thiết lập trong tập tin /etc/sysctl.conf cho: net.ipv4.ip_local_port_range

bây giờ tôi có thể kết nối 956.591 khách hàng MQTT đến máy chủ Apollo của tôi trong 188 giây.


Thông tin thêm: Đang cố gắng để cô lập nếu đây là một O/S giới hạn kết nối hoặc một Broker, tôi quyết định viết một khách hàng đơn giản/Server.

Máy chủ:

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

Các Chủ đầu tư:

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

Với 21 khu công nghiệp, tôi mong chờ 65.535-1.024 * 21 = 1.354.731 là ranh giới.Trong thực tế, tôi có thể đạt được 1231734

[[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 

Vì vậy, công cụ socket/kernel/io được làm việc.

Tôi STILL không thể thực hiện điều này bằng bất kỳ nhà môi giới nào.

Một lần nữa sau khi kiểm tra máy khách/máy chủ của tôi, đây là cài đặt hạt nhân.

Chủ đầu tư:

[[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 

Server:

[[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

Chúng tôi đã thử với các nền tảng khác nhau và không phân biệt CPU/RAM, chúng tôi không thể vượt quá 20K kết nối trong Apollo. Chúng tôi đang chạy một máy khách thử nghiệm mqTT (sử dụng thư viện Paho) ​​để mở các kết nối. Bất kỳ đề xuất? –

+0

Những gì chúng tôi quan sát vượt quá 20K kết nối, kết nối mới được mở ở tốc độ chậm. Việc sử dụng CPU, bộ nhớ trong máy chủ được kiểm soát. Chúng tôi cũng đã thử chạy các máy khách từ các máy chủ khác nhau. Cùng một kết quả. –

Các vấn đề liên quan