Python 功能点实现:数据热更新

2019-01-16 21:33:43 +08:00
 simoncos

文章在这里: https://www.jianshu.com/p/2d31f1c7ef63

代码在这里: https://github.com/simoncos/practical-python/tree/master/features/hot-reloading

关键词:热更新 | 热重载 | 定时更新 | 即时更新 | 缓存 | functools | cachetools | LRU | TTL

发到这里主要也想问问有没有更好的方法来做这件事(比如是不是要怎样搞个调度 / 消息系统,或者自省?)

4856 次点击
所在节点    Python
14 条回复
yangsi
2019-01-17 07:29:31 +08:00
开一个线程专门做更新。更新线程里面是实时还是定时都可以自己控制。
lihongjie0209
2019-01-17 08:48:38 +08:00
zookeeper 配置中心
simoncos
2019-01-17 08:58:32 +08:00
@yangsi 运算的线程如何 load 新数据?
simoncos
2019-01-17 08:59:59 +08:00
@yangsi 啊算我没说,线程是共享内存的...但是并行下面就有点麻烦了是不?
simoncos
2019-01-17 09:02:46 +08:00
@lihongjie0209 有没有什么参考?
firebroo
2019-01-17 09:05:55 +08:00
@simoncos 多进程使用共享内存呀。。
petelin
2019-01-17 09:23:25 +08:00
我司方案,每秒从 s3 上把服务配置拉下来。
另外学架构,解决方案不需要贴代码的。因为一段代码肯定解决不了,没啥意义。
beforeuwait
2019-01-17 09:32:19 +08:00
需要热更新的配置写到 config.py
然后 reload 就行了啊
ctro15547
2019-01-17 09:47:39 +08:00
redis
simoncos
2019-01-17 09:58:15 +08:00
@petelin 贴代码是为了说清楚现在的做法咯
simoncos
2019-01-17 10:06:42 +08:00
@ctro15547 也是缓存类的做法,定时应该还是可以的,即时麻烦一些。
shoumu
2019-01-17 10:30:39 +08:00
更新很好做,但是保证更新过程中服务的可用,更新过程的数据一致性问题感觉楼主说得不足

说一下我们现在使用的一些方案吧,主要分为配置更新和算法模型更新
配置更新:
1、zookeeper 配置中心,基于订阅的形式
2、统一的字典服务,每次服务使用之前请求或者轮询请求

模型更新:
1、看模型大小情况,如果模型不大的话,用双指针的形式,单独开一个线程用于模型更新,更新完成之后指针切换,指针切换是原子操作,没有安全问题
2、多进程服务,采用共享内存存储模型,由于模型过大,加上更新过程中这个模型可以忍受脏数据,所以就是直接往共享内存里写了。。。
wind3110991
2019-01-17 10:59:09 +08:00
楼主有造轮子精神值得点赞,这个做 demo 玩玩可以,生产环境不行,只能做一些简单的订阅更新功能,
对于你所说的 “更新 python 对象数据”,我觉得要首先本着 CAP 原则,再分下面三种情况来设置业界的解决方案:
( 1 )更新配置文件:更新数据量较小,能容忍一定的时延,但是需要保证高可用—— zookeeper ;
( 2 )更新内存数据:数据量大,需要在多个进程间进行切换,短时间内(周期更新)对服务性能要求较高 —— redis ;
( 3 )更新数据频繁(实时更新):拆分为生成者消费者模型,用消息队列来解耦进程间的耦合度,如 Kafka、rocketMQ 等等。
yangsi
2019-01-18 10:20:30 +08:00
@simoncos 多进程或者分布式应用不是自然就搞一个集中式的配置服务吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/527725

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX