我正在考虑构建支持离线的Web应用程序。
我正在考虑的架构如下:
Web服务器(远程)< - > Web服务器/缓存(本地)< - >浏览器/棱镜
我为这个模型设想的优点是:
- 部署是基于网络的,具有此方法的所有优点
- 支持离线操作的
- UI(html / js)同步不是问题
- 数据同步主要是自动化的
- 只要我保持在RESTful范例内
- 我可以根据需要打破这个,但手动同步在很大程度上仍然是手术
- 本地Web服务器作为服务启动;我可以运行任意代码,包括幕后数据同步
- 我完全控制了数据(位置,没有大小限制,不可能在不知情的情况下删除用户)
- 带有扩展名的Prism可以允许保持javascript封闭源
对这个架构的任何想法?为什么我/我不应该使用它?我特别想找到成功/恐怖故事。
长版
注意:
- 用户不是很了解计算机知识。
例如,甚至表面上
解释Gears如何运作完全
无从谈起。
- 如果数据丢失,我将承担责任,即使它确实是用户的错误(缺少他删除机器上的随机目录)
- 我可以要求用户在他们的机器上安装一些东西。它不必是100%基于Web和/或在沙箱中运行
这个问题的常见解决办法在某种程度上感觉不够。这是对每个的简短分析。
Gears / HTML5:
- 无法控制数据,可以删除
用户没有任何警告
- 无
控制数据的位置(不是
浏览器和
平台)
- 用户需要在浏览器中打开应用程序才能进行同步;没有自动的幕后同步
- 不同浏览器的处理方式不同,单个机器上没有统一的数据视图
- 可用磁盘空间有限
- 同步是完全手动的,基于sql的存储使这很痛苦(如果sql表被完全复制,那就不那么复杂了,但在我的情况下却不是这样)。这是一个非常复杂的问题。
- 我的代码几乎完全是开源的(html / js)
Adobe AIR:
- 上面的一些
- 没有服务器端包含(!)
- 可以在后台运行,但不能无窗口
- 手动同步
- 网络缓存似乎很复杂
- 感觉就像一个kludge,我在某些机器上安装时遇到了麻烦
我的要求是:
- 基于网络(必须)。对于一些
原因,用户之间共享数据
例如。
- 离线(必须)。该应用程序必须完全可脱机使用(有一些罕见的例外)。
- 快速发展(必须)。我是一个单一的开发者,与那些拥有更多业务资源的玩家对抗。
- 封闭源(很高兴)。是的,我了解开源模型。但是,在这一点上,我不希望竞争对手太容易复制我。再一次,他们拥有更多的资源,所以他们可以用我的努力工作,并在比我自己更短的时间内做得更好。显然,他们仍然可以复制我开发自己的代码 - 没关系。
3 个答案:
答案 0 :(得分:10)
CRM产品的恐怖故事:
- 如果您的应用程序被大量使用,则在用户的计算机上存储其数据的完整副本是不可行的。
- 如果您的应用程序具有可由许多用户更新的数据,则复制并不简单。如果三个本地更改的用户同步,谁赢了?
- 实际上,这并不是用户想要的。他们希望从任何地方实时访问最新数据。我们有更好的运气为单一的事实来源提供移动界面。
答案 1 :(得分:1)
关于将本地Web服务器作为服务运行的部分显得不明智。除了您与客户端中可用的某些操作环境相关联之外,您还要在最终用户上承担管理服务器的额外负担。此外,本地Web服务器本身无法部署在基于Web的模型中。
总而言之,我对真正的“本地Web服务器”的前景并不感到激动。它有一定的偏见,毫无疑问,因为我提出了在Web浏览器中运行的嵌入式Web服务器,作为我的无缝离线Web存储提议的一部分。见BITSY 0.5.0(http://www.oracle.com/technology/tech/feeds/spec/bitsy.html)
我想知道您不惜一切代价防止数据丢失的要求是多么重要。当您脱机并且磁盘崩溃时会发生什么?还是丢失了设备?通常,您希望本地缓存在服务器之前的距离最小,但是要准备好在服务器落后于客户端的范围内容忍数据丢失。这可能涉及一些合同谈判或培训。在实践中,这可能不是一个交易破坏者。
答案 2 :(得分:0)
可靠地做到这一点的唯一方法是在记录级别提供某种“结账和锁定”。当用户远程访问时,他们必须检查他们想要使用的记录。此检出将数据复制到本地数据库,并防止在检出记录时修改中央数据库中的记录。
当漫游用户重新连接并检查其锁定的记录时,数据在中央数据库上更新并解锁。