使用现有的Web应用程序构建脱机应用程序[关闭]

问题描述 投票:-2回答:1

我有一个使用以下技术的遵循微服务架构的现有Web应用程序:

java,vert.x,orcale DB

Node.js HTML5 CSS作为前端

用于重定向的Nginx。

用于工作流管理的Camunda及其上的一些包装作为微服务。

假设上述配置和技术堆栈作为整个产品的一个Web应用程序。在在线情况下,在我的应用程序流程结束时,我会将收集到的记录发送到另一个Web应用程序。

我的要求:我希望我的第一个组件/应用程序在没有互联网的情况下也能正常工作,并且当我连接到互联网的一天结束时,我应该能够将记录发送到第二个组件/应用程序一直在线。

挑战:

a)对camunda引擎进行了后期调用,以通过应用程序的一次迭代来获取适当的工作流程。

b)缓存/本地存储的安全性。

可能的方法是什么?

java microservices offlineapps offline-mode
1个回答
-1
投票

我会看到两种不同的方法:创建具有脱机功能的浏览器应用程序,或者创建可以安装在用户计算机上的“后端”堆栈。后者似乎不太吸引人,因为它在用户端基础结构上做了很多假设,并且同步问题仍未解决。

假设您要使用基于浏览器的选项:

TL; DR:不要期望这比完全重写应用程序要少得多。

我不熟悉Camunda产品线,但是很显然,您必须从供应商那里获得离线版本,或者构建/使用适合离线使用的其他产品,并在那里以某种方式部署相关工作流程。如何在应用程序的整个生命周期中在两个系统之间保持工作流的一致性将是一个有趣的挑战。

关于事务核对,您只需在浏览器存储中保留事务列表,然后在重新连接时针对后端重播它们。但是,这会引入大量的故障状态,这是纯在线版本所没有的。浏览器应用程序将需要一个用户界面来处理至少无法自动解决的冲突。 Google的“启发式混合例外”,使阅读更有趣。

此外,您可能必须进行一些预测性缓存,即在用户离线之前,用户必须在离线状态下预先获取并存储数据。请记住以某种方式通知用户该数据可能已过时,最好在用户界面本身中清楚地指示。

您还必须用浏览器内部可用的东西替换您可能在后端某处使用的Oracle SQL。可能是SQLite的JavaScript端口(例如https://github.com/kripken/sql.js/)或其他完全不同的端口。毕竟,在离线环境中,传统SQL数据库中获得的许多事务完整性可能都毫无意义。

关于安全性,我没有好的建议。当然,您可以加密事物,但是由于加密密钥将驻留在浏览器中,因此就像刚开始没有进行加密一样容易受到攻击。但是我真的不是专家,所以也许其他人有更好的主意。

© www.soinside.com 2019 - 2024. All rights reserved.