Gemini是一个基于移动互联网络的交互式游戏。本文从技术层面来阐述Gemini的构架,分为物理构架和应用构架。Gemini的一大特性是利用Google App Engine Cloud Platform(以下称为GAE)作为底层的平台支持。

物理构架

Infrastructure

上图为物理构架,我们可以明显的看到这样一个构架是如此的简单,主要原因是其中复杂的结构和技术实现已经被GAE的服务接口所隐藏。GAE的具体形式是PaaS(Platform as a Service),因此Gemini 的物理构架实际上被完全虚拟化,换句话说,Gemini物理上没有任何部件,云端所提供的所有服务均视为外部环境,客户端浏览器和移动端应用均为软件实体,物理实体本身不属于Gemini的部件,而是用户自己的设备。当然GAE云的环境还需要一定的配置和管理,不过这项工作由于有GAE控制面板的存在而变得非常轻松。

在这个虚拟物理构架下,Gemini由服务端应用和移动端应用构成,值得一提的是PC端网页应用由服务器端应用直接提供,浏览器只是用户自带的软件实体,也不属于Gemini组成部件。

客户端和服务器端之间的交互通过标准的HTTP/HTTPS协议来实现,Gemini与GAE所提供的服务之间通过GAE SDK给出的API接口进行交互。

应用构架

下图为应用构架:

Application Architecture

由于有了完善的云端支持,Gemini应用构架完全建立在GAE提供的物理支持和各种软件服务之上。Gemini服务器端应用应该趋向于结构的简化和服务的重用,这个应用构架的总体设计要点是:

  • 绝不自主实现已经存在或者Google提供的服务
  • 尽可能利用现有的GAE服务和API接口
  • 可伸缩性(Scalability)是技术层面的一大目标,这个特性的成功与否决定了产品的性能和未来发展空间,从而直接影响用户体验
  • 服务器与客户端接口采用REST架构,实现HTML和JSON格式,充分发挥服务的易用性和开放性,以支持移动网络应用的各种需求
  • 只使用Google提供的数据访问接口,避免引入第三方框架或API
  • 数据层的设计以性能优先,其次考虑可靠性
  • 实现与微信平台的集成,充分利用微信的用户关系和平台服务

不难看出,服务器端应用是Gemini的核心,这个构架的搭建和技术实现至关重要,在保证功能完整的前提下,服务器端程序设计遵守以下规则:

  • 始终以性能优先
  • 尽可能保证功能的完善和优化,在无法保证性能的矛盾情况下,可以考虑重新设计功能
  • 在功能和性能都能保证的情况下,完善代码的可维护性
  • 接口的设计,以通用性为前提,避免选用看似流行或者有趣的新兴技术
  • API的实现以移动端为主,网页为次
  • 确保服务器应用的多线程安全性(thread safe)
  • 数据是应用的能源,数据访问,尤其是数据读取,务必要保证性能和一致性

此外,移动端应用也是Gemini的一大重心,与服务器端不同,移动端应用更注重用户界面设计,然而用户体验仍然是重中之重,性能与界面美观要同时考虑,缺一不可。因此,移动端的功能设计需要仔细考量界面的友好性和性能的优化。Gemini移动端应用设计有以下特性:

  • 游戏界面简单有趣,采用扁平式设计
  • 界面回应速度快,避免一切无回应状态
  • 界面友好,适应不同大小的触屏
  • 移动应用无数据处理,无复杂算法,无冗余或低性能API调用

开发技术

项目 技术 版本
主程序语言 JAVA 7
服务器端编程环境 Google App Engine SDK for Java 1.8
Web客户编程环境 HTML 5
移动端编程环境 Android SDK 4.2, 目标兼容1.6以上,使用支持库以支持尽量多的移动设备
集成开发环境 不限。推荐Eclipse, IntelliJ IDEA 最新
内容管理系统 GIT 1.8以上

版本

Gemini版本计划大致如下:

  • V0:原型阶段,重点开发服务器端应用,提供简单的移动端界面,设计重心是服务器的性能和可伸缩性,功能从简
  • V1:第一版本,设计完整和精巧的移动端界面,完善游戏,以游戏的趣味性为重心,同时保证服务器端的性能,这一阶段将是服务器应用和移动端应用的主要开发过程
  • V2:升级版本,扩大服务器端的数据吞吐量,优化服务器应用和移动应用的性能,尽量少的改动游戏功能,重心放在游戏推广和优化上
  • V3:成熟版本,重心放在商业化和产品价值提高上

总结

进入云时代的互联网为我们提供了更多的机遇和可能性,对云的使用不是一种赶潮流的冲动,而是一种优化成本,简化流程的解决方案。像Gemini这样的移动互联网应用,将以有趣的游戏和完善的用户体验来吸引挑剔的玩家。

Comments