有状态server和无状态server

历史

  1. 最早只能浏览信息的网站是无状态server
  2. 网站为了跟踪用户加入了cookie, session机制, 这时认为是有状态的server
  3. 之后流量越来越大, 需要多个server时, 根据hash将某用户请求都分发到某一server里, 此时还是有状态. 但影响server的扩展, 以及重启更新.
  4. 为了解决3中的问题, 将session存到redis里, 这样server又变成了无状态, 同时还能跟踪用户.
  5. 到了第4步后Websocket(聊天室\在线游戏)怎么办? tcp连接是ip:port的连接,并且程序依赖ws对象. 所以一个用户的webscoket消息需要总是在一个server(回到3). 但收消息方的ws极可能被建立在另一台server上, 所以需要把消息转发给收消息方的server, 可以每个server里再起一个接口来接收转发的消息, 更好的实现是使用mq!

幂等性

A向B发消息, 可能因为各种原因出现A发了一条, 但给B推两条的情况. 一个永远不可避免的原因是tcp的重发机制. 所以如何尽量避免这种情况? 每个消息带一个唯一id, 在B所在的server记录1分钟内发过消息的id, 如果存在就丢弃消息(也可以用redis, 但感觉server缓存更佳).

分布式websocket实现思路

https://www.cnblogs.com/rolayblog/p/11170954.html
在这里插入图片描述

游戏和普通webserver果然是两个世界.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值