结论是有条件的:只有在同一时间只允许一方拥有写入权、另一方只读或只提交变更请求时,两个服务商并行才不会互相覆盖。一旦双方都能直接改同一份线上文件或同一个数据库,冲突几乎必然出现,而且往往是后保存的人覆盖先保存的人,与谁更专业无关。
多数人以为覆盖只发生在代码文件上,实际常见的位置有三处,处理方式完全不同。
判断依据很简单:看改动是落在文件、数据库还是配置层。三层里只要有一层存在双向写入,就不能靠“沟通好先后顺序”来兜底,因为沟通无法阻止一次误操作。
假设一个只有十几页的展示站,A服务商负责改首页视觉,B服务商负责补三篇产品介绍。双方约定A先做、B后做,中间隔一天。这种安排在小站上通常没问题,因为改动面小、时间错开、页面之间不共享模板。
同样的约定放到有几百个页面、共用一套模板和多个自定义字段的站上就会失效。B补内容时可能顺手调整了字段结构或模板片段,而这个片段同时被A的视觉改动引用,两边各自测试都正常,合并后页面错位。反例说明:能否并行不取决于服务商是否守约,而取决于改动是否共享同一份结构。共享结构越多,错开时间的保护作用越弱。
要让两个服务商同时工作,需要人为制造写入边界,常见有三种,取舍点不同。
选择哪一种,取决于你能否说清“谁在什么时候拥有写入权”。说不清的时候,选第一种。
第一步,列出当前两个服务商各自需要触碰的文件、数据表和后台设置,标出重叠项。第二步,对重叠项指定唯一写入方,把另一方的权限降为只读,并让对方用变更清单代替直接操作。第三步,在每次发布前留一份可回退的备份,发布后立即抽查被重叠项影响的页面。
做完这三步,你会得到一个新的判断依据:如果重叠项无法收敛到唯一写入方,说明这个站不适合两家并行,应当把其中一方的范围缩到不接触生产环境,或者把工作排成前后两段而不是同时进行。