思考Web应用的数据流

数据库2025-11-03 23:56:599

之前做了个玩具叫做 Cumulo,思考数据 大致意思后端计算数据, 通过 Diff/Patch 发到前端,

那么前端浏览器的 Store 就不需要业务逻辑了, 从而减少开发.

然而这种做法存在天然的缺陷, 首先, 性能问题, 其次, 持久化问题.

其实都可以归结为性能, 要性能, 就必须做增量, 那么整个架构就崩溃了.

这篇文章尝试描述一下稍微正常一点的, 基于数据流来设计架构的一个构想.

由于后端开发经验的欠缺, 我并不打算给出可行的方案.

在开始之前, 先回顾一下实时 Web 应用的架构设计.

首先在前端 Model-View 分离是***步, 以便解放 View 的开发效率.

这时的数据流, Model 的数据发送到 View, 而 View 的更新操作回到 Model.

(这里的 Model 接近 Store, 并不是单纯数据, 而是包含更新逻辑): 

 

接着, 把 Server 重新放回来, 大致就到了 Cumulo 的情况,

这时的数据流, 数据直接发送到服务端, 前端 Model 同步服务端,

***再回到 View, 这时 Model 就成为一个中间过程了: 

 

那么结合上边两张图, 把这部分简化, 基本就回到***张图的情形,区别是, 这时 Model 换成了服务器, 而数据流从服务器流行浏览器: 

 

当我们考虑数据库, 特别是数据库比如是增量处理, 问题就来了,

首先, 数据发送到 Server 而不是 Database, 因为 Server 才有逻辑,

其次, 不能把 Database 整个数据流发给 Server, 因为太大了.

Cumulo 中用的是 Diff/Patch 方案, 而这对于 Database 来说并不可行,

所以实际情况就挺纠结了, Server 回到了 Controller 的角色: 

 

***为了性能, 更新逻辑还需要从 Database 拿开, 而让 Model 回来,

那么 Model 一方面要处理数据请求, 一方面要处理推送, 只能增加,

整个数据流也多了一些线路, 变得复杂起来, 这也是高防服务器当初简聊大致的架构: 

 

不过这个图并不严谨, 比如 Database 和 Server 的具体关系很难画清楚,

而且请求当然是访问到一个 web server 而不可能直接放到数据库的,

这个图的重点是, 相比原来的一个流, 现在存在两个流, 架构已经变了.

而数据通过两种途径来获取:

数据抓取, 访问页面时直接抓取的数据, 以及抓取历史

推送, 用户使用过程中, 从其他客户端获取的更新

问题是, 如果不能进行简化, 从而减少业务代码的编写, 思考就没有意义了,

这两个数据流的计算方法并不一致, 无法合并成一个,

所以我考虑, 从另外的角度去思考怎样构造出一套框架来处理数据流,

所以我整理了一下聊天室需要的常见操作:

切换聊天室 抓取首屏消息 抓取消息 接收消息更新 查询历史消息 用户登录 用户权限验证

对于前面四个操作我比较在意, 因为之间存在着一个共性,

比如一个消息流, 就会有, 切换, 抓取, 历史, 更新, 这些个操作,

而整体看来, 其他的能够抽象到流的数据也可以复用这个套路,

那么整个应用的页面切换, 数据查阅, 数据更新, 能放进一个统一的框子,

也就是, 路由切换时选择客户端订阅哪些流, 然后按流进行浏览.

当然其中还是存在一些问题, 需要继续思考,

消息列表是流, 那么用户配置是流吗?

配置经常是 JSON 对象, 要变成流, 就要把不同时间的修改操作也涵盖进来,

但是b2b供应网这还是会涉及到新的问题, 每一条消息都可能修改, 那么也是流,

结果我们需要面对一个复杂很多的流的概念.

另一个是数据的关联, 消息当中会有附件, 聊天室会有成员,

数据的关联如何处理? API 的设计怎样对应的界面, 而两者又进行解耦?

如果数据之间还出现循环的关联关系, 整个方案是否将要失效?

这是一个相当麻烦的事情, 最开始可能还是要尽量避免掉.

此外, 即便解决了上边两个问题, 前面列表当中剩下的选项依然要处理,

权限系统, 搜索系统, 两个是独立于流的结构之外的, 无法同时抽象.

更加远的问题, 数据库和服务器可能是分布式的, 还会有更复杂的数据流.

所以实际上抛出来更多问题了.

本文地址:http://www.bzve.cn/news/69d67699254.html
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

热门文章

全站热门

用彩纸打造趣味电脑教程(彩纸DIY教程,让电脑知识更有趣)

