6年架构师带你学习微服务的注册与发现:服务发现的意义
服务发现的意义
服务发现,意味着用户发布的服务可以让其他人找得到。在互联网里面,最常用的服务发现机制莫过于域名。通过域名,用户可以发现该域名所对应的IP,继而能够找到发布到这个IP的服务。
域名和主机的关系并非是一对一的,有可能多个域名都映射到了同一个IP下面。DNS ( DomainName System, 域名系统)是因特网的一项核心服务 ,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址串。
那么,在局域网内,是否也可以通过设置相应的主机名来让其他主机访问到呢?答案是肯定的。
通过URI来访问服务
用户要访问某个服务,势必要通过URI来找到那个服务。URI ( Uniform Resource Identifier,统一资源标识符)是一个用于标识某- -互联网资源名称的字符串。例如,调用天气数据API,用户将发送一个GET请求到所发布的URI。
http:// localhost: 8080/weather/cityId/ {cityId}
这个URI包括以下内容。
● http是使用的通信协议。
●localhost是主机名称,这里特指本地主机。
● 8080是程序启动后占用的端口号。
● 端口号后面的字符串,就是主机资源的具体地址。
通过上面的讲解,已经知道了localhost 其实是IP地址为127.0.0.1的主机名称。也就是说,访
问htt:o/cahost:.808/weatercit.ld/ {cityId}等同于访问ht://7.1.8080/weatherlcitytd/ {cityId}。
知道了URI的作用之后,那么进行服务之间的调用看上去好像易如反掌。
在之前的天气预报微服务中依赖了天气数据API微服务,那么在调用方的代码里面,增加
REST客户端来调用服务即可。于是很快就写出了如下的代码。
★天气预报服务.
k asince 1.0.0 2017年10月25日
★@author "https:/ /waylau. com">way Lau
@Service
public class WeatherReportServiceImpl implements Wea therReportService {
@Override
public Weather getDataByCityId(String cityId)
//由天气数据API微服务来提供数据
String uri = "http://127.0.0.1 : 8080/weather/cityId/" + cityId;
ResponseEntity response = restTemplate.getForEntity (uri,
String.class) ;
String data = response.getBody() ;
}
}
那么,这么做会存在什么问题呢?
通过IP访问服务的弊端
首先,一个比较大的问题是,IP 是与一台特定的主机关联的。IP 必须唯- - ,不然会产生混淆。
其次,要让服务的调用方记住服务方的IP地址很难。特别是当双方都还没有正式上线部署的时候,根本无法提前获知服务提供方的IP地址。IP 地址是相对变化的!
最后一点是,通过IP地址很难做到负载均衡。设想下,服务提供方提供了两个服务实例,分别部署到两台主机里面,那么用户要访问哪个IP呢?固定-一个IP,那么另一个主机对用户来说,就没有任何作用,因为根本没有实现负载均衡。
需要服务的注册和发现
知道了上面的问题,用户就能更好地理解需要服务的注册和发现机制的原因。服务注册和发现正像互联网上的DNS,可以让用户启动的每个微服务都把自己注册进-一个服务注册表(或称为注册中心),当其他微服务需要调用这个服务的时候,就通过服务的名称来获取到这个服务。因为多个服务实例都是映射到同--个服务名称的,所以通过服务名称来访问,就可以使用其中的任何-一个服务实例,也就可以实现负载均衡了。
使用Eureka
在Spring Cloud技术栈中,Eureka 作为服务注册中心,对整个微服务架构起着最核心的整合作用。Eureka是Netflix开源的一 款提供服务注册和发现的产品。
Eureka的项目主页为
htps:p:/ithub.com/spring-cloud/spring-cloud-netafix,有兴趣的读者也可以去查看源码。
本节将着重讲解如何通过Eureka 来实现微服务的注册与发现。选择使用Eureka 的原因,大致总结了以下几个方面。
1.完整的服务注册和发现机制
Eureka提供了完整的服务注册和发现机制,并且也经受住了Netflix自己的生产环境考验,使用起来相对会比较省心。
2.和Spring Cloud无缝集成
Spring Cloud有一套非常 完善的开源代码来整合Eureka,所以在Spring Boot中应用起来非常方便,与Spring框架兼容性好。
3.高可用性
Eureka还支持在应用自身的容器中启动,也就是说应用启动之后,既充当了Eureka客户端的角色,同时也是服务的提供者。这样就极大地提高了服务的可用性,同时也尽可能地减少了外部依赖。
4.开源
由于代码是开源的,因此非常便于开发人员了解它的实现原理和排查问题。同时,广“大开发者也能持续为该项目进行贡献。
本篇文章给大家讲解的内容是服务发现的意义
下篇文章给大家讲解如何集成Eureka Server;
觉得文章不错的朋友可以转发此文关注小编;
感谢大家的支持!
本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。