You need to sign in to view this topic
This topic created in 2755 days ago, the information mentioned may be changed or developed.
Supplement 1 · Jan 17, 2019
特别是在多机器并行的环境
Supplement 2 · Jan 17, 2019
在多机器并行的情况下,定时更新可能简单一些,但是对于即时更新来说,需要更新到每一台。之前听同事说可能需要一个消息队列再结合类似我这种实现应该可以确保更新的指令到每一台,不重复不遗漏。
14 replies • 2019-01-18 10:20:30 +08:00
 |
|
1
yangsi Jan 17, 2019 via iPhone
开一个线程专门做更新。更新线程里面是实时还是定时都可以自己控制。
|
 |
|
4
simoncos Jan 17, 2019 via iPhone
@ yangsi 啊算我没说,线程是共享内存的...但是并行下面就有点麻烦了是不?
|
 |
|
7
petelin Jan 17, 2019 via iPhone
我司方案,每秒从 s3 上把服务配置拉下来。 另外学架构,解决方案不需要贴代码的。因为一段代码肯定解决不了,没啥意义。
|
 |
|
12
shoumu Jan 17, 2019 1
更新很好做,但是保证更新过程中服务的可用,更新过程的数据一致性问题感觉楼主说得不足
说一下我们现在使用的一些方案吧,主要分为配置更新和算法模型更新 配置更新: 1、zookeeper 配置中心,基于订阅的形式 2、统一的字典服务,每次服务使用之前请求或者轮询请求
模型更新: 1、看模型大小情况,如果模型不大的话,用双指针的形式,单独开一个线程用于模型更新,更新完成之后指针切换,指针切换是原子操作,没有安全问题 2、多进程服务,采用共享内存存储模型,由于模型过大,加上更新过程中这个模型可以忍受脏数据,所以就是直接往共享内存里写了。。。
|
 |
|
13
wind3110991 Jan 17, 2019 1
楼主有造轮子精神值得点赞,这个做 demo 玩玩可以,生产环境不行,只能做一些简单的订阅更新功能, 对于你所说的 “更新 python 对象数据”,我觉得要首先本着 CAP 原则,再分下面三种情况来设置业界的解决方案: ( 1 )更新配置文件:更新数据量较小,能容忍一定的时延,但是需要保证高可用—— zookeeper ; ( 2 )更新内存数据:数据量大,需要在多个进程间进行切换,短时间内(周期更新)对服务性能要求较高 —— redis ; ( 3 )更新数据频繁(实时更新):拆分为生成者消费者模型,用消息队列来解耦进程间的耦合度,如 Kafka、rocketMQ 等等。
|
 |
|
14
yangsi Jan 18, 2019 via iPhone
@ simoncos 多进程或者分布式应用不是自然就搞一个集中式的配置服务吗?
|