1. 安装JDK  ubuntu 11.04系统自带的Java环境是openjdk,最好使用sunjdk(具体原因不明,网上教程基本都是这样的),因此先去官方网站( http://www.oracle.com/technetwork/java/javase/downloads/index.html)下载“ Java SE 6 Update 26 ”的JDK安装包:Linux x86 - Self Extracting Installer (81.20 MB) jdk-6u26-linux-i586.bin1.1. 下载好后开始安装JDK,在终端里输入:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:[Desktop Entry]Name=EclipseComment=Eclipse IDEExec=/opt/eclipse/eclipseIcon=/opt/eclipse/icon.xpmTerminal=falseType=ApplicationCategories=Application;Development;2.2 eclipse安装结束。

如何更换惠普台式电脑的屏幕(简单易行的教程,让您轻松完成)

研究了一下,大致有2个比较简单方法,可以让ubuntu开机自动禁用无线网络。 复制代码代码如下: 2、驱动黑名单 既然是禁用驱动,首先我们得知道无线网卡的驱动名是什么,在终端中输入lshw命令可以列出电脑硬件的详细信息,从中我们可以获取无线网卡的驱动名。下面是信息片段: 复制代码代码如下: 最后一行显示我的无线网卡驱动名称是iwl3945(intel 3945abg无线网卡),将它加入到黑名单就可以了,具体操作如下: sudo gedit /etc/modprobe.d/blacklist.conf 在文本最后加入 blacklist iwl3945 重新启动 假如的确长时间不会用到无线网络,这个方法就比较干净彻底。假如学习了配置interfaces文件,也可以完全抛开NetworkManager,更加灵活地控制网络设定。现在也渐渐能体会到Linux将配置文件全部写成文本文档的优点所在了。

华硕B150M-Plus性能评测与推荐(一款稳定可靠的主板选择,华硕B150M-Plus的性能与功能介绍)

Ubuntu 14.04 LTS 已经出来了,我要如何(怎样)升级到Ubuntu 14.04 LTS版本呢?我们可以从镜像或者主要发型版本来升级到最新版本复制代码代码如下:$ uname -mrs复制代码代码如下:Linux 3.2.0-51-generic x86_64复制代码代码如下:$ sudo apt-get update复制代码代码如下:$ sudo do-release-upgratedo-release-upgrate 会运行升级工具。你只需要根据屏幕上的提示操作即可。复制代码代码如下:Checking for a new Ubuntu release复制代码代码如下:sudo do-release-upgrade -d提醒:关于从Ubuntu 13.10 从桌面 升级系统的操作首先,你需要移除所有第三方的二进制驱动,比如 NVIDIA 或者 AMD 显卡驱动。一旦移除后再重启桌面,按住 ALT+F2 并且在 命令框中输入 update-managerupdate manager 会打开并告诉你: New distribution release 14.04 LTS is available(新版的版本 14.04 LTS已经可以使用).只要点击 Upgrade(升级),然后跟着屏幕上的指示操作即可。注意所有的TLS 桌面版用户需要等到一个叫做 Ubuntu LTS v14.04.1 释放出来才行。假如不想等这个版本,可以在 update-manager中使用 -d 参数来升级。可以通过这种方式,将 Ubuntu 12.04 LTSs 升级到 Ubuntu 14.04 LTS 版本:复制代码代码如下:$ sudo reboot然后确认你是否升级到了最新版本;复制代码代码如下:$ lsb_release -a$ uname -mrs$ tail -f /var/log/app/log/file确认升级到最新版本后,再重新安装第三方的二进制驱动。

在windows中我们可以将喜欢的网址放在桌面并双击打开,那么在ubuntu上可不可以呢,当然可以下面我们就一起来看一下。1、首先大家要写一个脚本用来打开一个网址,只有两行代码,很简单的。(我写的是打开JAVA的在线API帮助)。2、脚本写好以后我们运行脚本发现是可以正常运行的,我们先赋予脚本可运行的权限,chmod a+x 脚本名称,设置后发现脚本的各项权限如图所示。3、输入./JAVA_Api.sh 可以打开网页,这一步完成后接下来就简单了,和创建程序的快捷方式几乎一样。 4、我们来看一下JAVA_Api.desktop的详细设置,文件的配置几乎一样,就是脚本文件多了一个.sh的后缀。一定要注意脚本文件赋予它可运行的权限。5、添加完成后 在applications文件夹多了一个JAVA_Api.desktop的文件这就是快捷方式,双击图标就能打开。6、假如你想把它加到侧边栏,拖动就可以加入,好了在桌面添加网址的快捷方式就这样完成了。注意事项:编辑文件时权限的使用,要给脚本可运行的权限。相关推荐:ubuntu如何截图 ubuntu中截屏的三种方法Ubuntu 15.10正式版发布 官方ISO镜像下载

电脑6008错误意外关机的原因及解决方法(电脑出现6008错误,如何应对和解决?)

热门文章

友情链接

滇ICP备2023006006号-39