springcloud笔记

2 篇文章 0 订阅

##springCloud和springCloudAlibaba(微服)
版本:springCloud决定springboot版本

本次为springcloud H版本和springboot2.2.2

##技术栈:
注册中心:Nacos或consul
服务调用1:LoabBalancer
服务调用2:OpenFeign
服务降级:sentinel
服务网关:gateway
服务配置:Nacos
服务总线:Nacos

1.微服务是什么

微服务化核心是将传统的一站式应用,根据业务拆成一个个服务,彻底去耦合,每个微服务提供单个业务功能的业务功能,一个服务做一件事,
从技术角度看是一种独立的处理过程,类似进程,能自行启动销毁,可以拥有自己独立的数据库

2.微服务架构

一种架构模式,将单一应用程序划分成一组小服务,服务之间相互协作,配合,每个服务运行独立的进程,服务与服务采用轻量级通讯机制和协作
(通常是restful api),每个服务围绕业务构建,能独立部署到生产环境,应尽量避免统一的集中式的服务管理机制

3.微服务优缺点

优点:服务足够小,代码容易理解,能指定业务功能和需求
     开发简单,效率高,一个服务只做一件事
     微服务能被小团队开发,2-5人就可以
     微服务松耦合,功能意义的服务,开发和部署都是独立的
     可以使用不同语言开发,易于第三方集成
     只是业务逻辑代码,不会和前端混合,每个服务可以拥有自己的数据库

缺点:复杂性,运维压力增大,服务通信成本,数据一致性,性能监控

4.微服务的技术栈

1.服务开发              Springboot、Spring、SpirngMVC
2.服务配置与管理         Netflix公司的Archaius、阿里的Diamond
3.服务注册与发现         Eureka、Consul,Zookeeper,Nacos(重点)
4.服务调用              Rest、RPC、gRPC
5.服务熔断器            Hystrix、Envoy,resilience4j,Sentinel(趋势)
6.负载均衡              Ribbon、Nginx,LoabBalancer(趋势)
7.服务接口调用          Feign,openFeign(重点)
8.消息队列              Kafka、RabbitMQ、ActiveMQ
9.服务配置中心管理       Config、Nacos(重点)
10.服务路由             Zuul,geteway(重点)
11.服务监控             Zabbix、Nagios、Metrics、Spectator
12.全链路追踪           Zipkin、Brave、apper
13.服务部署             Docker、OpenStack、Kubernetes
14.数据流操作开发包      SpringCloud Stream(封装Redis,Rabbit,Kafka等发送接收消息)
15. 时间消息总线         Bus、 Nacos(重点)

5.springCloud和springboot的关系

springboot专注于快速方便开发单个个体微服务
springcloud是全局微服务协调治理框架,将springboot开发的个体合并并为它们之间提供、
配置管理和发现、断路由、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等集成服务。
springboot可以离开cloud独立使用,但springcloud离不开springboot,属于依赖关系

6.springCloud和Dubbo的区别

最大区别:springcloud抛弃了Dubbo的RPC通信,采用的是基于HTTP的REST方式,其他两种各有优劣

7.Eureka(注册服务)

实现服务注册和发现,服务注册中心
Eureka Server提供服务注册服务       EurekaClient是一个java客户端
集群:相互注册,保证一个意外挂了其他也可以运行

8.Eureka的自我保护机制

在自我保护模式中Eureka Server会保护服务注册表信息,不再注销任何服务实例,当收到心跳数重新恢复到
阀值以上会退出自我保护,设计理念是宁可保留错误服务注册信息,也不注销任何可能是健康的服务实例

9.Eureka与Zookeeper,consul相比优势

著名C(一致性)P(可用性)A(分区容错性)理论,分布式只能同时满足两种,Zookeeper,consul保证的是CP,Eureka保证的是AP

zookeeper提供了文件系统和通知机制

10.Ribbon(负载均衡)

将用户请求平摊分配到多个服务器,达到系统HA(高可用),常见负载均衡软件有Nginx,LVS,硬件 F5等 
提供客户端的软件负载均衡算法,有七种算法,也可以自定义算法

11.Ribbon(负载均衡客户端和Nginx服务端负载均衡的区别)

Nginx是服务器负载均衡,客户端所有请求都会交到Nginx,Nginx实现转发请求,是由服务端实现的
Ribbon是本地负载均衡,在调用服务接口时候,会在注册中心上读取注册信息服务列表之后缓存到JVM本地,从而实现RPC远程服务调用技术

