Traefik 一个反向代理的新工具

由于工作需要最近试用了几个反向路由的开源项目,Traefik就是其中之一。

一,Traefik 是干什么用的

简单来说它就是用来作反向代理和负载均衡的,比较适用于微服务化的场景,支持多种分布式的Key-Value存储系统,支持容器技术,下面这个图诠释了它的工作

二,Traefik 的特性

这些特性都是官方自己说的,再加上个人的一点通俗唱法解释。

  • 我很快 --- 经过测试吧,我感觉是速度一般般,但对于新产品来说速度做的还不错。

  • 安装简单 --- 不需要任何依赖,只是一个单独的可执行文件。(安装Traefik真的是简单,这操作给满分。)

  • 镜像很小 --- 有一个很小的官方 Docker Image。(可执行文件43MB,镜像只有45MB,评什么扣分。)

  • RestApi --- 支持Rest-API。(中规中矩。)

  • 配置热更新 --- 无需重启即可应用最新的配置。(其实这里说的配置只是动态的路由配置。)

  • 熔断机制 --- 对于后端服务的保护上支持熔断和重试机制。

  • 负载均衡 --- 负载策略内置两种,Weighted Round-Robin(wrr)和Dynamic Round-Robin(wrr)。

  • 支持Docker --- Docker, Swarm, Kubernetes, Marathon, Mesos。

  • 支持统计 --- Rest, Prometheus, Datadog, Statd。

  • 支持KV --- 支持多种分布式K-V系统,Zookeeper, Consul, Etcd, ECS等。

  • 多种通信协议 --- HTTP/1.1, HTTP/2, Websocket, GRPC等。

  • 支持ACME和HA --- 个人感觉Traefik的HA也就在ACME的场景下才有用。

  • Web-UI --- 有个AngularJS的Web-UI

三,Traefik 的基础组件

就两个组件,就这么简单,支持自己写 middle-ware。

  • Traefik
    Traefik 的主程序,启动时可以指定配置文件,

    ## 启动方式## 默认的文件名是traefik.toml## 寻址文件优先级是1. /etc/traefik, 2. $HOME/.traefik/ -->, 3. working directory.  traefik --configFile=foo/bar/myconfigfile.toml
  • Dashboard
    一个简单的Dashboard, 可以看当前的路由规则,和转发的结果统计。

四, 配置文件如何使用

Traefik 的配置分为静态配置 和动态配置两大类。

  1. 动态配置:用来控制路由和负载均衡策略,动态配置不需要重起Traefik就可以生效。

  2. 静态配置:简单的说吧除了动态配置的其他均为静态配置范畴,静态配置需要重启Traefik才能生效。

配置详细说明我就不写了,到官网上找你需要的配置是最明智的(我是明智的官网)。
但是在后面的的练习中会说明部分配置的意义。

注意点
  1. 动态配置可以和静态配置一起在同一个文件里,动态配置写在文件的最后。

  2. 如果想用配置文件来指定路由规则的话,需要将动态配置和静态配置文件分开,如下

    ## 在  "静态配置的最后面"  加入下面信息来指定动态配置文件[file]watch = truefilename = "rules.toml"

五,实战

业务需求
  1. 公司有多条产品线,但是每条产品线的负载压力不同,压力由高到低排序为, Mobile--> Web --> PC。

  2. 公司控制成本考虑,要求使用实体服务器,虚拟机或者容器技术来混合部署服务。

  3. 要求可以秒级的动态增加服务和减少服务来应对业务的压力。

画个简单的图来表

基础环境

回顾一下上面的缩略图,发现我们需要下列基本的元素。
我们需要有一个Docker环境,需要有一套分布式K-V系统,K-V系统选择etcd。

  • [x] Real-Machine,用虚拟机来作RealMachine。

  • [x] Docker

  • [x] Etcd-Cluster

  • [x] Traefik

  • [x] Demo-Service

    Question

  1. 手上没有docker和etcd-cluster怎么办?
    Answer: 伸手过来我教你

  2. 不想用etcd,因为公司项目没用这个K-V.
    Answer: 你可以更换到任何一款主流的K-V系统,因为Traefik支持很多种K-V。

