• 微服务概述
  • Spring Cloud微服务介绍
  • Eureka
  • Eureka应用

1.1.认识微服务架构

1.1.1.单体架构

        一个典型的单体应用就是将所有业务场景的表示层、业务逻辑层和数据访问层放在一个工程中,最终经过编译、打包,部署在一台服务器上。

        以一个进存销系统的单体应用为例,架构如下图所示。

微服务 复用 微服务uaa_微服务

1.1.2.集群架构

        随着用户量的增加,此时单一的服务器已经无法支撑起用户的访问,动不动就挂掉的网站肯定是没有人愿意使用的。

为了解决这个问题,人们就开始想办法,将服务器进行横向扩展,也就是把同一个war包,同时部署到多个服务器上,然后使用负载均衡技术,根据集群中每个节点的负载情况,将用户请求转发到合适的节点上。

微服务 复用 微服务uaa_微服务_02

1.1.3.分布式SOA架构

        分布式SOA架构将原来的单体架构按照功能细分为不同的子系统, SOA架构的进存销系统如下图所示。

微服务 复用 微服务uaa_spring cloud_03

        一个完整的项目会分为多个模块,数据库也会有主库与从库两种,并且主库与从库是数据同步的。

 1.1.4.微服务架构

        微服务架构可以将服务进行更细粒度的划分,并使用轻量级机制(通常是HTTP资源的API)进行通信。这些服务是围绕业务功能构建的,可以使用不同的编程语言编写程序、使用不同的数据库存储数据。

微服务 复用 微服务uaa_spring cloud_04

         微服务的主要特点:

每个服务按照业务划分;


服务之间通过轻量级机制(通常是 HTTP 资源的 API )进行通信;


可以使用不同语言开发;


可以使用不同的数据存储技术;


可独立部署,服务之间互相不影响;


可针对用户访问流量大的服务单独扩展,从而能够节约资源;


管理自动化。


1.2.初识Spring Cloud框架的特点以及常用组件

1.2.1.Spring Cloud概述

        Spring Cloud是一个基于Spring Boot实现的微服务开发架构,它利用Spring Boot的开发便利性巧妙地简化了分布式系统的开发。例如配置管理、服务发现、断路器、智能路由、控制总线等操作,都可以使用Spring Boot开发风格做到一键启动和部署。可以说,Spring Cloud将Spring Boot风格进行再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

1.2.2.Spring Cloud微服务架构的特点


组件丰富,功能齐全


Spring Cloud 的组件非常多,涉及微服务的方方面面。SpringCloud是一系列组件的有机集合。

微服务 复用 微服务uaa_Cloud_05


开箱即用,快速启动


        Spring Cloud基于Spring Boot开发的,Spring Boot具有快速构建Spring应用、直接嵌入服务器、自动化配置的优点,Spring Cloud继承了Spring Boot快速构建和自动化配置的优点,有开箱即用,快速启动的特点。


模块部署方便,项目维护难度降低


Spring Cloud采用模块化开发,按照项目功能,将项目拆分为不同的模块,每个模块独立开发运行,模块之间不会互相影响。维护时只需要维护具体的模块,不需要改动其他模块的代码,从而降低模块后期维护的成本。


项目扩展性和稳定性较好


基于Spring Cloud的微服务架构中,每个模块基本都是一个Spring Boot项目,它们都有独立的数据库,模块下的功能是横向开发的,如果需要扩展新的功能,可以新建该功能对应的独立数据库以及新的模块,不需要在之前的模块上修改,项目扩展更方便,项目稳定性更好,更容易实现敏捷开发,快速交付。


具有容错处理机制


实际开发中会因为网络连接失败、超时、服务器硬件故障等原因导致其中某个模块无法正常运行,导致整个项目发生异常,所以容错机制变得尤为重要。在Spring Cloud中提供了Hystrix组件,该组件专门用于处理容错,从而能保证某个模块出错后有其他备用模块或者善后处理。

1.2.3.Spring Cloud微服务架构的常用组件以及模块

        Spring Cloud是一系列框架的有序集合,为开发人员构建微服务架构提供了完整的解决方案,但是Spring Cloud并不是一个拿来即可用的框架,Spring Cloud Netflix 和Spring Cloud Alibaba是为开发者提供了这套规范的实现方式。

微服务 复用 微服务uaa_eureka_06

 常用的五大组件


Eureka : 服务注册中心 ,基于 HTTP 协议 的分布式中间件,主要 用于服务管理 。



Ribbon : 负载均衡 组件 ,支持多种负载均衡策略,可 以 配合服务发现和断路器使用, 在客户端实现负载均衡 。



Hystrix : 熔断器 ,容错管理工具,旨在通过熔断机制控制服务和第三方库的节点 , 从而 对延迟和故障提供更强大的容错能力 。



Feign :一个 REST 客户端 ,基于 Ribbon 和 Hystrix 的 声明式服务调用组件 。



Zuul : 服务网关 ,为微服务集群提供 代理 , 过滤 , 路由 等功能。



        通过一个图来表现。



微服务 复用 微服务uaa_微服务_07


1.2.4.Spring Cloud版本号

        Spring Cloud版本号并不是熟悉的数字版本号,而是一个名称代号,这些代号据说是根据伦敦地铁命名的,分别是Angel、Brixton、Camden、Dalston、Edgware、Finchley 、 Greenwich、Hoxton,其中Angel版本是第一个Release版本。

        Spring Cloud的版本名称,通常是由“版本号+小版本名称”组成的。这样设计的目的是为了更好地管理每个Spring Cloud子项目的清单,避免自己的版本号与子项目的版本号混淆。例如,Hoxton.SR9版本中, Hoxton代表的是版本号, SR9是小版本名称。

