springcloud Alibaba

springcloud Alibaba






spring-cloud-alibaba/README-zh.md at master · alibaba/spring-cloud-alibaba · GitHub

 

Nacos

单节点:8848 dashboad端口       客户端、服务提供者、都需要注册进nacos,客户端需添加nacos作为配置中心
集群下:3333.4444.5555 nacos集群端口  
负载均衡集群:8090nginx负载均衡端口


Nacos 作服务注册中心  (自带负载均衡)

 投机取巧,赋值nacos服务   直接拷贝,虚拟端口映射

包含了Ribbon,支持负载均衡

服务提供者   9001、9002 两个服务端注册中心



服务消费端 83 一个服务消费者   (开启restTemplate负载均衡)

将需要访问当服务名写在配置中,方便消费调用    @Value("${server-url.xxxx}")





切换nacos服务  cp、ap

Nacos 作配置中心  

创建客户端服务,添加配置中心依赖

两个配置文件








    +    


此两处文件后缀必须一样

自带动态刷新

在配置中心修改yaml内容,客户端能动态刷新

命名空间分组、DataID关系

多环境多项目管理

命名空间












修改配置

Group

如访问 : nacos-config-client-info.yaml    DEV_GROUP

Namespace



读取某个配置

Nacos集群和持久化



                               
每个nacos服务都会自带一个derby嵌入式数据库,集群部署,难保证一致性,需要切换外置高可用数据库



持久化


 

切换derby数据库为外置mysql数据库

新建数据库 nacos_config ,导入nacos/conf/nacos-mysql.sql,


修改nacos/conf/application.properties

nacos 启动 :  sh startup.sh -m standalone (非集群)       sh startup.sh     ./startup.sh
奇怪:先sh startup.sh -m standalone,再./startup.sh,才能开启

nacos集群部署

配置mysql

配置cluster.conf  

   本机(hostname -i出来的ip)
192.168.31.138:3333
192.168.31.138:4444
192.168.31.138:5555


出问题:

单机开启集群,通过不同端口号,开启3333、4444、5555,但只会开启一个,其他但启动失败(JVM存储不够???)

(修改前先备份)修改bin/startup.sh,将JAVA_OPT="${JAVA_OPT} -server -Xms2g -Xmx2g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" 根据自己的实际情况调

解决:

拷贝nacos为nacos1、nacos2、nacos3  分别修改application.properties中的端口  为 3333、4444、5555

修改nacos1、nacos2、nacos3 中的startup.sh中   JAVA_OPT的  -Xms1g -Xmx2g -Xmn512m  (由于查看进程内存占用情况,进行适当减少)


 

修改startup.sh




sh startup.sh -p xxxx

nginx.conf

Sentinel  

8858 设置的dashboad、 8401 sentinel 服务访问端口

docker 部署 sentinel


 

=======8401服务端=======
sentinel.transport.port: 8858(sentinel服务器的端口) server.port:8401(sentinel服务的端口)   nacos

懒加载:服务注册进sentinel后,需要在页面发几个请求,sentinel才会开始监控





      或者      

添加流控规则:单机阈值1
当请求一秒钟内超过阈值,就会返回限制信息

流控效果
 

    直接->快速失败

----系统默认的

资源名 : @getMapping中的请求路径
针对来源:default 默认

关联



使用postman建立 请求conllection组 设置/testB 20次,每次0.3s


预热

说明公式:阙值除以coldFactor(默认值为3),经过预热时长后才会达到阙值

阈值10,初始值:10/3 ,过5秒 ,到达阈值10 (即最初,每秒3次请求就会被限流,5秒内,阈值慢慢增到10)

排队等待


只允许QPS

降级服务


 

慢调用(秒级)




在熔断时常内,请求数大于最小请求+大于最大RT到请求占比大于比例阈值,会发生熔断,熔断时常过后,进入待恢复状态,之后的请求如果大于RT,会再次熔断,小于恢复

异常比例(秒级)



一秒内请求大于5次,异常率高于20%,降级



 

异常数(分钟级)


时间窗口大于60秒

在一分钟内,异常数大于10,最小请求数大于5,熔断降级

热点限流规则(限流,需要自定义兜底方法) 用SentinelResource 设置资源名、兜底方法

如需热点限流,在请求方法中添加不必要的参数 p1、p2用来进行设定规则,并设置兜底方法

当方法第一个参数p1在1秒内请求超过一次,限流,待用自定义返回当兜底方法

参数例外项(前提是参数必须为基本类型或String)



系统自适应规则


@SentinelResource

(参数可用为作限流规则资源名,blockHandler为兜底方法)

按资源名限流(sentinelResource中的名称) ---------- byResource

按url路径限流(GetMapping中的名称) ----------  /byResource
 

此时流控规则存在问题:不持久化

问题:


全局自定义兜底方法:

服务熔断

http://localhost:84/consumer/fallback/5 是 调 局部兜底

sentinel整合openFeign



此时访问 http://localhost:84/consumer/paymentSQL/5

当访问中,服务端宕机,再去访问,就会调用全局兜底

熔断框架的比较

sentinel规则持久化 (规则存入nacos)

sentinel服务端


添加规则json文件到nacos配置中心,实现持久化

[
    {
        "resource": "/rateLimit/byUrl",
        "limitApp": "default",
        "grade": 1,
        "count": 1,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]


实现持久化

Seate处理分布式事物







修改regist.conf file.conf
启动nacos  seata



seata 0.9.0 配置   (不支持集群)




idea 方配置 (1.0 后 配置 未写,整合file. registry,cpnf为yml)



file.conf、registry.conf除了要改 db   nacos  mySQL外 ,还要改sevice
======file.conf=====

          



服务间,通过openFeign调用

不加@GlobalTransactional,正常执行,
http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100没问题

当某个服务在调用过程中出现问题(方法延时发育openFeign的1秒),此时在此之前的服务会执行,之后的不会执行,造成事务的问题
====2001====

此时account端 方法超时。超时时间大于openFeign的1秒

此时,所有的数据库操作进行来,但修改订单状态没变,即钱扣了,订单请求失败

解决办法:主业务方法上加上@GlobalTransactional 

补充

http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100

每一个分支,执行前后都有一个快照

校验脏写,before image 还原业务数据


校验脏写:拿after image和当前数据库值 对比,一样则没有脏写 ,可以进行回退;脏数据需要人工处理

seats 的 branch表



order 的 undo_log表

rollback_info中存着 前置后置的 sql信息

出现事务错误,进行反向补偿---------------根据前置 sql操作 生成 反向sql 

seats 的 global 表

seats 的 lock 表


http://localhost:2001/order/create?userId=1&productId=1&count=10&money=100

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值