SpringCould(一)

news2024/11/18 21:49:18

视频链接:https://www.bilibili.com/video/BV1f94y1U7AB/?vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P1— P15

文章目录

  • 1.微服务简介
    • 1.1 单体架构不足
    • 1.2 微服务
    • 1.3 微服务的特点
    • 1.4 微服务的自动部署(CI/CD)(持续集成,持续交付)
    • 1.5 微服务的不足
  • 2.springCloud简介
    • 2.1 介绍
    • 2.2 版本对应
    • 2.3 常用组件表
    • 2.4 总结
  • 3.微服务架构风格图
  • 4. eureka
    • 4.1 简介
    • 4.2 eureka快速入门
    • 4.3 eureka-server端配置文件讲解
      • 4.3.1 主动下线和被动下线
      • 4.3.2 配置
    • 4.4 eureka-server客户端配置文件讲解
  • 5.构建高可用的Eureka-Server集群
  • 6. 集群的深入理解
  • 7. eureka概念的理解
    • 7.1 服务注册
    • 7.2 服务注册源码分析
      • 7.2.1 eureka运作原理的特点
      • 7.2.2 服务注册的源码分析【重点】
    • 7.3 服务的续约
    • 7.4 服务的下线(主动下线)
    • 7.5 服务的剔除(被动下线,主动剔除)
  • 8.服务发现
  • 9.构建docker镜像部署
  • 10.restTemplate使用

1.微服务简介

微服务(不是一个框架而是一种架构思想),是著名的 oo(面向对象,ObjectOriented )专家Martin Fowler提出来的,它是用来描述将软件应用程序设计为独立部署的服务的种特殊方式。最近两年,微服务在各大技术会议、文章、书籍上出现的频率已经让人意识到它对于软件领域所带来的影响力。微服务架构的系统是个分布式系统,按业务领域划分为独立的服务单元,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。

1.1 单体架构不足

在应用的初始阶段,单体架构无论是在开发速度、运维难度上,还是服务器的成本上都有着显著的优势。在一个产品的前景不明确的初始阶段,用单体架构是非常明智的选择。随着应用业务的发展和业务复杂度的提高,这种架构明显存在很多的不足,主要体现在以下3个方面:

  1. 业务越来越复杂,单体应用的代码量越来越大,代码的可读性、可维护性和可扩展性下降,新人接手代码所需的时间成倍增加,业务扩展带来的代价越来越大。
  2. 随着用户越来越多,程序承受的并发越来越高,单体应用的并发能力有限。
  3. 测试的难度越来越大,单体应用的业务都在同个程序中,随着业务的扩张、复杂度的增加,单体应用修改业务或者增加业务或许会给其他业务带来定的影响,导致测试难度增加。

1.2 微服务

问题:什么是微服务呢?
答:就是将一个大的应用,拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以进行交互,这就是微服务。

对于微服务,业界没有严格统一的定义,但是作为“微服务”这名词的发明人,Martin Fowler对微服务的定义似乎更具有权威性和指导意义,他的理解如下:

简而言之,微服务架构的风格,就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级通信机制,通常是HTTP RESTFUL API。这些服务围绕业务能力来划分构建的,并通过完全自动化部署机制来独立部署这些服务可以使用不同的编程语言,以及不同数据存储技术,以保证最低限度的集中式管理。

在这里插入图片描述

1.3 微服务的特点

  1. 按业务(功能)划分为一个独立运行的程序,即服务单元。
  2. 服务之间通过HTTP协议相互通信。http是一个万能的协议(web应用都支持的模式)
  3. 自动化部署。
  4. 可以用不同的编程语言。
  5. 可以用不同的存储技术。
  6. 服务集中化管理。
  7. 微服务是一个分布式系统。

1.4 微服务的自动部署(CI/CD)(持续集成,持续交付)

