tcp 高性能服务, netty,mqtt

1. io 线程不要有比较长的服务. 全部异步化. [1] netty 权威指南上只是说业务复杂时派发到业务线程池种.

共用的线程池最好都轻量. 多层线程池后, 下层的可以进行隔离. 这个是 mqtt 的一大特点.

避免某个任务太重,影响了其他亲量级服务.

2. new socket 可以传入域名,但是只取第一个 ip,链接

3. 物联网 的特点是大量的长连接,等待消息推送. 所以首先要不同的机器去承接连接. 故客户端需要知道去连接的 ip.

目前没有http 协议支持域名,短连接.  请求/响应方式. 数据回传是在已建立的链路上的. (服务器无法访问外网,但是可以通过零时建立的通路回传数据. 路由原理) 也是p2p 协议远离,核心是要打洞.

   所以 mqtt 出现了.

   1. 客户端太多,网络不稳定,期望采用异步化. 解耦. 有别于请求/响应式 ,采用发布/订阅.

   2. 有别于 http 服务的负载均衡 lvs. 通过域名+dns可以对应 n 台入口 lvs. 应用协议层进行负载均衡. 而且客户端可以使用通用的浏览器.[即不需要在客户端写死 n 个 ip ,进行负载均衡]

      物联网节点很多,不可能一台机器去承接连接. 需要在客户端写 n 个 ip. 然后有复杂的逻辑去选择一台进行连接. 这些流程就是这个 mqtt 协议的一部分.

      统一交互逻辑.

   这两点是 物联网环境下的诉求,所以才有了 mqtt 协议.

  

[1] Netty系列之Netty百万级推送服务设计要点

[2] 王者荣耀的推送是如何做的?腾讯信鸽精准推送系统解析 关键技术:实时精准推送系统的关键技术有优化存储——将文本数字化,位图压缩存储和分布式并行检索和运算。

   

时间: 2024-11-08 21:25:31

tcp 高性能服务, netty,mqtt的相关文章

TCP/IP, WebSocket 和 MQTT

按照OSI网络分层模型,IP是网络层协议,TCP是传输层协议,而HTTP和MQTT是应用层的协议.在这三者之间, TCP是HTTP和MQTT底层的协议.大家对HTTP很熟悉,这里简要介绍下MQTT.MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议,有可能成为物联网的重要组成部分.该协议支持所有平台,几乎可以把所有联网物品和外部连接起来,被用来当做传感器的通信协议. HTTP的不足 HTTP协议经过多年的使用,发现了

构建高性能服务(三)Java高性能缓冲设计 vs Disruptor vs LinkedBlockingQueue--转载

原文地址:http://maoyidao.iteye.com/blog/1663193 一个仅仅部署在4台服务器上的服务,每秒向Database写入数据超过100万行数据,每分钟产生超过1G的数据.而每台服务器(8核12G)上CPU占用不到100%,load不超过5.这是怎么做到呢?下面将给你描述这个架构,它的核心是一个高效缓冲区设计,我们对它的要求是: 1,该缓存区要尽量简单 2,尽量避免生产者线程和消费者线程锁 3,尽量避免大量GC 缓冲 vs 性能瓶颈 提高硬盘写入IO的银弹无疑是批量顺序

构建高性能服务(二)java高并发锁的3种实现

构建高性能服务(二)java高并发锁的3种实现 来源:http://www.xymyeah.com/?p=46 提高系统并发吞吐能力是构建高性能服务的重点和难点.通常review代码时看到synchronized是我都会想一想,这个地方可不可以优化.使用synchronized使得并发的线程变成顺序执行,对系统并发吞吐能力有极大影响,我的博文 http://maoyidao.iteye.com/blog/1149015 介绍了可以从理论上估算系统并发处理能力的方法. 那么对于必须使用synchr

构建高性能服务

构建高性能服务  ConcurrentSkipListMap和链表构建高性能Java Memcached 场景 缓存服务器是互联网后端服务中常用的基础设施. 场景(一)图片服务器上存储了大量图片,为了提高图片服务的吞吐量,希望把热门的图片加载到内存中. 场景(二)分布式存储服务,为提高访问吞吐,把大量的meta信息存储在内存中. 问题 但是使用Java语言开发缓存服务,不可避免的遇到GC问题.无论使用ehcache是基于Map实现的缓存,都会产生大量Minor GC无法回收的对象,最终导致CMS

socket 网络编程快速入门(二)教你编写基于UDP/TCP的服务端多线程通信

在上一篇博文中,我们介绍了利用socket进行简单的UDP/TCP的服务端和客户端的通信. (一) 在基于UDP的程序中,你有没有想过,如果我的这台主机在通讯的时候要求既能够收到别的主机发来的数据,又能够自己向目的主机发出数据,该怎样实现?也就是说需要两个while循环同时进行.答案是使用多线程,一个线程用于接受数据,另一个线程用来发送数据.接下来我们介绍WinSock的多线程编程. 多线程的实现我们使用_beginthread()函数: uintptr_t _beginthread( void

通用高性能服务框架解析

做了多年的后台服务,一直想将自己这么多年对高性能服务架构的一些粗浅认识写出来,一方面对自己这个阶段成长做个总结, 另一方面想通过这个与各位做一个交流,妄不吝赐教. 一.最初对服务架构的概念 最初接触服务端程序应该是2011年,当初基于服务架构的概念是基于这样一个模型 这是最简单的一种C/S模型结构,客户端直接连接服务端,只能适用于对效率.并发量.扩展性要求低的环境,所以当请求量逐渐上升,你会发现这种架构的系统,在处理上已经不满足业务的需求了,所以你衍生出下面一种架构. 二.多个App分流模式 这

使用ranch tcp开发服务端

Ranch: 简单来说,Ranch就是一个tcp acceptor pool,用于高并发下的tcp连接建立与管理.可以设置并发链接最大数量,在不关闭socket连接的情况下可以动态升级连接池.Cowboy就是使用的ranch. https://github.com/ninenines/ranch 下面通过改造ranch自带的reverse example实现简易的服务端. game_server.app.src {application, game_server, [ {description,

linux 网络编程之最简单的tcp通信服务端

编写一个最为简单的tcp通信服务端.代码如下: #include <iostream> #include <cstring> using namespace std; #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <errno.h> #include <uni

TCP/IP网络编程之基于TCP的服务端/客户端(二)

回声客户端问题 上一章TCP/IP网络编程之基于TCP的服务端/客户端(一)中,我们解释了回声客户端所存在的问题,那么单单是客户端的问题,服务端没有任何问题?是的,服务端没有问题,现在先让我们回顾下服务端的I/O代码 echo_server.c --while ((str_len = read(clnt_sock, messag, 1024)) != 0) write(clnt_sock, messag, str_len);-- 接着,我们回顾客户端的代码 echo_client.c -- wr