# mycloud **Repository Path**: hpfbavol/mycloud ## Basic Information - **Project Name**: mycloud - **Description**: springcloud组件学习 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mycloud #### 介绍 springcloud组件学习 #### 软件架构 当前最流行的微服务组件学习过程记录 #### hystrix 1. 使用注解@HystrixCommand实现,一般用于服务端(不建议使用) 2. 超时会走兜底的方法 3. 发生异常会走兜底的方法 ##### 全局fallback,服务降级 处理**调用**失败的时候可以在客户端新建一个类实现外部调用接口,在调用外部接口的@FeignClient中的fallback写上实现调用外部接口的实现类,如果被调用的服务宕机,则客户端会走实现了调用外部接口的实现类的对应的方法。 * 注意:此方式只适合调用其他系统的时候使用,如消费者自身发生错误,则不会发生服务降级 ##### 服务熔断 服务熔断是指在窗口内一定时间错误超过一定的次数,服务需要熔断,走兜底的接口,分为三个步骤open-halfopen-close,由打开到半关闭再到关闭。 ##### 服务监控 * 注意:一定要添加actuator这个依赖,需要在被监控的服务中的启动类中加上配置,如hystrix-payment8001工程启动类的所示 服务监控视图需注意7色1线1圈 ##### gateway 1. 不需要web的依赖 2. 三大要素:路由,断言,过滤器 ##### stream 1. spring-cloud-stream只支持rabbit,kafaka两个消息中间件 2. rabbitmq消费者需要在同一个组内,防止重复消费消息 3. 如果rabbit没有配置group,那么消息无法持久化,会有消息丢失的情况发生 ##### sleuth+zipkin实现链路追踪 1. 目前使用zipkin的服务端启动 2. 配置文件注册进zipkin的服务地址即可 3. 配置sleuth的采样率 4. 链路追踪主要实现原理是通过唯一的traceId标识请求id,span和parentId记录一条链路请求的所有记录,通过微服务名称来访问 * 工程见payment8001 ##### nacos 1. 最重要的是集群化的配置及持久化的处理 2. nacos内置derby数据库,目前仅支持mysql5.5版本以上的数据库持久化,脚本可以从conf目录下找到,然后修改nacos配置文件application.properties或者参见nacos官网的运维集群配置持久化 3. nacos通过namespace+dataid+group来确定配置文件所属的环境 4. nacos的集群配置需要通过配置cluster.conf配置文件配置服务器的Ip+端口,ip 查看可以使用hostname -i查看本机的ip,需注意这里不能使用127.0.0.1,启动nacos的时候需要-p指定集群的端口 5. -p指定端口的话需要修改启动脚本指定集群的端口 6. nacos集群的话需要配置nginx集群负载均衡到各个nacos ##### Sentinel 1. 流量监控 阈值类型 - 分为QPS每秒请求数量限制(把所有请求拦截在外面进行限流(御敌于城墙之外 )) - 线程数的控制(请求放进来,但是超过线程数就进行限流,关门打狗式) 流控模式 - 默认直接 - 关联:如果B服务限流,就将A挂掉 流控效果 - 快速失败:Blocked by Sentinel (flow limiting) - 预热(Warm up):名为冷启动,启动因子为'阈值/3',花费多少时间达到阈值 - 排队等待: 只能是QPS,匀速排队 2. sentinel默认是懒加载,没有请求的话是没有显示监控的 3. 降级规则 4. 热点限流:指的是请求中携带某个key值,对这个key值进行限流 5. @SentinelResource对应Hystrix的@HystrixCommand,一定需要配置blockHandler对应的兜底的方法,但是只捕获规则配置异常,不会捕获程序运行的异常 6. 系统规则,配置应用型的限流 7. 配置全局的限流异常处理,必须是static方法,必须有BlockException参数类 8. @SentinelResource的fallback配置降级方法,可以捕获系统运行异常 9. exceptionsToIgnore属性可以配置被忽略的异常 10. 结合openfeign配置服务降级 11. 结合nacos的json配置sentinel的持久化 ##### seata 1. 1+3:1代表的是全局唯一的事务id,3代表的是TC(Transaction Control),TM(Transaction Manage),RM(Resource Manage) 2. 修改conf文件夹下的service+store模块的配置,需要配置组名,和识别seata配置的方式,建议nacos 3. 需要将file.conf,registry.conf移到resource文件下识别 4. 需要排除spring自带的数据源加载,手动配置数据源,建议引入MybatisProperties.class的配置 5. seata的事务控制通过aop思想,利用beforeImage和afterImage来进行事务控制,当某个服务出现异常,seata会从undo_log表中找出对应的数据进行对比,然后进行回滚操作,即反向补偿机制 6. TM是事务的起点,TC是协调TM和RM(数据源)之间的关系 7. 如果出现脏写,数据不一致,需要人工介入处理 8. seata实现AT模式分为3步骤:1. 加载 2. 提交 3. 回滚