Skip to content

33 服务发现如何做到持续维护服务地址在动态运维中的时效性?

你好,我是周志明。

前面的两节课,我们已经学习了与分布式相关的算法和理论,掌握了一致性、共识、Paxos等共识算法,为了解分布式环境中的操作共享数据打好了理论基础。那么从这一讲开始,我们就来一起了解下,在使用分布式服务构造大型系统的过程中,都可能会遇到哪些问题,以及针对这些问题,都可以选择哪些解决方案。

好,那在正式开始学习之前呢,让我们先来思考一个问题:为什么在微服务应用中,需要引入服务发现呢?它的意义是什么?

服务发现解耦对位置的依赖

事实上,服务发现的意义是解耦程序对服务具体位置的依赖,对于分布式应用来说,服务发现不是可选项,而是必须的。

要理解分布式中的服务发现,那不妨先以单机程序中的类库来类比,因为类库概念的普及,让计算机实现了通过位于不同模块的方法调用,来组装复用指令序列的目的,打开了软件达到更大规模的一扇大门。无论是编译期链接的C/CPP,还是运行期链接的Java,都要通过链接器(Linker),把代码里的符号引用转换为模块入口或进程内存地址的直接引用。

而服务概念的普及,让计算机可以通过分布于网络中的不同机器互相协作来复用功能,这是软件发展规模的第二次飞跃。此时,如何确定目标方法的确切位置,便是与编译链接有着等同意义的问题,解决该问题的过程,就被叫做“服务发现”(Service Discovery)