云服务console新版本上线适配华为云及HCS场景的解决方案

举报
前端小盆友 发表于 2020/05/30 20:32:42 2020/05/30
【摘要】 背景近几年华为公有云业务发展迅猛,为了满足客户需求,华为云推出了一系列新的云服务,对于已有云服务也在持续迭代中。最近,华为云某云服务推出新版本,然而新版本的上线并不是一蹴而就的,新版本的发布,并不意味着旧版本立马下线,新旧版本会在华为云现网同时运行一段时间,等旧版本租户完成所有割接任务之后,才能将旧版本彻底下线。如此一来,摆在我们面前的首要问题是:怎么保证同一个云服务的两个版本,在用户不感知...

背景

近几年华为公有云业务发展迅猛,为了满足客户需求,华为云推出了一系列新的云服务,对于已有云服务也在持续迭代中。最近,华为云某云服务推出新版本,然而新版本的上线并不是一蹴而就的,新版本的发布,并不意味着旧版本立马下线,新旧版本会在华为云现网同时运行一段时间,等旧版本租户完成所有割接任务之后,才能将旧版本彻底下线。如此一来,摆在我们面前的首要问题是:怎么保证同一个云服务的两个版本,在用户不感知的情况下同时在线上运行,又相互不影响呢?

每个华为云服务的控制台在线上环境都有一个唯一标识ID,该云服务的新旧版本在线上的标识ID分别为newserv和serv。自然地,要上线新版本,华为云及其他合营云局点将使用newserv作为标识ID。但是,由于HCS局点的标识ID在内部存在强绑定关系,只能使用serv作为唯一标识ID。那么,新版本既保证newserv的正常使用,也需要兼容HCS场景下serv的需要,我们该如何应对?

新旧版本线上同时运行

为了保障业务的连续性,在没完成将所有租户从旧版本迁移到新版本的割接之前,该云服务必须满足线上同时支持新旧版本。新旧版本在线上运行,分别对应一套控制台console。站在客户的角度,如果客户以前使用的是旧版本,那么在访问该云服务的时候,需要跳转到旧版本的控制台;如果是新客户,以前没有使用过旧版本,登陆华为云之后访问该云服务,则需要跳转到新版本的控制台,具体的实现,描述如下:

  1. 华为云官网对该云服务只提供链接到新版本的唯一入口;

  2. 进入新版本控制台之后,请求后台API,判断当前租户是旧版本租户还是新版本租户;

  3. 如果是新版本租户,则继续渲染页面,如果是旧版本租户,则跳转到旧版本的控制台;

华为云现网客户访问该云服务流程图:

华为云现网客户访问该云服务伪代码实现如下:

const promise = http.get({params: xxx});
promise.then(data => {
   // 如果是旧版本租户,跳转到旧版本控制台
   if (data.isOldUser) {
       window.href = 'xxx/serv';
   }
});

通过上述方案,客户通过浏览器访问该云服务的问题得以解决,实际上,还需要注意另外一个场景,客户在该云服务进行包周期购买操作,完成服务选型,订单确认之后,页面会跳转到订单支付中心进行付费,待客户成功完成付费之后需要返回到该云服务,此时页面上提供了一个返回按钮,点击之后即可返回该云服务,这里,怎么实现新旧版本用户能正确返回到该云服务控制台呢?

对于上面提到的问题,有两个解决方案:

  1. 返回按钮支持提前识别购买前的云服务控制台地址,点击返回按钮之后,能做到“从哪个云服务控制台来,返回到哪儿去”;

  2. 由于该云服务的唯一入口确定为新版本的控制台,那么点击返回按钮之后,肯定会链接到该云服务新版本控制台,这样,就回到华为云现网客户访问该云服务的问题,最终能正确返回到购买前的控制台。

目前,我们使用的是第二种解决方案,这一方案无需再去其他云服务做适配兼容,开发与维护成本较低。但是,在旧版本客户购买包周期的场景下,存在一次不必要的对该云服务新版本控制台访问的问题。

新版本使用serv和newserv

该云服务不管是华为云还是其他合营云,默认使用newserv作为唯一标识ID。

华为云现网,该云服务新旧版本同时运行:

  • serv,对应该云服务旧版本控制台

  • newserv,对应该云服务新版本控制台

本文背景部分提出的第二个问题,对于HCS这种特殊场景,我们给出以下的解决思路:

首先,要保证HCS局点的该云服务有且仅有一个版本(旧版本,或新版本)在线上环境运行,否则本方案失效;

其次,该云服务在出包之前,需要将代码中关于唯一标识ID(默认为newserv)的部分通过shell脚本替换成serv,这样就能保证HCS环境在线上可以使用serv。

HCS环境使用serv作为唯一标识ID,伪代码参考如下:

##将newserv替换为serv
function a() {
replace(newserv, serv, dir1)
...
replace(newserv, serv, dir2)
...
}

if HCS场景
 a()
else
 执行原有逻辑

总结

随着华为云业务的不断壮大,为了满足用户的述求,该云服务推出版本。本文简单描述了该云服务上线新版本碰到的实际问题:1. 如何支持新旧版本在用户不感知的情况下在华为云现网环境同时运行。2. 如何兼容HCS特殊场景使用serv作为唯一标识ID。并给出了解决方案:对于第一个问题,我们设置了唯一入口访问该云服务新版本,根据API判断当前租户是旧版本租户还是新版本租户,再映射到对应版本的控制台。对于第二个问题,我们在出包脚本中,首先判断是否是HCS场景,如果是,则使用shell脚本将代码中的唯一标识ID替换为serv,这样就能做到一套代码适配各种场景。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。