T项目服务器架构分析

在这里插入图片描述
tips. 图为T项目服务器架构分析图,其中world,game, proxy都是可扩展的。

一、服务器概述

1. proxy : 代理服务器####

Game的代理服务器,和客户端client直接相连,类似于我们常说的"负载均衡",每个proxy是和所有game都有连接的。
作用 :

  1. 不需要将game、world设置外网ip,暴露在网络中,防止攻击,起到单点对外防火墙的作用。
  2. 直接将client连接请求分流,和负载均衡结合使用。
2. game : 区服逻辑服务器

我们常说的每个游戏区服就对应一个game,负责游戏内的主要业务逻辑。
每个game和所有world都有连接,但是game之间没有直接连接,所以,game发给其余game的数据一般由world转发。

3. world : 和web交互、跨服逻辑服务器

每个world和所有game都有连接,但是world之间没有直接连接,和game类似,数据一般由game转发。
其中,world1:与web交互,给web返回连接game的IP和端口,及处理各种GM指令,是不部署逻辑功能的,
所以不需要和global redis连接。其余的world:是可以部署跨服逻辑的服务器。

4. 不同的DB数据

#####(1) ttserver的key-value模式数据库:#####

a. Global DB :

每个world服务器都有一个Global DB,用来保存world上的数据。

b. Local DB:

每个game服务器都有一个Local DB,用来保存单个区服的数据。

c. Guild DB

每个game服务器都有一个Guild DB,用来保存单个区服上的军团guild数据

d. User DB######

每个玩家对应一个uid,玩家数据以uid为key,保存玩家数据在UserDB。
每个game都可以对其对应的UserDB进行读取、写入、修改操作。
可以有多组UserDB,但是每个UserDB包含2个进程,1个主库1a,一个备份库1b。部署时,1a和1b不要部署在一台机器上。

e. Plat DB######

每个玩家注册游戏时,都有一个和平台相关openid。PlatDB是存储"openid+区服"与uid映射关系的数据库,
从而可以根据openid找到玩家uid。所有game都与PlatDB都有连接。
全服只有一组PlatDB,包含两个进程,一个主数据库,一个备份数据库。

(2) ttserver的内存数据库模式#####
f. MemCache######

缓存db数据。读取玩家数据时,先尝试从MemCache中读取,读取成功则直接使用数据,读取失败则从UserDB中读取。
MemCache和game是一对多的关系,每个Game只会与一个MemCache有连接,但是一个MemCache可能会连接多个Game。

(3) Redis数据库#####
g. Local Redis

只保存对应game的缓存数据。与game的关系是一对多的关系。

h. Global Redis

全服共享的缓存数据。GlobalRedis和game,world都有连接。

二、服务器概述的反思回顾

  1. UserDB组和PlatDB组为什么都包含2个进程。

    UserDB和PlatDB都有一个主数据库进程,一个备份数据库进程。两个进程不在一台物理服务器上。
    主数据库进程进行读写操作,可以修改数据库数据,但备份数据库进程只进行写入操作,
    将最新的数据写入到数据库中,从而达到备份的目的。

  2. 服务器是如何使用MemCache的。

    MemCache本身有读写操作。以UserData为例,当需要玩家A的数据时,会先查看MemCache里是否有该uid,
    若存在,则直接读取MemCache里的key(uid)对应的玩家数据。若不存在,则从UserDB中读取,当玩家数据标脏时,
    会把该玩家数据添加到memcache的保存列表,下次再找该玩家时候就存在了。

  3. MemCache里的缓存数据,和UserDB,或GuidDB里的数据有关联吗

    MemCache里的缓存数据,和UserDB或GuildDB里的数据是保持一致的,但两个数据又是相对独立的。
    MemCache的缓存数据是每个tick下进行更新保存,UserDB或GuildDB的数据是在标脏后,将玩家数据写入保存db列表。

  4. ttserver的key-value数据库模式和内存数据库模式有什么区别,又有什么相同的?

    数据库分为关系型数据库和非关系型数据库。简单的说,关系型数据库本身是一对多,
    而非关系型数据库则是一对一,类似于map。而ttserver本身是一个非关系型数据库,
    每个key值对应一个value,在哈希模式下,读写速度都特别快。所以ttserver数据库本身就是key-value模式。
    而内存数据库,顾名思义,将数据放在内存里的数据库,从而加快读写速度。
    它本身也是key-value模式保存在内存中的。

  5. Redis数据库的配置及使用。

  6. ttserver数据库的配置及使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值