i007.cc

i007.cc

优先队列-降维打击

05.价值资料

介绍下FC mobile的后端架构

需要先说明:EA 的内部架构是非公开的,我没有内部资料。但可以从JD 透露的技术栈 + 游戏特性 + 行业通用模式推断出一个合理的架构图,这对你面试时展示产品理解很有价值。


从 JD 读到的技术栈信息

语言:Java / C++ / Go
关系型数据库:MySQL / Postgres
文档数据库:DocumentDB(MongoDB 兼容)
缓存:Redis
容器:Docker + Kubernetes
版本控制:Git / Perforce

 

这个组合非常典型的云原生微服务游戏后端,不是单体架构。


整体架构推断

全球玩家
    ↓
CDN(静态资源:球员图片、卡面、活动素材)
    ↓
全球负载均衡(按地区就近接入)
    ↓
API Gateway(鉴权、限流、路由)
    ↓
微服务层(Kubernetes 编排)
    ↓
数据层(MySQL + DocumentDB + Redis)

 


核心微服务拆解

游戏的每个功能模块大概率是独立服务:

玩家服务(Player Service):账号信息、等级、VIP 状态。数据量稳定,关系清晰,用 MySQL 存储。读多写少,热点数据缓存在 Redis。

背包 / 卡牌服务(Inventory Service):每个玩家的球员卡集合,卡的属性、数量动态变化,Schema 灵活。DocumentDB(MongoDB)非常适合这类文档型数据——一张球员卡是一个嵌套文档,包含属性加成、特技等复杂结构。

经济服务(Economy Service):金币、点数的流转,抽卡消费,市场交易。所有涉及金钱的操作必须有 ACID 保证,走 MySQL 事务。配合 Redis 分布式锁防止并发重复消费。

对战服务(Match Service):管理 VS Attack 的异步对战会话。因为是异步设计(不是实时双人同时在线),服务器记录每局的攻守状态、分数,双方轮流操作。对战数据读写频繁,用 Redis 存活跃对局状态,结束后落库 MySQL。

匹配服务(Matchmaking Service):按 MMR 为玩家找对手。匹配队列用 Redis Sorted Set(score = 等待时间或 MMR),匹配引擎定时轮询出队撮合。

活动服务(Event Service):这是最复杂的服务之一。管理所有限时活动的生命周期:活动配置、任务进度追踪、奖励发放。活动配置通过热更新下发(不重启服务修改参数),任务进度高频读写走 Redis,完成后写 MySQL 持久化。

排行榜服务(Leaderboard Service):全服榜、联赛榜、活动榜。Redis Sorted Set 维护实时榜单,定期快照到 MySQL,历史赛季数据归档。

通知服务(Notification Service):活动开始、比赛结果、好友申请的推送。走消息队列异步处理,避免阻塞主流程。


数据层的分工

MySQL
  → 玩家账户、订单记录、金币流水
  → 需要事务、强一致、不能丢的数据

DocumentDB(MongoDB 兼容)
  → 球员卡背包(文档结构灵活)
  → 活动配置(JSON 文档,频繁变更)
  → 比赛历史记录(写多读少,不需要强关系)

Redis
  → 登录 Session / Token
  → 排行榜(Sorted Set)
  → 活动任务进度(高频读写)
  → 对战活跃会话
  → 分布式锁(防并发重复操作)
  → 热点数据缓存(减少 DB 压力)

 


LiveOps:运营驱动的架构需求

FC Mobile 最大的技术特点是高频运营——几乎每周都有新活动上线,节假日期间更密集。这对后端产生了特殊要求:

配置热更新:活动开关、奖励倍率、限时折扣,必须不重启服务就能修改。通常用独立的配置中心(类似 Apollo / Nacos),服务定时拉取或 push 推送。

流量洪峰处理:活动开始瞬间(比如 TOTY 发布)大量玩家同时抽卡,是最高峰的写入压力。需要限流、异步队列削峰、自动扩容(K8s HPA)。

灰度发布:新活动先对 1% 的玩家开放,确认没问题再全量。API Gateway 层做流量切分。


全球化部署

FC Mobile 是全球产品,多地区部署是标配:

北美区(NA)   → AWS us-east / us-west
欧洲区(EU)   → AWS eu-west
亚太区(APAC) → AWS ap-southeast(新加坡)
中东区(MENA) → AWS me-south(巴林)

各区域独立部署,就近接入,减少延迟
跨区对战通过中转节点(Relay Server)解决
全球数据汇聚做全服排行榜

 


面试里怎么用这些知识

你不需要假装知道 EA 内部的真实架构,但可以展示产品理解:

“我玩了几局 VS Attack,发现它是异步设计,这让我联想到服务器端的对战 Session 管理——因为不是实时双人同线,服务器需要维护每局的攻守状态和等待时间,我猜 Redis 会是活跃对局的主要存储,结束后再落 MySQL。不知道你们实际上是怎么设计的?”

这种把玩家体验和技术推断结合起来的提问,会让面试官感觉你既懂技术又理解产品,是很加分的。

发表回复