在这里插入图片描述
在微服务架构中,系统会被拆分为若干个微服务,每个微服务又是一个独立的应用程序。单体架构的应用程序只需要部署一次,而微服务架构有多少个服务就需要部署多少次。随着服务数量的增加,如果微服务按照单体架构的部署方式,部署的难度会呈指数增加。业务的粒度划分得越细,微服务的数量就越多,这时需要更稳定的部署机制。随着技术的发展,尤其是 Docker容器技术的推进,以及自动化部署工具(例如开源组件Jenkins)的出现,自动化部署变得越来越简单。

1.5 微服务的不足

凡事都有两面性,微服务也不例外,微服务相对于单体应用来说具有很多的优势,当然也有它的不足,主要体现在如下方面:

  1. 微服务的复杂度
  2. 分布式事务问题
  3. 服务的划分(按照功能划分还是按照组件来划分呢)分工
  4. 服务的部署(不用自动化部署自动化部署)

2.springCloud简介

2.1 介绍

Spring cloud作为Java语言的微服务框架,它依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。Spring cloud的组件非常多,涉及微服务的方方面面,并在开源社区Spring和Netflix、Pivotal两大公司的推动下越来越完善,如今alibaba,也加入到其中。spring 官方netflix alibaba
Spring cloud在开发部署上继承了Spring Boot的一些优点,提高其在开发和部署上的效率。Spring cloud的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。Spring cloud是通过包装其他技术框架来实现的,例如包装开源的 Netflix oss.组件,实现了一套通过基于注解、Java配置和基于模版开发的微服务框架。Spring cloud提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、远程调用,智能路由、微代理、控制总线、全局锁、分布式会话等。

在这里插入图片描述

2.2 版本对应

这个网上去查,下面的版本不一定可用!
在这里插入图片描述

2.3 常用组件表

服务的注册和发现。(eureka, nacos,consul)
服务的负载均衡。(ribbon)
服务的相互调用。(openFeign)
服务的容错。(hystrix,sentinel)
服务网关。(gateway,zuul)
服务配置的统一管理。(config-server,nacos,apollo)
服务消息总线。(bus)
服务安全组件。(security,Oauth2.0)
服务监控。(admin)(jvm)
链路追踪。(sleuth+zipkin)

2.4 总结

SpringCloud就是微服务理念的一种具体落地实现方式,帮助微服务架构提供了必备的功能目前开发中常用的落地实现有三种:
Dubbo+Zookeeper半自动化的微服务实现架构(别的管理没有)
SpringCloud Netflix一站式微服务架构
SpringCloud Alibaba 新的一站式微服务架构

三大公司
Spring Netflix Alibaba

在这里插入图片描述

3.微服务架构风格图

在这里插入图片描述

  1. 要访问项目,首先从手机和电脑通过互联网,通过HTTP请求,到nginx
  2. nginx进行请求转发到网关(管理网络请求的)中
  3. 网关再进行二次转发,如果是登录转发到AuthServe(数学中心),如果不是登录,是请求服务,那直接转到服务中
  4. 服务与服务之间有箭头,可以互相交互(互相请求和数据传输)
  5. docker容器帮忙部署,JWT帮忙做服务之间的token的传递
  6. 服务产生的数据传入到数据库中

在这里插入图片描述
注册中心:完成一个服务的注册
配置中心:统一进行配置管理

4. eureka

4.1 简介

注册发现中心
Eureka来源于古希腊词汇,意为"发现了”。在软件领域,Eureka是Netflix在线影片公司开源的一个服务注册与发现的组件,和其他Netflix公司的服务组件(例如负载均衡、熔断器、网关等) 一起,被Spring Cloud社区整合为Spring Cloud Netflix 模块。Eureka是Netflix贡献给Spring Cloud的一-个框架! Netflix 给Spring Cloud 贡献了很多框架,后面我们会学习到!


面试题:Spring Cloud Eureka 和Zookeeper的区别

在分布式微服务里面CAP 定理
问:为什么zookeeper不适合做注册中心?

CAP原则又称CAP定理,指的是在一个分布式系统中,
一致性 (Consistency),可用性(Availability),分区容错性(Partition tolerance)
(这个特性是不可避免的)CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

