默认

即时通讯新手入门:一文读懂什么是Nginx?它能否实现IM的负载均衡?

查看数: 104924 | 评论数: 16 | 收藏 4
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2019-06-07 00:01

正文摘要:

本文引用了“蔷薇Nina”的“Nginx 相关介绍(Nginx是什么?能干嘛?)”一文部分内容,感谢作者的无私分享。 1、引言 如上图,即: 1)客户端通过Nginx反向代理到一台socket长连接服务器;2)客户端可以与 ...

评论

JackJiang 发表于 2 年前
引用:Gangan_Master 发表于 2022-06-01 17:18
或许思考下面这几个问题大家就知道Nginx能不能作为IM的负载均衡了:
1.谁负责跟client三次握手四次挥手, ...

专业
Gangan_Master 发表于 2 年前
或许思考下面这几个问题大家就知道Nginx能不能作为IM的负载均衡了:
1.谁负责跟client三次握手四次挥手,是Nginx还是后面的RS
2.客户端的IP和端口在谁那里维护,怎么找到对应用户的连接信息
3.客户端新建连接的时候,Nginx与后面的RS是不是也会新建一条连接
fly2004jun 发表于 2 年前
引用:JackJiang 发表于 2019-06-10 11:18
c2c不是p2p。
c2c依然是走服务器中转
但如果要做多实例负载,当两个人登陆在不同的实例上时,两个服务 ...

我理解的C2C,是指有3步C2S ,S2S,S2C,关键,第2步,S2S,是指不通的C端可能分别被Nginx分配到不同的S服务端上去了
登至必极 发表于 4 年前
如同生活中的专卖店~客人到adidas专卖店买了一双鞋,这个专卖店就是代理,被代理角色就是adidas厂家,目标角色就是用户。这个用户是从哪来的,我怎么感觉目标角色是鞋呢
JackJiang 发表于 4 年前
引用:ronaldo9107 发表于 2020-11-13 21:15
怎么没人回复

问题太多了,回答完要累死了
ronaldo9107 发表于 4 年前
引用:yaohuan 发表于 2020-04-16 14:26
明白了。请假个问题,当前消息推送系统或者IM,接入几百万,上千万TCP长连接,负载均衡用LVS ...

怎么没人回复
yaohuan 发表于 5 年前
引用:JackJiang 发表于 2020-04-16 10:14
你理解的很到位。

说白了,Nginx是为web而生,对于im这种业务来说,如果用nginx,也最多只能作为IM集 ...

明白了。请假个问题,当前消息推送系统或者IM,接入几百万,上千万TCP长连接,负载均衡用LVS或者像阿里云上的SLB,通常一台 自搭建的LVS  ECS机器 能够支持多少TCP连接?因为我看到说一个TCP连接对应一个文件描述符FD,linux上单进程 最大能打开 100多万个fd ? 那么如果采用云主机 自己搭建一个LVS,后面反向代理 接上五台RS服务器,就算后面的RS  每台支撑100万,原则上五台 可以支撑500万TCP连接,但是由于linux 的单进程 最大能打开 fd数只是100多万 ? 也就是后面接再多RS也没用了?现在的问题是,LVS能够支撑多少TCP长连接,是跟内存有关呢还是跟FD设置有关?linux下,FD到底能够设置多大?
JackJiang 发表于 5 年前
引用:yaohuan 发表于 2020-04-16 09:54
我理解的反向代理,应该只是进行流量负载均衡,不包括路由寻址。C2S是因为C知道S的IP(由公网Nginx转发到后 ...

你理解的很到位。

说白了,Nginx是为web而生,对于im这种业务来说,如果用nginx,也最多只能作为IM集群里的前置LBS而已,起到的作用,跟它在Web中的地位相差太多。所以,正因为是这样,所以IM集群中多数时候LBS也会自已来写而很少考虑Nginx,因为与期鸡肋地用着Nginx,不如自已简单的写一个,还能深度匹配自已的业务,技术更可控,难度也并不大。必竟,im的集群技术难度并不在前置LBS这点事情上。
yaohuan 发表于 5 年前
我理解的反向代理,应该只是进行流量负载均衡,不包括路由寻址。C2S是因为C知道S的IP(由公网Nginx转发到后端内网服务器的IP),建立了TCP长连接,该连接可以双向通信,这就让S能够找到该连接的C,因此能够进行S2C。S2C通常在C2S的前提下才能进行,因为C通常都在私网,S是不能首先得知其地点的。而C2C,我们通常认为C是在私网中,外网是不能够直达C的,两个不同网络的C2C通信只能通过S进行中转,同局域网网段的C2C可以进行P2P通信,大多数情况下要解决的是不同网络中的C2C通讯问题,所以大多数情况下是由业务层进行路由寻址的,Nginx不负责具体业务。我觉得只要Nginx能够支持TCP,应该就能进行IM负载均衡。不知道理解是否正确?
akakmvp 发表于 5 年前
这个观点有问题,nginx负载到各个实例作为的是接入层,已经实现了socket长连接的负载,至于c2c就是上游业务的事情,服务端记录了某个用户登录到某个节点上,转发的时候只要rpc调用到msg发给目标节点接入层就ok了
JackJiang 发表于 5 年前
引用:ym_im 发表于 2019-09-06 11:09
直接搭肯定是不行的。我在考虑开发nginx moudle,这个moudle能多个长连接连接其他服务器,然后nginx接收的客 ...

你有这个定制开发能力的话,那倒是可以
ym_im 发表于 5 年前
直接搭肯定是不行的。我在考虑开发nginx moudle,这个moudle能多个长连接连接其他服务器,然后nginx接收的客户端msg都通过这个连接转发大logic服务器,然后logic服务器也能转发消息到nginx,就实现了c2c,相当于接入网关
JackJiang 发表于 5 年前
引用:fsliangzp 发表于 2019-06-25 14:07
所以题主提到的c2c这种场景下,也能研发自己维护了。
需要保存关联关系,客户端A链接服务端A、客户端B链接 ...

im集群就是这么麻烦,大厂会更复杂。不然,几百上千亿的市值,随便找找开源软件配置配置就能成,那赚钱就太容易了
fsliangzp 发表于 5 年前
所以题主提到的c2c这种场景下,也能研发自己维护了。
需要保存关联关系,客户端A链接服务端A、客户端B链接服务端B。
客户端A往客户端B发送信息的时候,服务端A就要去中间接找客户端B的服务端B机器出来。然后再广播事件通知服务端B,需要转发消息到客户端B

听着就觉得IM这块在实现方面挺有重量的...不知道大厂的解决方案是怎么样的,这样解决靠谱不。哈哈
JackJiang 发表于 5 年前
引用:摸鱼中 发表于 2019-06-10 11:06
c2c 需要服务端吗

c2c不是p2p。
c2c依然是走服务器中转
但如果要做多实例负载,当两个人登陆在不同的实例上时,两个服务端实例间怎么通信?
这是nginx解决不了,也不应该去解决的.
这说的是横向通信能力了。
im难搞就在这里

摸鱼中 发表于 5 年前
引用:Client to Client方向(简称c2c):即客户端向客户端发送数据的能力,比如:一条正常的好友聊天消息就是由客户端A发送给客户端B(当然这不一定是P2P技术实现)。

c2c 需要服务端吗

返回顶部