`
huaronghu
  • 浏览: 10185 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
社区版块
存档分类

一份游戏系统设计初稿文档[原创]

    博客分类:
  • j2ee
阅读更多

1、 系统架构特点
     1)、系统的数据库是分布式存储设计的,支持海量级数据存储;
     2)、引入Session Server和Cache实现,从而来避免频繁数据库访问对系统造成性能瓶颈;
     3)、系统是多线程的、异步的
     4)、系统是可被实时监控的,可以实时隔离
     5)、系统是安全的,用户在登录系统后,系统会生成一个随机的、不可伪做的加密串,
      后面操作需要获取用户的信息只有通过些加密串来获取;
     6)、系统的扩展是非常灵活的,所有业务功能均可作为组件方式以Webservice标准接口发布出去,
     类似 SOA 的作法。


2、  分布式存储设计
      2.1  索引数据库表设计
         2.1.1、首先建立有规则的,可分段管理的ID段

         
         2.1.2、xxx ,因为涉及到商业秘密,所有先去掉了

     
   2.2 数据库分布式存储设计
         数据库是基于分布式存储设计的,可以支持海量级数据存储;
         数据库是通过“用户号码段”的定义,对用户的数据进行分散存储;

            
          而号码段表的数据如下:
          id_range                mysql instance
            1000~5555555段        192.168.1.5
            5555556~10000000段    192.168.1.6
        

      2.3  Session Server 分布式存储设计
          以分区做法存储 Session 的数据,用户在进入游戏之前,先选择一个区再进入。
          这样用户的所有数据就存在选择的Session Server上。
          每个Sesson Server有用户数量要求,当达到一定的用户数量,将拒绝其他用户进入。


3、 安全性
      3.1:存储加密
           用户在登录系统后,系统会生成一个随机的、不可伪做的加密串,即生成一个在线用户及此用户对应的Key(加密串),
  其他操作通过此Key来获取用户的信息,包括各人物及人物属性;
 
     加密串的生成规则如下:
 由ID+客户端ip+随机码+当前时间(毫秒)组成,然后通过由Md5加密生成。
 
          这个加密串只会给一个用户一次登录使用,过期将不再有效。

      3.2:防止恶意攻击
      用户登录成功游戏之后,所有操作都会异步记录到主库的日志表中,已记录用户每天做了什么操作。
      这份数据是每天一份,同样也是分布式存储的(具体实现详见高效性章节)。
     
      防止恶意攻击也是利用这份数据进行统计的,每台Http server的Linux有一定时程序,会定时读取这份数据,
      如果发现某号码符合恶意攻击规则,则会将此号码写入到黑名单中,并拒绝操作;
     
      即便被攻破,系统对于关键操作也要留下操作日志到日志文件中,如log4j日志文件,以便事后诸葛;

     
4、 高效性
     4.1 Cache及Session Server的设计
          4.1.1:Cache
             对于xxx等不会经常变化的实体信息,可放入Cache中(如OSCache),减少对主数据库的访问;
            
          4.1.2:Session Server
             对于xxxxx等实时性要求较高的值,可放入到 Session Server中,每次需要读取或更新
             值都到Session Server中读取,减少对主数据库的频繁访问。
            
             一个xx第一次登录,会从主数据库中读取它的所有属性出来放到Session Server中,此后只要此xx在线,所有
             xx属性的值变更都是与Session Server交互操作,而系统会定时从Session Server取得数据与主数据进行同步。
            
             Session Server使用 Mysql Memory(Engine)来实现;同时 Session Server是集群式,有N台Cluster节点进行数据复制备份,保证Session Server的稳健性;
    
    
     4.2  异步处理、队列设计、Socket长连接
        4.2.1 开发思路介绍
               系统使用 wap表现层+中间件,中间件实现所有业务逻辑,是用异步IO Socket实现的,可以减少线程的创建和discard所带来的性能消耗,在同步Socket中,一般做法是创建一定数量的线程组成线程池,如果数量过多,性能是比较低的,因为当Linux OS在处理超过1000线程时,各线程换页的性能是很低下的。使用异步 IO Socket(即Java NIO)的好处是性能高,由中间件统一管理Session、Cache和Database;
              
               Http server只处理显示页面逻辑部分,而业务逻辑部分是在中间件实现的。Http Server与中间件通过TCp Socket进行通信。              
              
              
          4.2.2 异步处理
             对于用户每次操作都需要记录日志的功能,可以使用异步处理的方式来处理,Socket客户端把请求异步
             发送给Socket服务器端,无需等待结果返回,提高性能
            
          4.2.3 Socket长连接
             对于游戏用户,常用的场景是用户长时间停留在系统操作,故客户端应该Keep Socket连接不关闭,减少经常
             创建Socket所带来的性能消耗;
            
          4.2.4 队列设计
             对于用户的请求,如果中间件处理不过来,会使用一定数量的队列来存放它,当中间件空闲时,会读取队列进行处理,
             提高系统吞吐量;
 
 
5、 健壮性
        5.1 数据库集群和备份
            对于基于Memory存储的数据库,可以使用数据库的Cluster机制进行数据实时同步和备份,不会造成单点危险。
            对于基于disk存储的数据库,可以使用数据库的Cluster机制或采用C-JDBC中间件进行数据实时同步和备份。
       
        5.2 中间件冗余设计
            可以在同一服务器上使用不同端口启动同一中间件,从而实现功能冗余
       
        5.3 Http Server集群
            利用 移动DNS功能,搭建N个Http Server来提高应用的吞吐量和性能
     
     
6、 扩展性(SOA)
        6.1 组件抽象化:
           6.1.1  抽象化组件及定义好接口,所以实现基于接口来开发;组件以接口的方式提供,而实现类是可以随意切换的,这部分使用Ioc容器实现;
       
            6.1.2 接口需足够灵活,足够抽象,应包揽系统所有功能,并供外部本地JVM调用或远程调用;
       
        6.2 业务功能可重用:
            使用远程调用方式,如使用web service或其他远程调用方式,如基于二进制数据传输的hessian或基于xml的burlap。


7、 自适应性
    
       7.1 模块可测试
           应用程序是基于 JDK5.0上开发的,利用JDK5.0自带的JMX功能,可以实时监控到应用程序的运行情况。
       
       7.2 模块自检
          对于关键功能和应用,如果发现故障,系统会自动报故障,以email或手机方式发送给维护人员。
         
8、 独立性
       利用 JMX 可以实时、快速且不影响运行的情况下,隔离有问题的接入系统
      
9、    系统基础平台选型
      OS: Redhat Enterprise Linux 4
      JDK: Jdk 5.0
      Mysql: mysql 5
      Servlet Server: tomcat 5
      Web Server: Apache 2.0     
      Database Backup middelware: Mysql Cluster、C-JDBC(备选)
   
10、  系统软件架构选型
      View:Wap1.0/Wap 2.0 + FreeMarker
      MVC: Webwork 2.16
      IOC/AOP:Spring 2.0
      ORM:IBatis、Hibernate(备选)
      Java NIO:Cindy

分享到:
评论
3 楼 justdo2008 2010-03-16  
请问有更加详细的设计文档?谢谢
2 楼 justdo2008 2010-03-16  
谢谢了 
1 楼 jelver 2008-08-25  
学习了

相关推荐

Global site tag (gtag.js) - Google Analytics