在这里插入图片描述
Spring Cloud还有别的注册中心Consul ,阿里巴巴提供Nacos都能作为注册中心


4.2 eureka快速入门

①搭建一个注册中心,并且让他可以提供注册中心
在这里插入图片描述
在IDEA中创建项目:

在这里插入图片描述
pom.xml:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
写配置文件:

在这里插入图片描述
application:
在这里插入图片描述
直接运行启动:
在这里插入图片描述
在这里插入图片描述
出现上面的界面说明eureka成功了
上面界面中:

在这里插入图片描述
注:第三个红框是服务列表
在这里插入图片描述
在这里插入图片描述
②搭建客户端
重新注册项目模块
在这里插入图片描述
在这里插入图片描述
修改版本号:和上面的一样
修改application:
在这里插入图片描述

在这里插入图片描述
启动:

在这里插入图片描述
在这里插入图片描述
按照上面方法再注册一个客户端:

在这里插入图片描述
如果现在想把上面的A弄两台,弄一个集群:【只有端口变,其它都不变】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.3 eureka-server端配置文件讲解

4.3.1 主动下线和被动下线

在这里插入图片描述
提问:应用A和应用B之间多次访问,怎么办?
回答:缓存服务列表到本地

提问:如果在一个时间段内大量的应用都不和注册中心联系了该怎么办
回答:eureka-server不会剔除任何一个服务,宁可放过一万都不能错杀一个 【AP】

4.3.2 配置

在这里插入图片描述
直接运行:在这里插入图片描述
左下角:

在这里插入图片描述

4.4 eureka-server客户端配置文件讲解

在这里插入图片描述
测试:

在这里插入图片描述

5.构建高可用的Eureka-Server集群

在这里插入图片描述

定义三台server:

eureka-server:
在这里插入图片描述
eureka-server-b:

在这里插入图片描述

eureka-server-c:

在这里插入图片描述
将上面三个全部进行启动:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

上面构建的三台服务器还不是集群:

发现并没有出现集群信息,只是同一个服务server启动了多台没有数据交互不是真正意义上的集群。

修改过程:

修改host
在这里插入图片描述

在这里插入图片描述

再修改配置文件:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
再次重新启动后:

在这里插入图片描述
客户端进行注册:

在这里插入图片描述
运行后:在三台service中都有
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

集群的终极方案:

在这里插入图片描述
测试效果:

在这里插入图片描述
此时客户端的注册:

在这里插入图片描述

6. 集群的深入理解

主从模式中主机该如何选择,数据是如何进行同步的:
在这里插入图片描述

了解一下一个分布式数据一致性协议:Paxos,raft

  1. zk是Paxos
  2. eureka没有分布式数据一致性的机制节点都是相同的
  3. nacos是raft
  4. 在有主从模式的集群中一般都要遵循这样的协议才可以稳定对外提供服务【zookeeper Paxos,Nacos raft】

7. eureka概念的理解

7.1 服务注册

当项目启动时(eureka的客户端),就会向eureka-server发送自己的元数据(原始数据)(运行的ip,端口port,健康的状态监控等,因为使用的是http/ResuFul,请求风格),eureka-server会在自己内部保留这些元数据(内存中)。(有一个服务列表)(restful风格,以http.动词的请求方式,完成对url资源的操作)

7.2 服务注册源码分析

了解他的原理出了问题排查bug,优化你的代码

7.2.1 eureka运作原理的特点

  1. Eureka-server对外提供的是restful风格的服务
    以http动词的形式对url资源进行操作get post putdelete
  2. http服务+特定的请求方式+特定的url地址
    只要利用这些restful我们就能对项目实现注册和发现
    只不过,eureka已经帮我们使用java语言写了client,让我们的项目只要依赖client 就能实现注册和发现!
    只要你会发起Http请求,那你就有可能自己实现服务的注册和发现。不管你是什么语言!

7.2.2 服务注册的源码分析【重点】

