这一周的工作,总结说来,主要就是将一个核心服务上云,然后不断将云下的节点切换成流量转发节点。上云的第一步就是,在云上环境部署该服务的节点:迁移配置文件、环境,然后根据稳定版本的代码编译适用于云上环境的镜像,然后让服务在云上环境跑起来。服务跑起来后并且测试完成后,云上节点目前是没有任何流量的,这个时候需要将云下的部分流量转发到云上,首先是要将云下的部分节点替换成转发节点,转发节点的作用是将主调打过来的流量转发到云上的节点。后续可以利用这部分流量来观察云上节点的工作状态,检查异常,可以称之为“流量灰度”。流量灰度一般控制在整体流量的1%-5%作用,要看服务的关键性来调整比例,测试环境下可以适当多一些,25%-50%都可以。流量灰度是发生问题时,或者接到问题单时,只需要关闭云下的流量转发节点即可。当然,上面的一切必须先要在测试环境操作,测试妥当了再按照同样的方案谨慎操作生产环境。
有一些后台体系错综复杂,一次调用涉及多个服务,业务逻辑扑朔迷离,这时候尽量控制变量一段时间内仅仅做出一次改动,等观察一段时间后,情况稳定下来了再做下一步操作。或者可以把大的步骤拆分成几个小的步骤,一段时间内只做一小步,观察一段时间后再继续推进下一小步。这样不容易出错。
接下来,如果灰度验证通过了(一般持续一个星期)。接下来就是切换路由了。切换路由就是将云上的服务节点的路由直接切换到云上节点,在这以后其他云上的主调服务将直接访问该服务的云上节点,而不会再去访问云下节点。在切换路由的时候必须特别小心,因为大量的线上流量会直接打在云上节点上。在操作之前首先,需要根据往常数据计算云上各个地域下需要的节点数量,一般是按照高峰期流量水平来计算,如果不够要扩容,以免由于容量不够造成线上大量超时。这个时候,云上节点数宁愿多一些,因为多了后续还能够慢慢缩回来,成本不高。但是如果少了造成大量超时的话,节点扩容是需要时间的(主要是资源调度与服务启动耗时),这个时候容易造成用户投诉。如果由于超时引发客户端大量重试,就有可能带垮整个服务,引发线上事故。当时,我是挑了一个流量少的时候操作,这样能够减少由于切换抖动造成的影响。
切换了路由后,云下节点就可以逐渐全部换成转发节点,将云下的流量都转发到云上来处理。然后通知主调服务的负责人,尽量把服务上云。因为,转发节点转发到云上是有开销的,会增加延迟。