Dark Mode

Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

didi/GateKeeper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

131 Commits

Repository files navigation

Xiang Mu Jie Shao

GateKeeperShi Yi Kuan golangBian Xie De Zhi Chi Kuai Su Kai Fa , Cha Jian Hua De Gao Xing Neng Wang Guan . Shi Yong Er Jin Zhi Wen Jian An Zhuang Ji Ke Ti Yan Wang Guan Gong Neng .

Gong Neng Te Xing :
1, Kuai Su Kai Fa :Cha Jian Hua Zhi Chi Gong Neng Tuo Zhan +Can Shu Pei Zhi Hua ,Shuang Guan Qi Xia .
2, Jian Kang Jian Cha :Zhi Chi Zhu Dong +Bei Dong Tan Huo Jian Ce ,Huan Ke Tuo Zhan Di San Fang Pei Zhi Zhong Xin .
3, Nei Zhi Cha Jian :Fen Bu Shi Xian Liu (Miao /Shi /Ri San Chong Li Du ), headerTou Zhuan Huan , Bai Ming Dan , Zu Hu Jian Quan , QPSTong Ji Deng

Xi Tong Jia Gou :

1, Xi Tong Fen Wei Liang Ge Duan :Kong Zhi Duan (Control Plane)Fu Ze Fu Wu Bian Ji Pei Zhi He Zi Ding Yi Can Shu Guan Li ;Dai Li Duan (Proxy Plane)Fu Ze Xie Yi Shu Ju Zhong Jian Chu Li Ji Zhuan Fa . Liang Duan Ke Yi Fen Kai Qi Dong Ye Tong Shi Qi Dong .
2, Kong Zhi Duan Yu Dai Li Duan Jiao Hu :Kong Zhi Duan Bian Ji Wan Fu Wu Xin Xi Hui Xie Ru MysqlZhong ,Dai Li Duan Ding Shi Cong MysqlZhong La Qu Fu Wu Pei Zhi Xin Xi ,Ran Hou Ping Hua Chu Li Dai Li Duan Fu Wu Qi Ting .
3, Zi Ding Yi Hua Cha Jian :Zhi Chi Zui Chang Jian De Ye Wu Xu Qiu Kuai Su Ding Zhi Hua ,Zhu Yao Bao Han Ye Wu Zhong Jian Jian Zi Ding Yi , Fu Wu Fu Zai Pei Zhi Zi Ding Yi , Fu Zai Ce Lue Zi Ding Yi Deng ,Ru Guo Cha Jian Xu Yao Can Shu Pei Zhi Ze Ke Yi Zai Kong Zhi Duan Pei Zhi Xiang Ying Can Shu .

Kuai Su Kai Shi (Quick Start)

Huan Jing Yao Qiu

Ruan Jian Ban Ben Guan Wang An Zhuang Jiao Cheng
mysql >=5.1 Guan Wang Jiao Cheng
redis >=3.0 Guan Wang Jiao Cheng

Fu Wu An Zhuang (Er Xuan Yi )

Lei Xing You Dian
Er Jin Zhi Wen Jian An Zhuang Gua He Wu golangHuan Jing Qie Wu Cha Jian Kai Fa Xu Qiu Yong Hu .
Yuan Ma An Zhuang Zhi Chi Cha Jian Ding Zhi Hua Yong Hu .

1. Er Jin Zhi Wen Jian An Zhuang

Mu Qian Zhi Chi 64Wei windows/linux/mac Cao Zuo Xi Tong Xia Yong Hu ,Yun Xing Yi Xia Ming Ling Ke Zi Dong Hua Jin Xing Ti Shi An Zhuang .
windowsYong Hu Xu Yao Qi Dong powershellYun Xing Yi Xia Jiao Ben .

bash <(curl -s -S -L 'https://download.fastgit.org/didi/GateKeeper/releases/downl oad/v1.0.0/setup.sh')

Zhi Xing Wan Bi Hou ,Hui Ti Shi Qi Dong Fu Wu De Ming Ling ,An Zhao Cao Zuo Yun Xing Ji Ke ,Zhi Xing Er Jin Zhi An Zhuang Wu Xu Zai Jin Xing Yuan Ma An Zhuang .

2. Yuan Ma An Zhuang