在这里插入图片描述

服务器使用单机模式:

在这里插入图片描述
启动客户端:

在这里插入图片描述

在这里插入图片描述
具体的代码看视频!!!!

7.3 服务的续约

项目启动成功了,除了向eureka-server注册自己成功,还会定时的向eureka-server汇报自己,心跳,表示自己还活着。(修改一个时间)

7.4 服务的下线(主动下线)

当项目关闭时,会给eureka-server报告,说明自己要下机了。

7.5 服务的剔除(被动下线,主动剔除)

当项目超过了指定时间没有向eureka-server汇报自己,那么eureka-server就会认为此节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。

8.服务发现

在这里插入图片描述
在这里插入图片描述

运行测试:

在这里插入图片描述

9.构建docker镜像部署

将项目打包:

在这里插入图片描述
定义docker:
在这里插入图片描述
在这里插入图片描述

10.restTemplate使用

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

一文了解数据结构

目录 数据结构 什么是数据结构 链表 数组 栈 队列 哈希表 堆 数据结构 什么是数据结构 「数据结构」决定了数据的顺序和位置关系.数据存储于内存时,决定了数据顺序和位置关系的便是「数据结构」 链表 「链表」中的数据呈线性排列。链表中添加删除数据比较…

多旋翼无人机仿真 rotors_simulator:基于PID控制器的位置控制---水平位置控制

多旋翼无人机仿真 rotors_simulator:基于PID控制器的位置控制---水平位置控制前言水平位置控制串级P控制收敛结果收敛过程串级PID控制收敛结果收敛过程结果总结前言 无人机(Unmanned Aerial Vehicle),指的是一种由动力驱动的、无…

机器学习从零到入门 GBDT 梯度提升决策树

GBDT 梯度提升决策树详解一、 梯度的概念1、日常生活中的梯度2、函数中的梯度2.1、走进数学2.2、从数学到机器学习(1)、损失函数的理解 loss function(2)、梯度的理解 gradient(3)、损失函数的梯度下降二、GBDT1、回归树 - Regression Decision Tree,DT2、梯度提升 …

利用Python实现mysql数据库的基础操作

一:环境准备: 1.安装第三方库:pymsql 在pycharm的terminal中执行命令:pip3 install pymsql 2.导入第三方库到py文件中 import pymsql 二:创建mysql数据库的链接对象: 1.封装一个Python类,在该…

Python爬虫入狱小技巧

呀,来坐牢的是吧,坐牢是不可能坐牢的,骚年,下面就是方法,早上学,晚上进去 一、整体思路 爬虫一开始要把思路理清楚,即从网页源代码或者网页数据接口,获取需要的数据.大致思路如下 …

【Java进阶】JUC并发基础

文章目录1.概念1.1 什么是JUC1.2 线程与进程1.3 线程的几种状态1.4 守护线程1.5 死锁与活锁1.6 乐观锁与悲观锁1.7 自旋锁2.Lock2.1 使用Lock2.2 Lock与Synchronized2.3 虚假唤醒3.八锁问题3.1 创建一个Phone实例多线程调用两个方法3.2 创建一个Phone实例多线程调用两个方法&am…

