SpringCloud笔记 - Day1 概念注册中心负载均衡

news2024/11/19 17:46:12

https://www.bilibili.com/video/BV1LQ4y127n4

1. 微服务导学

在这里插入图片描述

异步通信可以大大提高服务的并发。
服务的异常定位:

  • 分布式日志服务
  • 系统监控和链路追踪

自动化部署:Jenkins——docker——k8s——RANCHER 持续集成

2. 微服务导学2

微服务治理、异步通信技术、缓存技术、DevOps、搜索技术
在这里插入图片描述

3. 微服务架构演变

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

微服务:

  • 单一职责:微服务拆分粒度更小,每个服务对应唯一业务能力
  • 面向服务:微服务对外暴露业务接口
  • 自治:团队独立、技术独立、数据对立(可以有自己的数据库,数据的解耦)、部署独立
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

总结:
单体架构:简单方便、高度耦合、扩展性差、适合小项目
分布式架构:松耦合,扩展性好,但是架构复杂,难度大。适合大型互联网项目
微服务:一种良好的分布式架构方案

  • 优点:拆分力度更小、服务更独立、耦合度更低
  • 缺点:架构非常复杂,运维监控、部署难度高

4. 微服务技术对比

SpringCloud、Dubbo
在这里插入图片描述

Dubbo的核心是 服务远程调用,专门定义了 Dubbo协议(出的比较早,不是一套完整的微服务结构,非常不完善)
SpringCloud是整合,集大成者,直接采用了基于http的协议。提供了专门的配置中心和网关(SpringCloudGateway 比较受欢迎,原因是支持了响应式编程),Hystrix 功能也十分强大。
SpringCloudAlibaba,实现了SpringCloud得到标准接口。(甚至兼容Nacos、Eureka、Dubbo、Feign),Nacos同时支持 Dubbo和Feign两种架构
在这里插入图片描述

企业的排列组合:

  • SpringCloud + Feign(Feign)
  • SpringCloudAlibaba + Feign(Feign)
  • SpringCloudAlibaba + Dubbo(Dubbo)
  • Dubbo原始模式(老了)

5. SpringCloud

在这里插入图片描述

大多数都是从其他公司整合的

SpringCloud和 Springboot的兼容关系
在这里插入图片描述

6. 服务拆分

  1. 不同微服务不要开发重复的相同业务,微服务需要根据业务模块拆分,做到单一职责
  2. 微服务数据独立,不要访问其他微服务的数据库,不同微服务都应该有自己独立的数据库
  3. 微服务可以将自己的业务暴露为接口,供其他微服务调用

7. 远程调用

在这里插入图片描述

在这里插入图片描述

在Java里发送HTTP请求:

首先在 Springboot启动类配置bean

/**
 * 创建RestTemplate对象,交给Spring容器管理
 * @return
 */
@Bean
public RestTemplate restTemplate() {
    return new RestTemplate();
}

自动装配

    @Autowired
    private RestTemplate restTemplate;

完善service

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);

        // 2. 利用 RestTemplate 调用 user-service 的接口,查询用户信息
        String url = "http://localhost:8081/user/" + order.getUserId();
        User forObject = restTemplate.getForObject(url, User.class);
        order.setUser(forObject);

        // 4.返回
        return order;
    }

8. Euraka - Euraka原理分析

在这里插入图片描述
提供者:暴露接口给其它微服务调用服务
消费者:调用其它微服务提供的接口

提供者与消费者角色其实是相对的

在这里插入图片描述

消费者该如何获取服务提供者具体信息?

  • 服务提供者启动时向eureka注册自己的信息
  • eureka保存这些信息
  • 消费者根据服务名称向eureka拉取提供者信息

如果有多个服务提供者,消费者该如何选择?

  • 服务消费者利用负载均衡算法,从服务列表中挑选一个

消费者如何感知服务提供者健康状态?

  • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态
  • eureka会更新记录服务列表信息,心跳不正常会被剔除
  • 消费者就可以拉取到最新的信息

