多核心的开发逐步会成为软件开发的一个关键领域,单个CPU处理核心的处理能力已经逼近物理学的极限,今后的计算技术,多处理核心必定会成为提高计算能力的不二之选,那么软件开发如何能够适应多核心处理器的需求呢,如何能够充分利用4核,6核,8核甚至更多核心的处理能力呢?
事实上,软件技术早已为我们准备好了解决方案,那就是多线程的软件开发,现代操作系统,能够将线程合理的分配到不同的处理核心上,只要我们在设计的时候,能够将工作合理的分摊到不同的线程中,就可以充分利用多计算核心的处理能力。对于单一的计算任务来说,这是一个算法问题,比如说视频编解码,压缩,计算 PAI 等,需要在算法层面对计算进行分解,数据的分块是一个普遍的原则,但是没有什么通用的解决方案,而且我不是一个算法专家,也只能依赖于一些算法库本身对多核心的支持,在我的系列中不讨论算法本身的并行化。
对于实际的复杂系统来说,如何充分利用多核心的处理能力就是一个很有意思的挑战了。我们假设这样一个应用场景:
在 MMORPG 服务端架构中,登录服务器是一个非常关键的角色,简单来说登录服务器为游戏服务器提供登录服务,多个游戏服务器(可能分区也可能不分区)连接到同一个登录服务器,登录服务器处理游戏服务器发来的用户登录请求,设置其登录状态,上线下线时间等等。当然,实际的登录服务器还要处理用户充值,消费,密码找回等等请求,为简化问题,我们首先考虑一个仅仅实现注册和登录的登录服务器。
问题的难度在于可能的巨大负载,如果每分钟几个请求,我相信不需要任何设计技巧和多核的处理能力,任何初学者都能够设计出能用的系统来。一个典型的网络游戏可能有10万玩家在线,在服务器启动的时候,极限情况下,在几分钟的时间内,这10万玩家可能都发出登录服务器的请求,大家经常看到某某游戏公测的时候,频繁出现登录问题,基本上都是由于负载超出了设计能力造成的。
我们设计的目标 就是一个能够在 1 分钟之内,完成 10万次登录请求的登录服务器。
我们将目标分解为下面几个阶段:
1 实现一个并发连接可能几千的网络服务器,可以有多个线程从连接中接收和发送数据,占用尽可能少的CPU
2 实现一个 内存 hash 表,多个处理线程访问这个hash表来设置登录状态以及验证密码
3 实现一个MySQL的后端,需要持续化的数据,首先保存到数据库中,保持数据库和内存 hash 一致性
4 MySQL 数据库分成热表和冷表,将经常访问的数据存放在热表中,以应对上亿的注册用户,几百万活跃用户造成的数据库访问性能低下
本文探讨了如何利用多核处理器的优势来设计高性能的MMORPG登录服务器,通过多线程技术实现并发处理大量用户的登录请求,确保在高负载下也能稳定运行。

2万+

被折叠的 条评论
为什么被折叠?