DemoService

直接从docker-hub上 pull 已经写好的Image就好了。

docker pull wangxingge/simple-web
Traefik

直接从docker-hub 上 pull下来。

docker pull traefik

货全了,开始搭建配置环境。


Traefik启动与配置文件

  • 创建docker-compose.yml 文件。docker-compose读取yml文件来启动镜像。

#docker-compose.ymltraefik:image: traefik  command: --logLevel=DEBUG  ports:- "80"- "8080"- "443"## 端口由docker 自由分配,但是需要指定容器需要多少端口,如果要指定宿主机端口的话就写成## 80 默认的http端口,443 默认的https端口,8080默认的后台管理页面端口## ports:## - "80:80"## - "8080:8080"## - "443:443"volumes:- /var/run/docker.sock:/var/run/docker.sock- /opt/traefik/traefik.toml:/traefik.toml- /opt/traefik/rules.toml:/rules.toml    ## 磁盘映射,主要是为了映射配置文件和让traefik读取docker的网络配置## traefik.toml 是traefik的静态配置文件## rules.toml 是traefik的动态配置文件,也是路由配置
  • 创建traefik.toml配置文件。
    由于需求是秒级增加服务节点,所以路由配置信息我们不使用 rules.toml的形式提供,而使用分布式K-V来提供。
    在K-V 配置中设置exposebydefault = false 目的是为了不让启动容器时自动添加路由。

#traefik.toml################################################################
# Common configuration
################################################################debug=truelogLevel="DEBUG"[web]
address = ":8080"ProvidersThrottleDuration = 100000000################################################################
# Docker configuration backend
################################################################[docker]
domain = "docker.local"watch = trueexposedbydefault = false################################################################
# kv store
################################################################[etcd]
endpoint = "192.168.196.88:12379"watch = trueprefix = "traefik"
  • 启动Traefik

    # 使用docker-compose 目的是方便起停批量的镜像docker-compose up -d
  • 验证Traefik启动成功,查看docker镜像和后面管理页面是否可用

    [root@centos7 traefik]# docker-compose psName                   Command            State                                   Ports                                 
    ------------------------------------------------------------------------------------------------------------------------------
    traefik_traefik_1   /traefik --logLevel=DEBUG   Up      0.0.0.0:32772->443/tcp, 0.0.0.0:32773->80/tcp, 0.0.0.0:32771->8080/tcp

配置路由信息

前面说明了要使用分布式K-V来进行路由信息的配置,我们选择etcd-cluster。
Traefik的路由配置一共分为2大部分,FrontEnd和 BackEnd。

- Frontend

主要控制访问的路由规则,有三个主要控制方式:Header, Host, Path,都支持指定单个规则和按正则匹配。
匹配方式为某些规则的请求转发到某个Backend上。

- Backend

进行某个Backend匹配某一组服务,控制方式有:轮询控制,断路器控制(熔断),压力控制和健康检查。

  • 实战我们模拟的Frontend和Backend要求为。

  • Frontend: 分别根据Host和Url区分路由。

  • Backend: 三组服务分别是 mobile, web, pc, 轮询方式为wrr,加入健康检查,熔断控制使用最大数量限制。

  • 具体配置如下: 只需要定义frontend,backend不需要定义服务启动时会自动注册Backend.