在这里插入图片描述

9. Euraka - EurakaServer 搭建

新建模块,取名 euraka-server

添加pom.xml

<!--eureka-server-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

新建启动类

package cn.itcast.eureka;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

新建配置文件 application.yml

server:
  port: 10086 # 服务端口
spring:
    application:
        name: eureka-server # eureka的服务名称
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka/ # 服务地址

10. Euraka - 服务注册

<!--eureka-client-->
 <dependency>
     <groupId>org.springframework.cloud</groupId>
     <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
 </dependency>
spring:
    application:
      name: order-service # eureka的服务名称
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10086/eureka/ # 服务地址

多开实例:
增加vm options:

-Dserver.port=8032

在这里插入图片描述

11. Euraka - 服务发现拉取

  1. URL里,用服务名代替IP端口
  2. 给RestTemplate的Bean加注解@LoadBalanced
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);

        // 2. 利用 RestTemplate 调用 user-service 的接口,查询用户信息
        String url = "http://user-service/user/" + order.getUserId();
        User forObject = restTemplate.getForObject(url, User.class);
        order.setUser(forObject);

        // 4.返回
        return order;
    }

12. Ribbon 负载均衡原理

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
更改规则

在这里插入图片描述

@Bean
public IRule randomRule() {
    return new RandomRule();
}
user-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

13. Ribbon 饥饿加载

在这里插入图片描述

ribbon:
  eager-load:
    enabled: true # 开启饥饿加载
    clients:  # 指定要开启饥饿加载的服务名称
      - user-service

在这里插入图片描述

14. Nacos 安装

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:

GitHub主页:https://github.com/alibaba/nacos

GitHub的Release下载页:https://github.com/alibaba/nacos/releases

startup.cmd -m standalone

在cloud-demo父工程添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2.2.5.RELEASE</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

注释掉之前的 eureka 依赖

客户端依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:
  cloud:
    nacos:
      server-addr: locahost:8848

默认用户名/密码为: nacos/nacos

15. Nacos - 服务多级存储模型

在这里插入图片描述

服务集群属性

  1. 修改 application.yml
spring:
  cloud:
    nacos:
      server-addr: localhost:8848
      discovery:
        cluster-name: HZ

在这里插入图片描述

在这里插入图片描述

15. Nacos - NacosRule负载均衡

把 User1, User2,Order分配到HZ,User3 SH。
然后Order在远程调用User的时候,优先选择本地集群(即User1, User2)

修改 Order的配置:

user-service:
  ribbon:
#    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

16. Nacos - 服务实例的权重配置

在这里插入图片描述
在这里插入图片描述
如果权重为0,该服务就不会被访问。
在这里插入图片描述

17. Nacos 环境隔离namespace

在这里插入图片描述
环境隔离就是对服务进行隔离。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置,在具体服务里application.yml 添加配置:

spring:
  cloud:
    nacos:
      discovery:
        namespace: c3b1bbc3-0ebd-4298-92c2-1e54858acf02

此时,两个namespace的服务就已经阴阳两隔了。

总结:

  • namespace 用来做环境隔离
  • 每个namespace 都有唯一ID
  • 不同namespace下的服务不可见

18. Nacos 与 Eureka

在这里插入图片描述
临时实例

spring:
  cloud:
    nacos:
      discovery:
        ephemeral: false # 是否为临时实例

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/147786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EHub_tx1_tx2_E100】Ubuntu18.04 + ROS_ Melodic + RS-LiDAR-16 激光雷达测试

简介&#xff1a;介绍 RS-LiDAR-16 16线激光雷达 在EHub_tx1_tx2_E100载板&#xff0c;TX1核心模块环境&#xff08;Ubuntu18.04&#xff09;下测试ROS驱动&#xff0c;如何打开使用RVIZ 查看点云数据&#xff0c;本文的前提条件是你的TX1里已经安装了ROS版本&#xff1a;Melo…

