今天写写网络负载的事。
之前的项目是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服务器来做了。 不会对用户产生任何影响。但是可能会有数据一致性的问题带来。
总的来说,游戏服务器的设计还是有很多不懂的, 没有很好解决了问题的情况。其实办法可以一步步的想出来,最大的问题是有些连自己都不知道的问题出现。 而这种问题往往会发生在服务器上线之后。 路还很长,一步步走吧。
分享到:
相关推荐
关于SNS游戏服务器、程序设计相关的架构设计,代码设计
整体架构设计中,服务器分布、数据流、分布性和负载均衡是核心考虑因素。技术选型涉及硬件和软件,如选择LAMP(Linux, Apache, MySQL, PHP/Memcached)或其变体,这些技术栈为许多SNS网站提供了坚实的基础。软件架构...
高并发高负载网站的系统架构设计 - **系统分层设计**: 通常包括前端展示层、业务逻辑层、数据访问层等多个层次。 - **模块化设计**: 将系统划分为多个功能模块,每个模块负责一部分业务逻辑。 - **异步处理**: 利用...
Push 系统总体架构图展示了 Push 系统的整体架构,包括客户端、推送服务器、消息服务支持模块、云端服务、数据存储服务、第三方服务等部分。同时,Push 系统还使用了多种技术,包括 Spring 框架、MyBatis 框架、...
整理的高性能高并发服务器架构文章,内容预览: 初创网站与开源软件 6 谈谈大型高负载网站服务器的优化心得! 8 Lighttpd+Squid+Apache搭建高效率Web服务器 9 浏览量比较大的网站应该从哪几个方面...
**开源SNS架构——Elgg深度解析** 在互联网社交领域,SNS(Social Networking Service)网站已经成为人们在线交流、分享信息的重要平台。Elgg是一款强大的开源SNS框架,以其灵活性和可扩展性受到开发者的青睐。本文...
无服务器架构微服务方案是一种新兴的技术模式,它将传统微服务的概念与无服务器计算相结合,以提高系统的可扩展性、灵活性和成本效益。无服务器架构的核心在于,开发者只需要关注业务逻辑,而无需关心底层基础设施的...
总的来说,《SNS网站系统的设计与实现》是一项涉及广泛技术领域的综合实践,从需求分析、架构设计、编码实现到系统测试,每一个环节都体现了IT专业人员的综合素养。通过这个项目,我们可以深入理解社交网络平台的...
除了 Lambda,无服务器架构还涉及到其他 AWS 服务,如 DynamoDB(用于实时、高性能的 NoSQL 数据库)、SNS(简单通知服务,用于消息传递)、SQS(简单队列服务,用于异步处理)、Kinesis(用于实时流数据处理)、S3...
在IT行业中,SNS(Social Networking Service)社交网站是用户互动和信息分享的重要平台,如开心网就是一个典型的例子。为了构建这样一个系统,通常会采用三层...对于大型社交网站来说,这样的架构设计是必不可少的。
大型电商网站架构设计的原因可以分为三类:大型门户、SNS 网站和电商网站。电商网站具备以上两类的特点,比如产品详情可以采用 CDN,静态化,交互性高的需要采用 NOSQL 等技术。 二、电商网站需求 客户需求包括: ...
本文将深入探讨由linuxjcq于2011年10月18日分享的“SNS服务端解决方案”,重点分析服务器架构设计、负载均衡策略、数据库管理以及运维实践,为构建高可用、高扩展性的SNS平台提供理论与实践指导。 #### 二、NGINX与...
传统的Web架构已经无法满足当前的需求,这就需要我们探索新的架构设计来提升系统的性能、并发度以及扩展性。本文基于实际案例,探讨了一种基于廉价硬件平台的高性能、高并发、高扩展性的海量Web应用系统架构的设计与...
首先,SNS社区的基础架构设计是至关重要的。这通常包括前端用户界面和后端服务器系统的构建。前端设计需考虑用户体验,提供直观易用的交互界面,以便用户能够方便地发布状态、上传图片、评论和分享内容。而后端则...
文档可能涵盖了AWS云架构设计的核心要点,旨在帮助用户理解如何充分利用AWS的服务来构建可扩展、安全且经济高效的云解决方案。 **1. 介绍** 这部分可能介绍了为什么要在AWS上进行云架构设计,以及它如何与传统的...
二、SNS网站架构解析 SNS网站的核心功能包括用户注册、登录、个人资料管理、好友关系、动态发布、评论互动等。在"近乎SNS论坛"中,我们可以看到这些功能的实现细节。源代码中的Model层负责数据处理和业务逻辑,View...
为了解决这一问题,黄月胜、王泓为、郭海涛三位学者提出了基于SNS(Social Networking Service,社交网络服务)技术的分布式网络协作学习系统设计方案。 首先,我们需要了解SNS技术在系统设计中的作用。SNS技术的...
事件驱动的云服务架构设计是现代云计算领域中的一个重要概念,它强调通过响应各种事件来触发服务执行,从而实现灵活、可扩展和高效率的系统构建。这种架构模式在微服务、物联网(IoT)和实时数据处理等场景中广泛应用...