SpringCloud复习
概念
Spring Cloud 是一站式解决分布式微服务的方案
Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。**
Spring并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
springcloud也是spring下的(springcloud 说白了就是springboot给你提供了一堆的场景启动器)
这些场景启动器就是去帮助你快速解决分布式项目中架构搭建的
springboot是一站式整合所有框架的框架,可以快速的去创建一个独立的产品级别的应用
1. 应用springcloud
Spring Cloud Netflix项目是Spring Cloud的子项目之一,主要内容是对Netflix公司一系列开源产品的包装,它为Spring Boot应用提供了自配置的Netflix OSS整合。通过一些简单的注解,开发者就可以快速的在应用中配置一下常用模块并构建庞大的分布式系统。它主要提供的模块包括:服务发现(Eureka),断路器(Hystrix),智能路由(Zuul),客户端负载均衡(Ribbon)等。
2. SpringCloud-HelloWorld架构图
2.1 案例图解
2.2注册中心
配置Region和Zone
Region和Zone就相当于大区和机房,一个Region(大区)可以有很多的Zone(机房)。在Spring Cloud中,服务消费者会优先查找在同一个Zone的服务,之后在去查找其他的服务。如果该项配置使用的好,那么项目请求的响应时间将大大缩短!
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
3.SpringCloud-HelloWorld案例开发-注册
->
3.1注册中心
(Eureka , jar工程)-cloud-eureka-registry-center
3.1.1 引入eureka-server(单机版的eureka)
3.1.2 编写application.yml
spring
接着程序入口加上注解:
前台显示界面
重要的地方是:
开始搭建集群
接着
应用完之后会弹出一个services,不要叉掉,不然你会后悔的
点击show......会显示你的services
1. 查看hosts文件
文件位置 C:\Windows\System32\drivers\etc
2 修改完hosts之后,接着改配置:
3. 接着启动三个服务器:
相关重要概念
第一章 分布式概念
分布式系统就是微服务系统,因为分布式环境下每一个系统都可以独立运行独立部署--微服务概念
所有的东西都在一起,一个项目就是一个war包,或者这一个项目就是一个jar包(springboot也可以一键构建单体应用)--单体应用 只不过用springboot写的项目可以独立运行独立部署
1.1 什么是分布式
-
《分布式系统原理与范型》定义:“分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统”。
-
分布式系统(distributed system)是建立在网络之上的软件系统。
1.2 分布式与集群的关系
-
集群指的是将几台服务器集中在一起,实现同一业务。
-
分布式中的每一个节点,都可以做集群。 而集群并不一定就是分布式的。
读写分离去看mycat
1.3 软件架构演变
重要,看不懂就拉闸了
ORM: All In One 关注sql
MVC:垂直应用架构弊端:代码没有交互,造成代码沉余 (10*10 *10)注意的是 目的是增加用户体验
RPC:远程调用的方式 弊端:没法管理调用复杂的关系,累死你
SOA:面向服务的架构 Elastic Computing流动计算(需求量比较大可以扩展,小的话可以缩!)
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。
5S
同步: 5S后才能显示页面
异步: 1S交互 4S显示内容
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的**分布式服务框架(RPC)是关
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心zookeeper/Cloud euraka基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
1.4 RPC是什么
RPC【Remote Procedure Call】是指远程过程调用,是一种进程(服务器之间)间通信方式,他是一种技术的思想,而不是规范。
它允许程序调用另一个地址空间(通常是共享网络的另一台机器上)的过程或函数,而不用程序员显式编码这个远程调用的细节。
(也就是说在A的项目里可以去访问B项目里面的方法,这就是RPC)(两个项目部署在不同的服务器下,A服务器可以远程调用B服务器,这就是RPC)
即程序员无论是调用本地的还是远程的函数,本质上编写的调用代码基本相同。
-
他来解决分布式系统的各个服务之间互相交互问题
-
RPC思想原理
流程图
时序图
过程不需要你写,封装好的->
服务之间的交互可以用两种方式
-
RPC 必须是java/同一语言 dubbo (RPC通过kao jie zi直接通讯,但是技术必须用java)
-
Netty(Socket)+自定义序列化
-
-
RestAPI OpenFeign (严格来说,SpringCloud是使用Rest方式进行服务之间交互的,不属于RPC)-》(RestAPI OpenFeign是springcloud提供的,不收技术栈的限制)
-
HTTP+JSON 所有的服务不论什么语言都可以相互调用
-
webService 跨平台 (遵循soap协议,但是现在没人用了xml,效率低又麻烦)
SOAP (HTTP+XML) wsdl
httpClient (alibaba) 在应用内部发送http请求->(我们要请求第三方API的时候要使用httpClient ,在程序内部借助httpClient 来发请求)
第二章 分布式思想与基本概念
2.1 高并发
2.1.1 通过设计保证系统可以并行处理很多请求。应对大量流量与请求
2.1.2 高并发衡量指标
-
响应时间(RT)
系统对请求做出响应的时间,即一个http请求返回所用的时间
-
吞吐量
系统在单位时间内处理请求的数量
-
QPS(Query/Request Per Second)、 TPS(Transaction Per Second)
每秒查询(请求)数、每秒事务数
专业的测试工具
Apache ab
Apache JMeter
-
并发用户数
指系统可以同时承载的正常使用系统功能的用户的数量
2.2 高可用
2.2.1 服务集群部署
2.3注册中心(SpringCloud eureka zookeeper alibaba nacos)
1.注册中心服务器 2.服务的消费方3.服务的提供方
-
保存某个服务所在地址等信息,方便调用者实时获取其他服务信息
-
服务注册 registry
-
服务提供者
-
-
服务发现 discovery
-
服务消费者
-
2.4 负载均衡
负载均衡作用: 就是把你的流量按照你定义的策略分布到不同的服务器下
-
动态将请求派发给比较闲的服务器
-
策略:
-
轮询(Round Robin)->(有10台服务器,10个请求可能并不会每台服务器处理一个请求,如果有10万个请求,相当于1台服务器处理1万个请求)
-
加权轮询(Weighted Round Robin)->(比如你两台服务器,一台8g内存,1台24g内存,你让他俩处理相同多的请求,不太合适,可以把8g的权重为1,24g的权重为3)
-
随机Random
-
哈希Hash
-
最小连接数LC
-
最短响应时间LRT
-
负载均衡分为两种:一种是服务端的负载均衡,一种是客户端的负载均衡
服务端的负载:
10台服务器,具体这个请求到底交给哪台服务器处理,决定哪台服务器处理请求的负载均衡就叫服务端的负载均衡
客户端的负载均衡:
对于注册中心来说-》springcloud的其实就是客户端的,如用户服务和订单服务,两个独立的服务也可以集群部署,用户服务和订单服务都可以注册到注册中心中,对于注册中心来说不管是用户还是订单都属于客户端
对于房产中介来说,你谁光顾他,谁就属于客户
-》
通过注册中心实现的负载均衡就叫客户端的负载均衡,通过nginx服务器实现的负载均衡叫做服务端的负载均衡,,下图就是客户端的负载
2.5 服务雪崩
服务之间复杂调用,一个服务不可用,导致整个系统受影响不可用
Hystrix熔断器 返回兜底数据/模拟数据 避免服务雪崩出现
解决方法:加入熔断器,返回兜底数据
2.6 熔断
某个服务频繁超时,直接将其短路,快速返回mock(模拟/虚拟)值
2.7限流
限制某个服务每秒的调用本服务的频率
Zuul/getway
2.8 API网关 gatway
API网关要做很多工作,它作为一个系统的后端总入口,承载着所有服务的组合路由转换等工作,除此之外,我们一般也会把安全,限流,缓存,日志,监控,重试,熔断等放到 API 网关来做
2.9 服务跟踪
追踪服务的调用链,记录整个系统执行请求过程。如:请求响应时间,判断链中的哪些服务属于慢服务(可能存在问题,需要改善)。
2.10 弹性云
-
Elastic Compute Service(ECS)弹性计算服务
-
动态扩容,压榨服务器闲时能力
-