Shi Yong Yuan Ma An Zhuang ,Xu Yi Lai golangHuan Jing ,Yao Qiu Ru Xia :

Ruan Jian Ban Ben Guan Wang An Zhuang Jiao Cheng
golang >=1.16 Guan Wang Jiao Cheng

2.1 git clone code

git clone https://github.com/didi/GateKeeper.git

2.2 set go proxy & download golang dependency

export GO111MODULE=on && export GOPROXY=https://goproxy.cn
cd GateKeeper
go mod tidy

2.3 edit mysql connect info

vim ./conf/dev/mysql_map.toml
# set data_source_name = "{dbUser}:{dbPwd}@tcp({dbIp}:{dbPort})/{dbDatabase}?charset= utf8&parseTime=true&loc=Asia%2FChongqin"

2.4 edit redis connect info

vim ./conf/dev/redis_map.toml
# set proxy_list = "redisIP:redsiPort"
# set password = "redisPwd"

2.5 create database & import data

mysql -h 127.0.0.1 -u root -p -e "CREATE DATABASE gatekeeper DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
mysql -h 127.0.0.1 -u root -p gatekeeper < gatekeeper.sql --default-character-set=utf8

2.6 run gatekeeper

  • Qi Dong Kong Zhi Duan
sh control.sh start_control
  • Qi Dong Dai Li Duan
sh control.sh start_proxy
  • Tong Shi Shuang Qi Dong
sh control.sh start_both

Cha Jian Hua

Wang Guan Zhong Zui Chang Jian De Ye Wu Xu Qiu ,Bao Han Ye Wu Zhong Jian Jian Zi Ding Yi , Fu Wu Fu Zai Pei Zhi Zi Ding Yi , Fu Zai Ce Lue Zi Ding Yi Deng .
Zhe Xie Chang Jian Gong Neng Wo Men Du Zhi Chi Cha Jian Hua Ding Yi ,Chu Ci Zhi Wai Huan Zhi Chi Liao Cha Jian Nei Bu De Dong Tai Can Shu Pei Zhi Ji Huo Qu .

Ye Wu Zhong Jian Jian Cha Jian

You Yu Zhong Jian Jian Nei Bu Cai Yong AOPQie Mian Bian Cheng Shi Xian ,Suo Yi Ye Wu Zhong Jian Jian Wo Men Zhi Jie Tao Yong Liao gin Zhong Jian Jian Ding Yi :

type HandlerFunc func(*Context)

Shi Li demo,funcZhi Jie Fan Hui Ding Yi De Fang Fa Ji Ke :

func HTTPFlowLimitMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
_, err := model.GetServiceDetailFromGinContext(c)
if err != nil {
public.ResponseError(c, 2001, err)
c.Abort()
return
}
//todo
c.Next()
}
}

Zui Hou Ji De Wan Cheng Zhong Jian Jian Zai http_proxy_router/route.go De Nei Bu Zhu Ce .

router.Use(
http_proxy_middleware.HTTPAccessModeMiddleware(),
...
http_proxy_middleware.HTTPFlowLimitMiddleware(),
http_proxy_middleware.HTTPReverseProxyMiddleware())

Fu Zai Pei Zhi Cha Jian

Xi Tong Mo Ren Zhi Chi Dou Di Xia You Jie Dian Pei Zhi ,Dan Shi You Xie Fu Wu Shi Shi Yong Fu Wu Fa Xian Xie Diao Qi Shi Xian De Ru consul, zookeeper Zhe Jiu Xu Yao Zi Ding Yi Fu Wu Fu Zai Pei Zhi Liao .
Yu Shang Mian Xiang Tong Shou Xian Shi Jie Kou Ding Yi :

type LoadBalanceConf interface {
Attach(o Observer)
GetConf() []string
WatchConf()
UpdateConf(conf []string)
CloseWatch()
}

Shi Xian Wan Shang Shu Jie Kou De Jie Gou Hou ,Huan Xu Yao Zhu Ce Zhe Ge Bu Zou .

func init() {
RegisterCheckConfigHandler("upstream_config", NewLoadBalanceCheckConf)
}

Fu Zai Ce Lue Cha Jian

