上一篇讲解后端为什么要用rpc进行通信而不是http的文章中,提到了rpc相比较http,除了省流量外,其实就是在http上封装了服务发现和自动重试等面向服务的高级特性,那什么是服务发现呢,服务发现的实现原理是什么呢?这篇文章会进行解释
为什么要使用服务发现?
我们可以想象一下,当我们需要远程的访问REST API或者Thrift API时,我们必须得知道服务的网络地址(IP Address和port)。传统的应用程序都是运行在固定的物理机器上,IP Address和端口号都是相对固定的。可以通过配置文件方式来实现不定期更新的Ip Address和端口号。但是,在基于云的微服务应用中,这是一个非常难以解决的问题。
在基于云的微服务应用中,服务实例的网络地址(IP Address和Port)是动态分配的,并且由于系统的auto-scaling, failures 和 upgrades等因数,一些服务运行的实例数量也是动态变化的。因此,客户端代码需要使用一个非常精细和准确的服务发现机制。
有两种主要的服务发现方式:客户端发现(client-side discovery)和服务器端发现(server-side discovery)。