介绍下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。不知道你们实际上是怎么设计的?”
这种把玩家体验和技术推断结合起来的提问,会让面试官感觉你既懂技术又理解产品,是很加分的。
