阿里云云效技术专家分享:云原生开发、调测及可靠发布解决方案

简介: 高效开发、稳健发布。

在云原生环境中,基于Kubernetes的工具链一方面简化了开发者的许多日常琐碎,另一方面也带来了许多新的概念和工作方式的改变。本篇文章将聚焦于云原生基础设施,谈谈如何在面向云原生的开发流程中,高效地进行开发调测以及发布。

首先,从通用意义上讲,作为一个开发者,你期望怎样的研发流程?

DM_20210806161527_001.png

我理解的理想研发过程

基于这个理想的研发流程,当研发基础设施迁移到云原生和微服务架构之后,在开发、调试和发布方面会遇到什么问题,又要如何解决?

一个典型的研发过程包含三个环节:开发、测试和部署。

开发主要指的是代码的编写和自测。当你写好代码和单元测试之后,需要在一个运行环境中进行功能性验证。本地IDE提供了大量用于调测的功能,并且本地服务的重新启动速度也比较快。相比将代码部署到远端的测试环境,能够完全在本地进行编写、启动、debug,是最理想的工作方式。

实际的工作中,为了验证一个特定功能场景,往往需要配合其它的外部依赖,比如当前我编写的这个服务依赖什么别的服务;还有什么其他服务需要调用我的服务,我才能做一个完整的验证?

这些问题都需要很好的解决,才能真正享受到本地开发的便利。

测试一般指的是在CI环境中的各种自动化测试和验收环境中的测试验证,本文的重点不在这里,因此假设我们已经完成了这些操作。来到了部署的环节。

虽然已经经过了很多的验证,我们对要发布的版本的质量已经有了相当程度的信心。但发布发上线之后,也不可避免的时不时会引入一些缺陷,因此如何让出现的这些问题的影响面最小,就是所谓的稳健发布。

首先来关注在云原生下的开发和调试。

DM_20210806161527_002.png

随着微服务技术和各类开源服务组件普及,如今的软件系统或多或少的都会包含数个相互独立的服务实体,之间通过接口调用相互连接。因此在本地进行服务测试的时候,难免涉及到与上下游的其他服务的互动,特别是在进行完整功能验证时,常常需要在本地将上下游链路的所有服务全部启动起来。然而随着系统的演进和服务的增多,本地资源很快就无法支撑整体系统启动了。那么,是否能够将测试环境中的公共服务节点和本地服务串联在一起,行成完整的测试链路呢?

DM_20210806161527_003.png

在云原生的环境下,测试环境被Kubernetes的集群网络边界所隔离。从集群外部访问测试集群中的服务需要经过统一的Ingress网关,且只能访问配置了网关路由的一小部分部分服务。同时由于开发者的本地主机通常没有公网IP地址,从测试环境中完全无法连接到本地的服务实例。

为此云效创造了kt-connect工具来解决本地测试时的网络联通问题,它能够在开发者的本地环境和Kubernetes测试集群之间,建立起一条虚拟的双向网络通路。

kt-connect是一款简单易用的命令行工具。对于从本地连接测试环境的情况,它提供了一个connect命令,利用在集群中部署一个作为网络代理的Pod节点,使得从本地网络能够直接访问集群中的任意Service域名、IP地址和任意Pod的IP地址。而对于其从集群访问本地的情况,kt-connect提供了exchange命令,通过另一个反向的代理节点实现将集群中流入指定服务的所有请求导向到本地的指定端口。

DM_20210806161527_004.png

对于个人开发者的使用场景来说,以上两个命令就能够完全满足日常工作了。然而对于团队开发的场景下,则会带来新的问题。当一个开发者使用了exchange命令,将特定服务实例的流量全部导向本地,在同一个集群中工作的所有其他开发者都会随之受到影响。为了避免这样的相互干扰,kt-connect又创造了第三种命令mesh,它的功能与exchange命令相似,但并不会将网络中的所有流量全部导入到开发者本地,而是基于特定的网格规则,只将符合要求的测试流量导向开发者的本地环境,从而实现测试环境资源的最大化利用率和多项目的和平共处。

DM_20210806161527_005.png

从本质上来说,kt-connect主要利用了Kubernetes原生命令行的端口转发和开源SSH工具的四层网络代理能力实现,对应用本身不产生任何侵入,目前我们已经将它的所有源代码在Github开源。

接下来来到发布的环节。

DM_20210806161528_006.png

云原生基础设施内置了滚动发布的能力,可以很好的满足发布本身的可靠性的需求,保证整个发布过程是优雅的。但这个模式有一些问题,比如发布和回滚的时间都比较长,且无法暂定下来进行业务运行状态的观察。一个进阶的模式是蓝绿发布,新启动一个副本,然后把所有流量全切到新的版本,这样发布和回滚都很快了,但所有流量还是一次性切换的,没法进行增量验证。金丝雀发布可以解决这个问题,可以通过路由控制,逐步将流量导入到新版本上。但一般是采用流量百分比的方式,所有没法指定特定人群使用新版本。