基于热传导矩阵(HCM)边缘检测方法在红外图像中的应用(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑…

3道真题训练|学会链表的前世今生

🙋很多朋友都问我学完基础知识以后怎样提高编程水平?当然是刷题啦!很多小伙伴都在纠结从哪里开始,今天给大家推荐一个身边朋友都在使用的刷题网站:点击进入牛客网刷题吧! 🙋‍♂️今天是Java …

中文文本分类,基本模型的pytoch实现

学习说明:最近发现了一个宝藏仓库,将常见的文本分类方法做了一个介绍、及封装。现在将学习这仓库的一些笔记记录如下 参照资料 649453932/Chinese-Text-Classification-Pytorch: 中文文本分类,TextCNN,TextRNN,FastT…

宣布 .NET MAUI 支持 .NET 7 Release Candidate 2

支持 .NET 7 Release Candidate 2的 .NET 多平台应用程序 UI (MAUI) 现在可在 Windows 和 Mac 上的 Visual Studio 17.4 Preview 4 中使用。RC2 的主要主题是质量和对带有 iOS 16 的 Xcode 14 的 .NET 支持。此版本包含在生产中使用的上线支持许可证。 在相关新闻中&#xff0…

Linux 内存node和zone

文章目录前言一、内存模型二、(N)UMA2.1 简介2.2 节点2.3 UMA节点与Flat Memory Model2.4 zone2.4.1 zone2.4.2 zone_type参考资料前言 一、内存模型 所谓memory model,其实就是从cpu的角度看,其物理内存的分布情况,…

图解操作系统-cpu cache

不同物理器件的访问速度不一:速度快的代价高、容量小;代价低且容量大,速度较慢。 为充分发挥各种器件优点,计算机存储数据的物理器件不会只选择一种,而是以CPU为核心,由内而外地组建一整套存储体系结构。它…

亿可控_第2章_指标数据采集与断连监控

亿可控_第2章_指标数据采集与断连监控 文章目录亿可控_第2章_指标数据采集与断连监控第2章 指标数据采集与断连监控学习目标1. EMQ指标主题订阅1.1 Eclipse paho简介1.2 发送与订阅消息1.2.1 发送消息1.2.2 订阅消息1.3 订阅指标主题1.3.1 需求分析1.3.2 实现思路1.3.3 代码实现…

23模式---单例模式

单例模式,属于创建类型的一种常用的软件设计模式。通过单例模式的方法创建的类在当前进程中只有一个实例(根据需要,也有可能一个线程中属于单例,如:仅线程上下文内使用同一个实例) 这个也是23设计模型中最…

Python 图像处理OpenCV:几何变换(笔记)

包括图像缩放、图像平移、图像旋转、图像的仿射变换、图像的透射变换及图像金字塔等内容。 图像缩放: 缩放是对图像的大小进行调整,即使图像放大或缩小。cv2.resize(src,dsize,fx0,fy0,interpolationcv2.INTER_LINEAR)src : 输入图像dsize: 绝对尺寸&a…

Linux运维面试题总结—Linux基础、计算机网络基础

文章目录一、三次握手四次挥手二、如何划分vlan三、为什么划分vlanvlan三个模式:vxlan和vlan区别是什么?四、OSI七层模型及对应协议五、Linux中 查找大于10M的文件并删除六、查看cup占用情况,查看内存,查看磁盘IO使用情况&#xf…

图像处理黑科技——弯曲矫正、去摩尔纹、切边增强、PS检测

目录0 前言1 弯曲矫正2 去摩尔纹3 图像切边增强4 PS检测5 总结0 前言 合合信息是行业领先的人工智能及大数据科技企业,专注文字识别领域16年,在智能文字识别及商业大数据等核心领域处于国内领先地位,全球企业和个人用户提供创新的数字化、智…

代码随想录动态规划——一和零

题目 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集的大小,该子集中 最多 有 m 个 0 和 n 个 1 。 如果 x 的所有元素也是 y 的元素,集合 x 是集合 y 的 子集 。 示例 1: 输入:strs [“10…

Oracle Unifier 系统架构简述(安装部署)

关于Oracle Primavera Unifier 的应用架构,其实在我之前的博客已有介绍相关内容 谈谈 Oracle P6 , Unifier 和其他应用系统间的联系https://campin.blog.csdn.net/article/details/104972949 从官方文档方面,其实在《unifier_performance_and_sizing_g…

【C语言】全面解析数据在内存中的存储

文章目录前言类型的基本分类整型浮点数自定义类型整型在内存中的存储原码、反码、补码大端和小端如何判断编译器是大端还是小端浮点数在内存中的存储总结前言 C语言中有char、short、int、long、long long、float和doubole这些数据类型。这些数据类型也叫内置类型。 所占存储空…