最新要闻
- 联发科MT6825芯片组获上海MWC 2023亚洲突破性设备创新大奖!手机卫星可双向通信_焦点资讯
- 支持Type-C充电:英菲克F1无线鼠标24.9元抄底
- 天天热消息:做错N多年!央视科普:鸡蛋别再放到冰箱门上了
- 要求罚金30亿美元!Chatgpt涉嫌信息盗窃被起诉 全球视讯
- 官方辟谣激情誓师女生考508分:女生考了600多分 考得特别好 环球焦点
- 全球低水足迹倡议(LWFi)联盟扩容,伊利“双足迹”开启全链减碳新篇章_世界视点
- 新款2024MGCyberster泄露 当前热讯
- 天天快讯:暴露年龄!时隔16年 Office“大眼夹”回归Windows 11:功能焕然一新
- 16.5亿打造!《封神》妲己首次亮相引热议 网友称妆造诡异在拍画皮吗
- 苹果之后 三星被指侵犯加州理工Wi-Fi专利:索赔可达数十亿美元-世界新消息
- “快乐水”不快乐了!阿斯巴甜将被定为可能致癌物质|天天热资讯
- 华为发布F5.5G智简全光联接四大创新:万兆时代来了
- 讯息:大宗交易:蓝色光标成交6967.8万元,折价1.96%(06-29)
- 天天速读:高铁踹老头底被曝
- 如何使用 iOS 17 将照片变成 iMessage 贴纸
- 多家高校下月起停用微信支付 微信团队致歉:即刻修正
手机
光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 光庭信息跌4.57% 2021上市超募11亿2022扣非降74% 时快讯
- 搜狐汽车全球快讯 | 大众汽车最新专利曝光:仪表支持拆卸 可用手机、平板替代-环球关注
- 视点!美国首位女总统即将诞生?拜登恐怕要提前下岗,美政坛迎来变局?
- 当前速递!用理想仪器实现更好的颗粒 德国新帕泰克亮相CPHI & PMEC China获好评
- 微粒贷怎么申请开通 开通方法如下
- 焦点简讯:心疼!这位40岁的云南缉毒警,已是满头白发
家电
Spring Cloud 如何引入云原生网关,创新微服务架构|天天最新
作者:赵炳堃(秉钧)
【资料图】
在传统的微服务体系中,Spring Cloud Alibaba 和 Zuul 常被用作配合 SpringCloud 使用的微服务网关。然而,这些传统的 Java 网关在面对大规模流量的场景下仍存在种种问题。例如 Zuul 由于采用了非异步 IO 的架构,导致了其在面对高流量的情况下容易出现阻塞的现象,Spring Cloud Gateway 也会在流量很大的情况下产生 Full GC 的情况,导致请求RT 变长,影响用户体验和业务稳定性。因此我们需要寻找一个新的选项,来替代这些传统的微服务网关。
Higress: Spring Cloud生态下微服务网关的新选择
Higress 是阿里巴巴开源的一款下一代云原生微服务网关。Higress 可以对接多种注册中心,包括Nacos/Zookeeper/Eureka 等,能够无缝集成 Spring Cloud 应用,对 Dubbo/Sentinel/OpenSergo 等微服务生态也有着深度的集成。与此同时,Higress 采用 C++内核,相比于传统的 Java 网关来说性能更高,更稳定,对比Spring Cloud Gateway 和 Zuul 来说,性能可以提升至2-4倍。另外,Higress 还天然兼容 K8s 的Ingress/Gateway API 标准,是一款更符合云原生时代标准的微服务网关。
更多性能压测试验,请参考:https://mp.weixin.qq.com/s/45ZAc5CGfND46Ao3lbHefQ
Higress无缝对接Spring Cloud应用发布实战
在现代软件架构逐渐走向微服务化、云原生化的过程中,应用的更新和迭代的频率变得越来越快,如何在尽可能保证用户体验不受影响的情况下完成应用的迭代发布就显得至关重要。目前业界普遍采用的几种典型的应用发布策略包括蓝绿发布、金丝雀发布、A/B Testing发布等。接下来本文将介绍如何使用Higress来实现Spring Cloud Alibaba应用发布的最佳实践。
前提条件
- 安装Higress,并安装Istio CRD,参考Higress安装部署文档。
- 安装Naocs,参考Nacos安装部署文档。
Higress支持将Nacos,Spring Cloud应用部署于K8s集群内,或者独立于K8s进行部署。为了演示方便,本文将Higress,Nacos,Spring Cloud应用都部署在本地K8s集群。
1. 通过Higress实现Spring Cloud应用的服务发现和路由
1.1. 部署SpringCloudAlibaba应用
apiVersion: apps/v1kind: Deploymentmetadata: name: spring-cloud-demo-v1spec: replicas: 1 selector: matchLabels: app: spring-cloud-demo template: metadata: labels: app: spring-cloud-demo spec: containers: - name: server image: higress-registry.cn-hangzhou.cr.aliyuncs.com/samples/spring-cloud-demo:v1 imagePullPolicy: IfNotPresent env: # 注册到的nacos的地址 - name: NACOS_REGISTRY_ADDRESS value: nacos-server.default.svc.cluster.local # 注册时携带的version元信息 - name: SPRING_CLOUD_NACOS_DEMO_VERSION value: v1
我们在k8s集群中部署如上Deployment,其中通过NACOS_REGISTRY_ADDRESS和SPRING_CLOUD_NACOS_DEMO_VERSION两个环境变量指定了Nacos的地址以及注册时携带的version元信息。SpringCloud应用的application.properties配置会读取这两个环境变量,如下所示:
spring.cloud.nacos.discovery.server-addr=${NACOS_REGISTRY_ADDRESS}:8848spring.cloud.nacos.discovery.metadata.version=${SPRING_CLOUD_NACOS_DEMO_VERSION}
1.2. 配置服务来源
Higress支持多种服务来源,包括Nacos/Zookeeper/DNS/固定IP,通过创建Nacos服务来源,Higress就可以发现注册到Nacos上的服务,从而完成转发请求到这些服务上。
进入Higress控制台(http://console.higress.io/),点击 服务来源-创建服务来源 以创建服务来源。这里选择Nacos 2.X,然后填写注册中心的地址,端口,命名空间,服务分组等信息。注册中心的地址可以填写ip或者域名,本文将Nacos部署在本地K8s中,通过K8s service暴露Nacos端口,因此这里填写对应的service域名。
Higress 控制台:http://console.higress.io/
配置好Nacos服务来源后,我们可以在服务列表中看到我们刚刚部署好的应用。
1.3. 创建域名和路由
在Higress控制台上点击域名管理-创建域名,创建一条demo.springcloud.com域名用于后续的访问。
点击路由配置-创建路由,创建一条名为demo的路由,域名选择我们刚刚创建好的demo.springcloud.com,目标服务选择我们在1.2中看到的Spring Cloud应用,path配置为/version。
1.4. 请求验证
接下来我们就可以用配置好的路由来访问SpringCloud应用了,在请求时需要将demo.springcloud.com域名解析到本地ip,如下所示,可以成功得到返回结果。
注:如果您将Higress的80和443端口通过LoadBalancer的方式暴露出来,这里需要将本地ip替换为对应LoadBalancer的ip,详见Higress快速开始文档。
2. 利用Higress进行蓝绿发布
在蓝绿发布中,有两套相同的运行环境,一套是当前正在使用的生产环境(蓝色环境),另一套是新版本的测试环境(绿色环境)。新版本的代码只在绿色环境中运行,测试通过后,直接将流量切换到绿色环境中,从而完成新版本的上线。与此同时蓝色环境作为热备环境,当绿色环境出现问题需要回滚时,也可以直接将流量全部再切换回蓝色环境。
2.1. 部署新版本应用
在本地K8s集群中apply如下资源,以部署v2版本的SpringCloud应用。
apiVersion: apps/v1kind: Deploymentmetadata: name: spring-cloud-demo-v2spec: replicas: 1 selector: matchLabels: app: spring-cloud-demo template: metadata: labels: app: spring-cloud-demo spec: containers: - name: server image: higress-registry.cn-hangzhou.cr.aliyuncs.com/samples/spring-cloud-demo:v2 imagePullPolicy: IfNotPresent env: - name: NACOS_REGISTRY_ADDRESS value: nacos-server.default.svc.cluster.local - name: SPRING_CLOUD_NACOS_DEMO_VERSION value: v2
部署完毕后,我们可以在Higress控制台的服务列表中看到应用已经有两个endpoint了,如下图所示:
2.2. 为服务划分子集
部署完v2版本的应用后,我们可以在Nacos控制台(http://localhost:8848/nacos)上看到service-provider这个服务有两个ip,它们的metadata中的version字段分别为v1和v2。Higress可以根据服务的元信息将服务划分为不同的子集(subset),从而将请求转发到新版本或者老版本的应用中去。
在本地K8s集群中apply如下资源,从而根据应用元信息中的version字段将服务划分为v1和v2两个子集。
apiVersion: networking.istio.io/v1alpha3kind: DestinationRulemetadata: name: demo namespace: higress-systemspec: host: service-provider.DEFAULT-GROUP.public.nacos subsets: - name: v1 labels: version: v1 - name: v2 labels: version: v2
2.3. 修改ingress路由规则
新版本应用上线后,我们需要把流量全部切到新版本应用中去,这时只需要简单地修改一下我们在1.3中创建的路由即可。我们可以在本地K8s集群中找到如下ingress资源,这对应了我们在1.3中创建的那条路由。
我们直接编辑这条ingress资源,将higress.io/destination这条annotation的value改为service-provider.DEFAULT-GROUP.public.nacos v2,即可将路由的目标服务修改为v2子集。
apiVersion: networking.k8s.io/v1kind: Ingressmetadata: annotations: higress.io/destination: service-provider.DEFAULT-GROUP.public.nacos v2 higress.io/ignore-path-case: "false" labels: higress.io/domain_demo.springcloud.com: "true" higress.io/resource-definer: higress name: demo namespace: higress-systemspec: ingressClassName: higress rules: - host: demo.springcloud.com http: paths: - backend: resource: apiGroup: networking.higress.io kind: McpBridge name: default path: /version pathType: Prefix
2.4. 请求验证
我们再发送请求,可以看到此时得到的是v2版本应用的返回结果,如此便实现了新版本的上线发布。
如果发现已上线的新版本出现问题需要回滚,只需要修改ingress路由中的higress.io/destination,将值更改为service-provider.DEFAULT-GROUP.public.nacos v1即可完成回滚。
3. 利用Higress进行金丝雀发布
金丝雀发布是将少量的请求引流到新版本上,因此部署新版本服务只需极小数的实例。验证新版本符合预期后,逐步调整流量权重比例,使得流量慢慢从老版本迁移至新版本,期间可以根据设置的流量比例,对新版本服务进行扩容,同时对老版本服务进行缩容,使得底层资源得到最大化利用。
3.1. 修改ingress路由规则
Higress可以通过一条Ingress注解轻松完成应用的金丝雀发布。我们编辑2.3中的ingress资源,将ingress中的higress.io/destination注解按如下方式进行修改:
metadata: annotations: higress.io/destination: | 80% service-provider.DEFAULT-GROUP.public.nacos v1 20% service-provider.DEFAULT-GROUP.public.nacos v2
这样Higress就可以把80%的流量转发到v1版本的应用,将20%的流量转发到v2版本的应用。
3.2. 请求验证
连续发送20条请求,可以看到v1和v2的比例符合我们在ingress中配置的比例。随着灰度的进行,可以逐渐调大v2版本的流量比例,最终完成新版本的平滑上线。
4. 利用Higress进行A/B Testing发布
A/B测试基于用户请求的元信息将流量路由到新版本,这是一种基于请求内容匹配的灰度发布策略。只有匹配特定规则的请求才会被引流到新版本,常见的做法包括基于HTTP Header和Cookie。基于HTTP Header方式,例如User-Agent的值为Android的请求 (来自安卓系统的请求)可以访问新版本,其他系统仍然访问旧版本。基于Cookie方式,Cookie中通常包含具有业务语义的用户信息,例如普通用户可以访问新版本,VIP用户仍然访问旧版本。
4.1. 修改ingress路由规则
在本示例中,我们通过HTTP header中的User-Agent对流量进行区分,将Android系统的流量转发到v2版本,其他系统的流量仍保持v1版本。首先修改2.3中名叫demo的ingress资源,将higress.io/destination修改为v1版本,代表目前线上的流量全部会打到原来的v1版本:
metadata: annotations: higress.io/destination: service-provider.DEFAULT-GROUP.public.nacos v1
当新版本部署完成后,再新建一条如下所示的ingress路由。这里采用正则匹配的方式,当User-Agent中含有Android时,将请求转发到v2版本的服务。
kind: Ingressmetadata: annotations: higress.io/destination: service-provider.DEFAULT-GROUP.public.nacos v2 higress.io/canary: "true" higress.io/canary-by-header: "User-Agent" higress.io/canary-by-header-pattern: ".*Android.*" higress.io/ignore-path-case: "false" labels: higress.io/domain_demo.springcloud.com: "true" higress.io/resource-definer: higress name: demo-ab namespace: higress-systemspec: ingressClassName: higress rules: - host: demo.springcloud.com http: paths: - backend: resource: apiGroup: networking.higress.io kind: McpBridge name: default path: /version pathType: Prefix
4.2. 请求验证
可以看到来自安卓系统的请求被转发到了v2版本,其余系统仍访问v1版本。
当新版本验证完毕需要全量上线时,只需要将demo路由的higress.io/destination注解修改为v2版本,并删除demo-ab路由,这样所有流量就都会访问v2版本了。
加入Higress和Spring Cloud Aliaba社区
Spring Cloud Alibaba社区交流群:钉钉群号2415000986
Higress社区交流群:钉钉群号7685011250
Higress 社区交流钉钉群中有历次 Higress 社区周会录屏,包括本文中提到的结合 Spring Cloud 应用发布的完整实操视频。
关键词:
-
拈花云科基于 Apache DolphinScheduler 在文旅业态下的实践
![file](https: img2023 cnblogs com other 2685289 202306 2685289-2
来源: Spring Cloud 如何引入云原生网关,创新微服务架构|天天最新
拈花云科基于 Apache DolphinScheduler 在文旅业态下的实践
.NET 个人博客-添加RSS订阅功能 世界快播
如何将视频文件.h264和音频文件.mp3复用为输出文件output.mp4?
天天热资讯!商品日报(6月29日):尿素再度拉涨超5% 供应利多刺激甲醇盘中涨超3%
联发科MT6825芯片组获上海MWC 2023亚洲突破性设备创新大奖!手机卫星可双向通信_焦点资讯
支持Type-C充电:英菲克F1无线鼠标24.9元抄底
天天热消息:做错N多年!央视科普:鸡蛋别再放到冰箱门上了
要求罚金30亿美元!Chatgpt涉嫌信息盗窃被起诉 全球视讯
官方辟谣激情誓师女生考508分:女生考了600多分 考得特别好 环球焦点
全球低水足迹倡议(LWFi)联盟扩容,伊利“双足迹”开启全链减碳新篇章_世界视点
IDA的使用-1_世界新消息
clop勒索软件攻击活动频发,西门子能源中招_世界观察
精彩看点:构建数字工厂丨数据分析与图表视图模型的配置用法
券商数字化创新场景数据中台实践
热门看点:C# 序列化大小写 序列化对象为大小写 JsonConvert.SerializeObject
新款2024MGCyberster泄露 当前热讯
第十四届夏季达沃斯论坛闭幕
天天快讯:暴露年龄!时隔16年 Office“大眼夹”回归Windows 11:功能焕然一新
16.5亿打造!《封神》妲己首次亮相引热议 网友称妆造诡异在拍画皮吗
苹果之后 三星被指侵犯加州理工Wi-Fi专利:索赔可达数十亿美元-世界新消息
“快乐水”不快乐了!阿斯巴甜将被定为可能致癌物质|天天热资讯
华为发布F5.5G智简全光联接四大创新:万兆时代来了
讯息:大宗交易:蓝色光标成交6967.8万元,折价1.96%(06-29)
解读 RocketMQ 5.0 全新的高可用设计
探秘华为云盘古大模型:AI for industries的身体力行_报道
天天速读:高铁踹老头底被曝
科创板收盘播报:科创50指数跌0.67% 新股时创能源较发行价涨63.91%|全球热闻
如何使用 iOS 17 将照片变成 iMessage 贴纸
多家高校下月起停用微信支付 微信团队致歉:即刻修正
鳄鱼独居16年产子 科学家:濒临灭绝物种的生存策略
南极人纯棉抗菌袜子8双14.9元:吸湿排汗 亲肤透气
【全球报资讯】多家高校下月起停用微信支付 腾讯回应网友不买账:专家称反垄断太有意义
Intel四代至强命运多舛:突曝严重Bug 部分停止出货
精彩看点:司法部出手!这项业务,有大变化!
【后端面经-Java】公平锁和加锁流程 全球简讯
讯息:玖章算术与百度智能云达成合作,「NineData SQL 开发」成为百度智能云主推的数据库工具
【高端访谈】中非经贸博览会将助力刚中贸易提质升级——访刚果(金)外贸部长布萨_当前视讯
央企改革三年重点任务考核结果出炉:三大运营商排名一一曝光
摩托骑手被汽车撞下高架 现场惨!官方通报:系被追尾 伤者暂无生命危险
立白洗衣液大促:山茶幽香、除菌除螨 10斤到手38元_每日简讯
MWC牌面!魅族Flyme Auto上央视:车机互联打通软硬件|当前快看
露牙媚眼羞涩笑主播圈粉中老年人:当当网李国庆在线求合作
每日消息!索尼ZV-E1“打鸡血”:免费升级4K 120p拍摄
年内8家“袖珍”IPO公司登陆港交所-天天观天下
鼎通科技(688668):该股换手率大于8%(06-29)_世界速讯
性能4倍于1060!RTX 4060今天开售:2399元 英伟达诚意感受到没-当前速读
世界即时看!疑因不满项目谈判被提前泄露:特斯拉或已放弃在西班牙建厂!
今日讯!内蒙古康巴什区:让“梧桐树”更加枝繁叶茂
环球播报:装机选500W电源就是万金油?你又错了
海南环岛旅游公路主线路基段即将完工:12月底通车 串联全省景点|独家
Windows自带杀软又出问题:Defender新版CPU占用过高|环球焦点
每部手机都有的出厂标签要改了!工信部:7月1日起正式启用新型进网许可标志
90后宝妈沙漠边缘送奶茶月入7000 我能赚钱生娃:直言男人除了赚钱还能干啥? 当前速递
卢卡申科:普京曾有意杀死普里戈任,我劝他不要鲁莽行事
数字经济催生的低代码开发浪潮,JNPF带你轻松实现应用程序拓展! 天天日报
直播平台源码功能分享:直播回放功能的实现_当前看点
【天天快播报】云顶新耀-B早盘持续走高涨近9% 中金维持跑赢行业评级
能在车上点外卖了!特斯拉或将推出应用商城 可支持第三方应用与服务 热点聚焦
法庭文件出纰漏 五星大饭店运营成本曝光|实时焦点
剑指比亚迪海豚 宝骏云朵外观细节图发布:全球顶级设计师操刀 环球观察
40度高温杀回马枪!南方多地加入高温群聊蒸桑拿
传奇女歌手麦当娜进ICU:因细菌感染_每日看点
宁德时代联合长安汽车等共设动力电池公司
js的Set数据类型
Linux_Centos 增加中文字体支持|环球视点
直播系统聊天技术(九):千万级实时直播弹幕的技术实践
天天看热讯:【Oracle】使用PL/SQL实现冒泡排序
BackboneJS教程_编程入门自学教程_菜鸟教程-免费教程分享 环球关注
环球快讯:智能合约在数字人民币中的应用与治理
2023年普通高校招生录取工作即将开始,教育部发出提醒——高校招生录取期间谨防受骗
世界速讯:47度高温!印度遭极端“烤验”:近期已造成多人死亡
网易游戏公布暑假未成年人限玩时间:大模型干预不理性消费_全球热头条
全球观速讯丨比NS还小却塞进AMD 7840U!AYANEO公布新掌机AIR 1S
焦点热门:599元 小米电视EA32上架:升级5GHz Wi-Fi、分辨率不足1080P
1099元起 Redmi Note 12R发布:首发第二代骁龙4
女子称喂奶后发现医院母婴室装有摄像头?院方回应 信息
天天新资讯:k8s 深入篇———— 守护容器[九]
Spring Boot 项目设计业务操作日志功能,写得太好了!-世界即时看
毕业季,科学城幼儿园大班萌娃用画笔勾勒未来|当前热文
辽宁:全链条打击证券犯罪 去年以来追赃挽损7.14亿余元
上海电气印度业务被诈骗88亿 反被索赔21亿?官方辟谣-环球微头条
腾讯回应数百人部门解散:正常架构调整 不涉及人员优化 每日聚焦
iPhone上市开售16周年:共38款机型 售价越来越贵_独家焦点
全国首位视障播音硕士毕业:键盘盲打完成6万字论文 9年读了百本盲书-天天热门
不惯着!女子人肉占车位撒泼打滚:结局舒适-世界要闻
一次日志配置未生效问题排查记录
linux把文件压缩成.tar.gz的命令&各个压缩解压命令大全--九五小庞
MFC中使用多线程
希望所有计算机专业学生都知道这门课-世界速看
我市举行天然气应急救援演练|世界快看点
7月见!华为大动作不断:将发布新款存储 面向AI大模型 世界观焦点
凯迪拉克格局打开!赞助节目中允许宣传理想L9 还邀请李想体验新车-天天即时
辣眼睛!男子鞋底塞112张《塞尔达传说:王国之泪》卡带入境被查|天天新消息
每日热点:董丽娜,毕业快乐!
环球快播:Linux-vs-MacOS-,你更喜欢哪个系统?
世界热点评!【读财报】一季度信用卡消费者投诉透视:监管处理信用卡业务投诉超3.2万件 工商银行被投诉总量高
cad什么版本最好用_cad那个版本比较好用
对标苹果Studio Display!三星首款5K显示器开售:9999元还送1T SSD
网飞版《三体》预告播放破千万 粉丝喊话别拍砸了:国内拍技术落后?_环球新资讯