sns的服务器架构设计

2024-01-28 22:48
文章标签 服务器 架构设计 sns

本文主要是介绍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服务器来做了。 不会对用户产生任何影响。但是可能会有数据一致性的问题带来。


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

这篇关于sns的服务器架构设计的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/655034

相关文章

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

NFS实现多服务器文件的共享的方法步骤

《NFS实现多服务器文件的共享的方法步骤》NFS允许网络中的计算机之间共享资源,客户端可以透明地读写远端NFS服务器上的文件,本文就来介绍一下NFS实现多服务器文件的共享的方法步骤,感兴趣的可以了解一... 目录一、简介二、部署1、准备1、服务端和客户端:安装nfs-utils2、服务端:创建共享目录3、服

Python项目打包部署到服务器的实现

《Python项目打包部署到服务器的实现》本文主要介绍了PyCharm和Ubuntu服务器部署Python项目,包括打包、上传、安装和设置自启动服务的步骤,具有一定的参考价值,感兴趣的可以了解一下... 目录一、准备工作二、项目打包三、部署到服务器四、设置服务自启动一、准备工作开发环境:本文以PyChar

Apache Tomcat服务器版本号隐藏的几种方法

《ApacheTomcat服务器版本号隐藏的几种方法》本文主要介绍了ApacheTomcat服务器版本号隐藏的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1. 隐藏HTTP响应头中的Server信息编辑 server.XML 文件2. 修China编程改错误

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

Python如何实现 HTTP echo 服务器

《Python如何实现HTTPecho服务器》本文介绍了如何使用Python实现一个简单的HTTPecho服务器,该服务器支持GET和POST请求,并返回JSON格式的响应,GET请求返回请求路... 一个用来做测试的简单的 HTTP echo 服务器。from http.server import HT

如何安装 Ubuntu 24.04 LTS 桌面版或服务器? Ubuntu安装指南

《如何安装Ubuntu24.04LTS桌面版或服务器?Ubuntu安装指南》对于我们程序员来说,有一个好用的操作系统、好的编程环境也是很重要,如何安装Ubuntu24.04LTS桌面... Ubuntu 24.04 LTS,代号 Noble NumBAT,于 2024 年 4 月 25 日正式发布,引入了众

如何提高Redis服务器的最大打开文件数限制

《如何提高Redis服务器的最大打开文件数限制》文章讨论了如何提高Redis服务器的最大打开文件数限制,以支持高并发服务,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录如何提高Redis服务器的最大打开文件数限制问题诊断解决步骤1. 修改系统级别的限制2. 为Redis进程特别设置限制

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识