摘要:我們整個(gè)監(jiān)控的部分,沒(méi)有采用社區(qū)流行的,而是自己實(shí)現(xiàn)了一套。但是對(duì)于前端來(lái)說(shuō),只暴露一個(gè)入口,引入一個(gè)反代即可。簡(jiǎn)介是一個(gè)為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代反向代理負(fù)載均衡工具。配置熱更新,支持多種后端。將請(qǐng)求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。
前言
對(duì)于監(jiān)控這塊,我們基于prometheus實(shí)現(xiàn),當(dāng)然做了大量的優(yōu)化,包括前面所講到的配置接口化。我們整個(gè)監(jiān)控的UI部分,沒(méi)有采用社區(qū)流行的grafana,而是自己實(shí)現(xiàn)了一套。我們后端的服務(wù)按照功能拆分了幾大塊,例如拓?fù)?,網(wǎng)絡(luò)流量,配置,元數(shù)據(jù)等等。拆分的好處就是可以解耦,各個(gè)模塊功能的升級(jí)不影響其他模塊。但是對(duì)于前端來(lái)說(shuō),只暴露一個(gè)入口,引入一個(gè)反代即可。
剛開(kāi)始選用了nginx,后期由于要加入鑒權(quán)的功能,nginx就不能滿足我們的需求了。這個(gè)時(shí)候基本上需求就變?yōu)檫x擇一個(gè)可編程的反代。當(dāng)然我在做電商的時(shí)候,我們經(jīng)常采用openresty,結(jié)合nginx和lua,可以實(shí)現(xiàn)。而且社區(qū)基于openresty實(shí)現(xiàn)了kong和orange等api網(wǎng)關(guān)。
但是考慮我們的場(chǎng)景,整個(gè)項(xiàng)目并沒(méi)有特別高的并發(fā)和性能要求,而且我們團(tuán)隊(duì)最熟悉的是golang和python。所以選擇了traefik。我們可以在后期,可以寫(xiě)各種的插件來(lái)滿足我們的需求。
Tr?f?k 是一個(gè)為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代HTTP反向代理、負(fù)載均衡工具。 它支持多種后臺(tái) (Docker, Swarm, Kubernetes, Marathon, Mesos, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…) 來(lái)自動(dòng)化、動(dòng)態(tài)的應(yīng)用它的配置文件設(shè)置。
簡(jiǎn)單總結(jié)一下我認(rèn)為traefik的特點(diǎn):
官方測(cè)試traefik有nginx 85%的性能。這個(gè)性能對(duì)于一般項(xiàng)目足夠了,換來(lái)的是強(qiáng)大的編程能力,來(lái)從容應(yīng)對(duì)各種需求。而且golang編寫(xiě),無(wú)依賴。
配置熱更新,支持多種后端。
支持集群模式
提供了一個(gè)web UI
結(jié)合項(xiàng)目寫(xiě)demo我們的項(xiàng)目目前基本兩個(gè)需求,鑒權(quán)和反代。
配置文件對(duì)于反代。主要講一些配置相關(guān)。我們采用的是file。traefik對(duì)這種靜態(tài)文件支持watcher。依舊無(wú)需重啟進(jìn)程。
主配置文件traefik.toml
################################################################ # Global configuration ################################################################ # Enable debug mode # # Optional # Default: false # # debug = true # Log level # # Optional # Default: "ERROR" # # logLevel = "ERROR" # Entrypoints to be used by frontends that do not specify any entrypoint. # Each frontend can specify its own entrypoints. # # Optional # Default: ["http"] # # defaultEntryPoints = ["http", "https"] # Entrypoints definition # # Optional # Default: [entryPoints] [entryPoints.http] address = ":8000" # Traefik logs # Enabled by default and log to stdout # # Optional # # [traefikLog] # Sets the filepath for the traefik log. If not specified, stdout will be used. # Intermediate directories are created if necessary. # # Optional # Default: os.Stdout # # filePath = "log/traefik.log" # Format is either "json" or "common". # # Optional # Default: "common" # # format = "common" # Enable access logs # By default it will write to stdout and produce logs in the textual # Common Log Format (CLF), extended with additional fields. # # Optional # # [accessLog] # Sets the file path for the access log. If not specified, stdout will be used. # Intermediate directories are created if necessary. # # Optional # Default: os.Stdout # # filePath = "/path/to/log/log.txt" # Format is either "json" or "common". # # Optional # Default: "common" # # format = "common" ################################################################ # Web configuration backend ################################################################ # Enable web configuration backend [web] # Web administration port # # Required # address = ":8080" ################################################################ # Docker configuration backend ################################################################ # Enable Docker configuration backend # [docker] # Docker server endpoint. Can be a tcp or a unix socket endpoint. # # Required # Default: "unix:///var/run/docker.sock" # # endpoint = "tcp://10.10.10.10:2375" # Default domain used. # Can be overridden by setting the "traefik.domain" label on a container. # # Optional # Default: "" # # domain = "docker.localhost" # Expose containers by default in traefik # # Optional # Default: true # # exposedbydefault = true ################################################################ # File configuration backend ################################################################ [file] filename = "rules.toml" watch = true
注意filename = "rules.toml",這個(gè)時(shí)候我把所有的代理規(guī)則寫(xiě)到一個(gè)rules.toml文件中,也算一種解耦的思路。
當(dāng)然traefik也支持多文件。就是你可以指定一個(gè)路徑,然后會(huì)將該路徑下所有rule文件加載
[file] directory = "/path/to/config/"
下面是demo中的rules.toml
[backends] [backends.trend] [backends.trend.servers] [backends.trend.servers.server1] url = "http://api.domain.com:8812" weight = 1 [backends.trend.healthcheck] path = "/" interval = "10s" # Frontends [frontends] [frontends.trend] backend = "trend" [frontends.trend.routes.router1] rule = "PathPrefixStrip:/trend"啟動(dòng)traefik
執(zhí)行
./traefik --c traefik.toml實(shí)際效果
訪問(wèn)ui:
對(duì)于鑒權(quán):
traefik在中間件中支持了幾種auth
basic auth
forward
目前forward基本能滿足我們的需求。將請(qǐng)求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。
當(dāng)然oauth,jwt等之類是目前不支持的,但是實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,增加一個(gè)中間件而已。
沒(méi)有最好的技術(shù),只有合適的場(chǎng)景。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/32637.html
摘要:我們整個(gè)監(jiān)控的部分,沒(méi)有采用社區(qū)流行的,而是自己實(shí)現(xiàn)了一套。但是對(duì)于前端來(lái)說(shuō),只暴露一個(gè)入口,引入一個(gè)反代即可。簡(jiǎn)介是一個(gè)為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代反向代理負(fù)載均衡工具。配置熱更新,支持多種后端。將請(qǐng)求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。 前言 對(duì)于監(jiān)控這塊,我們基于prometheus實(shí)現(xiàn),當(dāng)然做了大量的優(yōu)化,包括前面所講到的配置接口化。我們整個(gè)監(jiān)控的UI部分,沒(méi)有采用社區(qū)流行的grafa...
摘要:我們整個(gè)監(jiān)控的部分,沒(méi)有采用社區(qū)流行的,而是自己實(shí)現(xiàn)了一套。但是對(duì)于前端來(lái)說(shuō),只暴露一個(gè)入口,引入一個(gè)反代即可。簡(jiǎn)介是一個(gè)為了讓部署微服務(wù)更加便捷而誕生的現(xiàn)代反向代理負(fù)載均衡工具。配置熱更新,支持多種后端。將請(qǐng)求轉(zhuǎn)發(fā)到統(tǒng)一認(rèn)證服務(wù)。 前言 對(duì)于監(jiān)控這塊,我們基于prometheus實(shí)現(xiàn),當(dāng)然做了大量的優(yōu)化,包括前面所講到的配置接口化。我們整個(gè)監(jiān)控的UI部分,沒(méi)有采用社區(qū)流行的grafa...
摘要:使用渲染評(píng)論列表,搭配的反代可以實(shí)現(xiàn)在網(wǎng)絡(luò)審查地區(qū)加載評(píng)論列表支持自動(dòng)檢測(cè)訪客的可用性自動(dòng)選擇加載原生評(píng)論完整模式和提供的評(píng)論基礎(chǔ)模式。簡(jiǎn)介最早看到屈哥的上看到了屈哥用開(kāi)發(fā)的評(píng)論基礎(chǔ)模式供無(wú)法訪問(wèn)的訪客查看評(píng)論和發(fā)表評(píng)論。 https://github.com/SukkaW/Dis... 使用 Disqus API 渲染評(píng)論列表,搭配 Disqus API 的反代可以實(shí)現(xiàn)在網(wǎng)絡(luò)審查地區(qū)...
摘要:一個(gè)小服務(wù)器加本地一個(gè)閑置從機(jī)撐進(jìn)去這么多東西很顯然爆了,于是把拆出來(lái),用上了公共的云服務(wù)容器鏡像服務(wù)。使用對(duì)集群外暴露服務(wù)這里使用的是在中部署有官方部署手冊(cè),基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實(shí)踐 之前自己的項(xiàng)目開(kāi)發(fā)就搭了個(gè)cicd的環(huán)境,那時(shí)候是在本就小的可憐的服務(wù)器上搭了一套 jenkins + docker...
摘要:一個(gè)小服務(wù)器加本地一個(gè)閑置從機(jī)撐進(jìn)去這么多東西很顯然爆了,于是把拆出來(lái),用上了公共的云服務(wù)容器鏡像服務(wù)。使用對(duì)集群外暴露服務(wù)這里使用的是在中部署有官方部署手冊(cè),基本按著走一遍就能部署上去了。 基于kubernetes+docker+jenkins的DevOps實(shí)踐 之前自己的項(xiàng)目開(kāi)發(fā)就搭了個(gè)cicd的環(huán)境,那時(shí)候是在本就小的可憐的服務(wù)器上搭了一套 jenkins + docker...
閱讀 3051·2021-09-22 15:52
閱讀 2918·2019-08-30 15:55
閱讀 2713·2019-08-30 15:53
閱讀 2464·2019-08-30 13:21
閱讀 1634·2019-08-30 13:10
閱讀 2492·2019-08-26 12:09
閱讀 2579·2019-08-26 10:33
閱讀 1811·2019-08-23 18:06