SpringCloud之Eureka注册中心与Robbin负载均衡(一)

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: SpringCloud之Eureka注册中心与Robbin负载均衡(一)

学习目标


  • 了解系统架构的演变
  • 知道什么是SpringCloud
  • 独立搭建Eureka注册中心
  • 独立配置Robbin负载均衡


系统架构演变


要学微服务,我们先来看看系统架构的演变史,从而对微服务架构进行更深层次的了解。


随着互联网的发展,网站应用的规模不断扩大,需求的剧增,带来了系统架构不断的演进、升级和迭代。


系统架构的演变,大体上划分为:传统架构、负载均衡架构,分布式服务架构,SOA架构,微服务架构。


传统架构:单一应用


当网站流量很小时,只需一个应用,将所有功能都部署在一起。微信图片_20220526123114.png


集群:负载均衡


随着访问量的变大,一个Tomcat服务器已经不能满足需求。

需要配置多个Tomcat,做Tomcat集群。通过负载均衡服务器访问不同的Tomcat服务器,每个Tomcat中部署完整项目即可。微信图片_20220526123132.png

分布式服务

每一个Tomcat存放完整项目,会存在部分业务模块长时间用不到,部分业务模块不够用的现象。

我们将按照功能模块拆分项目,每一台服务器仅存放某一个模块,通过多系统的配合完成整体业务逻辑,此种方式成为:分布式服务。微信图片_20220526123148.png微信图片_20220526123142.png

SOA架构:面向服务架构


SOA(Service Oriented Architecture)面向服务架构,就是将工程拆分成表现层和服务层两个工程。

服务层中包含业务逻辑,只需要对外提供服务即可。

表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。微信图片_20220526123153.png微信图片_20220526123201.png

微服务


微服务是SOA的一种实现,也可以说是微服务是去ESB(取中心)的SOA。

微服务架构是一种将单个应用程序作为一套小型服务开发的方法。每种应用程序都可以独立运行。应用程序之远程调用进行通信。微信图片_20220526123214.png

微服务总结:(特性)

  1. 完全独立的一个最小个体。(可以独立运行)
  2. 个体与个体之间,通过远程调用进行访问。例如:基于RESTFul风格的。
  3. 通过注册中心,将不同个体可以进行整合。
  4. 通过网关,可以进行统一的入口访问。


初始SpringCloud


什么是微服务


微服务是一种架构风格,即将单体应用划分为小型的服务单元。


微服务的实现方式很多,但是最火的莫过于Spring Cloud了。为什么?


  • 后台硬:作为Spring家族的一员,有整个Spring全家桶靠山,背景十分强大。
  • 技术强:Spring作为Java领域的前辈,可以说是功力深厚。有强力的技术团队支撑,一般人还真比不了
  • 群众基础好:可以说大多数程序员的成长都伴随着Spring框架,试问:现在有几家公司开发不用Spring?SpringCloud与Spring的各个框架无缝整合,对大家来说一切都是熟悉的配方,熟悉的味道。
  • 使用方便:相信大家都体会到了SpringBoot给我们开发带来的便利,而SpringCloud完全支持SpringBoot的开发,用很少的配置就能完成微服务框架的搭建


什么是SpringCloud


Spring Cloud 是一系列框架的集合,它利用Spring Boot的开发便利性,简化了分布式系统开发,如:服务注册、服务发现、配置中心。消息总线、负载均衡、熔断器、数据监控等。


Spring Cloud 主要贡献者是Netflix,也就是Spring Cloud是对Netflix贡献的框架的二次封装或优化。


通俗的讲,SpringCloud就是用于构建微服务开发和治理的框架集合。


SpringCloud常见模块


SpringCloud主要涉及的组件包括:


  • Eureka:服务注册中心,用于管理服务
  • Ribbon:负载均衡(集群)
  • Hystrix:熔断器,能够防止服务的雪崩效应。
  • Zuul:服务网关,提供路由转发、请求过滤等功能。
  • Feign:服务调用,简化Http接口的调用。
  • 以上只是其中一部分,架构图:微信图片_20220526123856.png


版本


SpringCloud的版本命名比较特殊,因为它不是一个组件,而是许多组件的集合,它的命名是以A到Z的为首字母的一些单词组成:微信图片_20220526123905.png

我们的学习,将以Hoxton.SR9的版本。(最新版本,需要同步升级相关软件)


