9
目前任务调用是通过服务器端调用客户端的端口来实现的。但是这样在部署上会有一些麻烦,比如集群部署时要指定多个端口,要配置防火墙等。此外,在容器云/Service Mesh上部署时,需要pod对外暴露端口,是比较麻烦的操作。因而,比较想知道为什么不是实现成客户端长连接请求服务端这样子,这样在部署上比较方便,此外有更加少的安全问题。是否有其他架构上的考虑呢?
目前任务调用是通过服务器端调用客户端的端口来实现的。但是这样在部署上会有一些麻烦,比如集群部署时要指定多个端口,要配置防火墙等。此外,在容器云/Service Mesh上部署时,需要pod对外暴露端口,是比较麻烦的操作。因而,比较想知道为什么不是实现成客户端长连接请求服务端这样子,这样在部署上比较方便,此外有更加少的安全问题。是否有其他架构上的考虑呢?
我理解定时任务是个相对低频的操作、且任务触发在很多场景下只选择一个节点执行即可;基于这种背景,所有节点与服务端长连是对网络连接的浪费。 如果是在同一个K8S集群内,可以直接使用pod ip访问非容器端口;不用pod对外暴露端口。
您说的有道理。不过我觉得总的来说,长连接对资源的消耗其实是相对较小的。就端口来说,服务器调客户端的模式要求客户端多暴露一个端口,所以端口的消耗两种模式是一样的。至于连接消耗,对比总流量来说基本可以忽略。此外,我觉得当定时任务频率较高,任务数量较多,或者节点较多时,只选择一个节点进行远程触发还是会遭受压力的。
长连接不是只有一个tcp连接就行,还需要保活,需要心跳报文; 调度器是集群部署的,调度器伸缩,连接数会成倍的变化; 任务路由也有多种策略,只要不是广播任务,多个节点是可以分担压力的;
我现在内网调试,还得内网搭建服务器,无法直接使用公网的调度器。如果使用长连接就可以解决我这个问题
你好,逻辑整体和 @KoneZJ 一致,基于调度业务特性以及成本考虑。