文档章节

关于消息变更的最佳实践

xpbob
 xpbob
发布于 2017/05/21 14:05
字数 562
阅读 351
收藏 3

问题描述

      工作中遇到的场景拿出来分享一下:

      最初需求

      程序启动读取配置文件,然后根据这些配置项去做一些任务,具体的任务会多次读取相应的配置项。最初的设计如下。

      

        ConfigProperties主要是读取配置文件的,FileTask(线程任务)就是执行任务的类,在doTask中通过getProperties来获取相应的配置。这个设计本来没什么问题,而且也满足了单一职责的设计。

       需求变更

        想让配置文件改变可以动态生效,没必要重启生效。

        

        MessageChanged是另外一个线程,当有改变时触发去触发configProperties的操作。同事就是这样实现的,变成了一个标准的多线程模式,用锁去锁了临界资源——配置文件的具体项。这就要求读取配置的同时,不能更新配置项。业务需求(filecount,filename,filepath)三者必须用的是同一个版本。这样就要求读写必须是互斥的,加锁是满足了这个需求,但是FileTask获取三个配置的地方特别分散。加锁的范围特别大。这样效率一点也不好。两个线程持有锁的时间都太久了。

        

            于是做了一点更变,那就是把数据存储进行了一层包装,数据都是分组存放的,每个组都是volatile的。这样加锁的操作变成了对一个变量的赋值和取值。

消息通知的套路

        上述的模式已经比较明朗了,当遇到这种消息变更的,处理的方式其实都是相似的,主要就是锁分离。

        1,首先需要本地缓存,就是旧的配置需要一份。

        2,运行任务的整体配置得组装到一起,以便原子性的更新。

        3,消息通知模式

                观察者模式

                事件机制

                队列机制(变更消息写入队列,每次先都去读取一次队列,决定是本地缓存还是新传入的值)

                多次读取(上面使用的情况)

 

        

© 著作权归作者所有

共有 人打赏支持
xpbob
粉丝 98
博文 95
码字总数 76831
作品 0
高级程序员
私信 提问
WHY review code?

原文作者:Sophie Alpert 译者:UC 国际研发 Jothy 写在最前:欢迎你来到“UC国际技术”公众号,我们将为大家提供与客户端、服务端、算法、测试、数据、前端等相关的高质量技术文章,不限于原...

Jothy
2018/12/28
0
0
版本控制最佳实践

今天,版本控制系统也许是每一个开发者工具箱中的必备。而了解其基本规则可以让它更加起作用。我们总结了一些帮助您使用Git来高效的进行版本控制的最佳实践。 1.提交相关的变更 一次提交应该...

oschina
2013/06/25
1K
1
消息提示的架构演进-理论篇

本文转自 virusswb 51CTO博客,原文链接:http://blog.51cto.com/virusswb/685995,如需转载请自行联系原作者项目是一个互联网应用。   假设项目有不同的用户群体,每个用户群体的前端都是...

像教授
2017/11/26
0
0
囊括13个方面,Linux 容器技术一览表!

  【IT168 评论】容器是现在非常火的概念,基本上技术圈里的人都在谈,但其实容器技术的概念可以追溯到1979年,UNIX chroot是一套"UNIX操作系统"系统,旨在将其root目录及其它子目录变更至...

it168网站
2017/12/14
0
0
十年磨一剑,阿里巴巴企业级数据管理平台:iDB

摘要: 阿里巴巴企业级数据库管理平台iDB面向云时代推出数据管理DMS企业版,是业界首创的数据库DevOps解决方案,形成了云时代企业数据管理的最佳实践。 十年间,阿里巴巴的研发人员也增长了十...

全部原谅
2017/08/15
92
1

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Greenwich 新特性和F升级分享

2019.01.23 期待已久的Spring Cloud Greenwich 发布了release版本,作为我们团队也第一时间把RC版本替换为release,以下为总结,希望对你使用Spring Cloud Greenwich 有所帮助 Greenwich 只支...

冷冷gg
今天
50
1
精读《论语》读后感作文3600字

精读《论语》读后感作文3600字: 学而篇第一:子曰:“学而时习之,不亦说乎?有朋友自远方来,不亦悦乎?人不知,而不愠,不亦君子乎? 朱熹解:即学而又时时习之,则学者熟,而衷心喜悦,其...

原创小博客
今天
2
0
CPU内存结构

开局一张图 由于CPU频率太快了,为解决直接读取内存的数据上的延迟,在CPU和内存之间,存在3级缓存。 CPU在解决和缓存不一致上采用两种方式: 缓存一致性协议 总线锁机制 CPU CPU的一个时钟周...

春哥大魔王的博客
今天
5
0
记一次centos 7内核升级事故

情景 公司做等保3测评,在进行系统漏洞检测时发现内核存在漏洞,需要进行升级。 名称 版本 升级前内核 CentOS Linux (3.10.0-327.el7.x86_64) 7 (Core) 升级后内核 CentOS Linux (3.10.0-957...

阿dai
今天
9
0
PowerDesigner操作

1.去掉生成DDL里的注释 Database -> Edit Current DBMS -> Script -> Syntax -> BlockComment,去掉BlockComment里面的value内容。...

了凡川
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部