我正在开发一个庞大的系统,该系统正在开发一个标准的LAMP堆栈。长话短说,犯了太多的错误,我们目前的发展载体变得不可持续。总结一下我们遇到的问题:
- 正在使用自定义和非常基本的PHP MVC框架,它不强制执行任何结构。
- 不使用ORM,允许开发人员提出自己的系统。
- 前端由 Smarty 渲染,除此之外,所有的动态交互都是用 jQuery 完成的。
- 我们在PHP失败/非常慢的系统部分进行了一些繁重的处理。
- 不使用单元测试
- REST 仅用于外部系统的某些 API
- PHP 框架不支持依赖注入
我不会提到导致系统变得一团糟的其他问题,我认为这些问题是主要的。
我想通过引入类似于 Twitter 使用的东西来将系统的开发转向不同的方向 - 系统拆分为与 REST 连接的模块(如果我的假设是正确的(。这些是我想介绍的事情:
- Play Framework (Java/Scala(
- 通过 REST 将 Play 与现有 LAMP 堆栈连接
- 将 Apache 切换到 Nginx
- (最有可能(使用Angular.js作为前端。
- 从长远来看,将整个现有的LAMP转换为播放
我面临的主要问题是,并希望得到任何建议:
- 我将
- 如何维护/传递状态,记住 REST 是无状态的?我们目前的 LAMP 显然为此使用 PHP 会话。
也欢迎对这一特殊情况提出任何其他意见。
你想分享什么状态? 当前登录的用户? 别的东西? 您想与什么分享它? 在不同的播放节点之间? 在游戏和你的 LAMP 堆栈之间?
如果状态量很小,并且它不敏感(即当前用户可以看到该状态(,则可以使用 Play 的会话。 游戏会话是完全无状态的,它们将状态存储在 cookie 中,并对 cookie 进行签名以防止篡改。 更多信息在这里:
http://www.playframework.com/documentation/2.2.x/ScalaSessionFlash
如果对每个 Play 模块使用相同的应用程序机密(应用程序机密是用于对会话 Cookie 进行签名/验证的模块(,则它们都可以使用该机制共享状态。 您甚至可以与现有的 LAMP 堆栈共享该状态,您只需要在 PHP 中实现 Play cookie 签名算法即可。
如果状态更大,例如你用它来缓存东西,或者如果你想存储可能敏感的状态,那么像memcached这样的东西可能适合你。