微服务学习笔记

微服务学习笔记

自学视频链接(来自黑马程序员)
https://www.bilibili.com/video/BV1LQ4y127n4?p=1&vd_source=1eae188552dd1929705e7c63a395fb86

认识微服务

单体架构

单体架构:将业务的所有功能集中在一个项目中开发,打包成一个包部署

​ 优点:架构简单、部署成本低

​ 缺点:耦合度高

分布式架构

分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务

​ 优点:降低服务耦合、有利于服务升级拓展

微服务:是一种经过良好架构设计的分布式架构方案,微服务架构特征

​ 单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发。

​ 面向服务:微服务对外暴露业务接口

​ 自治:团队独立、技术独立、数据独立、部署独立

​ 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

总结

单体架构的特点

​ 简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统。

分布式架构特点

​ 松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目。例如:京东,淘宝。

微服务:一种良好的分布式架构方案

​ 优点:拆分粒度更小、服务更独立、耦合度更低

​ 缺点:架构非常复杂,运维、监控、部署难度提高

微服务结构

SpringCloud+Feign:使用SpringCloud技术栈。服务接口采用Restful风格。服务调用采用Feign方式。

SpringCloud

服务拆分注意事项

  1. 不同微服务,不要重复开发相同业务。
  2. 微服务数据独立,不要访问其他微服务的数据库
  3. 微服务可以将自己的业务暴露为接口,供其他微服务使用。

Eureka注册中心

@LoanBalanced	//负载均衡

1.搭建EurekaServer

  • 引入eureka-server依赖
  • 添加@EnableEurekaServer注解
  • 在application.yml中配置eureka地址

2.服务注册

  • 引入eureka-client依赖
  • 在application.yml中配置eureka地址

3.服务发现

  • 引入eureka-client依赖
  • 在application.yml中配置eureka地址
  • 给RestTemplate添加@LoanBalanced注解
  • 用服务提供者的服务名称远程调用

Ribbon负载均衡

负载均衡策略:轮询和随机

通过定义IRule实现可以修改负载均衡规则,有两种方式:

​ 1.代码方式;2.配置文件方式。

饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。

而饥饿加载会在项目启动时创建,降低第一次访问的耗时,通过下面配置开启饥饿加载:

ribbon:
	eager-load:
		enable:true # 开启饥饿加载
		client:userservice # 指定对userservice这个服务饥饿加载

Nacos注册中心

1.Nacos服务搭建

  1. 下载安装包
  2. 解压
  3. 在bin目录下运行指令:startup.cmd -m standalone

2.Nacos注册和发现

​ 1.引入nacos.discovery依赖

​ 2.配置nacos地址spring.cloud.nacos.server-addr

Nacos服务分级存储模型

Nacos的分级存储模型

​ 1.服务,例如userService

​ 2.集群,例如上海和杭州

​ 3.实例,例如杭州机房的某台部署啦userService的服务器

如何设置实例的集群属性

​ 1.修改yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可。

根据权重负载均衡

环境隔离-namespace

​ Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西用来做最外层隔离。

Nacos和Eureka的比较

Nacos和Eureka的共同点

​ 1都支持服务注册和服务拉取

​ 2都支持服务提供者心跳方式做健康监测

区别

​ 1Nacos支持服务端主动监测提供者状态:临时实例采用心跳模式,非临时实例采用主动监测模式

​ 2临时实例心跳不正常会被剔除,非临时实例则不会被剔除

​ 3Nacos支持服务列表变更的消息推送模式,服务列表更新更及时。

​ 4Nacos集群默认采用AP方式,当集群存在非临时实例时,采用CP模式;Eureka采取AP模式

Nacos配置管理

统一配置管理

​ 1.引入Nacos的配置管理客户端依赖。

​ 2.在userService中的resource,目录添加一个bootstrap.yml文件,这个文件是引导文件,优先级高于application.yml

配置自动刷新

@RefreshScope
// 1.通过@Value注解注入,结合@RefreshScope来刷新

@ConfigurationProperties
// 2.通过@ConfigurationProperties注入,自动刷新

多环境配置共享

多种配置的优先级:服务名-profile.yaml > 服务名称.yaml > 本地配置

Nacos集群搭建

Nginx反向代理

http客户端Feign

Feign的介绍

Feign是一个声明式的http客户端,其作用就是帮助我们优雅的实现http请求的发送,解决上面提到的问题。

定义和使用Feign客户端

