请选择 进入手机版 | 继续访问电脑版

第3章 微服务太多,谁来管理

[复制链接]
小小海 发表于 2021-1-2 18:58:53 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
基于构建单个微服务,我们已经可以使用 Spring Boot 编写自己的微服务了。
但是在系统微服务化后,我们的服务会越来越多。面对越来越多的微服务,岂非真的要让各人一直分开“自生自灭”吗?固然不是,我们可以引入一个大管家——注册中心。
在Spring Cloud框架中,我们选择Eureka来继承这个重任。
3.1 认识Eureka

首先,我们从注册中心产生的须要性来认识下 Eureka。
在微服务这个概念盛行起来之前,一些分布式架构的系统中就已经有了注册中心这个东西。那么注册中心到底起到了什么作用呢?简朴来说:微服务就是一个所有服务共享的“所在列表”,它存储了所有服务的所在信息。
在分布式系统中,注册中心能提供的功能不光仅是“所在信息”这么简朴。尚有服务发现、服务治理、服务扩展、服务降级等问题。这些问题都需要借助注册中心来举行处置处罚。
注意:所在信息的说法只是为了更好明确,实在存储的是服务的元数据,这个会在反面讲到。
同时,微服务属于分布式系统的一种,它拥有分布式系统险些所有的特点。Eureka 作为Netflix 公司开源出来的一款产物,颠末了 Netflix 多年的真实场景查验。在Spring Cloud中,Spring团队对 Eureka做了封装,作为Spring Cloud的一个根本组件提供给我们。
Eureka 分为Server 端和Client 端,属于 C/S 架构的产物。我们在使用的时候,一般都是创建一个 Server 端用来做注册中心。在服务中使用 Eureka 的 client 包,将服务注册到 Eureka Server,到达服务注册的目的。
3.2 构建Eureka服务

构建一个根本的 Eureka 服务很简朴,按照我们上一张讲过的创建 Spring Boot 工程的方式创建项目,引入Eureka 的 maven 依赖。再加上几个简朴的设置就可以了。
需要引入的依赖为:
  1.     org.springframework.cloud    spring-cloud-starter-netflix-eureka-server
复制代码
在启动类中添加@EnableEurekaServer。在设置文件中添加上如下代码:
  1. spring.application.name=eureka-server #指定Eureka Server 的实例名server.port=8761 # 指定Eureka 服务的端标语# 表现是否从Eureka Server获取注册信息,默认为true。因为这是一个单点的Eureka Server,不需要同步其他的Eureka Server节点的数据,故而设为false。eureka.client.fetch-registry=false# 表现是否将自己注册到Eureka Server,默认为true。由于当前这个应用就是Eureka Server,故而设为falseeureka.client.register-with-eureka=false
复制代码
启动服务,便可以得到一个最根本、最常用的 Eureka 服务。访问http://localhost:8761,就可以看到如下图3.1所示的一个网页。
     
     图3.1 Eureka访问首页   
     
上图中的 Instances currently registered with Eureka区域显示 No instance available表现现在该 Eureka 上还没有注册任何服务。
3.3 将已有的微服务注册到Eureka服务

在3.2中我们已经构建好了一个简朴的 Eureka 服务,现在我们要将之前我们创建的微服务项目注册到这个Eureka 上面。
打开我们之前创建的工程 customer,在 pom.xml中添加如下代码:
  1.     org.springframework.cloud    spring-cloud-starter-netflix-eureka-client                        org.springframework.cloud            spring-cloud-dependencies            ${spring-cloud.version}            pom            import            
复制代码
并在properties节点添加代码:
  1. Finchley.SR2
复制代码
指定要使用的Spring Cloud版本。设置文件中添加:
  1. eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
复制代码
做完上面两步,然后启动项目。
注意:在老版本中,需要显式在启动类中添加注解@EnableEurekaClient,本书中使用的版本不需要强制添加。
刷新Eureka Server 的网页,我们发现在 Instances currently registered with Eureka
区域多了一条记载,看名字和端标语,确认是我们刚才启动的项目,如下图3.2所示。
     
     图3.2 micro-servicea注册到设置中心   
     
