Erlang最大的优点是方便,很多基础功能都已经集成到Erlang语言中。之前用C++写服务器的时候,管理TCP连接很繁琐,需要写一大堆代码来实现。底层的框架需要写很多代码实现,这样既浪费时间,又会有很多BUG。但是用Erlang就方便多了,底层的一切你都不需要考虑,你只需要考虑,服务器的架构以及业务逻辑。从此让你彻底从底层的泥潭中解脱。我从去年年底开始了解学习Erlang,到现在我已经彻底爱上了Erlang。好了,废话不多说,开始详细介绍下我设计的这个服务器架构吧。
    首先看下整个架构的布局,如下图:
    
    如上图所示,整个架构由四部分组成,分别是连接管理服务器、账号服务器、游戏服务器以及数据服务器。
    连接管理服务器既网关服务器,主要作用是管理与客户端的网络连接,将服务器组与外网隔离。只有连接服务器中会监听网络连接,连接管理服务器与其他类型的服务器器组成Erlang集群。互相之间通过Erlang消息进行同步。连接管理服务器中会有一个负载平衡节点,用来负责对连接服务器中的所有节点做负载均衡。连接服务器中还有N个网关节点,用来管理客户端连接以及消息传递,网关节点的数量通过负载可动态增加。
    账号服务器,管理整个平台的账号,对客户端做登陆验证,如果项目正式上线还要负责充值的工作。账号服务器由N个节点组成,根据负载可动态增加节点数量。整个架构的数据库都采用Erlang自带的Mnesia分布式数据库,这个数据库既可以做永久保存也可以做Cache,对游戏服务器再合适不过了。Mnesia作为数据永久保存方案,唯一的不足是做数据统计不是很方便。像关系型数据库,有很强大的SQL做支持,做统计那是相当的方便。虽然有不足之处,但是带来的好处也是显而易见的,那就是简单,以及天生对分布式的支持。我在这里为什么不选用MySQL之类的数据库,原因就是Mnesia简单易用,正好符合了KISS原则。我信奉的原则就是KISS,只要能实现我需要的功能,那么实现的越简单越好。复杂意味着不可靠,为什么说不可靠呢,可能有些人觉得我太绝对了,在软件项目中人越多那随之带来的各种BUG也就越多。复杂的系统一定要多人的合作才可以完成,这个是不容置疑的。而且每个人对项目的理解不同,对软件开发的理解也不尽相同,虽然可以统一项目组中每个人的代码风格,但是没有办法统一每个人的思考方式。
    游戏服务器,游戏的所有逻辑都在游戏服务器中实现,对于我现在要做的这款飞行类的页游而言,已经足够了。游戏服务器由N个节点组成,根据负载可动态增加节点数量。游戏数据库也是用Mnesia实现,但是和账号数据库是分离的,他们之间不需要知道互相的存在,从上图也可以看出。如果项目到后期变的更复杂,那游戏服务器这里可以分出单独的节点做复杂的计算,甚至可以把这样的节点单独的隔离到其他的物理机,保证游戏的响应速度。
    总结,架构的游戏世界是个统一的游戏世界,所有用户都在同一个世界中。所有服务器中的节点都是通过负载动态增加的,部署的时候可以部署到同一个物理机上也可以部署到不同的物理机上。做了这么多年的C++服务器,感觉用C++写服务器要实现的东西太多了,要考虑的东西也太多了,让人很累。虽然说是为了效率考虑,但是我觉得如果C++代码写不好,最终的效率反而更不好。我认为一个中级的Erlang程序写出来的服务器可以和一个高级的C++写的服务器程序相媲美,但是培养一个Erlang高手和培养一个C++高手的代价显然是不一样的。

同一世界服务器架构--Erlang游戏服务器的更多相关文章

  1. erlang 游戏服务器开发

    http://blog.csdn.net/slmeng2002/article/details/5532771 最近关注erlang游戏服务器开发  erlang大牛写的游戏服务器值得参考 介绍本文以 ...

  2. 深入浅出node.js游戏服务器开发1——基础架构与框架介绍

    2013年04月19日 14:09:37 MJiao 阅读数:4614   深入浅出node.js游戏服务器开发1——基础架构与框架介绍   游戏服务器概述 没开发过游戏的人会觉得游戏服务器是很神秘的 ...

  3. 老出BUG怎么办?游戏服务器常见问题解决方法分享

    在游戏开发中,我们经常会遇到一些技术难题,而其引发的bug则会影响整个游戏的品质.女性向手游<食物语>就曾遇到过一些开发上的难题,腾讯游戏学院专家团Wade.Zc.Jovi等专家为其提供了 ...

  4. Pomelo分布式游戏服务器框架

    Pomelo介绍&入门 目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json ...

  5. SQLServer 服务器架构迁移

    原文:SQLServer 服务器架构迁移 最近服务器架构迁移,将原来的服务器架构迁移到新的服务器,新的服务器在硬件方面比之前更好!原来服务器使用双向同步,并且为水平划分到多个数据库服务器.迁移过程中, ...

  6. 类似于QQ游戏百万人同时在线的服务器架构实现

    http://blog.csdn.net/sodme/article/details/213995 —————————————————————————————————————————————————— ...

  7. QQ游戏百万人同时在线服务器架构实现

    转载自:http://morton5555.blog.163.com/blog/static/976407162012013112545710/# QQ游戏于前几日终于突破了百万人同时在线的关口,向着 ...

  8. [转]MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

  9. MMORPG服务器架构

    MMORPG服务器架构 一.摘要 1.网络游戏MMORPG整体服务器框架,包括早期,中期,当前的一些主流架构2.网络游戏网络层,包括网络协议,IO模型,网络框架,消息编码等.3.网络游戏的场景管理,A ...

随机推荐

  1. 删除指定文件夹下所有的.svn文件夹

      sudo find /目录 -name ".svn" -exec rm -r {} \;

  2. 线程池之ThreadPoolExecutor线程池源码分析笔记

    1.线程池的作用 一方面当执行大量异步任务时候线程池能够提供较好的性能,在不使用线程池的时候,每当需要执行异步任务时候是直接 new 一线程进行运行,而线程的创建和销毁是需要开销的.使用线程池时候,线 ...

  3. spring与事务管理

    就我接触到的事务,使用最多的事务管理器是JDBC事务管理器.现在就记录下在spring中是如何使用JDBC事务管理器 1)在spring中配置事务管理器 <!-- JDBC事务 -->   ...

  4. luogu P1197 [JSOI2008]星球大战

    题目描述 很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治者整个星系.某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球.这些星球通过特殊的以太隧道 ...

  5. [Bzoj3687]简单题(bitset)

    3687: 简单题 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1150  Solved: 565[Submit][Status][Discuss] ...

  6. 第1章 Spring Cloud 构建微服务架构(一)服务注册与发现

      一.Spring Cloud 简介 Spring Cloud是一个基于Spring Boot实现的云应用开发工具,它为基于JVM的云应用开发中的配置管理.服务发现.断路器.智能路由.微代理.控制总 ...

  7. SpringMVC整合MongoDB

    首先,在pom文件中新增spring-data-mongodb的依赖: <dependency> <groupId>org.springframework.data</g ...

  8. ArcGIS 安装中,SQL的使用出现错误的解决

    1. SQL Server Configuration Manager 中 SQL Server Services出现 “远程调用失败..” 的问题 解决方法是卸载

  9. mybatis学习网站

    http://www.mybatis.org/mybatis-3/zh/index.html

  10. [MFC]选择目录对话框和选择文件对话框 [转]

      在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法: 选择目录对话框 {    char szPath[MAX_PATH];     //存放选择的 ...