点击上方“朱小厮的博客”,选择“设为星标”

后台回复”加群“加入公众号专属技术群

欢迎跳转到本文的原文链接:https://honeypps.com/backend/comics-recommended/

本文由原作者投稿授权。作者:七岱,原文地址:https://juejin.im/post/5decbc92e51d45583c1cb408

什么是独立环境

  • 独立环境,在环境内的http请求,rpc,mq消息等都在该环境内,不会访问到其它环境的机器。常见的独立环境如:测试环境,线上环境。

为什么需要独立环境

  • 第一个阶段:你还是一个在校学生,接到一个设计作业,然后你在自己的电脑上开发,在自己的电脑上运行代码,连接的是自己电脑的数据库,等老师检查时候,你只要在自己电脑上操作一通就够了。

  • 第二个阶段:你去帮学校社团的一个小项目做功能补充,这个小项目已经运行在社团自己租的服务器上了,你直接连接线上数据库开发也肯定是不行的,你还是在自己电脑上搞好,然后再部署到服务器上,这个时候你的开发环境和服务器就是两套环境。

  • 第三个阶段:你去一个小公司实习了,你本地是开发环境,线上环境在专门的服务器上,但是公司毕竟是商业公司,不敢让你把开发好的东西直接放到线上,会有专门的测试测试,测试如果利用你本地来测试,那效率太低,一般都会拉出来一套测试环境,部署好你们提测的代码进行整体测试。

  • 第四个阶段:公司发展很快,开发和测试都越来越多,并行的需求也越来越多,虽然大多时候每次提测会把众多需求合并一起部署,但是零零碎碎的需求接踵而至,一个测试环境实在是扛不住了,公司搞了多套测试环境。

  • 第五个阶段:一些公司技术上采用了微服务架构,项目方式从瀑布开发转变为了敏捷开发,经常会有个一个一两天开发完成的需求,涉及到三四个服务的改动,开发很难在本地实现测试也需要对应的环境去测试。如果共用测试环境,就会需要多个开发分支反复合并,环境大多时间处于部署中,影响测试进度。所以需要的测试环境也会越来越多,当然这些环境必须类似测试环境和线上环境一样相互隔离(数据库层面除外),否则你测试一个需求,跑到了其它需求实现的分支上,测试结果根本不能保障。

独立环境如何实现

在引入阿里巴巴独立环境实现方式之前,首先引入我之前两个公司的独立环境方案,希望通过对比能让大家更清楚每种方案的适用场景。

  • 三套测试环境,采取瀑布方式的开发模式,每一个环境往往有一个测试组所有,空余一套环境在一些紧急环境下便于适用。

优点:实现简单,三套环境往往只需要通过在三个网段之中,每个环境有自己独立的注册中心。

缺点:适用于瀑布式开发模式,如果需求变更频繁,或者有很多小需求,环境将会处在相互争用的情况下。

  • 每个人一台测试机,自己可以把自己涉及的服务拉取到自己的测试机器上,测试环境服务间通过host指定掉用本机,自己测试时候可以通过fidder配置代理,让请求打到对应的机器上。

优点:操作时候相对方便,一开始fidder配置完成后,后续只需要进行host配置即可,如 fangwendeyuming.com 1.1.1.1(我机器的ip)

缺点:在业务更加复杂的情况下,涉及到的服务会更多,往往一个业务请求链路上有很多各个bu的服务,你不一定有权限部署对应服务,甚至你连对应的服务是什么都不知道。

在阿里巴巴现在很多业务情况下,一个你从前端进行的操作,可能会需要经过十几个服务的处理才会到达你代码变更的服务中。鉴于业务的复杂,阿里巴巴内部会有很多方式可以实现独立环境,我们选取重要的和不涉及技术隐私的方面进行讲述。

首先,最顶层的也是通过常规的多套注册中心的方式进行隔离,通过这种方式区分出了,测试环境,预上线环境,线上环境。

在这个基础上,测试环境和预上线环境往往都需要多套环境,因为实现方式类似,我们主要选取测试环境来讲述。

阿里巴巴的测试环境,允许你给任何一个服务部署为一个独立服务,这个独立服务可以是自身一个,也可以将其它独立服务联合起来部署为一个整体的独立服务,还可以拉取其他的普通服务联合(这时后续流程将不再隔离)

如果你的服务包括整个链路的源头,那么非常简单,你只需要配置对应的host,让请求在你的独立环境上,那么后续流程就会一直在你的独立环境中流转。

那如果源头不是你的独立环境呢,这时候我们先想下上面的流程中,源头进入了独立环境是怎么保证后续的处理都在你对应机器中呢?类似与traceid,请求的链路中,会携带一个projectName的参数,每次路由服务之时,会根据这个name去匹配你之前申请独立环境时候给你配置的name。这样就保证了整个请求在你的独立环境之中。所以,需要你做的就是让程序明白你当前的访问需要去对应的独立环境。

这里阿里巴巴有一个实现的tips。在你部署独立环境时候,有一个路由到本独立环境的配置,如果你勾选了,那么会保存你本机(你自己电脑ip)和对应项目名称的映射,然后当请求链路进行过程中,traceid会携带请求的源头ip,如果这个源头ip 和你本机ip一致,那么就会路由到你的隔离环境中。


这个时候,我们再引申一下,如果我想把我独立环境上部署的功能,交给测试测试怎么办呢,他机器的ip和我的肯定是不一样的吧。这时候我们在去细想上面提到的实现方案,如果我们在最初的请求中,添加对应的请求头如下图中所示。

路由中间件会根据如图的key值去在每次路由时候寻找是否有独立的环境存在,有的话就将对应的流量路由过去。

结语