Spring Cloud官方:

https://spring.io/projects/spring-cloud        https://spring.io/projects/spring-cloud

注意:Spring Cloud的版本取决于Spring Boot的版本 

1.3.Eureka介绍

        Eureka是Netflix开发的服务注册与发现框架, 是Spring Cloud 体系中最核心的注册中心组件。服务的注册发现对于微服务来说是一个非常重要的环节。在微服务架构中,每个服务(Service)是动态变化的,难以通过静态配置的方式维护服务,需要用到服务发现框架来完成服务(Service)的自动化管理。

1.4.Eureka工作原理

        微服务架构中存在三种角色,分别是服务提供者、服务消费者和服务注册中心。

微服务 复用 微服务uaa_eureka_08

服务提供者需要在Eureka Server中完成注册服务消费者会从Eureka Server中获取一份服务注册列表,该列表包含了所有注册的服务信息。服务消费者就会根据服务提供者的IP地址,通过HTTP远程调用服务提供者的服务。

1.5.搭建Eureka Server

        基本流程:


创建项目,引入依赖


添加 Eureka 相关配置


添加 @EnableEurekaServer 注解


测试运行


1.5.1.开始搭建

        1、创建项目,引入依赖

        使用Spring Initializr方式创建一个名称为eureka-server的Spring Boot项目,这里将Group命名为com.cg,将Artifact命名为eureka-server,同时添加Web和Eureka Server依赖(spring-cloud-starter-netflix-eureka-server )。

        2、添加Eureka的相关配置

        在全局配置文件application.yml中添加Eureka的相关配置信息。

        application.yml配置文件内容如下:

server:
  port: 8761                                        # 服务器端口号7000                           
spring:
  application:                                      #实例名称配置
    name: eureka-server                       
eureka:
  client:
    fetch-registry: false                           # 表示是否从Eureka Server获取注册信息
    register-with-eureka: false                     # 表示是否向Eureka Server注册
    service-url:
      defaultZone:
        http://localhost:8761/eureka/               #设置服务注册中心地址

 2、在项目启动类添加@EnableEurekaServer注解

        在项目启动类EurekaServerApplication上添加@EnableEurekaServer注解开启Eureka Server功能。启动eureka-server项目,在浏览器中访问http://localhost:8761/。效果如下图所示。

微服务 复用 微服务uaa_spring cloud_09

1.5.2.搭建服务提供者

        基本流程:


创建项目,引入依赖


添加 Eureka 相关配置


添加 @EnableEurekaClient 注解


测试运行


        1、创建项目,引入依赖

        使用Spring Initializr方式创建一个名称为eureka-provider的Spring Boot项目,这里将Group命名为com.cg,将Artifact命名为eureka-provider,同时添加Web、Eureka Client依赖(spring-cloud-starter-netflix-eureka-client)。


        2、添加Eureka的相关配置

        在全局配置文件application.yml中添加Eureka的相关配置信息。application.yml配置文件内容如下:

server:
    port: 7006                                             
spring:
    application:  
        name: eureka-provider                      
eureka:
    client:
         service-url:
             defaultZone: http://localhost:8761/eureka/ #设置服务注册中心地址

3、在项目启动类添加@EnableEurekaClient注解

        在项目启动类EurekaProviderApplication上添加@EnableEurekaClient注解开启Eureka Client功能。

        4、在项目中添加一个控制器提供获取商品列表服务

@RestController
public class ProductController{

    @RequestMapping("/product/list")
    public List<Product> getList(){
        Product product1 = new Product("苹果1", 20, 100,);
        Product product2 = new Product("香蕉1", 30, 200,);
        Product product3 = new Product("橘子1", 40, 300,);
        return Arrays.asList(product1 ,product2 ,product3 );
    }
}

        保证Eureka Server启动的状态下,启动eureka-provider,在浏览器中访问Eureka Server的主界面http://localhost:8761/,效果如下图所示。

微服务 复用 微服务uaa_spring cloud_10

1.5.2.搭建服务消费者

        基本流程:

创建项目,引入依赖

添加 Eureka 相关配置

添加 @EnableEurekaClient 注解

测试运行


        1、创建项目,引入依赖

        使用Spring Initializr方式创建一个名称为eureka-consumer的Spring Boot项目,这里将Group命名为com.cg,将Artifact命名为eureka-consumer,添加Web、Eureka Client依赖。

        2、添加Eureka的相关配置

        在全局配置文件application.yml中添加Eureka的相关配置信息。application.yml配置文件内容如下:

server:
    port: 7002                                             
spring:
    application:  
        name: eureka-consumer                     
eureka:
    client:
         service-url:
             defaultZone: http://localhost:8761/eureka/

3、在项目启动类添加@EnableEurekaClient注解

        在项目启动类EurekaConsumerApplication上添加@EnableEurekaClient注解开启Eureka Client功能。

        4、通过RestTemplate模板类调用生产者实例中的服务

        然后就可以通过RestTemplate对象调用生产者实例中的HTTP服务

微服务 复用 微服务uaa_微服务_11

1.6.测试实行 

        保证Eureka Server启动的状态下,启动eureka-consumer。在浏览器访问http://localhost:7002/order获取订单信息,可以看到成功调用了eureka-provider中提供的获取商品列表的服务。效果如下图所示。

微服务 复用 微服务uaa_eureka_12