3

我正在考虑构建一个支持离线的 Web 应用程序。

我正在考虑的架构如下:
Web 服务器(远程)<--> Web 服务器/缓存(本地)<--> 浏览器/Prism

我为这个模型设想的优点是:

  • 部署是基于 Web 的,具有这种方法的所有优点
  • 离线启用
  • UI (html/js) 同步不是问题
  • 数据同步大部分可以自动化
    • 只要我保持在 RESTful 范式内
    • 我可以根据需要打破这个,但手动同步在很大程度上仍然是外科手术
  • 本地 Web 服务器作为服务启动;我可以运行任意代码,包括后台数据同步
  • 我完全控制了数据(位置,没有大小限制,用户不可能在不知不觉中删除)
  • 带有扩展名的 Prism 可以允许保持 javascript 闭源

对这种架构有什么想法吗?为什么我应该/不应该使用它?我特别在寻找成功/恐怖故事。



长版

笔记:

  • 用户不是很懂电脑。例如,即使是表面上解释 Gears 的工作原理也是完全不可能的。
  • 如果数据丢失,我将承担责任,即使这真的是用户的错(没有他删除他机器上的随机目录)
  • 我可以要求用户在他们的机器上安装一些东西。它不必 100% 基于 Web 和/或在沙盒中运行

这个问题的常见解决方案不知何故感觉不够。以下是对每一个的简短分析。齿轮/HTML5:

  • 无法控制数据,用户可以在没有任何警告的情况下删除
  • 无法控制数据的位置(跨浏览器和平台不统一)
  • 用户需要在浏览器中打开应用程序才能进行同步;没有自动的幕后同步
  • 不同的浏览器被区别对待,单台机器上的数据没有统一的视图
  • 可用磁盘空间有限
  • 同步完全是手动的,基于 sql 的存储使这很痛苦(如果 sql 表被完全复制,那么复杂度会降低,但在我的情况下并非如此)。这是一个非常复杂的问题。
  • 我的代码几乎是完全开源的(html/js)

土坯空气:

  • 以上的一些
  • 没有服务器端包括(!)
  • 可以在后台运行,但不能无窗口
  • 手动同步
  • 网络缓存似乎很复杂
  • 不知何故感觉像是一个杂物,我在某些机器上安装时遇到了麻烦

我的要求是:

  • 基于网络(必须)。出于多种原因,例如在用户之间共享数据。
  • 离线(必须)。应用程序必须完全可以离线使用(有一些罕见的例外)。
  • 快速开发(必须)。我是一个单一的开发者,与拥有更多商业资源的玩家对抗。
  • 闭源(很高兴拥有)。是的,我了解开源模型。但是,在这一点上,我不希望竞争对手太容易模仿我。同样,他们拥有更多资源,因此他们可以承担我的辛勤工作,并在比我自己更短的时间内使其变得更好。显然,他们仍然可以复制我开发自己的代码——这很好。
4

3 回答 3

10

来自 CRM 产品的恐怖故事:

  • 如果您的应用程序被大量使用,那么将其数据的完整副本存储在用户的机器上是不可行的。
  • 如果您的应用程序具有可由许多用户更新的数据,那么复制并不简单。如果三个具有本地更改的用户同步,谁会赢?
  • 实际上,这并不是用户真正想要的。他们希望从任何地方实时访问最新数据。我们最好为单一事实来源提供移动界面。
于 2009-06-12T16:21:20.983 回答
1

将本地 Web 服务器作为服务运行的部分显得不明智。除了您被绑定到客户端中可用的某些操作环境这一事实之外,您还给最终用户带来了管理服务器的额外负担。此外,本地 Web 服务器本身不能部署在基于 Web 的模型中。

总而言之,我对真正的“本地 Web 服务器”的前景并不太兴奋。毫无疑问,它有一定的偏见,因为我提出了在 Web 浏览器中运行的嵌入式 Web 服务器,作为我无缝离线 Web 存储提案的一部分。请参阅 BITSY 0.5.0 ( http://www.oracle.com/technology/tech/feeds/spec/bitsy.html )

我想知道您不惜一切代价防止数据丢失的要求有多重要。当您离线并且磁盘崩溃时会发生什么?还是设备丢失?通常,您希望本地缓存至少位于服务器之前,但要准备好在服务器落后于客户端的情况下容忍数据丢失。这可能涉及一定数量的合同谈判或培训。在实践中,这可能不会破坏交易。

于 2009-06-16T17:06:44.927 回答
0

可靠地做到这一点的唯一方法是在记录级别提供某种“签出和锁定”。当用户进行远程操作时,他们必须检查他们想要使用的记录。此签出将数据复制到本地数据库,并防止在签出记录时修改中央数据库中的记录。

当漫游用户重新连接并检查他们锁定的记录时,数据会在中央数据库上更新并解锁。

于 2009-06-12T16:24:43.720 回答