多服务器的咋全局count
这种情况一般不需要完全的准确性和实时性,设计过程中一般每个服务器异步上报,应用再通过轮询获取一个相对结果就行了。曾经的一个做法是,每个服务器在zookeeper 上的对应节点每60s写入当前的数据,然后服务查询所有节点数据再加和。
■网友
在线人数不是一个需要实时和绝对准确的业务。同步的方法比较贵,而且本来分布式的服务可以提供故障转移的特性,同步数据又变成单点了。仅仅是在线用户数,可以:1 每个服务器提供一个API能查询本地的数值,显示的时候轮询一次加起来。2 做一个独立的计数服务,每台服务器定时去刷新自己的数字。还有一个费力容易出错的方案,计数其实速度非常快,比如Memcached就有原子操作+1/-1。可以在上线下线的时候改这个全局数字。这个方法费力是因为除了上线下线,还有很多服务器故障状态要处理。容易出错是因为一旦出错就没有机会修复。
■网友
其实非常简单:1.如果需要统计精准的数据,那么就必须牺牲性能:事务开始锁住第1台服务器的用户表锁住第2台服务器的用户表.....获取第1台服务器的在线用户数量获取第2台服务器的在线用户数量....事务结束把以上在线用户数量,进行累加,返回结果
2.如果需要保持高性能,那么就必须牺牲统计的精准度:获取第1台服务器的在线用户数量获取第2台服务器的在线用户数量....把以上在线用户数量,进行累加,返回结果
以上只是针对普通人进行解释的方案。我自己则更喜欢这样的结构:
【多服务器的咋全局count】
■网友
之前不是日报有个文章写游戏服务器的变迁么,他提到现在主流是星形结构,也就是说所有的slave都跟master交互,master来维护这个统计变量,这样看起来就简单的很阿。无论用数据库,还是用code写个socket,都相当容易完成了。=================你要做成push,不要做成pull,这样就不会有同步的问题了。这也是对一些其他答案的看法。
■网友
每个服务器独立统计,然后上报汇总;这样知道了每个服务器的量级,也可以知道总的量级。
推荐阅读
- 想做手机网游代充,请问要去哪里找货源
- 汽车知识|零距离体验新一季MINI COUNTRYMAN 尤加利青配黑色真香!
- 双11阿里云搞活动,买了一个ecs云服务器,能做啥呢
- 让一个网游(或手游)连接自己的服务器或pc
- Facebook, Google, 百度等公司自制开源服务器,对IBM,HP,Dell等传统服务器生产商的冲击是啥
- c++写http服务器不用cgi和apache该用啥
- 怎样获取每日全球注册的域名或者怎样通过dns服务器获取每日在dns上新增的解析域名
- 怎样看待中国将拥有互联网根服务器
- 办公室在一楼,地下室是服务器机房,大小有个几百平米请问辐射大吗
- 黑掉苹果服务器有多难