Skip to content

Commit

Permalink
增加readme
Browse files Browse the repository at this point in the history
  • Loading branch information
living-mall committed Aug 13, 2023
1 parent 72d6cef commit 6d51df9
Showing 1 changed file with 1 addition and 20 deletions.
21 changes: 1 addition & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,12 +99,10 @@ sdk第一期支持的组件为Gin-Web、gRpc、go-micro、go-microv2、go-microv



图1 Seamiter设计模型 https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

功能模块


图2 Seamiter功能模块 https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

目前Seamiter划分为基础模块、限流模块、熔断模块、热点模块、Mock模块、重试模块、灰度模块、压测模块及防护模块,依次解释如下:

Expand Down Expand Up @@ -146,7 +144,6 @@ sdk第一期支持的组件为Gin-Web、gRpc、go-micro、go-microv2、go-microv
架构V1


图3 架构V1 https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

seamiter最初架构如图,主要包含portal服务、Admin Service服务、RuleService服务及Client

Expand All @@ -169,7 +166,6 @@ Portal:主要为用户提供操作Portal、权限、操作历史等操作



图4 架构V2https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

和V1架构相比,此处引入了Register Service,同时Client的注册不是在通过内网IP保持,而是修改了广域网(此处为内网),这样跨机房访问就不会再有问题了。

Expand All @@ -194,7 +190,6 @@ seamiter的工作机制如下:
整体分析


图5 Seamiter整体作用分析图https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

在业务接入Seamiter-SDK后,Seamiter会拦截业务业务请求,并依次经过如上规则槽位。

Expand All @@ -217,7 +212,6 @@ Mock的主要目的在依赖没有Ready的情况下,通过插桩Mock掉相关

原理分析

图6 Mock规则原理分析https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

(1)seamiter对于各种组件增加了对应的拦截器,拦截器会对请求参数、请求头等信息填充给规则槽

Expand Down Expand Up @@ -298,7 +292,6 @@ QA的自动化测试是我们项目日常防护的手段,这个流程的目的
原理分析


图7 灰度规则原理分析https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

(1)seamiter会在接口调用(consumer)前增加拦截

Expand All @@ -322,15 +315,13 @@ QA的自动化测试是我们项目日常防护的手段,这个流程的目的



图8 标签灰度效果https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

针对条件路由,seamiter支持多条件匹配,如需要通过匹配来源(FromServer)和参数值(param1 value=1),同时支持AND/OR操作。

针对权重路由,seamiter是通过桶算法实现的,以下是大致的原理图:



图9 权重路由原理https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

权重的大致思路是桶算法,

Expand Down Expand Up @@ -457,7 +448,6 @@ QA的自动化测试是我们项目日常防护的手段,这个流程的目的
原理分析


图11 seamiter流量整形https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

网络流量的到达具有随机性,而系统处理是有限的。对于业务,每次大促的流量都会数倍于日常流量,这种突发的流量会对系统的稳定性造成威胁。

Expand Down Expand Up @@ -519,7 +509,6 @@ seamiter-sdk底层是通过滑动窗口来实现QPS统计的,滑动窗口的



图13 匀速token https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

可以理解为均匀限流,如果阈值设置为10,那么就是0.1秒下发一个请求,意味着100ms下发一个请求

Expand Down Expand Up @@ -616,7 +605,6 @@ Token WarmUp策略:



图14 Warmup Token的生成算法模型https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

X轴:令牌桶数量

Expand All @@ -632,15 +620,13 @@ warmUpPeriodSec:系统预热时间,单位秒



图15 Warmup Token预热时间内Token生成https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

假设当前令牌桶桶的令牌数为X,X在warningToken和maxToken之间,则生成一个Token的间隔为

稳定时时间间隔+(x-warningToken)*slope



图16 Warmup Token稳定后Token生成https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

当预热时间后,生成一个Token的时间间隔为 稳定时的时间间隔,

Expand Down Expand Up @@ -734,7 +720,6 @@ seamiter会监控系统应用内部及下游的响应时间和异常比例,当
热点


图19 热点防护 https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

热点防护主要是针对热点资源的保护,这种资源并不是某一个固定的接口,而可能是针对特定的资源接口参数的防护,如热点账户或者热点商品等。

Expand Down Expand Up @@ -776,7 +761,6 @@ Seamiter-server会主动拉取业务的pb proto file文件,并解析pb描述
Seamiter同时接口的版本变更历史,以便业务快速生成接口文档。


图20 Seamiter接口管理原理https://app.diagrams.net/?libs=general;er#G1RAipnvYgxyJ0KSEnnZRtYYyIhhP1fP9A

场景分析
场景1:快速生成接口文档及接口变更历史
Expand Down Expand Up @@ -1631,8 +1615,6 @@ xorm 支持 ALL,需要手动埋点,待支持自动埋点

应用源码->go.mod→添加SDK包→go mod tidy & go mod vendor

git.garena.com/honggang.liu/seamiter-go v0.1.231-release
git.garena.com/honggang.liu/seamiter-go/pkg/adapters/micro v0.0.0-20230510103846-b0eb15d7eabb
步骤三:增加seamiter-sdk对应的配置文件(默认使用sea.yaml)

sea:
Expand Down Expand Up @@ -1667,8 +1649,7 @@ sea.dashboard.openConnectDashboard:是否连接dashboard获取规则,如果
步骤三:初始化

import (
sea "git.garena.com/honggang.liu/seamiter-go/api"
"git.garena.com/honggang.liu/seamiter-go/logging"

)

func init() {
Expand Down

0 comments on commit 6d51df9

Please sign in to comment.