Nginx TCP 层的缓存定位。

Grrrr 发布于 2013/12/24 17:02
阅读 701
收藏 0

自从用Nginx取代了zookeeper做TCP层的负载均衡后,腰不酸了,腿也不疼了。真是个好东西。

于是打算继续用Nginx做TCP层的缓存定位。假设我有:

5个Redis缓存服务器,1000个用户根据ID取模散列到这5个服务器上。(先不考虑Hash一致性)

比如有一个TCP请求ID为980用户数据(TCP的消息格式是自定义的),应该定位到第0个Redis服务器上。该怎么在Nginx上实现这种功能呢?

我感觉得自己写Nginx脚本来搞,毕竟TCP消息格式是自己定义的。本人Nginx新手。

加载中
0
红叔
红叔
等高手来解答,水平有限,只能顶下...
0
月影又无痕
月影又无痕

骚年们,你这个需求典型提根据URL参数执行定位某个后端机器,有相关的模块可帮助到你

那么规则就是

hash $request_uri


参考地址:http://wiki.nginx.org/HttpUpstreamRequestHashModule

Grrrr
Grrrr
我这个是在TCP层的,消息格式是自定义的。不是在HTTP层。
0
Grrrr
Grrrr
我认为肯定是要自己来写逻辑了。Nginx哪里知道你TCP用的什么鬼消息格式?
0
月影又无痕
月影又无痕

引用来自“月影又无痕”的答案

骚年们,你这个需求典型提根据URL参数执行定位某个后端机器,有相关的模块可帮助到你

那么规则就是

hash $request_uri


参考地址:http://wiki.nginx.org/HttpUpstreamRequestHashModule

我可以很负责任的告诉你,你连tcp层是什么,都不明白,就在这乱吓人。tcp是什么?传输控制协议,主要解决数据在不可靠的线路上的可靠传递之问题的。

比网络层还要更低一级。

这一层传输的是数据包,包含ip端口等等信息,你要在tcp层实现,那就相当于要去实现一个linux netfilter网络数据包的拆包、解包、重新封包的操作。

明月照大江
明月照大江
你搞歪了~,网络层上面才是传输层,netfilter和libpcap抓的是链路层的包~~。
Grrrr
Grrrr
谢谢你的回答,请你无视我这个白痴的问题。我知道TCP层在HTTP之下,但是在网络IP层之上。 我就是要打算自己在TCP层解包,重组包的(用的google protocol buffer)。将打好的包发给后端的服务端(用netty写的TCP服务器)。我就是想问一下nginx能这么做吗?
0
月影又无痕
月影又无痕

那搞了半天,不还是上升到应用层去了?

这个应该是应用层协议转换的操作,无须拆包、封包这些处理。就像ssh的端口转发,netcat代理一样。

应该是开发一个nginx和netty交互的应用层协议就可了。不就是相当于nginx直接访问memcached, mysql这种模式吗?

Grrrr
Grrrr
咱俩说的应用层可能不是一个东西,我一直说的是TCP层。你说的可能是TCP层上的应用。我这个应用比较特别,还真需要解包,要不你怎么知道980的用户资料存在那个redis服务器上?你转发给谁?要是不需要解包,我就不在这里问了。
0
k
kidding

没有看楼上几位的说的

url hash

要是不想自己拆包

包的首行写http的试试看

get  /index.html HTTP/1.1\r\n

返回顶部
顶部