3.4 对Eureka举行安全认证

现在我们已经做到了将一个微服务注册到对应的Eureka 上,但是这个 Eureka
是可以随便访问的,没有任何的安全掩护。这种情况在生产情况中是不安全的,这节我们就为
Eureka 添加安全认证。
首先,为Eureka项目添加Spring Security支持,代码如下所示:
  1.     org.springframework.boot    spring-boot-starter-security
复制代码
然后,在设置文件中添加下面代码显示指定用户名和暗码,如果不在设置中明确指定用户名和暗码,项目在启动的时候会在控制台中打印出随机生成的一段暗码。
  1. spring.security.user.name=adminspring.security.user.password=admin
复制代码
同时,将:
  1. eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka/
复制代码
改为:
  1. eureka.client.service-url.defaultZone=http://admin:admin@127.0.0.1:8761/eureka/
复制代码
刷新 Eureka 网页,看到下图3.3所示登录界面。
     
     图3.3 添加认证后Eureka Server的登录界面   
     
分别输入admin/admin,登录乐成。发现我们之前注册的服务消失了。检察服务日志,可以看到下图3.4的日志。
     
     图3.4 启动错误日志   
     
micro-servicea在实验注册的时候认证失败,返回了401。我们修改它设置文件中设置的 Eureka Server 所在,如下所示:
  1. eureka.client.service-url.defaultZone=http://admin:admin@127.0.0.1:8761/eureka/
复制代码
同时,因为spring boot 2.0之后默认开启了csrf的处置处罚。我们手动关掉它。需要添加类,让所有的请求都走根本的http认证,如下代码所示:
  1. package cn.com.hanbinit.learn.eurekaserver.config;import org.springframework.beans.factory.annotation.Configurable;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;importorg.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;@Configurable@EnableWebSecuritypublic class WebSecurityConfig extends WebSecurityConfigurerAdapter {    @Override    protected void configure(HttpSecurity http) throws Exception {        http.csrf().disable();        http.authorizeRequests().anyRequest().authenticated().and().httpBasic();    }}
复制代码
重启服务,刷新Eureka Server页面。可以看到服务已经重新注册正常。
3.5 构建高可用的 Eureka 服务

上一节我们为Eureka添加了安全认证。在微服务架构中,注册中心的重要水平毋庸置疑,所以我们需要为 Eureka 添加更可靠的机制,提高Eureka的可用性。
现在许多的系统都是集群摆设的,目的就是为了做到服务的高可用。
但是Eureka作为注册中心,又不能简朴的多机摆设,每个Eureka服务存储的微服务元数据需要可以大概共享。本节先容如何做到 Eureka 的高可用,也就是搭建 Eureka 服务的集群情况。
我们来看一下最简朴的集群情况——2台 Eureka 实例一起构建的集群。
我们需要在设置文件中将下面的设置项设置为true,如下代码所示:
  1. eureka.client.fetch-registry=true #允许本地缓存注册信息eureka.client.register-with-eureka=true #允许将自己做为微服务注册到设置中心
复制代码
两台 Eureka Server 的端标语我们分别设置为8761和8762。我们需要分别为他们添加如下设置:
  1. server.port=8761eureka.client.service-url.defaultZone=http://127.0.0.1:8762/eurekaserver.port=8762eureka.client.service-url.defaultZone=http://127.0.0.1:8761/eureka
复制代码
我们分别启动两个 Eureka Server。这个时候就能看到8761和8762的 Eureka 都可以访问了,而且他们之间相互注册了对方,而且之前启动的micro-servicea已经都注册在了两个Eureka
Server上。如下图3.5和3.6所示。
     
     图3.5 端口为8761的Eureka Server界面   
     
     
     图3.6 端口为8762的Eureka Server界面   
    到此为止,我们在本地模拟的Eureka高可用已经摆设完了,但是在生产情况中这两个Eureka Server
