什么是耦合?耦合是一种架构状态,架构中不相关的代码、模块、服务和系统由于某种原因被链接在一起,独立性很差。影响相互影响,变化相互改变。.从感官上,如何发现系统中的耦合?作为一个技术人,经常在心里骂上下游,骂兄弟部门,“这东西跟我有什么关系?这件事我凭什么要配合?”。显然不应该有联动,但被动配合可能会造成潜在的耦合。因为IP配置的关系,上下游一定要打通,就是典型的耦合情况。现场恢复线上有一台数据库服务器,由于某种原因,比如磁盘故障,需要更换。运维部署新机器,DBA部署数据库实例,准备数据,只等调用方切换。如何切换?原来的数据库有一个旧的IP,但是现在有一个新的IP。想通知上游将流量切换到新IP怎么办?通知上游一一切换。找到上游,抱歉,IP已更改,请修改配置重启,并连接新IP。不知道大家在工作中会不会遇到这样的场景。数据库或服务的IP已更改。作为上游调用者,需要配合修改配置和重启。这一刻,你心里可能在骂妈妈。明明是别人改了IP,为什么还是我配合修改配置重启。特别是,如果是基础服务或者是基础数据库改了IP,调用的上游很多,那么可能需要搜索A、B、C所有部门,配合重启修改配置。所以,在这种上下游通过IP配置耦合在一起的情况下,耦合的范围是非常广泛的。理想情况是:谁修改IP,只修改一次,流量可以静默迁移。这就是脱钩。如何去除IP耦合?常用的方法是:用内网域名代替内网IP。如果这个优化还没有做,强烈建议马上实施,删除配置文件中所有的内网IP,全部改成内网域名。如果使用内网域名,不需要配合上游重启?假设你不使用内网IP,而是使用内网域名。如果一个服务或数据库的IP发生改变,只需要改变一个地方,而不是所有上游都改变:O&M修改内网DNS,将内网域名指向新的IP。如果是短连接调用,以后新的请求流量自然会切换到新的IP;如果是长连接调用,新的长连接会连接到新的IP上,但是旧的长连接还是连接到旧的IP上。运维会切断旧IP上的连接。如果不出意外,服务或数据库的连接池是有重连功能的。重新连接后,会自动连接到新的。IP看起来是这样的,只要运维配合,就可以完成IP迁移,所有上游调用者不需要配合修改配置重启。使用内网域名替换内网IP只是一个很小的优化点,但是对于IP解耦是非常有效的。【本文为专栏作者《58神剑》原创稿件,转载请联系原作者】点此阅读更多该作者好文