12.Feign/openFeign(服务调用)

1.服务调用      2.服务超时          3.日志打印
我们只需要创建一个接口并使用注解方式来配置,即可完成对服务提供方法的接口绑定,自行封装服务调用客户端开发量,Feign集成了Ribbon
声明式的web服务客户端,是web服务客户端非常容易,只需要创建一个借口,然后在上面添加注解即可

13.hystrix(断路器)

1.服务降级      2.服务熔断      3.服务降级
处理分布式系统延迟和容错的开源库,保障一个服务出问题,不会导致整体服务失败,避免级联故障,保障系统的弹性.
断路器是开关装置防止一个服务出问题进行长时间的等待或无法处理的问题,保证线程不会长时间不必要的占用,避免问题在系统蔓延,导致雪崩,它会快速返回一个符合预期,可处理的备选响应,进行服务降级快速返回错误信息

13.hystrixDashboard(服务图形化监控)

准实时的调用监控,记录hystrix发送的执行信息,以统计报表和图形形式展示给用户,包括每秒执行了多少请求成功多少,失败多少等对内容转为可视化界面

14.Gateway/zuul(网关)

1.路由(Route)    2.断言(Predicate)      3.过滤(Filter)
Gateway是spring Cloud生态系统中的网关,目标是代替zuul,Gateway是基于WebFlux框架实现的,而WebFlux底层使用了高性能的Reactor模式通信框架Netty
具有特性:
    1.动态路由:能匹配任何请求属性
    2.可对路由指定Predicate(断言)和Fulter(过滤)
    3.集成Hystrix的断路器功能
    4.集成springcloud服务发现功能
    5.易于编写Predicate(断言)和Filter(过滤)
    6.请求限流功能
    7.支持路径重写
Gateway和Zuul的区别:
    Zuul是基于阻塞I/O的API,Gateway是基于非阻塞性I/O的API
    Gateway还支持Websocket, 并且与Spring紧密集成拥有更好的开发体验
Gateway核心逻辑:路由转发和执行过滤器链

15.Config(服务配置)

Config为微服务提供集中化外部配置支持,为各个不同微服务应用提供一个中心化的外部配置
config分为服务端和客户端,两部分: 
    1.服务端也被称分布式配置中心,是独立的一个微服务,连接配置服务器为客户端提供配置信息,加密/解密信息等
    2.客户端指定配置中心管理应用资源和业务相关配置内容,并启动时候从配置中心获取加载配置信息配置服务器默认采用git来存储配置信息,这样有助于对环境配置进行版本管理,并通过git客户端工具方便管理和访问配置内容

16.Bus(消息总线)

Bus和config一起使用可实现配置的动态刷新
Bus是将分布式系统节点与轻量级消息系统链接起来的框架,整合了java的事件处理机制和消息中间件功能,目前支持RabbitMQ和Kafka
Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,用于广播状态更改,事件推送,微服务间的通信通道
什么是消息总线:
    轻量级消息代理构建共用的消息主体,让所有微服务连接,该主题产生消息会被所有实例监听消费

RabbitMQ安装步骤:首先安装erlang,再下载RabbitMQ, 在安装目录sbin下启动cmd,输入rabbitmq-plugins enable rabbitmq_management(添加可视化插件)  最后点击RabbitMQ Service - start启动  输入http://localhost:15672   账号密码都为guest
配置好bus后可以通过post:http://localhost:3344/actuator/bus-refresh或 http://localhost:3344/actuator/bus-refresh/config-client:3355  通知config服务端,使服务端广播给客户端处处使用  bus-refresh/config-client:3355属于针对通知更新 注:bus-refresh是yml中的配置   

17.Stream(消息驱动)

Stream是一个构建消息驱动微服务的框架,通过inputs或outputs与Stream中binder对象交互,通过配置binding(绑定),而Stream的binder对象负责与消息中间件交互,所以我们只需清楚如何与Stream交互就方便使用消息驱动方式
通过使用Spring Integeration来连接消息中间件实现消息事件驱动
Stream为供应商消息中间件产品提供了个性化自动化配置实现,引用发布-订阅-消费组,分区的三个核心概念,注意:目前仅支持RabbitMQ和Kafaka

