`
134564
  • 浏览: 19843 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

sns的服务器架构设计

 
阅读更多
今天写写网络负载的事。

之前的项目是MMORPG,mina做网络层的TCP服务器。服务器设计目标应该是5K人以下,其实一般的上线服务器设定3k的就会显示爆满了。当时除了偶尔会突然出现CPU峰值之外,可能是服务器富gc吧,一般情况下还是很轻松的。听说当时的服务器还不是太好的硬件。手机屏幕显示的玩家还是比较少的,通过用分线的策略,按块同步的方式,再加上手游玩家对网络的宽容:),同步的压力也不算太大, 总的来说项目还是比较成功的。

现在的项目是一个轻sns的的游戏, 对服务器要求很不高, 如果不主动联网,你甚至可以当它是一个单机游戏,而且客户端对手机电量有要求,所以选择了HTTP协议。
但是因为需求表面上看起来是很简单,所以大家对服务器的负载都有很大的期望,第一个目标是一台服务器负载20W的同时在线用户。

首先,HTTP的协议的方式对网络层的第一个考验应该就是session的问题。
这里还是遇到一个问题, 看jetty的介绍,其中一个特色就是容器内的各个模块是独立组件式的, 这样的话session是可以手动关闭的。 而再看到一些资料, 据说当request.getsession()方法不主动调用时就不会创建session, 这样也就无所谓关不关容器的session功能了。 与客户端协调了一下, 认为客户端的cookies实现的方式是可以保证安全的。 服务器做一个sessionID加密。 就可以当做令牌填到HTTP协议头上实现客户端,服务器端交互了。

第二, 应该考虑的问题是数据存在哪的问题。
MMORPG的服务器,是高交互,数据使用密集而又集中的场景, 用户量不大,单独的服务器将数据保存在内存里就完全好使了, 而且,编程实现起来也很简单。 当然, 也正是因为这个原因,导致MMORPG的服务器一般没有人想着做成一个大而一统的系统的, 分区分线的方式广大玩家也已经接受。但是SNS类的游戏面临的是用户数据量巨大, 交互比较少,玩家之间的互动也相对较少,但人与人之间建立的关系是以现实中人与人的的基础建立起来的, 你不可能让一个人上一个sns游戏里找到自己的同学时发现TA在3区,而自己在1区。 鉴于他们很少的数据交互,实时性要求也不高的情况下,做一个大而统一的服务器是可以实现的。因为我们可以做web集群,可以做负载均衡。 可以一个游戏放100台web服务器来做业务服务器。 但要求100台服务器的内存是一个统一体, 那么大量数据存在哪呢?好吧, 就是memcached。

关于memcached我也没怎么研究过, 据同行们说,有这么用的。 先把架构搭起来,一步步走吧。

第三, 都是谁在线?
想要在一个远程内存环境里去维护一份在线列表其实也不是容易的事, 假如一台服务器20w人的数据, 每条在线状态还需要记录一个活跃的时间。多个服务器乘下来,很可能一份在线列表就是几十M的量。 此外,web服务器之间的列表数据合并的消耗。 memcached获取数据后版本重新失败,需要重新gets下来再cas等等。即使是局域网下的数据交互也是不能忍受的。 该怎么做?我们想了一个办法, web服务器群组开TCP连接到一个World服务器上。 world服务器来同步大家的时间,在线列表统一管理,即每台web服务器变化了的在线状态列表集中发到world服务器上,world服务器将在线列表更新到Memcached服务器上,然后逐一通知web服务器,去做更新操作。

第四, 数据保存。
同样的问题,在mmo的服务器实现上,一般都是间隔行的保存数据。 并且一般不会很频繁, 甚至有的实现是直接共享内存,异步的保存数据,java实现起来不好实现,但是异步的间隔性的保存数据对数据库压力还算可以。基于这个思路,我们的sns服务器也正好有world服务器, 数据的保存就可以交给world服务器来做了。 不会对用户产生任何影响。但是可能会有数据一致性的问题带来。


总的来说,游戏服务器的设计还是有很多不懂的, 没有很好解决了问题的情况。其实办法可以一步步的想出来,最大的问题是有些连自己都不知道的问题出现。 而这种问题往往会发生在服务器上线之后。 路还很长,一步步走吧。




分享到:
评论
1 楼 milk_36 2012-02-06  
很巧,最近和楼主遭遇很类似.之前我也是做手游mmorpg.现在要做sns游戏还是有很多地方比较棘手的.
个人认为sns和大流量web站点很像,比起mmorpg来有两个明显的区别:
1.sns访问量pv比mmorpg要大(一般mmorpg可以分区分流解决)
2.sns因为高pv必然数据的读写平凡(缓存的机制和mmorpg不同)
楼主也都说到了
我比较感兴趣的是楼主说的memcached(这应该是个集群吧?)
楼主你说的World服务器是否是一个类似数据代理?
World服务器会把所有分线或者分区的数据业务操作根据先后顺序做操作?
但是这样貌似还是会有数据一致性的问题?楼主你是怎么解决的?
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    SNS服务器架构分享

    关于SNS游戏服务器、程序设计相关的架构设计,代码设计

    高性能高并发服务器架构大全

    整理的高性能高并发服务器架构文章,内容预览:  初创网站与开源软件 6  谈谈大型高负载网站服务器的优化心得! 8  Lighttpd+Squid+Apache搭建高效率Web服务器 9  浏览量比较大的网站应该从哪几个方面...

    SNS服务端解决方案(原创)

    SNS服务端解决方案: 关于服务器架构等。

    Fikker网站加速服务器 v3.7.9 linux 64位

    Fikker 从原始架构开始设计,跨平台(支持 Windows 和 Linux)和面向服务器类软件方向设计,经过多年的精雕细琢,稳定性,功能性和易用性大大提升,一些功能特点,在很多设计和实现上是国内甚至是国际上的创新,例如...

    Fikker网站加速服务器 v3.7.9 windows 64位

    Fikker 从原始架构开始设计,跨平台(支持 Windows 和 Linux)和面向服务器类软件方向设计,经过多年的精雕细琢,稳定性,功能性和易用性大大提升,一些功能特点,在很多设计和实现上是国内甚至是国际上的创新,例如...

    Fikker网站加速服务器 v3.7.4 64位.zip

    Fikker 从原始架构开始设计,跨平台(支持 Windows 和 Linux)和面向服务器类软件方向设计,经过多年的精雕细琢,稳定性,功能性和易用性大大提升,一些功能特点,在很多设计和实现上是国内甚至是国际上的创新,...

    H5智能内核-基于MVC架构的全新Zoomla!逐浪CMS2 x3.8发布

    移除:移除后台SNS好友管理、虚拟商品等无用页面 修复:邀请码生成功能,并检验邀请码逻辑 修复:微博绑定Bug,修改密码链接Bug 修复:用户中心广告申请、节日提醒功能 增加:MVC页面索引功能,用户中心已可搜索页面...

    sls-node-ts:无服务器节点TypeScript是一个入门工具包,可以通过使用Node.js和TypeScript中的无服务器框架来编写无服务器应用程序。 开箱即用地配置了Apollo GraphQL服务器和REST端点

    它具有以下开箱即用的功能: 配置的CORS 通过AWS Secrets Manager的机密(请参阅src/config/index.ts ) 通过身份验证具有模块化架构的REST端点DDD结构MongoDB整合通过AWS SNS的域事件以进行本地开发本地部署到 ...

    基于J2EE的博客系统的设计与实现毕业设计.doc

    17 3.3 系统架构 17 3.4 系统运行机制 18 第4章 系统详细设计与实现 20 4.1 类的设计与实现 20 4.1.1 Java Bean类的设计 20 4.1.2 通用类的设计 21 4.2 数据库与Hibernate配置 22 4.3 Struts 2配置 22 4.4 模块详细...

    JavaCenter_Home_UTF8.zip_JavaCenter_home networking java_ten9sm_

    JavaCenter Home 的基础架构采用世界上最先进流行的 web 编程组合 Java+MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效系统解决方案。系统用MVC设计模式,采用Struts、Hibernate框架及中间件的结合既...

    NextIM3.1技术白皮书(社区网站WEBIM)

    NextIM是业界领先的基于Erlang、JSONP等技术构建的WebIM服务器,后台架构与GTalk in Gmail、Facebook IM相似,通过JSONP实现跨域长轮询,极大减轻WEBIM对社区站点的性能压力,通过Erlang语言实现可大规模分布式集群...

    Fikker CDN主控 v2.9.6

    Fikker 从原始架构开始设计,跨平台(支持 Windows 和 Linux)和面向服务器类软件方向设计,经过多年的精雕细琢,稳定性,功能性和易用性大大提升,一些功能特点,在很多设计和实现上是国内甚至是国际上的创新,例如...

    JavaCenter_Home

    JavaCenter Home 的基础架构采用世界上最先进流行的 web 编程组合 Java+MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效系统解决方案。系统用MVC设计模式,采用Struts、Hibernate框架及中间件的结合既...

    serverless-website-monitoring:使用AWS的100%无服务器网站监控工具

    基于AWS基础架构的无服务器网站监视工具。 主要特征 100%无服务器 无限的网站监控 松弛警报仅在状态更改时发出 SNS主题仅在状态更改时发布。 SNS可以通过发送警报 短信/短信 电子邮件 推 等等。 基本Cloudwatch...

    JavaCenter Home v2.0 GBK 正式版.rar

    JavaCenter Home 的基础架构采用世界上最先进流行的 web 编程组合 Java MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效系统解决方案。系统用MVC设计模式,采用Struts、Hibernate框架及中间件的结合既...

    JavaCenter Home v2.0 build 20101105 GBK

    JavaCenter Home 的基础架构采用世界上最先进流行的 web 编程组合 Java+MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效系统解决方案。系统用MVC设计模式,采用Struts、Hibernate框架及中间件的结合既...

    JavaCenter Home v2.0 build 20101105 UTF8

    JavaCenter Home 的基础架构采用世界上最先进流行的 web 编程组合 Java+MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效系统解决方案。系统用MVC设计模式,采用Struts、Hibernate框架及中间件的结合既...

    SpaceBuilder v1.1 Build 080718 源码版.zip

    它同时也是一套Web2.0全面解决方案,包含:个人门户、博客、相册、网摘、文件、圈子、活动、消息中心、SNS等功能,可以根据客户需求任意 组合、无缝集成。它采用了业内领先的技术体系架构、隐私保护功能、用户评价...

    SpaceBuilder v1.1 Build 080718 安装版.zip

    它同时也是一套Web2.0全面解决方案,包含:个人门户、博客、相册、网摘、文件、圈子、活动、消息中心、SNS等功能,可以根据客户需求任意 组合、无缝集成。它采用了业内领先的技术体系架构、隐私保护功能、用户评价...

Global site tag (gtag.js) - Google Analytics