森未科技SpringCloud微服务架构与Oauth2+Jwt+Security鉴权框架整合Demo
软件架构说明
####一、微服务核心知识点:
1、网关:路由转发 + 过滤器
商品服务 /api/v1/product/
订单服务 /api/v1/order/
用户服务 /api/v1/user/
过滤器:LoginFilter(鉴权过滤器)、RateLimiterFilter(限流过滤器)...
2、服务发现注册:调用方和被调用方的信息维护
3、配置中心:管理配置,动态更新
4、链路追踪:分析调用链路耗时
5、负载均衡器:某个节点负载过大时分发给其他负载较小的节点
6、熔断:保护自己和被调用方
#分布式应用知识CAP理论知识
CAP原理指的是在一个分布式系统中Consistency(一致性)、Availablity(可用性)、Partition tolerance(分区容错性),三者不可同时获得。
1、一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(所有节点在同一时间的数据完全一致,越多节点,数据同步越耗时)
2、可用性(A):负载过大后,集群整体是否还能响应客户端的读写请求。(服务一直可用,而且是正常响应时间)
3、分区容错性(P):分区容忍性,就是高可用性,一个节点崩了,并不影响其它的节点。(100个节点,挂了几个,不影响服务,越多机器越好)
结论:CAP理论就是说在分布式存储系统中,最多只能实现上面的两点。而由于当前的网络硬件肯定会出现延迟丢包等问题,所以分区容忍性是我们必须需要实现的。所以我们只能在一致性和可用性之间进行权衡。
#CAP三选二原因
1、CA满足的情况下,P不能满足的原因:数据同步(C)需要时间,也要正常的时间内响应(A),那么机器数量就要少,所以P就不满足;
2、CP满足的情况下,A不能满足的原因:数据同步(C)需要时间,机器数量也多(P),但是同步数据需要时间,所以不能在正常时间内响应,所以A就不满足;
3、AP满足的情况下,C不能满足的原因:机器数量也多(P),正常的时间内响应(A),那么数据就不能及时同步到其他节点,所以C不满足 ;
#服务注册中心选择
1、Zookeeper: CP设计,保证了一致性,集群搭建的时候,某个节点失效,则会进行选举行的leader,或者半数以上节点不可用,则无法提供服务,因此可用性A没法满足;
2、Eureka: AP原则,无主从节点,一个节点挂了,自动切换其他节点可以使用,去中心化,因此一致性C没法满足;
结论:分布式系统中,分区容错性P肯定要满足,所以只能在CA中二选一,没有最好的选择,最好的选择是根据业务场景来进行架构设计;
####二、常见的微服务框架:
1、dubbo:zookeeper + dubbo + springmvc/springboot
官方配置:http://dubbo.apache.org/#!/?lang=zh=cn
配套
通信方式:rpc协议
注册中心:zookeeper/redis
配置中心:diamond
2、springcloud:全家桶 + 轻松嵌入第三方组件(Netflix 奈飞)
配套
通信方式:http协议
注册中心:eruka/consul
配置中心:config
断路器:hystrix
网关:zuul
分布式追踪系统:sleuth + zipkin
#一个接口一般都会充当两种角色(不是同时充当)
1、consumer:调用方
2、provider:被调用方
#常用的服务间的调用方式有哪些?
1、RPC:远程过程调用,像调用本地服务(方法)一样调用服务器的服务。支持同步、异步调用。
客户端和服务器之间建立 TCP 连接,可以一次建立一个,也可以多个调用复用一次链接。PRC 数据包小。
2、Rest:Http 请求,支持多种协议和功能。开发方便成本低。Http 数据包大。类似 HttpClient,URLConnection。
####三、分布式核心知识之熔断、降级讲解
简介:系统负载过高、突发流量或者网络等各种情况介绍,常用的解决方案。
熔断:保险丝,熔断服务,在服务提供者忙到不行的时候,减少对它的访问量,从而避免雪崩效应而导致服务提供者的应用实例全部崩溃,保护服务提供者。
降级:抛弃一些非核心的接口和数据。
限流:当高并发的流量访问时,如某时刻100万QPS,不做防护则直接废掉了,做了防护处理后10万QPS进入系统,其他90万QPS被拒绝。
#熔断和降级的区别:
相同点:
(1)从可靠性和可用性出发,为了防止系统崩溃;
(2)最终用户体验到的是某些功能暂时不可用;
不同点:服务熔断一般是下游服务故障导致的,而服务降级一般是从整体系统负荷考虑,由调用方控制;
#Netflix开源组件断路器Hystrix介绍
简介:Hystrix英文意思为豪猪,提供限流、熔断、降级、Fallback、监控等功能。
#熔断后如何处理?
1、出现错误之后可以Fallback错误的处理信息;
2、返回假的兜底数据;
文档地址:
https://github.com/Netflix/Hystrix
https://github.com/Netflix/Hystrix/wiki
####四、微服务网关介绍和使用场景
简介:Api Gateway,是系统的唯一对外的入口,介于客户端和服务端之间的中间层,处理非业务功能,提供路由请求、鉴权(同时还能解耦)、监控、缓存、限流等功能。
使用场景:
1、统一接入
智能路由
AB测试、容灾处理
日志埋点
2、流量监控
限流处理
服务降级
3、安全防护
鉴权处理
监控
机器网络隔离
#主流的网关:
1、Zuul:是Netflix开源的微服务网关,和Eureka、Ribbon、Hystrix等组件配合使用,Zuul 2.0比1.0的性能提高许多。
2、Kong:由Mashape公司开源,基于Nginx的Api和Gateway。
3、Nginx+Lua:一个高性能的http和反向代理服务器,lua是脚本语言,让nginx执行lua脚本,并且高并发,非阻塞的处理各种请求。
####五、链路追踪
简介:专门用于追踪每个请求的完整调用链路;
最主要功能:日志埋点;
组件:Sleuth;
#可视化链路追踪
简介:大规模分布式系统的APM工具;
最主要功能:与Sleuth结合可以提供可视化web界面分析调用链路耗时情况;
组件:Zipkin;
同类产品:EagleEye;
####六、微服务核心知识分布式配置中心
简介:统一管理配置,快速切换各个环境的配置。
#相关产品:
1、百度的disconf
2、阿里的diamand
3、springcloud的configs-server
####七、微服务消息总线Bus与消息队列MQ
1、什么是消息:一个事件,需要广播或者单独传递给某个接口。
2、为什么要使用:当某个功能或者配置更新了,其他系统还不知道是否已更新。
#消息队列相关产品
ActiveMQ
RocketMQ
Kafka
RabbitMQ
......
####八、Docker使用
可以在Win10本地安装Docker,也可以在云服务器CentOS安装Docker。
#Win10安装Docker准备工作
1、在BIOS启用虚拟机,控制面板启用vhyper;
2、Win10下载安装docker最新版安装包;
3、登陆阿里云,选择镜像仓库,复制个人专属的公网仓库地址;
4、在docker的setting设置json配置,增加"https://公网仓库地址",即安装完成;
5、测试Docker安装与部署zipkin,打开cmd,复制粘贴 docker run -d -p 9411:9411 openzipkin/zipkin 命令;
6、docker会自行检查本地有没此zipkin镜像,没有就远程拉取;
#使用Docker安装与部署RabbitMQ
1、拉取镜像:docker pull rabbitmq:management
2、查看当前镜像列表:docker images
3、删除指定镜像:docker rmi IMAGE_ID (如果需要强制删除,加上-f)
4、创建容器
docker run -d --name="myrabbitmq" -p 5671:5671 -p 15672:15672 rabbitmq:management
参数讲解:
run:创建一个新的容器并执行一个命令
-d:后台运行容器,并返回容器ID
-p:端口映射,格式为:主机:端口
--name="rabbitmq":为容器指定一个名称
5、RabbitMQ默认创建一个guest用户,密码也是guest,若访问不了记得查看防火墙,端口或者云服务器的安全组。
6、管理后台:http://127.0.0.1:15672
#Docker安装与部署Nginx服务器
1、查找nginx镜像
docker search nginx
2、拉取nginx最近镜像
docker pull nginx
3、创建nginx容器,命名为mynginx,-d为后台运行,8088映射80端口
docker run -d --name="mynginx" -p 8088:80 nginx
#Docker安装与部署Kafka
1、安装zookeeper
docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
2、安装kafka
docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 wurstmeister/kafka
3、创建kafka实例
docker exec -it kafka /bin/bash
####九、测试地址与其他
Eureka:
http://localhost:8761/
Hystrix Monitor:
http://ip:port/hystrix
http://ip:port/actuator/hystrix.stream
Zipkin:
http://localhost:9411/zipkin/
商品下单:
http://localhost:9000/order/api/v1/order/save?userId=2&productId=4
头信息:token=12345,cookie=67890
商品列表:
http://localhost:9000/product/api/v1/product/findById?id=4
#Windows命令行查看占用端口,并关闭操作
1、查看某个端口被哪个进程使用
netstat -aon|findstr "8772"
2、查看进程被哪个程序运行
tasklist|findstr "8316"
3、杀掉进程
taskkill /pid "7388"
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。