类和对象2

static关键字 1.静态变量或方法不属于对象&#xff0c;但依赖类。 2.静态变量是全局变量&#xff0c;生命周期从类被加载后一直到程序结束 3.静态变量内存只存一份&#xff0c;在静态方法区存储&#xff08;静态方法区&#xff1a;静态变量&#xff0c;类信息&#xff08;方法…

Odoo 16 企业版手册 - 库存管理之仓库管理

仓库管理 仓库管理是公司库存运营中的重要活动之一。为了使库存运营和调拨的顺利运作&#xff0c;公司的仓库应该得到适当的管理和监控。Odoo&#xff0c;作为一名优秀的库存管理助理&#xff0c;可以为您提供有效管理公司仓库的专用平台。Odoo提供的工具可以帮助您同时管理多个…

解决Tinkphp的success跳转“使用路由别名后模块和控制器访问不了”问题

遇到的问题&#xff1a;我的thinkphp5网站添加了以下路由别名&#xff1a;Route::alias([ index>index/index, ]);使用http://域名/Index/user/password.html访问正常但使用http://域名/index/user/password.html就访问失败使用$this->success(修改密码成功);进行提示跳转…

【MySQL】MySQL面试题八股文详解——事务篇

【MySQL】MySQL面试题八股文详解——事务篇 1&#xff1a;什么是数据库事务&#xff1f; 一言蔽之&#xff0c;事务是逻辑上的一组操作&#xff0c;要么都执行&#xff0c;要么都不执行。 是数据库操作的最小工作单元&#xff0c;是作为单个逻辑工作单元执行的一系列操作&…

C语言经典编程题 --- 打印菱形

目录 一、题目描述 二、普通解法 三、曼哈顿距离解法 一、题目描述 输入一个奇数 n&#xff0c;输出一个由 * 构成的 n 阶实心菱形 输入格式&#xff1a;一个奇数 n。 输出格式&#xff1a;输出一个由 * 构成的 n 阶实心菱形。 输入样例&#xff1a;5输出样例&#xff1…

【操作系统】生产环境消失的进程如何排查

文章目录1.生产环境问题描述2.Linux软件环境准备3.编译运行程序&#xff0c;分析现象4.进程消失原因分析5.生产类似进程消失的案例6.如何通过日志查看消失进程1.生产环境问题描述 一台机器上的某个进程直接就消失了&#xff0c;别的机器上的服务都正常跑着&#xff0c;怎么排查…

AI城管占道经营识别检测算法 yolo

AI城管占道经营识别检测算法通过yolopython深度学习训练框架模型对道路街区小摊贩占道经营违规摆摊行为进行检测&#xff0c;检测有出店经营占道经营违规摆摊情况&#xff0c;yolopython深度学习训练框架模型会立即抓拍存档。我们使用YOLO(你只看一次)算法进行对象检测。YOLO是…

重学ElasticSearch (ES) :ELK搭建SpringBoot日志实时分析系统

一、概述 在一个大型的分布式架构的项目里&#xff0c;不同的服务模块部署在不同的服务器上&#xff0c;如果想要定位问题&#xff0c;可能需要去不同的服务器上查看不同服务的日志。 那么&#xff0c;ELK可以很方便的把日志集成到一起&#xff0c;无须再去各个服务器上的日志中…