Xi Tong Mo Ren Ti Gong Liao 4Chong Fu Zai Jun Heng Ce Lue :Lun Xun , Quan Zhong Lun Xun , Ji Yu Ke Hu Duan IPDe Yi Zhi Xing Hash, Sui Ji . Ru Guo You Ding Yi Xu Qiu Huan Ke Yi Shi Yong Cha Jian Jin Xing Gong Neng Tuo Zhan . Tong Yang Shou Xian Shi Jie Kou Ding Yi

type LoadBalanceStrategy interface {
Add(...string) error
RemoveAll() error
GetAll() ([]string, error)
Get(string) (string, error)
}

Shi Xian Wan Shang Shu Jie Kou De Jie Gou Hou ,Huan Xu Yao Zhu Ce Zhe Ge Bu Zou .

func init() {
RegisterLoadBalanceStrategyHandler("random", func() LoadBalanceStrategy {
return &RandomStrategy{}
})
}

Dong Tai Can Shu Pei Zhi Ji Huo Qu

Cha Jian Yao Zuo Dao Yi Chu Kai Fa Duo Chu Shi Yong ,Jiu Chi Bu Kai Dong Tai Can Shu Pei Zhi Gong Neng . GateKeeperYao Shi Xian Can Shu Pei Zhi Zhu Yao Yi Xia Ji Ge Bu Zou :
Shou Xian Bian Ji conf/dev/plugin_config.toml Zeng Jia Can Shu Pei Zhi ,Ju Ti Can Shu Ge Shi Jie Shao Dai Bu Chong ,Xian Ju Li Ru Xia :

[[http]]
display_name = "urlDi Zhi Zhong Xie "
sort = 6
postion = "normal"
unique_name = "url_rewrite"

[[http.items]]
field_type = "textarea"
field_display = "block"
field_clear = "none"
field_placeholder = "Ge Shi :^/test_service(.*) $1\nDuo Tiao Qing Huan Xing "
field_option = ""
field_value = ""
field_default_value = ""
field_unique_name = "rewrite_rule"
field_display_name = "URLZhong Xie "
field_required = false
field_valid_rule = "/^[\\S]+ [\\S]+$/is"

Qi Ci ,Da Kai Kong Zhi Duan Xiu Gai Xiang Ying Fu Wu Xin Xi .

Zui Hou Zai Xiang Ying Zhong Jian Jian Diao Yong Ji Ke .

func HTTPUrlRewriteMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
serviceDetail, err := model.GetServiceDetailFromGinContext(c)
if err != nil {
public.ResponseError(c, 2001, err)
c.Abort()
return
}
rewriteUrl := serviceDetail.PluginConf.GetPath("url_rewrite", "rewrite_rule").MustString()
...
c.Next()
}
}

Xing Neng Ce Shi

GateKeeper Dui Bi Ye Jie Qi Ta Zhi Ming APIWang Guan APISIX, Nginx, HAProxy, Kong, manba
Ying Jian Pei Zhi :128G, 40He Intel(R) Xeon(R) Silver 4114 2.20GHz
Ce Shi Can Shu :wrk -t50 -c500 -d30s --latency "http://xxxx/xxxx/"

Tong Guo Yi Shang Tu Pian Fen Xi Bu Nan De Chu ,GateKeeperXing Neng De Biao Xian Te Dian Wei :

  • Gao Bing Fa Ya Li Xia Bing Fa Xing Ke Da Dao Zhu Liu Wang Guan Xu Qiu .
  • Gao Bing Fa Ya Li Xia Bi Tong Lei Ruan Jian Nei Cun Zhan Yong Jiao Gao .
  • Gao Bing Fa Ya Li Xia 99Fen Wei Bi Tong Lei Ruan Jian Yan Chi Zui Di .

Zhu :Yi Shang Fu Wu Jun Wei Mo Ren An Zhuang Wei Zuo Diao You , Bu Tong Dian Nao Pei Zhi Ce Shi Jie Guo Ke Neng Bu Tong .
Geng Duo Xiang Xi Nei Rong Dai Bu Chong

Zi Dong Hua Ji Cheng Ce Shi

Zi Dong Hua Ji Cheng Ce Shi

About

A high-performance Golang gateway that supports rapid development and plug-inization

Topics

Resources

Readme

License

Apache-2.0 license

Contributing

Contributing

Stars

Watchers

Forks

Packages

Contributors