DM_20210806161528_007.png

一个更加可控的金丝雀方式,需要给每个用户设置一个流量标志,比如使用cookie。也就是说通过一个类似interpcetor的机制,判断当前用户是否应该是一个灰度用户,如果是的话,就给他设置一个cookie,后续来自该用户的所有流量都会带上这个cookie。有了这个流量标志,就可以在流量入口处根据cookie的值判断该请求应该到新版本还是老版本。

DM_20210806161528_008.png

有了这个路由机制,还是不够。因为我们实际的应用程序并不是只有一个服务,而是像图中的由多个服务互相调用而组成。比如当我要发布服务B的时候,因为服务B并不是直接面向浏览器的,所有无法接收到用户的cookie。这时就需要有一个流量表自动传递机制。一般的做法是在请求的入口处把灰度标记存在一个ThreadLocal中,然后在应用的出口处,比如一个OkHttpClient的调用处再把这个ThreadLocal中的值放到cookie中继续往下传递。

DM_20210806161528_009.png

我们已经理解了“全链路可控金丝雀发布”的做法,接下来要探讨在技术上如何实现。在阿里巴巴,我们使用了一个叫做统一接入的技术,所有的请求(包括入口流量和内部服务之间互相调用的流量)都会经过通过接入,然后有统一接入决定该将这个请求分发到哪里。

DM_20210806161528_010.png

到了云原生时代,Service Mesh的概念兴起,其实本质上就是一个“分布式统一接入”。这个统一接入不再是一个中心化的服务,而是随着每个服务的每个实例一起部署在一起的进程,这个进程负责接收改实例的入口流量,并转发给实际的服务;同时也拦截实例的出口流量,并决定下一跳应该是谁。

Istio是Service Mesh的一个被广泛采用的实现。

DM_20210806161528_011.png

了解了这个原理之后,从上图中,可以看到一次发布过程是什么样子。

DM_20210806161528_012.png

这个发布过程中涉及到多次Kubernetes资源的更新操作,如果完全采用原生命令+手工配置来操作,不仅复杂还容易出错。为此云效对云原生的各种常见发布模式都进行了产品化封装,开发者只需要配置一些简单的发布和路由规则,就可以轻松地实现安全可控发布过程。

DM_20210806161528_013.png

原文链接
本文为阿里云原创内容,未经允许不得转载。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512735.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码质量第 5 层 - 只是实现了功能

产品实现的功能是产品价值的体现形式。功能实现是基础。功能没有实现,其他方面做得再好也没有意义。那么,如何保证实现的功能覆盖了需求呢? 产品实现的功能是产品价值的体现形式。功能实现是基础。功能没有实现,其他方面做得再好也…

阿里巴巴 DevOps 工具体系

简介: 随着阿里巴巴多元化业务 20 多年的高速发展,技术体系经历了 web 时代、移动化时代、数据智能时代、云计算时代等多个重大变革。在这些变革中,开发者面对的技术体系、工具体系、知识体系也在不断进化。研发工具在其中起到了技术规模化和…

云原生引领全云开发时代

简介: 云原生是近几年最火爆的技术热词之一,几乎所有的云计算产品都会或多或少跟云原生发生关联,云原生正在重塑整个软件的生命周期。但到底什么是云原生?云原生带来的最大的技术创新和未来机会是什么?以及&#xff0c…

中国首部智能交通微纪录片正式发布 探讨交通强国高质量发展路径

12月23日,由央视财经出品,中国首部智能交通题材微纪录片《大国交通-车路智行》正式发布。该微纪录片全景式呈现出中国交通领域智能化转型历程,探索了交通强国高质量发展的中国路径。据悉,《大国交通-车路智行》微纪录片共五集&…

Kettle on MaxCompute使用指南

简介: Kettle是一款开源的ETL工具,纯java实现,可以运行于Windows, Unix, Linux上运行,提供图形化的操作界面,可以通过拖拽控件的方式,方便地定义数据传输的拓扑。Kettle支持丰富的数据输入输出源&#xff0…

使用AirFlow调度MaxCompute

简介: airflow是Airbnb开源的一个用python编写的调度工具,基于有向无环图(DAG),airflow可以定义一组有依赖的任务,按照依赖依次执行,通过python代码定义子任务,并支持各种Operate操作器,灵活性大…

css让背景图片显示透明遮罩_CSS项目测试(支持深色模式)