AliasPathValue
1/traefik_configurations/1/frontends/front_web/priority3
1/traefik_configurations/1/frontends/front_web/passHostHeadertrue
1/traefik_configurations/1/frontends/front_web/backendbackend_web
1/traefik_configurations/1/frontends/front_web/routes/test_1/ruleHost:web.eastmoney.com
1/traefik_configurations/1/frontends/front_mobile/priority3
1/traefik_configurations/1/frontends/front_mobile/passHostHeadertrue
1/traefik_configurations/1/frontends/front_mobile/backendbackend_mobile
1/traefik_configurations/1/frontends/front_mobile/routes/test_1/ruleHost:mobile.eastmoney.com
1/traefik_configurations/1/frontends/front_pc/priority3
1/traefik_configurations/1/frontends/front_pc/passHostHeadertrue
1/traefik_configurations/1/frontends/front_pc/backendbackend_pc
1/traefik_configurations/1/frontends/front_pc/routes/test_1/ruleHost:pc.eastmoney.com
2/traefik_configurations/2/frontends/front_web/priority3
2/traefik_configurations/2/frontends/front_web/passHostHeadertrue
2/traefik_configurations/2/frontends/front_web/backendbackend_web
2/traefik_configurations/2/frontends/front_web/routes/test_1/rulePath:/web_root/web/{subdomain:[a-z]+}
2/traefik_configurations/2/frontends/front_mobile/priority3
2/traefik_configurations/2/frontends/front_mobile/passHostHeadertrue
2/traefik_configurations/2/frontends/front_mobile/backendbackend_mobile
2/traefik_configurations/2/frontends/front_mobile/routes/test_1/rulePath:/web_root/web/{subdomain:[a-z]+}
2/traefik_configurations/2/frontends/front_pc/priority3
2/traefik_configurations/2/frontends/front_pc/passHostHeadertrue
2/traefik_configurations/2/frontends/front_pc/backendbackend_pc
2/traefik_configurations/2/frontends/front_pc/routes/test_1/rulePath:/web_root/web/{subdomain:[a-z]+}

启动后台服务

根据目前的需要后台服务的运行环境有两种:测试过程我们使用Docker的环境方便一些。

宿主启动方式优缺点
Docker使用docker-compose 再用labels 指定路由信息方便动态调整服务数量,不需要修改路由配置。
实体机直接启动直接读取K-V的路由信息需要服务启动时到K-V中进行注册之后路由才会生效,一个服务使用一台服务器产生资源浪费。
  • 启动后台服务 业务说明了有三条主要业务线:mobile, pc, web,为了方便那我们分别为每个业务线创建一个docker-compose要用的配置文件。

    web:
    image: wangxingge/simple-web:latestcommand: /opt/simple-web --kvaddr="http://192.168.196.88:12379" --kv=true --backend="backend_web" -watch="/traefik/alias"ports:- "80"

mobile: image: wangxingge/simple-web:latest command: /opt/simple-web --kvaddr="http://192.168.196.88:12379" --kv=true --backend="backend_mobile" -watch="/traefik/alias" ports:

  • "80"

