持续集成 各位大哥,问一下,分布式部署是会代码部署到每一台服务器上吗?还是把代码放到一个公用地方,每个服务器都能运行

黄诚锦 · 2022年05月26日 · 最后由 陈恒捷 回复于 2022年05月28日 · 7218 次阅读

如题

共收到 10 条回复 时间 点赞

应该是把不同的代码放到不同服务器上

分布式部署是把同一个版本的程序部署到多台服务器上运行。比如 Java 放的是 jar 包

这里的程序已经是代码编译后的结果产物了,除非是运行方式比较特殊需要放源码(比如 python 这类没有太多编译必要的),否则一般服务器是不放项目源代码的。

什么是分布式?
无外乎不同的资源分布在不同的主机上
我们知道,数组相等只不过是数组不同排列组合中的一个特殊情况
所以,答案很明显了,都可以,只要你愿意,怎么放都可以。
唯一的问题,资源统一调度。

代码放到一个公用的地方等价于,IO 共享了,运行嘛,等价于读取文件独立运行。不过现实啪啪打脸,大部分人不会这么干。

陈恒捷 回复

谢谢

ganker 回复

我感觉事相同的在每台服务器上都部署了,不然怎么实现负载均衡

润安 回复

好的,会有不同的放到不同的服务器上面的情况吗?也就是说每台服务器上面运行的代码都是不一样的,这样子的话是不是实现不了负载均衡了

黄诚锦 回复

会有,可能有异构的业务处理逻辑等情况。或者处在灰度发布,蓝绿发布,金丝雀发布等过程中的情况下,部分服务器上的包较新,其余一些较老。

黄诚锦 回复

负载均衡的只负责流量分配,10 个请求过来后能按设定的比例分配给 5 个节点,就算实现负载均衡了。

它并不会去管背后的节点版本是否一致。实际线上节点比较多的话,发布期间就会处于不一致状态(有的还没更新在跑老版本,有的更新完跑新版本)。楼上说的灰度发布等场景,也会处于不一致状态。

一般说分布式部署,主要是强调它并非单节点部署吧。这种场景下,内部进行设计时就需要保障一些关键资源必须通过某种方式给多节点共享(比如一些共享的数据要放数据库、redis,不能只记录在自己内部的共享变量),同时一些并发机制也要特别考虑多节点间的协调(比如分布式锁)。

陈恒捷 回复

假如此时有两个节点版本不一致,有个功能需要在新版本上才能正常运行,那么我多次对这个功能操作,会不会有些请求分配到旧版本的服务器上面去,这样不就会有问题吗

黄诚锦 回复

会有问题的。

所以一般发版是先发服务端,服务端全部节点更新完毕,再开始发客户端(只要新客户端不发,那就不用担心新版本特有功能的调用会被分配到老版本服务器)。如果实在需要包含新功能和不包含新功能两个版本并存,那可以配合请求 header 统一加客户端版本号之类的请求标记方式,让流量分配的时候保障新功能的流量一定分配到可以处理新功能的节点。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册