18.Sleuth(分布式请求链路跟踪)

 客户端发起请求会经过多个不同服务节点调用产生结果,每个请求形成复杂的分布式调用链路,任何环节出了问题都会失败,Sleuth提供一套解决方案
 1.安装zipkin   下载    运行下载的jar包   端口:localhost:9411

##Spring Cloud Alibaba

中文文档链接:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

1.Nacos(服务注册与配置中心----等价于Eureka+Bus+Config)

  1.安装Nacos   地址:https://github.com/alibaba/nacos/releases/tag/1.3.0
  2.在解压nacos中bin目录下运行startup.cmd -m standalone
  3.浏览器输入http://localhost:8848/nacos      登录名和密码都是nacos
  4.nacos内嵌数据库保存服务信息,可以在配置列表+号添加application.yml配置文件拉取  替代bus+config的github模式

2.Nacos(集群配置和持久化)

  1.配置集群
		1.linux centos7里安装nacos+mysql
			1.1.nacos直接解压即可
			1.2.mysql安装:
				1.2.1.检查已经安装的mariadb列表:rpm -qa | grep mariadb

				1.2.2.删除mariadb:yum -y remove mariadb-libs-5.5.60-1.el7_5.x86_64

				1.2.3.下载mysql:wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm

				1.2.4.安装软件源:yum localinstall mysql80-community-release-el7-1.noarch.rpm

				1.2.5.安装mysql:yum install -y mysql-community-server
				
				1.2.6.启动mysql:service mysqld start

				1.2.7.查看MySQL运行状态:service mysqld status
	
				1.2.8.查看MySQL默认密码:grep 'temporary password' /var/log/mysqld.log


				1.2.9.登录MySQL:mysql -u root -p

				1.2.10.修改默认密码:ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; (注:如果失败,先设置个复杂密码如Root_12Root,再命令$ set global validate_password_policy=LOW; set global validate_password_length=1; )

				1.2.11.开放MySQL外网访问:CREATE USER 'root'@'%' IDENTIFIED BY '上面新设置的密码';

				1.2.12.给予root权限:grant all privileges on *.* to 'root'@'%';

				1.2.13.刷新用户权限:FLUSH PRIVILEGES;

				1.2.14.重启MySQL:service mysqld restart

				1.2.15.改加密方式:ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '上面新设置的密码';


		2.mysql导入nacos里conf的nacos-mysql.sql脚本

		3.修改application.properties文件为添加:
			spring.datasource.platform=mysql
			db.num=1
			db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
			db.user=root
			db.password=841204414

		 4.在Nacos的conf目录下有一个cluster.conf.example,单独复制创建一个cluster.conf文件,然后打开将后续要部署的Nacos实例地址配置在这里。如下:
			127.0.0.1:3333
			127.0.0.1:4444
			127.0.0.1:5555

  		 5.在nacos的bin目录下有一个startup.sh文件 单独复制一份备份,使用vim修改startup.sh文件:
					
					 p)
			            EMBEDDED_STORAGE=$OPTARG;;
					改为:
					 p)
			            PORT=$OPTARG;;
					改为:
					echo "$JAVA ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 &nohup $JAVA - Dserver.port=${PORT} ${JAVA_OPT} nacos.nacos >> ${BASE_DIR}/logs/start.out 2>&1 &


					(注:真正集群环境是三台机器,不需要此步骤)



			6.安装nginx修改nginx.conf
				转发nacos三台机器
				修改文件为:
				在server上添加
				upstream cluster{
					127.0.0.1:3333
					127.0.0.1:4444
					127.0.0.1:5555
				}
				location / {
				
					proxy_pass   http://cluster;
				}
				都启动后访问:ip+nginx端口+/nacos/

3.Sentinel(系统的流量防卫兵-------等价于hystrix)

	Sentinel以流量切入点,从流量控制,熔断降级,系统负载保护等多个维度保护服务的稳定性

	1.github下载Sentinel的jar包,java -jar Sentinel.jar运行,访问localhost:8080,登录名或密码都是sentinel

4.Seata(分布式事务解决方案)

    官网:http://seata.io/zh-cn/
    Seata是分布式事务解决方案,在微服务架构提供高性能和简单易用的分布式事务管理
    Seata全局唯一的事务ID+三个套件组成,TC事务协调者   TM事务管理者 RM资源管理者
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值