文章在这里: https://www.jianshu.com/p/2d31f1c7ef63
代码在这里: https://github.com/simoncos/practical-python/tree/master/features/hot-reloading
关键词:热更新 | 热重载 | 定时更新 | 即时更新 | 缓存 | functools | cachetools | LRU | TTL
发到这里主要也想问问有没有更好的方法来做这件事(比如是不是要怎样搞个调度 / 消息系统,或者自省?)
1
yangsi 2019-01-17 07:29:31 +08:00 via iPhone
开一个线程专门做更新。更新线程里面是实时还是定时都可以自己控制。
|
2
lihongjie0209 2019-01-17 08:48:38 +08:00
zookeeper 配置中心
|
5
simoncos OP @lihongjie0209 有没有什么参考?
|
7
petelin 2019-01-17 09:23:25 +08:00 via iPhone
我司方案,每秒从 s3 上把服务配置拉下来。
另外学架构,解决方案不需要贴代码的。因为一段代码肯定解决不了,没啥意义。 |
8
beforeuwait 2019-01-17 09:32:19 +08:00
需要热更新的配置写到 config.py
然后 reload 就行了啊 |
9
ctro15547 2019-01-17 09:47:39 +08:00
redis
|
12
shoumu 2019-01-17 10:30:39 +08:00 1
更新很好做,但是保证更新过程中服务的可用,更新过程的数据一致性问题感觉楼主说得不足
说一下我们现在使用的一些方案吧,主要分为配置更新和算法模型更新 配置更新: 1、zookeeper 配置中心,基于订阅的形式 2、统一的字典服务,每次服务使用之前请求或者轮询请求 模型更新: 1、看模型大小情况,如果模型不大的话,用双指针的形式,单独开一个线程用于模型更新,更新完成之后指针切换,指针切换是原子操作,没有安全问题 2、多进程服务,采用共享内存存储模型,由于模型过大,加上更新过程中这个模型可以忍受脏数据,所以就是直接往共享内存里写了。。。 |
13
wind3110991 2019-01-17 10:59:09 +08:00 1
楼主有造轮子精神值得点赞,这个做 demo 玩玩可以,生产环境不行,只能做一些简单的订阅更新功能,
对于你所说的 “更新 python 对象数据”,我觉得要首先本着 CAP 原则,再分下面三种情况来设置业界的解决方案: ( 1 )更新配置文件:更新数据量较小,能容忍一定的时延,但是需要保证高可用—— zookeeper ; ( 2 )更新内存数据:数据量大,需要在多个进程间进行切换,短时间内(周期更新)对服务性能要求较高 —— redis ; ( 3 )更新数据频繁(实时更新):拆分为生成者消费者模型,用消息队列来解耦进程间的耦合度,如 Kafka、rocketMQ 等等。 |