浙商银行电商项目升级

学海无涯,心存高远。

项目背景

这时我就职于“南京万米科技有限公司”,也是千米的全资子公司。

浙商银行电商项目需要整体升级,万米作为技术提供和外包的形势全程参与了项目重构工作。

技术栈

整体使用的spring cloud微服务架构。注册中心、配置中心使用nacos,服务间调用使用feign,限流使用sentinel,事务使用TX-Lcn,消息队列使用rabbitMQ, 任务调度使用XXL-Job,缓存使用redis和spring本地缓存,关系数据库使用mysql,NoSQL数据库使用mongodb,搜索引擎使用elasticSearch,调用链追踪使用skywalking, 日志可视化使用kibana

我的工作

我负责引入sentinel,并配合压测测试出合适的数值进行限流的配置。 压测过程中根据结果进行一定的优化,碍于保密协定,更多技术细节不做阐述。

redis哨兵模式升级。

探坑之路

sentinel文档不够详细

sentinel的文档不够详细,很多配置都需要去百度和扒源码再进行慢慢的测试。总结如下:

使用的sentinel版本为:1.5.2

流控策略配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
    {
        "resource": "资源名",
        "limitApp": "流控针对的调用来源,default不区分来源",
        "grade": "限流类型(0-根据并发数量限流;1-根据QPS限流)",
        "count": "限流阈值",
        "strategy": "调用关系限流策略,默认为0",
        "controlBehavior": "限流效果(0-直接拒绝;1-WarmUp;2-匀速排队)",
        "clusterMode": "是否是集群模式(false-不是;true-是)",
        "clusterConfig":{
            "flowId":"(必需)全局唯一的规则 ID,由集群限流管控端分配",
            "thresholdType ":"阈值模式,默认(0)为单机均摊,1 为全局阈值",
            "fallbackToLocalWhenFail ":"在 client 连接失败或通信失败时,是否退化到本地的限流模式"
        }
    }
]

熔断策略配置:

1
2
3
4
5
6
7
8
9
10
[
    {
        "resource": "资源名",
        "grade":" 熔断类型,默认0(0-平均响应时间;1-异常比例;2-异常数)",
        "count": "熔断阈值",
        "timeWindow": "时间窗口",
        "rtSlowRequestAmount":"RT 模式下 1 秒内连续多少个请求的平均 RT 超出阈值方可触发熔断(1.7.0 引入),默认值:5",
        "minRequestAmount":"异常熔断的触发最小请求数,请求数小于该值时即使异常比率超出阈值也不会熔断(1.7.0 引入),默认值:5"
    }
]

系统配置:

1
2
3
4
5
6
7
{
    "highestSystemLoad":"Load自适应",
    "highestCpuUsage":"CUP usage",
    "qps":"入口QPS",
    "avgRt":"平均RT",
    "maxThread":"并发线程数"
}

灰度发布数据隔离

线上的灰度发布有的数据需要进行隔离,有的数据不需要隔离。redis中利用前缀进行了部分数据的隔离,技术细节暂不公布。

收获

  • 技术宽度得到了提升

  • 阅读源码能力得到了提升