参考文档:Spring Cloud


入门案例


父项目


创建项目


创建父项目:cloud-parent-1007


微信图片_20220526123927.png


pom配置文件


修改pom.xml,确定spring cloud的版本

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.czxy.cloud</groupId>
    <artifactId>cloud-parent-1007</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!-- 1 确定spring boot的版本-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.5.RELEASE</version>
    </parent>
    <!--2  确定版本-->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring-cloud-release.version>Hoxton.SR9</spring-cloud-release.version>
    </properties>
    <!-- 3 锁定sprig cloud版本-->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud-release.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <!-- 4 确定spring cloud私有仓库
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
-->
</project>


原理分析


基本架构:


  • Eureka:就是服务注册中心,用于管理所有注册服务。
  • 班级服务,服务的提供者,启动后向Eureka注册自己地址,方便服务调用方获取。
  • 学生服务,服务的调用者,定期从eureka注册中心中获得服务列表。
  • 心跳(续约):提供者定期通过http方式向Eureka刷新自己的状态。


Eureka注册中心(服务端)


认识Eureka


当开发大型项目时,服务的提供方和服务的调用方,将会非常庞大,管理服务的成本将几何倍的增长。


Eureka将负责服务的注册、发现、状态监控。


注册:Eureka负责管理、记录服务提供者的信息


发现:服务调用者无需自己寻找服务,而是把自己的需求告诉Eureka,然后Eureka会把符合你需求的服务告诉你


监控:服务提供方与Eureka之间通过“心跳”机制进行监控,当某个服务提供方出现问题,Eureka自然会把它从服务列表中剔除


编写注册服务中心(10086)


步骤一:创建注册中心项目(服务),cloud-eureka-1007


微信图片_20220526124426.png

步骤二:修改pom.xml文件,添加依赖(web项目、eureka服务)

<dependencies>
    <!--web起步依赖-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <!-- Eureka服务端 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
</dependencies>

步骤三:创建application.yml,配置注册中心

  1. register-with-eureka: false # 是否注册自己的信息到注册中心,默认是true
  2. fetch-registry: false # 是否拉取其它服务的信息,默认是true
  3. service-url: # 注册中心的地址,现在是自己的地址。如果是集群,需要加上其它Server的地址。
# 端口号
server:
  port: 10086
# 服务名称
spring:
  application:
    name: cloud-eureka-1007
# eureka的配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:${server.port}/eureka/  # 注册中心的地址
    register-with-eureka: false       # 是否注册自己的信息到注册中心,默认是true
    fetch-registry: false             # 是否拉取其它服务的信息,默认是true

步骤四:编写启动类,添加注解 @EnableEurekaServer

1.package com.czxy;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
/**
 * Created by liangtong.
 */
@SpringBootApplication
@EnableEurekaServer
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args );
    }
}

步骤五:访问

http://localhost:10086

微信图片_20220526124708.png

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
|
2月前
|
负载均衡 算法 Java
Spring Cloud全解析:负载均衡算法
本文介绍了负载均衡的两种方式:集中式负载均衡和进程内负载均衡,以及常见的负载均衡算法,包括轮询、随机、源地址哈希、加权轮询、加权随机和最小连接数等方法,帮助读者更好地理解和应用负载均衡技术。
|
4月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
127 3
|
1天前
|
负载均衡 算法 Java
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
13 5
|
2月前
|
负载均衡 Java 对象存储
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
负载均衡策略:Spring Cloud与Netflix OSS的最佳实践
46 2
|
2月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
3月前
|
负载均衡 算法 微服务
基于gRPC的注册发现与负载均衡的原理和实战
基于gRPC的注册发现与负载均衡的原理和实战
|
4月前
|
负载均衡 Java Spring
Spring cloud gateway 如何在路由时进行负载均衡
Spring cloud gateway 如何在路由时进行负载均衡
473 15
|
4月前
|
负载均衡 安全 Java
Spring Cloud中的服务发现与注册
Spring Cloud中的服务发现与注册
|
4月前
|
负载均衡 Java 微服务
深入理解Spring Cloud中的服务发现与注册
深入理解Spring Cloud中的服务发现与注册
|
5月前
|
Java Nacos 微服务
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册
Spring Cloud微服务在Windows本地开发时禁用Nacos注册中心注册