本文系从老博客平台迁移过来, 最初写于2018-01-27 12:04:52

目前web应用兴起,不仅可以在桌面上浏览操作,也可以轻松适配到移动端浏览操作后台系统。

为已有后台系统,开发web管理平台。在设计上有一个困扰就是,web应用获取系统状态信息是实时获取,还是截取前端用户输入值操作成功后保存在数据库,下次直接读取数据库?可谓两种方法都有利弊,实时获取,就是一次收集的信息量太大,前端页面等待的时间太长, 用户体验不好,优点是:通过web页面看到的系统状态信息与不通过web端直接操作系统后台是一致的。第二种方法:优点:开发流程简单,web页面获取信息快。缺点是:当不通过web端直接系统后台上操作的结果是反应不在web端上的。

新的设想(数据库缓存机制)解决了以上两种方法的困扰:
先按着从命令直接获取系统状态的思路, 写好之后, 在补充一些地方的缓存,这样能保证仅通过命令获取得到所有系统状态数据,即使数据库不存在。

这些应该补充数据库缓存的地方可以是全部请求获取的地方,如果开发时间紧,或者考虑到开放成本,也可以只对一些耗时/频繁请求的接口做缓存。缓存顾名思义, 只作为一种优化补充形式存在,如果万一缺失,照样可以运行。

好的缓存时间有效期应该可以设置。

如何实现缓存?

默认每30分钟刷新一次, 假设要获取的是某集群存储系统的存储池信息。
首先通过命令获取到集群的存储池信息(如个数,池的名字)返回给前端的同时并存到数据库,存数据库的时候会连当前时间一同保存。
在下一次再获取存储池信息的时候, 会先查询数据库里存储池那张表的最新信息,如果时间与当前时间对比,相差超过30分钟(缓存时间应做成前端web界面可调), 便从命令直接获取。如果从数据库获取数据失败(比如说数据库没了),或者数据库没数据。自然也是从命令获取(第一次获取存储池信息的时候,就是这种情况)。如果时间相比小于30分钟才直接采用数据库的数据,该不该担心,在这30分钟内,存储池的信息有变化呢?

不用担心, 想想前面提到以往方法的第二种方法,从来就没从命令获取过,一直是从数据库获取的, 只要是所有增删改存储池操作都是从web界面操作的,程序又没有出错的话, 理论上是不会造成数据库和后台集群实际状态不一致的,那如果这30分钟的时间内, 有人特意从命令行创建了 一个存储池咋办?不是数据库和后台的状态不一致了?对于前文第二种方法,对于这种情况无能为力,而现在,这是可以修复重新达到一致的,(最多也是等30分钟嘛?)如果要立即刷新数据库,达到一致呢?前面提到的缓存时间web界面是可以设置的, 通过web界面把缓存时间变为0 即可, 也就是不要缓存。

标签: none

添加新评论