应该是在差异的物理机上,我们现在的这种方式只是为了说明 Eureka Server 的集群搭建方式。
最后,这里还要在注意一点,我们刚才在修改 Eureka Server 时,并没有对 micro-servicea 做任何改变。之前的代码中,micro-servicea 只注册到了8761谁人 Eureka Server 上,为什么会在8762的 Eureka Server 上也出现呢?这种情况是否能到达真正的Eureka Server 高可用呢?
  问:为什么会在8762的 Eureka Server 上也出现呢?
答:我们在举行 Eureka Server 高可用设置时,添加了设置项。
eureka.client.fetch-registry=true,这个设置项会同步 Eureka
之间的元数据信息,所以micro-servicea虽然只注册到了8761上面,但是在8762上面照旧可以看到它。
  问:这种情况是否能到达真正的Eureka Server 高可用呢?
  答:这种情况下,如果8761的那台 Eureka Server 宕机了,那么我们的micro-servicea 实在已经不能再正常注册到 Eureka Server 了。所以,这种情况并不能到达高可用的目的。我们在设置了 Eureka Server 的高可用后,我们同样需要修改其他微服务的设置项,最好将服务注册到每个 Eureka
Server 上。添加的设置项也很简朴,如下所示:
  1. eureka.client.service-url.defaultZone=http://admin:admin@127.0.0.1:8761/eureka/,http://admin:admin@127.0.0.1:8762/eureka/
复制代码
3.6 相识 Eureka 的元数据

为了方便我们接下来检察 Eureka
的元数据,首先来看一个可以看到微服务实例元数据信息的接口:http://127.0.0.1:8761/eureka/apps/MICRO-SERVICEA,这些接口可以在https://github.com/Netflix/eureka/wiki/Eureka-REST-operations 找到。我们通过这个链接就可以直接在欣赏器中看到micro-servicea这个实例的元数据信息,如图3.7所示。
     
     图3.7 通例元数据     
上图中看到的就是micro-servicea 注册到 Eureka Server 后的元数据。元数据可以分为两种:


  • 通例元数据,比如端口,所在,实例名等。
  • 通过 eureka.instance.metadata-map.xxx自界说的元数据。
上图中看到的是通例元数据,接下来我们自界说一条元数据。在 micro-servicea 的设置文件中添加设置项:
  1. eureka.instance.metadata-map.version=2018.12.02
复制代码
重新启动 micro-servicea 服务。访问http://127.0.0.1:8761/eureka/apps/MICRO-SERVICEA,可以看到图3.8所示。
     
     图3.8 添加了自界说元数据   
     
可以看到在返回的接口中出现了我们刚才添加的信息。
所有的服务都是以元数据的形式注册在 Eureka 上的,我们可以通过元数据获取到服务的主机名,IP,端口,状态等信息,这些东西都发布服务注册表中,我们可以随时获取它们。自界说的元数据不会更改客户端自己的行为,除非我们为了赋予了某种特殊的业务意义,而且通过代码举行了实现。
3.7 小结

本章我们相识到了 Eureka Server 的构建方式,而且知道了怎样将使用 Spring Boot构建的微服务注册到 Eureka Server 上。在这个根本上,进一步相识了如作甚 Eureka Server 添加安全认证,以及如何构建高可用的Eureka Server。最后我们一起相识了元数据的概念。
通过本章的学习,各人已经可以将构建的微服务注册到 Eureka Server 上来统一管理了。但是我们的服务照旧一个个的个体,我们的服务之间是如何举行交互的呢?各人可以先联合我们本章最后讲的元数据概念想想这个问题。

来源:https://blog.csdn.net/weixin_50209853/article/details/112000498
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则


专注素材教程免费分享
全国免费热线电话

18768367769

周一至周日9:00-23:00

反馈建议

27428564@qq.com 在线QQ咨询

扫描二维码关注我们

Powered by Discuz! X3.4© 2001-2013 Comsenz Inc.( 蜀ICP备2021001884号-1 )