SpringCould
1.单体,分布式,集群的概念:
-单体的应用:所有的业务模块都是放在一个项目中写的,并没有进行拆分 -单体的系统: 应用和支持应用的组件(数据库,ES)都部署到同一个机器称为单体的系统. -分布式应用: 将业务拆分,在多台机器上进行部署. -分布式系统: 应用和支撑引用的组件部署到多台机器,完成功能需要依赖分布在不同机器上的组件才能完成.
-
集群: 将应用/系统,拷贝,同时提供功能. 一般需要配合负载均衡使用.
2.什么是微服务?
-
将应用拆分成若干个小的模板,每个模板独立开发,部署,测试. 相互之间通过网络进行调用.
3.什么是SpringCloud,和SpringBoot有什么关系?
-
SpringBoot专注于快速方便的开发单个个体微服务。
-
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等集成服务
-
SpringBoot可以离开SpringCloud独立使用开发项目,但是SpringCloud离不开SpringBoot,属于依赖的关系
-
SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架
4.注册中心功能
常见的注册中心:Zookeeper,Eureka,Consul,Nacos
-
服务和服务之间需要进行远程调用,注册中心管理URL和端口信息.
-
服务启动的时候需要往注册中心注册IP和端口,同时拉取服务列表到本地缓存中。
-
进行远程调用的时候读取本地缓存,拼接成URL,使用RestTemplate调用
-
实现动态感知机器的上下线。 基于心跳包的机制,服务每个5秒会往注册中心发送心跳包,注册中心内部会有定时器扫描服务列表
5.负载均衡ribbon
-
在服务的生产者进行集群的情况下,服务器调用者可以实现负载均衡.
-
根据远程调用的名称,在本地的缓存列表中,根据配置的负载均衡的规则,找到具体的IP和端口,然后进行调用
-
内部自动实现的,不需要我们做任何操作,属于客户端的负载均衡
6.Feign远程调用工具
-
远程调用服务像调用本地代码一样。
-
使用动态代理+反射进行URL拼接,然后使用ribbon,进行负载均衡
7.服务器的雪崩
-
由于服务和服务之间存在调用关系,由于某一个服务出问题,导致其他服务调用该服务的时候出现阻塞,最终导致资源都被耗尽,从而导致一大批服务不可用
-
引入如下机制避免雪崩问题
-
超时机制 :在上游服务调用下游服务的时候,设置一个最大响应时间,如果超过这个时间,下游未作出反应,就断开请求,释放掉线程。
-
隔离机制:上游的进程分成几部分别给不同的下游进程,这样一旦某个下游进程挂掉了也不会把2上游进程消耗完
-
限流机制:限流就是限制系统的输入和输出流量已达到保护系统的目的。为了保证系统的稳固运行,一旦达到的需要限制的阈值,就需要限制流量并采取少量措施以完成限制流量的目的。
-
熔断机制: 在互联网系统中,当下游服务因访问压力过大而响应变慢或失败,上游服务为了保护系统整体的可用性,可以暂时切断对下游服务的调用。这种牺牲局部,保全整体的措施就叫做熔断。
熔断的三种状态:熔断关闭状态,熔断开启状态,半熔断状态
-
降级机制: 降级其实就是为服务提供一个兜底方案,一旦服务无法正常调用,就使用兜底方案。
-