*事先声明:本文章教程教学、文章封面来源自[CSS]聚光灯项目 by CodingStartup起码课,且已经CodingStartup起码课授权允许转载!为了保持原有风格,本文始终保持与CodingStartup起码课的视频风格一致*在出现同样的代码块时&#xff0…

一文读懂阿里云直播技术是如何实现的

简介: 东京奥运会已落下帷幕。比赛期间,全球亿万观众蜂拥至各大转播平台观看奥运赛事,平台直播能力显的尤为重要。阿里云作为视频直播平台的技术提供商,凭借在产品技术、资源带宽、服务保障等方面优势,可为各大转播平台…

低代码发展专访系列之七:低代码的火爆需要不一样的声音么?

编辑 | 曹芊芊话题:低代码发展系列专访前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN随后展开…

启动、内存、卡顿三大分析,用户体验就用它?

简介: 启动分析支持通过预置采集和个性化自定义两种方式定义启动阶段,可以分别查询首次启动、冷启动、热启动的情况效果,并可以与设备、系统、版本、地域等维度做交叉筛选查询。 随着大量应用涌入市场加入“App内卷之战”,终端用…

adb echo shell 覆盖_一次写shell脚本的经历记录

点击上方“我的小碗汤”,选择“置顶公众号”精品文章,第一时间送达redis在容器化的过程中,涉及到纵向扩pod实例cpu、内存以及redis实例的maxmemory值,statefulset管理的pod需要重启。所以把redis集群的状态检查放到了健康检查中&a…

当新零售遇上 Serverless

简介: Serverless 的出现给传统企业数字化转型带了更多机遇。 某零售商超行业的龙头企业,其主要业务涵盖购物中心、大卖场、综合超市、标准超市、精品超市、便利店及无人值守智慧商店等零售业态,涉及全渠道零售、仓储物流、餐饮、消费服务、…

如果还不懂如何使用 Consumer 接口,就来看这篇!

作者 | 阿Q来源 | 阿Q说代码背景在开发过程中我遇到这么一个问题:表结构:一张主表A ,一张关联表B ,表 A 中存储着表 B 记录的状态。场景:第一步创建主表数据,插入A表;第二步调用第三方接口插入B…

京东:Flink SQL 优化实战

简介: 本文着重从 shuffle、join 方式的选择、对象重用、UDF 重用等方面介绍了京东在 Flink SQL 任务方面做的优化措施。 本文作者为京东算法服务部的张颖和段学浩,并由 Apache Hive PMC,阿里巴巴技术专家李锐帮忙校对。主要内容为&#xff1…

Spring Boot参数校验以及分组校验的使用

简介: 做web开发基本上每个接口都要对参数进行校验,如果参数比较少,还比较容易处理,一但参数比较多了的话代码中就会出现大量的if-else语句。虽然这种方式简单直接,但会大大降低开发效率和代码可读性。所以我们可以使用…

长文解析:作为容器底层技术的半壁江山, cgroup如何突破并发创建瓶颈?

简介: io_uring 作为一种新型高性能异步编程框架,代表着 Linux 内核未来的方向,当前仍处于快速发展中。阿里云联合 InfoQ 发起《io_uring 介绍及应用实践》的技术公开课,围绕 OpenAnolis 龙蜥社区 Anolis OS 8 全方位解析高性能存…

Orion:谷歌的新一代SDN控制器

作者 | 魏煌松来源 | 鲜枣课堂时至今日,谷歌在2015年公布的成果,“利用SDN将广域网带宽利用率提升至接近100%”,仍然是SDN的一个标杆案列,也是难以逾越的巅峰。但事实上,当时使用的SDN控制器Onix,早已退出了…

移动云正式发布基于龙蜥 Anolis OS 的 BC-Linux V8.2 通用版操作系统

简介: 2020年12月CentOS项目组宣布CentOS 8将于2021年12月31日结束支持,这意味着从2022年开始,使用CentOS 8的用户,将无法得到来自官方的新硬件支持、bug修复和安全补丁。针对这一情况,移动云大云操作系统团队基于国内…

干掉讨厌的 CPU 限流,让容器跑得更快

简介: 让人讨厌的 CPU 限流影响容器运行,有时人们不得不牺牲容器部署密度来避免 CPU 限流出现。本文介绍的 CPU Burst 技术可以帮助您既能保证容器运行服务质量,又不降低容器部署密度。文章分为上下两篇,该文为上篇,下…

微弱信号检测_机动车检测线常用传感器介绍

机动车检测线中经常会运用到各种传感器,这些传感器相当于车辆检测系统的“眼睛”、“鼻子”和“耳朵”,通过台体装置和装在台体中的传感器,能够把车辆的性能数据转换成计算机系统能够识别的信号,供计算机处理和计算,最…