隔离做在哪一层,效果差别很大。整机接管是最粗的一层,所有程序共用一个来源;进程级是细的一层,同一个程序的不同实例也能各走各的。多开场景下,细这一层往往才是真正解决问题的,粗那一层只能算把水搅浑,看着做了隔离,实际一个都没分开。
粒度越细,能分开的环境越多,配置也越费神,这是绕不开的一对取舍。
为什么细一层的价值更高
整机接管解决的是这台机器的来源变不变,进程级解决的是这个实例的来源跟别人一不一样。多开要的通常是后者。六个窗口挂在一台机器上,整机接管之后仍然只有一个来源,分开的意义就没了。想让每个窗口各走一条独立IP线路,只能在进程这一层动手。
进程级隔离需要什么条件?
客户端要能识别到单个进程,并且能把规则绑定到进程上。有的工具只认程序名,同一个程序的多开会被当成一个,这时候要退到按设备分。
- 整机层
- 一台机器一个来源,配置最简单,隔离度最低
- 进程层
- 一个实例一个来源,配置复杂,隔离度够用
- 设备层
- 一台设备一套环境,成本最高,隔离最彻底
三层之间的关系
三层可以叠加,也可以只做中间一层,每条IP线路各自独立。多数项目做到进程层就够,再往上加设备层,成本和维护量都要翻上去。判断标准是记录能不能分开清,能清就够了。
能做到进程层,就别停在整机层。
还有一个好处常被忽略:进程级隔离出问题的时候,影响面小。某个进程的线路掉了,其余进程照常跑,排查范围也窄。整机接管一旦出问题,全机都断,定位起来要从头查,连是本地网络还是线路本身出的问题都分不清。
怎么确认做到了进程层
开两个实例,各查一次IP地址,两个不一样才算数。两个一样,要么规则没绑到进程,要么客户端只支持整机接管。这一步不验,配置写得再细也不知道有没有生效,等于白做。
验证完把结果记下来,换版本之后再验一次。客户端升级常把进程绑定规则清掉,回到整机模式,表面上什么都没变,实际已经退回去了。