为了让大家了解独立环境的必要所以在讲述实现方式之前,一步步的延伸了独立环境的必要性。如果有一天大家有幸感受过一个服务上部署七八个分支的情况,一定会更加理解独立环境的必要。

注:本文主要讲述独立环境相关,需要自身对traceId实现有大致了解,可以更加容易理解。

欢迎跳转到本文的原文链接:https://honeypps.com/backend/comics-recommended/

想知道更多?描下面的二维码关注我

【限时推广1】

极客时间双十二全场优惠,特定申请了一个15元(满40减15)优惠口令:NIUBISIDA(上次的SIDANIUBI用掉了...),有效期截止日期本月月底。

【限时推广2】

当当自营图书百万品种五折封顶,我这里有个优惠码:SD44VF,实付满200减30(全场自营图书可用),记住有效期是 12.9-12.12

朕已阅 

阿里巴巴的独立环境是如何实现的相关推荐

  1. 转换环境与执行环境、宿主环境与独立环境、宿主实现与独立实现

    文章目录 1 转换环境与执行环境 1.1 转换环境与执行环境的概念 1.2 为什么要区分转换环境和执行环境 2 宿主环境和独立环境 2.1 宿主环境 2.2 独立环境 3 宿主实现.独立实现 3.1 ...

  2. 【storybook】你需要一款能在独立环境下开发组件并生成可视化控件文档的框架吗?(一)

    storybook 介绍 入门 说说用法 prop-types .stories.jsx 下一篇: https://blog.csdn.net/tuzi007a/article/details/129 ...

  3. python独立环境——virtualenv

    安装: pip3 intall virtualenv 创建独立运行环境: 1. 进入项目文件夹根目录 2. 创建环境 Mac:myproject michael$ virtualenv --no-si ...

  4. 深入浅出之必须全面掌握的独立环境容器部署技术docker详解

    目录 一.docker学习大纲 二.聊聊docker为什么会出现 三.聊聊docker的历史 四.docker能做什么 五.docker中的名词概念 六.安装docker 七.配置阿里云镜像加速 八. ...

  5. 安装php独立环境,0507-php独立环境的安装与配置 Web程序 - 贪吃蛇学院-专业IT技术平台...

    1.在一个纯英文目录下新建三个文件夹 2.安装apache(选择好版本) 过程中该填的按格式填好,其余的只更改安装目录即可 如果报错1901是安装版本的问题. 检查:安装完成后localhost打开为 ...

  6. 360 nginx+php,windows Nginx+PHP7+Mysql独立环境部署

    Nginx安装 解压到D:server目录下并重命名为nignx,完整目录为:D:servernginx 进入D:servernginx 双击执行nginx.exe(如执行成功,在进程中会有2个ngi ...

  7. 【storybook】你需要一款能在独立环境下开发组件并生成可视化控件文档的框架吗?(三)

    storybook 插件addons 核心插件 插件API argTypes 写文档 组件注释法 MDX 生成在线可视化UI文档 上一篇: https://blog.csdn.net/tuzi007a ...

  8. 【storybook】你需要一款能在独立环境下开发组件并生成可视化控件文档的框架吗?(二)

    storybook 回顾 继续说说用法 配置文件介绍 回顾 上篇博客地址: https://blog.csdn.net/tuzi007a/article/details/129192502 说了部分用 ...

  9. 一个字符串中到底能有多少个字符? 我竟然算错了!

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"加群"加入公众号专属技术群 来源:rrd.me/fpv95 依照Java的文档, Ja ...

最新文章

  1. linux学习之VNC远程控制(一)
  2. MPB:北林张静等-丛枝菌根真菌(AMF)孢子、菌丝密度及侵染率定量测定方法
  3. MaskGAN:谷歌大脑让AI学做完形填空的新尝试
  4. MySQL设置默认引擎和字符集
  5. WB实验关键点!附详细实验检查清单
  6. 理解SetCapture、ReleaseCapture、GetCapture(控制了消息发往哪个窗口,是理解消息的关键)
  7. 【机器学习实战】意大利Covid-19病毒感染数学模型及预测
  8. linux 安装x环境,linux下安装xdebug
  9. Java调用IE浏览器
  10. 2022世界杯不扩军!国足教练:机会来了
  11. 公众号刷粉、阅读量作弊
  12. 如何用Python设计一个简易的文本敏感词过滤器
  13. electron-vue打包出错Get “https://github-production-release-asset-2e65be.s3.amazonaws.com...
  14. 15秒,找到行业内最专业的内容,你想要吗
  15. 软件开发生命周期中的设计阶段_软件的生命周期——测试人员必须了解的事
  16. dbase mysql_DBase
  17. K3s+Rainbond默认集群添加server节点
  18. 大数据到底是干什么的?
  19. 车厘子“爱马仕”之名不保?中国网红水果能否打开海外市场?
  20. Linux乌班图系统,如何安装和配置mysql

热门文章

  1. php短信接口加密_PHP短信接口、PHP短信验证码接口源码
  2. python调用什么函数实现对文件内容的读取_Python 文件读取函数 read(), readline(), readlines()...
  3. 21.5.8阶段四数据类型
  4. SpringMVC+Spring+mybatis项目搭建详细过程
  5. AES128/ECB/PKCS5Padding 的实现
  6. 使用第三方《UITableView+FDTemplateLayoutCell》自动计算UITableViewCell高度(Masonry约束)...
  7. 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...
  8. 从事UNIX/LInux服务器编程最方便的代码编译工具------(eclipse for c/c++)、(FileZilla)、(Secure CRT) 这三种一定要一起使用 之3...
  9. ibatis实现1对多
  10. oracle扩展dblink数。