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