pc: image: wangxingge/simple-web:latest command: /opt/simple-web --kvaddr="http://192.168.196.88:12379" --kv=true --backend="backend_pc" -watch="/traefik/alias" ports:

  • "80"

    /opt/simple-web 启动程序

    kvaddr: K-V系统的地址

    kv: 是否使用K-V系统

    backend: 当前程序使用哪些backend, backend_web 表示当前服务为WEB业务提供服务。

    watch: 把traefik.toml中的K-V项的prefix再加上/alias就可以了,目的是为了配合traefik进行动态注册

    根据当前的线上压力情况,我们启动5个Mobile, 3个Web, 2个PC的后台服务。

    docker-compose up -d docker-compose scale web=5 docker-compose scale mobile=3 docker-compose scale pc=2

    启动和配置成功以后观查一下Traefik的Web页面  
    ![image](http://ogmbad78f.bkt.clouddn.c ... _1.png)

测试路由设置是否可用,测试步骤如下

  1. 在使用1号配置的时候按照Host进行路由。

  2. 使用Postman并设置相应的Host值进行请求,并观察返回结果。

  3. 切换至2号配置。

  4. 使用Postman并根据想应的URL进行请求,并观察返回结果。

  5. 动态添加和缩减容器数量,docker-compose scale serviceName=serviceCount

  6. 观察Traefik的后台管理页面,是否已经更新相应的路由。

  7. 使用Postman请求,观查是否后端相应的服务器数量是否已更新。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/39733.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Invalid block tag on line 16: 'endblock', expected 'endblock' or 'endblock topfiles'. Did you forget

Invalid block tag on line 16: ‘endblock’, expected ‘endblock’ or ‘endblock topfiles’. Did you forget to register or load this tag? 报错是因为代码没有注意空格问题。 改成缩进一格就行。

Your Bitbucket account has been locked. To unlock it and log in again you must solve a CAPTCHA.

Your Bitbucket account has been locked. To unlock it and log in again you must solve a CAPTCHA. 使用sourceTree拉取代码是出现这个错误,原因是账号对应的密码不对,需要修改window保存的账号名与密码 解决办法: 1,打开控…

启用或禁用更改块跟踪 (Changed Block Tracking, CBT)的两种方式

启用或禁用更改块跟踪 (Changed Block Tracking, CBT) 的两种方式 由于VMware提供了方便的数据块修改追踪(Changed Block Tracking,CBT)技术,为虚拟机增量备份提供了基础,除第一次备份必须完整备份与传输整个VM数据外&…

通过命令行关闭Bitlocker

cmd中输入以下命令关闭 manage-bde -off C: 但是有时候出现如下提示: 此时需要先执行如下命令:(系统分区不是C的话更改下面的盘符) manage-bde -autounlock -ClearAllKeys c: 然后再执行即可 manage-bde -off C: 提示解密进行…

vlock -- 锁定你的终端

原贴:http://www.linuxgem.org/2008/9/18/vlcok.5457.html vlock -- 锁定你的终端 galeki posted 2008年9月18日 01:01 in 实用软件 with tags vlock 终端 , 844 阅读 Vifm -- 支持 Vi 快捷键的文件管理器 基本上每个桌面环境下,都有方便的锁屏功能&am…

BlockChain-Account_TakeOver

题目描述 ECDSA 签名 假设我们的私钥为 d A d_A dA​而公钥为 Q A Q_A QA​, Q A d A ⋅ G Q_Ad_A\cdot G QA​dA​⋅G,接下来就是签名的过程,要签名的消息为 m m m 取 e H A S H ( m ) e HASH(m) eHASH(m)取 e e e的左边的 L n L_n L…

02_Lock锁

首先看一下JUC的重磅武器——锁(Lock) 相比同步锁,JUC包中的Lock锁的功能更加强大,它提供了各种各样的锁(公平锁,非公平锁,共享锁,独占锁……),所以使用起来…

block()/blockFirst()/blockLast() 解决办法

定位到BlockingLoadBalancerClient.java 155行 出问题的点代码如下&#xff1a; Response<ServiceInstance> loadBalancerResponse Mono.from(loadBalancer.choose(request)).block();将这段修改为异步解决&#xff1a; 新建一个新的类 import org.springframework.c…

对Openai Chat API的一些理解

目录 偷懒的编写一个API 如何让ChatGPT理解我们都在聊什么 付费和一些注意事项 Create chat completion 最近ChatGPT这么火&#xff0c;那必须来凑个热闹啊。 申请账户我就不多说了&#xff0c;懂得都懂。 偷懒的编写一个API 从ChatGPT的Chat演示看&#xff0c;他需要一…

借AI之势,打破创意与想象的边界

IMMENSE、36氪&#xff5c;作者 01 “未来是属于AI的” 3月2日&#xff0c;内容创作圈大地震。 就在3月2日凌晨&#xff0c;OpenAI宣布开放ChatGPT本体模型API&#xff0c;其价格为1k tokens/$0.002。也就是说&#xff0c;从这一天开始&#xff0c;任何企业都能让ChatGPT为自…

谷歌的Bard怎么样?

Bard是什么&#xff1f; ChatGPT&#xff1a; Bard可以指以下几种事物&#xff1a; Bard是一个英雄联盟&#xff08;League of Legends&#xff09;游戏中的角色名称&#xff0c;他是一个能够进行攻击和治疗的辅助英雄。 Bard是指中世纪欧洲的一类文学艺术家&#xff0c;主要从…

实测「360智脑」的真正实力:能否领跑国内百“模”大战?

ChatGPT 的发布&#xff0c;无疑掀起了一股“AI 技术”新浪潮。百度文心一言、华为盘古、商汤日日新、阿里通义千问、讯飞星火等众多大模型的接连问世&#xff0c;使得国内的“百模之战”进入了前所未有的白热化阶段。无论是各大互联网巨头&#xff0c;还是清华、复旦等知名高校…

不止Chat,GPT-4 将释放更大生产力

目录 1.对 ChatGPT 的巨大超越 2.与 ChatGPT 相同的技术路线 3.GPT-4 背后的强大阵容 4.开启多模态大模型时代 相比 ChatGPT 能力有大进化&#xff0c;多模态上有突破但不多。 近日&#xff0c;多模态大模型 GPT-4 震撼登场&#xff01; GPT-4 能够接受图像和文本输入&am…

LoRA大模型加速微调和训练算法

ChatGPT带领着大模型像雨后春笋一般层出不穷&#xff0c;大家都对大模型微调跃跃欲试&#xff0c;现在咱们聊聊其中的常见的算法 1 LORA 低秩适应 理论 Lora( Low-Rank Adaotation)&#xff0c;低秩自适应模型微调的方法&#xff0c;它冻结预训练模型的权重&#xff0c;并将…

数据规模缩小 200 倍!指令微调高效指导大模型学习

夕小瑶科技说 原创 作者 | 智商掉了一地、Python 最近大型语言模型&#xff08;LLMs&#xff09;的指令微调备受研究人员的关注&#xff0c;因为它可以开发 LLM 遵循指令的潜力&#xff0c;使其更加符合特定的任务需求。虽然指令微调&#xff08;Instruction Tuning&#xff…

ChatGPT是否可以写出一篇论文

利用AI反哺教育和学术&#xff0c;在训练它写论文的过程中你学到的&#xff0c;比你自己写一篇论文学到的更多。让工具回归工具&#xff0c;让我们变成更好的我们&#xff01; 第一步&#xff1a;现象确认 第二步&#xff1a;学术概念化 第三步&#xff1a;定位优质的学术资源 …

网页版即时通讯聊天工具,支持主流浏览器,无需安装即可使用

基于信贸通即时通讯系统开发的网页版即时通讯&#xff0c;无需安装支持主流浏览器在线直接运行。可以与电脑版本和手机版本互通。支持文本聊天&#xff0c;标签&#xff0c;图片&#xff0c;文件传输&#xff0c;还支持位置接收等。 特点&#xff1a; 1、简单快速的集成到自己…

Ims跟2/3G会议电话(Conference call)流程差异介绍

2/3G Conference call 合并(Merged)通话前,两路电话只能一路保持(Hold),一路通话(Active)。 主叫Merged操作,Hold的一路会变成Active,进入会议通话。 例如终端A跟C通话,再跟B通话,此时B就是Active状态,C从Active变成Hold状态。Merged进入会议通话后,C又从Hold变…

英文学术会议参会必读-青年学者会议和演讲英语指南

本书介绍 本书讨论并展示在学术会议上使用的英语话语的类型&#xff0c;并从多角度为准会议参与者提供了指导。它是根据参加的众多学术会议的研究结果和作者的观察结果而得出的&#xff0c;基于对应用语言学的公认研究方法&#xff0c;以及针对学生&#xff0c;ESP老师&#xf…

jitsi-meet 主持人退出会议后结束会议室(网页访问)

实现功能&#xff1a; 当主持人退出当前会议后&#xff0c;要求参与会议的其他人员也都退出当前会议。 修改代码&#xff1a; 修改后&#xff0c;通过make编译代码。 将css/all.css 和 libs文件夹下的文件上传至会议服务器的对应目录下。重启会议服务器即可。 /usr/share/ji…