Python自带的常数scipy.constants

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】Python自带的常数scipy.constants[太阳]选择题以下python代码结果错误的一项是?from scipy import constants print(【圆周率constants.pi】,constants.pi)print(【时间单位constants.minute】…

[实例讲解]计算机处理任务的方法和原理--线程

[实例讲解]计算机处理任务的方法和原理 文章目录[实例讲解]计算机处理任务的方法和原理情景一 所有的事情自己做情景二 找人去帮忙处理打印情景三 分别找人处理编码和打印情景四 不特定指定人去帮忙结束语在学习和工作中&#xff0c;我们自己都需要做很多的事情&#xff0c;事情…

【机器学习】匈牙利和KM匹配个人理解

基础知识 二分图 【定义】图论中的一种特殊模型。若能将无向图G(V,E)的顶点V划分为两个交集为空的顶点集&#xff0c;并且任意边的两个端点都分属于两个集合&#xff0c;则称图G为一个为二分图。 【解释】一张图要是二分图&#xff0c;需要满足以下几个要求&#xff1a; &a…

PS 矩形选区工具(2)模式快捷键 选区比例调整 颜色填充

本文为PS 矩形选区工具(1)基本用法 生成图层 选区方式演示讲解的续文 拉出选区后 用鼠标拖动选区 是可以拖动选区位置的 拉出一块选区是 按住键盘 Shift键 就可以用鼠标再拖出一块选区 加选区快捷键 按住 Shift 减选区 按住键盘 Alt 键 用鼠标拖出不要的选区位置即可 减选…

新认定金山区企业技术中心给予一次性奖励15万元

金山区企业技术中心一、主管部门金山区经济委员会二、政策依据《金山区关于深化建设打响“上海制造”品牌的重要承载区促进实体经济高质量发展的若干政策》&#xff08;金府发〔2019〕8号&#xff09;《印发<关于深化建设打响“上海制造”品牌的重要承载区促进实体经济高质量…

衣服、商品、商城网站模板首页,仿U袋网,vue+elementui简洁实现(三)

一.以往版本回顾 作者成品效果访问&#xff1a;点击访问 官方详情页访问&#xff1a;点击访问 版本1《衣服、商品、商城网站模板首页&#xff0c;仿U袋网&#xff0c;vueelementui简洁实现》版本2《衣服、商品、商城网站模板首页&#xff0c;仿U袋网&#xff0c;vueelementui…

【微服务】springboot 实现elasticsearch索引数据迁移

一、前言 在生产系统中&#xff0c;经常可能面临的一个状况就是&#xff0c;随着实际业务发生变更&#xff0c;现有的数据模型可能需要调整&#xff0c;而且到了必须调整不可的时候&#xff0c;那就只能硬着头皮做了&#xff1b; 数据模型的调整&#xff0c;说的大一点&#xf…

flask 和 echarts 使用柱状图折线图等可视化图表展示二手房统计数据

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 pandas 数据处理 flask web 框架 echarts 图表 jinja 模版 三、菜鸟实战 初始化 Flask 框架&#xff0c;设置路由 各行政区房屋均价柱状图分析 echarts 渲染柱状图 各面积区间房屋占比饼状图 echa…

逻辑漏洞渗透与攻防(六)之其他类型逻辑漏洞

目录 其他类型逻辑漏洞 数据包重放漏洞 条件竞争漏洞 订单金额任意修改 接口无限制枚举 支付漏洞 修改商品数量 修改支付状态 修改附属值 越权支付 无限制试用 支付漏洞总结 SRC中的逻辑漏洞总结 其他类型逻辑漏洞 数据包重放漏洞 漏洞介绍&#xff1a;通…

SpringBoot下RabbitMQ的实战应用:动态创建和动态监控队列、死信、备份交换机

一、应用场景 业务中心根据业务需求向特定用户发送消息&#xff1b;发送前不确定由哪个用户接收 特定用户接收特定消息&#xff1b;用户可以退出&#xff0c;再切换别的用户登录&#xff0c;用户登录后只接收与自已对应的消息 二、总体要求 项目要足够稳健&#xff0c;消息不能…

(3分钟了解)SLAM后端优化的四大金刚!g2o ceres gtsam SE-Sync

后端优化常用的库有g2o ceres gtsam 和 se-sync这篇博客首先介绍se-sync&#xff0c;然后比较四种库之间的差异。编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09;编辑切换为居中添加图片注释&#xff0c;不超过 140 字&#xff08;可选&…