1 Star 0 Fork 0

Vegeta / senwill_springcloud

Create your Gitee Account
Explore and code with more than 12 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Please pay attention to the specific project description and its upstream code dependency when using it.
Clone or Download
contribute
Sync branch
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README

senwill_springcloud

介绍

森未科技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"

Empty file

About

森未科技SpringCloud微服务架构与Oauth2+Jwt+Security鉴权框架整合Demo expand collapse
Cancel

Releases

No release

Contributors

All

Activities

Load More
can not load any more
1
https://gitee.com/zhiquan181/senwill_springcloud.git
git@gitee.com:zhiquan181/senwill_springcloud.git
zhiquan181
senwill_springcloud
senwill_springcloud
master

Search

53164aa7 5694891 3bd8fe86 5694891