俺的回收站

架构分析 解释编译原理
posts - 42, comments - 218, trackbacks - 12, articles - 1
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理

公告

SecondLife核心架构浅析(1)

Posted on 2008-04-14 21:36 Riceball LEE 阅读(...) 评论(...) 编辑 收藏
SL目前采用的是 http REST轻量级SOA+专用协议(区域主机),数据序列化格式目前使用的是XML,将来会增加Binary和Json格式。

SL的设计目标:
  虚拟世界区域可伸缩性能
    * 6千万地图区域 (或更多)

  居民数量伸缩性:
    * 20亿用户

  同时在线用户数量伸缩性:
    * 5千万 - 1亿的同时在线用户(无论来自哪个平台)

SL的核心架构是由区域(Region地图)世界域Domain和角色(Agent)世界域Domain构成。

一、区域(Region地图)Domain

区域(Region地图)又分为区域服务,区域主机(Host)和区域数据仓库(Stores)等服务。
区域服务是用Python编写的无状态的HTTP/REST Service,区域主机则是专用协议高效的在某个区域的消息状态服务,处理该区域内的一切交互,而区域数据仓库则是数据层服务。
区域服务用于处理和区域相关的无状态信息:
    *  Avatar 位置
          o avatar 在缩略图上的位置 (绿色的小点)
          o 来自其它角色的请求
                + 交谈
                + God / Support level
    * 对象信息
          o 元数据 (名称 / 说明 / 待售)
                + 搜索
          o 任务物品
          o 地理位置
                + 打造地图图像
          o 区域统计 (FPS/Frame Times/etc)
    * 土地信息
          o 名称 / 说明
          o 当能搜索才公开

区域主机用于处理该区域的一切交互行为,也就是在SL中常提到的simulators。
    * 物理引擎
    * 脚本执行
    * 本地 avatar/脚本化聊天

区域主机的划分是一个有意思的课题:
  区域的适度大小划分
  区域的角色(Agent)数
    物理运算的能力
    脚本执行能力
可惜这部分并没有开源。

区域数据仓库

区域数据仓库存放了某个区域的数据:
    *  对象信息
          o 地理位置
          o 形状/贴图
          o 链接/组关系
          o 物品
          o 元数据
                + 名称 / 描述
                + 许可
                + 版本信息
    * 区域信息
          o 许可
          o 贴图
          o Logs
          o Metrics / Stats
    * Parcels(一小块土地)
          o 元数据
                + 名称 / 描述
                + 许可
                + 元数据
          o 搜索设置

角色(Agents)

角色(Agents)也同样分为角色服务,角色主机(Host)以及角色数据仓库等服务。
角色服务用于处理角色相关的无状态信息,角色主机(Host)服务实际上角色会话服务,保持的是和角色相关的状态的信息,同样角色数据仓库为其数据层。