泳道相当于提供了多条“请求的跑道”,理解泳道主要在于理解“流量跑到哪去了”:
泳道内如果没有部署被调用服务,流量会fallback到骨干
– 比如上图[泳道-2]中的B服务节点 调用了 [骨干链路]中的C服务节点
泳道内若存在被调用节点,那么流量是一定不会fallback的 (包括不可用的和禁用的)
– 比如上图[泳道-2]中的A服务节点 只会调用 [泳道-2]中的B服务节点,即使[泳道-2]中的B不可用,也是不会fallback的
骨干环境是一定不会调用到泳道内的
– 比如上图中绝逼不会有 从[骨干链路]到[泳道-2]的调用
泳道之间是一定不会互相调用的
– 比如上图中绝逼不会有 [泳道-1]与[泳道-2]之间的调用
泳道的实现
泳道实现的重点在于服务的注册、发现和服务导流。
后端服务的注册和发现的流程如下:
-
服务B启动,上报ip、port、appkey、swimlane等信息
-
骨干链路上的服务A节点要调用B,先去取B的服务列表,并进行过滤:A不带有泳道标识,所以只会调用不带泳道标识的B服务节点
-
泳道1上的服务A节点要调用B,也会先去取B的服务列表,并进行过滤:A带有泳道=泳道1 标识,所以只会调用同样带有泳道=泳道1 标识的B服务节点
服务导流
-
通过域名划分泳道:为各个泳道申请单独的域名,根据域名进行分流
-
通过header携带泳道信息:请求的header字段增加“swimlane=xxxx”,标识请求要打到名为xxxx的泳道里,分流系统会根据该字段做分流。
前端静态资源,基于泳道名进行隔离,在资源编译和打包的时候,指定发布的泳道名,然后资源会上传到该泳道对应的静态服务器中:
|
2
3
4
5
6
7
8
9
10
11
12
13
14
15
const swimName = process.env.SWIM_ENV;
if (swimName) {
console.log(‘检测到泳道环境SWIM_ENV:’ + swimName);
console.log(‘默认使用test01执行发布’);
}
const webpackConfig = merge(baseWebpackConfig, {
devtool: config.build.productionSourceMap ? ‘#source-map’ : false,
output: {
path: swimName ? config.build.assetsRoot + /${swimName}
: config.build.assetsRoot,
publicPath: swimName ? config.build.assetsPublicPath + /${swimName}/
: config.build.assetsPublicPath,
filename: ‘js/[name].bundle.[chunkhash].js’,
chunkFilename: ‘js/[name].[chunkhash:5].chunk.js’,
library: ‘[name]’
},
});
点个『在看』支持下
最后
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长,自己不成体系的自学效果低效漫长且无助。
因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点!不论你是刚入门Android开发的新手,还是希望在技术上不断提升的资深开发者,这些资料都将为你打开新的学习之门!
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
门!**
如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!