什么是服务发现
信息孤岛问题
计算机诞生之初,往往信息系统都是以单机的形式存在,系统与系统交互较少,存在信息孤岛问题,数据的交换得通过硬件设备的拷贝、人工在不同系统之间进行拷贝(硬盘、U盘等)。随着互联网的兴起,任何一个系统都难以在互联网浪潮中“独善其身”,不同服务、系统之间往往存在信息互通的需求,比如浏览淘宝网是用户的电脑请求淘宝网的服务器获得相关商品信息,淘宝内部的服务器之间也存在信息互通的需求,比如订单服务器可能要去请求用户中心服务获取下单用户的数据,通过网络交换数据显然比通过线下硬件复制拷贝来的方便的多。
这里我们把通信方式交互图最简化,请求资源一方为客户端,接受请求并返回资源一方为服务端
发展至今,不同系统之间通信的方式有很多,比如HTTP、TCP、UDP、以及各类RPC框架(Dubbo、gRpc、SpringCloud、Motan、HSF、Tars)等
Http通信
HTTP是一个客户端终端(用户)和服务器端(网站)请求和应答的标准(TCP)
通常,由HTTP客户端发起一个请求,创建一个到服务器指定端口(默认是80端口)的TCP连接。HTTP服务器则在那个端口监听客户端的请求。一旦收到请求,服务器会向客户端返回一个状态,比如"HTTP/1.1 200 OK",以及返回的内容,如请求的文件、错误消息、或者其它信息
在接口不多、系统与系统交互较少的情况下,Http协议通信的优点就是简单、直接、开发方便。当然其缺点也比较明显,也就是客户端需要指定服务端的地址(即ip和端口)
试想如果某个服务器上有N(N比较大)个接口,如果客户端要接入这些接口,那么服务端的相关开发人员必然需要提供一些离线文档来描述这些接口的入参及调用方式,因此如果请求接口比较多,对这份接口文档的维护成本也是不可忽略的
大家都知道,现实中任何一个机器都存着故障的可能,如果哪一天该服务器故障了,那么所有的客户端都无法正常请求到正常的资源。因此也就诞生出了服务端集群部署、请求负载均衡的机制,来避免单点故障的发生。Nginx就是这样一种反向代理软件,能够将用户的所有HTTP请求均衡(通过一定的负载均衡机制)的分配到每一台应用机器上,以此来避免单点故障对整体服务产生影响