
鄙人做了一个小项目,部署了 celery 的分布式,本来结果是直接在节点往主控节点的 mysql 里面存入的。
问题来了,有 leader 表示这个不太安全,直接互联网上暴露了 mysql 接口,降权神马的也欠考虑。
另外,leader 觉得这个东西,一旦节点部署多了以后,主控端唯一的 mysql 会负荷不了高速大量的数据写入。 所以他建议我找几台能缓冲的中间节点,借助上面的某种机制来存入 mysql,而不是将 mysql 接口直接暴露给 celery 的节点。 同时,这样有缓冲,数据库写入的稳定性也能得到保证。
鄙人水平有限,是野路子 coder,所以没有想到特别好的法子,求大家指点下迷津。
在线等,很急,leader 这两天在催我要方案。 感谢!!!
PS:感觉这个应该经验丰富些的大佬都能帮我解答的,这帖子不能跟以前似的沉了吧。。
1 akmonde OP 这里怕大家没看懂,故此补充下,我这边是跟大家求方案细节,我才好去做计划。 如果有大佬做过或者有过完善点的想法,劳烦多敲几个字指点下小弟,感谢感谢! |
2 cszeus 2017-07-20 07:59:55 +08:00 小项目确定真的有“高速大量”的数据写入么?不如先看看 mysql 到底能不能承受吧。 |
3 NoBeeBee 2017-07-20 09:54:04 +08:00 首先有个小问题,为神马说“直接互联网上暴露了 mysql 接口” 。难道你的 web 应用框架,是直接把后台处理数据库部分代码直接暴露在 web 访问的表层了?我记得 Django 一类的 web 框架都有很好的分层处理的概念吧,譬如 mvc 等。 |
4 CryMeatel 2017-07-20 11:47:03 +08:00 ……数据写入 QPS 是多少…… 得根据具体业务量看是否需要优化~“提前优化是万恶之源” |
5 iConnect 2017-07-20 12:09:00 +08:00 小项目就要上 celery 分布式,这确定有必要吗? |
6 iwishing 2017-07-20 12:29:48 +08:00 celery 不是往 broker 发消息的吗?写个代理把 broker 里面的结果存到 MySQL 就好了吧 |
7 juntao 2017-07-20 13:44:02 +08:00 不知道具体业务如何。根据你的描述 1 分理一个写数据库的 task 2 这个 task 只允许在主节点跑 上面可以解决不暴露 mysql 给其他 celery node 这个目标。 另外 celery 是基于消息队列的,这本身就是你写 mysql 的缓冲。 |
8 wizardoz 2017-07-20 13:50:40 +08:00 直接互联网上暴露了 mysql 接口 ===================== 这个问题有很多简单的方式可以解决 |
9 KgM4gLtF0shViDH3 2017-07-20 14:52:18 +08:00 为什么会暴露 MySQL 接口啊求教 |
10 akmonde OP |
11 akmonde OP |
12 xdays 2017-07-20 17:01:36 +08:00 celery worker 作为 producer 丢结果到 queue 里,然后 mysql 那一头作为 consumer 处理结果入库。 |
13 whnzy 2017-07-20 17:26:24 +08:00 既然有 leader 为什么不问他。。。。 |
14 carilove 2017-07-20 17:33:25 +08:00 部署到公网,这个题无解 MySQL 有暴露的风险,你的 celery broker 一样会暴露,而且 broker 的信息一样是全的 |
15 wizardoz 2017-07-20 21:13:03 +08:00 @akmonde 方案 1 服务器之间建立 VPN 连接,MySQL 服务配置只接受来自 VPN 内网 IP 的连接。用 VPN 的验证机制来保证安全。当然,VPN 可能网络稳定性会是个问题。 方案 2 配置 MySQL 主机的 iptables,使之对 3306 端口只放行来自特定 IP 的连接。 当然我说的两种方案可能都有弊端。但是我想表达的意思是,安全问题可以找一些成熟的工具来解决而不是因为顾虑安全问题而放弃高效的工具。 |
16 akmonde OP |
17 hanssx 2019-09-02 14:45:58 +08:00 考虑做成 RPC ? |