​ 1.添加openfeign的依赖

​ 2.添加@EnableFeignClients注解

​ 3.编写FeignClient接口

​ 4.使用FeignClient中定义的方法代替RestTemplate

自定义Feign的配置

Feign的性能优化

Feign底层的客户端实现:

  • URLconnection:默认实现,不支持连接池
  • Apache HttpClient:支持连接池
  • OKHttp:支持连接池

因此优化Feign的性能主要包括:

  1. 使用连接池代替默认的URLconnection
  2. 日志级别,最好用basic或none

Feign的最佳实践

  1. 让Controller和feignClient继承同一接口
  2. 将FeignClient、POJO、Feign的默认配置都定义到一个项目中,供所有消费者使用。

统一网关Gateway

网关功能:

  • 身份认证和权限校验
  • 服务路由、负载均衡
  • 请求限流

搭建网关服务

​ 1.创建新的module,引入SpringCloudGateway的依赖和nacos服务发现依赖

​ 2.编写路由配置及nacos地址

路由断言工厂

PredicateFactory的作用是什么

​ 读取用户定义的断言条件,对请求做出判断。

路由过滤器

GatewayFilter是网关中提供的一个过滤器,可以对进入网关的请求和微服务返回的响应做处理。

跨域问题处理

跨域:域名不一致就是跨域。

跨域问题:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被拦截器拦截的问题

解决方案:CORS

spring:
	cloud:
		gateway:
			globalcors: #全局的跨域处理
				add-to-simple-url-handler-mapping: true # 解决options请求被拦截的问题
				corsConfigurations:
					'[/**]': # 拦截一切请求
						allowedOrigins: # 允许哪些网站的跨域请求
							- "http://localhost:8089"
							- "http://www.leyou.com"
						allowedMethods: # 允许跨域ajax的请求方式
							- "GET"
							- "POST"
							- "DELETE"
							- "PUT"
							- "OPTIONS"
						allowedHeaders: "*" #允许在请求中携带的头信息
						allowedCredentials: true # 是否允许携带cookie
						maxAge: 360000 # 这次跨域的检测有效期

Docker

快速交付应用、运行应用的技术

Docker如何解决依赖的兼容问题?
  • 将应用的Libs(函数库)、Deps(依赖)、配置与应用一起打包,形成可移植镜像
  • 将每个应用放到一个隔离容器去运行,避免互相干扰
Docker如何解决不同系统环境的问题
  • Docker将用户程序所需要调用的系统函数库一起打包
  • Docker运行到不同操作系统时,直接基于打包的函数库,借助于操作系统的Linux内核来运行
Docker与虚拟机
  • docker是一个系统进程;虚拟机是在操作系统中的操作系统
  • docker体积小、启动速度快、性能好;虚拟机体积大、启动速度慢、性能一般。
镜像和容器
  • 镜像:docker将应用程序及其所需的依赖、函数库、环境、配置等文件打包在一起,称为镜像
  • 容器:镜像中的应用程序运行后形成的进程就是容器,只是docker会给容器做隔离,对外不可见
Docker架构

Docker是一个CS架构的程序,由两部分组成:

  • 服务端:接受命令或远程请求,操作镜像或容器
  • 客户端:发送命令或请求到Docker服务端
DockerHub

一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry

Docker基本操作

数据卷

容器与数据耦合的问题

  • 不便于修改:当我们需要Nginx的html内容时,需要进入容器内部修改,很不方便
  • 数据不可复用:在容器内的修改对外是不可见的,所有修改对新创建的容器是不可复用的。
  • 升级维护困难:数据在容器内,如果升级必然删除旧容器,所有数据都跟着删除啦

数据卷

​ 数据卷是一个虚拟目录,指向宿主机文件系统中的某个目录。

数据卷的操作

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune
挂载数据卷

自定义镜像

镜像是一个分层结构,每一层称为一个Layer

  • BaseImage层:包含基础的系统函数库、环境变量、文件系统
  • Entrypoint层:入口,是镜像中应用启动的命令

Dockerfile

DockerCompose

  • DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器
  • Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行
version:"3.8"
services:
	mysql:
		image:mysql:5.7.25
		environment:
			mysql_root_password:123
		volumes:
		- /tmp/mysql/data:/var/lib/lib/mysql
		- /tmp/mysql/conf/hmy.cnf:/etc/mysql/conf.d/hmy.cnf
	web:
		build:.
		ports:
		-8090:8090
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值