案例1:云效携手 ACK 助力上海博卡 DevOps 转型 | 学习笔记

本文涉及的产品
云效 DevOps 流水线,基础版人数 不受限
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
云效 DevOps 制品仓库,基础版人数 不受限
简介: 快速学习案例1:云效携手 ACK 助力上海博卡 DevOps 转型

开发者学堂课程【ALPD 云架构师系列:云原生 DevOps 36计-阿里云云效出品:案例1:云效携手 ACK 助力上海博卡 DevOps 转型】学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/772/detail/13529


案例1:云效携手 ACK 助力上海博卡 DevOps 转型


内容介绍:

一、公司介绍

二、问题与痛点

三、解决方案

四、方案效果


一、公司介绍

博卡软件于2004年在上海成立,成立以来一直专注于 “以优势技术提升美业效率”,是一个为本地美丽生活相关行业提供软件服务的SaaS软件提供商。主要产品是门店运营所需要的管理软件,智能硬件以及营销工具等。在过去16年里,我们服务了10万家门店,8000万会员消费者,以及100万手艺人。


二、问题与痛点

博卡在快速发展的过程中,随着客户数量的快速增长,原有的技术架构和交付能力逐渐形成瓶颈。过去几年里,随着技术的不断引进,云效产品迅速成为热点,我们也一直关注,并寻找适合我们的解决方案。

介绍一下 DevOps 转型之前我们的概况和核心痛点。

image.png

1.团队及产品概况

研发团队规模:30人。

运维团队:没有专职的运维人员。

客户规模:10万家门店。

细分行业:7个,覆盖美发、美容、美甲、足浴会馆等。

产品数量:超过20个。

2.核心痛点

痛点1:客户众多小商户, 性化需求较高,传统的开发部署模式成为了瓶颈,必须要打造一个快速高效的CI/CD系统。

我们的客户基本上都是小商户,行业内大多都是小规模经营,没有统一的规范;很多时候客户提出的需求必须快速满足,否则很容易丢失客户;因为我们客户基数大,所以每天收到的需求较多,也会经常出现紧急的需求,导致出现每天交付数次的情况,转型之前的传统软件开发部署模式成为了我们的瓶颈,必须要打造一个快速高效的 CI/CD 系统来解决问题。

痛点2:没有专职的运维人员,为了安全性,需要对运维有着严格的权限控制

同时我们是重业务的公司,因为各种原因,我们没有专职的运维人员,很多时候由不同的职责的开发人员来承担一部分运维工作。这种情况下,为了安全性,需要对运维有着严格的权限控制。

痛点3:在架构上,我们有数十个微服务及数十个前端应用,都需要实现零停机部署和升级。

在架构上,我们有数十个微服务及数十个前端应用,因为用户多,而且是实时在线系统,都需要实现零停机部署和升级。否则持续交付频繁,容易造成请求失败甚至导致发生业务中断。

痛点4:Kubernetes 学习门槛过高,如何通过更简单管理成本获得自动化缩容及自动运维。

我们发现 Kubernetes 适合我们团队,准备尝试用 Kubernetes 来解决问题,但是发现 Kubernetes 学习门槛过高,成本不低且需要专职运维人员,我们团队需要更简单管理成本和使用成本。


三、解决方案

开发的交付效率以及低成本的试错尤为重要,经过我们不断尝试,最终选择阿里云容器服务 ACK+云效的解决方案,代替了最初的 Spring Cloud+ECS+ +Jenkins,打造高效的 CI/CD 系统落地 DevOps,完成DevOps转型。

image.png

1.CI/CD系统步骤:

Git工作流采用的是Gitlab flow,Gitlab flow最大原则是上游优先。Git存在一个主分子Master,是所有分支的上游,只有上游分支采纳的代码变化才会应用到其它分支,我们日常环境的分支master,生成环境release,正常的发布流程是开发者完成之后,后续的master分支forker 出来的个人分支或者从master分支创建的个人分支中,再从个人分支中提交合并请求,请求合并的master分支经过代码评审后自动触发代码扫描,结果会显示在代码库上,让开发人员能很直观的看到自己在这次提交中是否有问题,从识别中会自动触发日常环境的流水线运行,进行代码检测,并一一构建日常发布建流程。

根据对应服务重要程度及可用性要求,决定代码检测是否需要设置红线,并一一构建四张代码编译后,创建 Docker 镜像并 push 到镜像服务 ACR 中。

日常发布则是把构建好的镜像升级部署到容器服务ACK对应的工作负载中,如果日常环境验证没有问题,确认要发布到生产环境时,只要从master分支提交一个合并请求到release分支中就会自动触发生产环境对应流水线运行,完成生产环境的发布。

在生产环境的交付过程中,如果有指定时间的发布要求可以指定人工卡点,以提供给相关人员验证,指定发布时间。

最后构建成功或者失败,均会推送到钉钉群中。

2.源码管理上云效的亮点

亮点1:云效源代码管理-代码检测

image.png

在过去的源码管理中也有代码检测的要求,但基本上是在 ID 上装插件,大家自己自觉检测或者 push 代码前进行检测,自觉检测在执行过程中慢慢难以执行,我们在使用云效 Cloudup 做源码管理后,开启了阿里云p3c检测插件和依赖包漏洞检测插件,这两个插件会在 push 到分支上触发检测,并在完成检测后在代码库页面上直接显示,直观的反馈给提交者,使得监督代码规范的执行变得简单。

亮点2:云效源代码管理-代码评审

image.png

传统上,代码评审无法强制执行,且不能留下记录,通过云效的分支保护设置,控制所有非管理员的开发者不能直接 push 代码到 master 分支上,必须经过评审后才能合并到 master 分支这样就实现了强制评审,很好的保护了 master 分支,很大程度上防止 master 分支污染,甚至可以配置提交合并请求必须通过自动化检测提高评审员的评审效率,评审的时候可以很直观的评论,提交者可以直接回复,十分方便。

亮点3:云效流水线

image.png

最大优点是开箱即用。对接阿里云其他服务时非常便利。根据各种语言,各种场景,基本都有默认的流水线模板,也支持自己添加的企业模板,我们团队就添加了后端和前端的各一套模板配置新流水线时,效率就特别高,两分钟内就能完成。

有两种流水线配置:一种是日常环境自动集成的场景,另一种是需要指定人员确认部署松散环境场景。流水线步骤配置流程非常简单,每一个步骤都很清晰。

使用过程中亮点:

缓存:

使用不同语言构建工具时,都会有相关的依赖缓存存在。Flow提供了我们配置缓存目录的地方,主流的各种语言缓存目录都已经默认配置好,自行选择是否开启即可。

有时构建会出现缓存异常,导致构建失败的情况,此时在缓存设置中,删除缓存,重新构建就能解决问题。

亮点4:云效流水线-环境区分

image.png

我们通过一个分支对应一条流水线的方式,来区分部署环境。因为我们是同一个源码库,所以不同环境使用的镜像仓库都是相同的。镜像仓库中的镜像,通过构建的镜像标签来区分环境。通过变量和变量组功能,在构建之前注入环境变量,构建时通过脚本来实现配置文件的替换,从而实现构建产物的环境区分。

流水线较多情况下,推荐使用变量组,配置一套生产环境变量,一套日常环境变量,再配置流水线的时候添加变量组即可,甚至可以保存在流水线模板中。

因为刚刚转到Flow流水线的时候,要设置比较多的流水线,这个功能十分便利,大大的节约了我们配置流水线的时间。

亮点5:云效流水线-消息通知

image.png

内置结构的钉钉实现了构建结果通知开发团队的功能,同时点击通知消息还能进入流水线详情,查看成功或失败的原因。查看代码扫描结果,构建失败结果等,在手机上也能查看,有权限的账号还能进行回滚重试等操作。使得非工作时间出现问题时可以通过手机操作干预,比较便利。

亮点6:容器服务 ACK:

image.png

实时业务系统中,要做到持续交付,零停机升级部署就必不可少。

业务系统中如果不是零停机部署,则有可能造成请求失败或者业务中断等。使用容器服务 ACK,利用 k8s 的健康检测和就绪检测,配合 springboot 的健康检测接口,则可以很简单的实现零停机升级部署。

不过在并发比较高的情况下这种配置还是有请求失败的可能,这是因为 k8s Pot 切换和 export 下线是一步进行的。

当然想做个最佳实践,可升级springboot到2.3以上版本,该版本更新了k8s健康监测和就绪检测专用的接口和优雅关闭配置,比hance接口更适合用来进行健康检测。并且配合停止应用前,休眠一定时间,可以真正实现零停机部署。

通过健康检测和就绪检测,以及重启策略配置之后,k8s可以实现容器启动异常情况下自动重启,重试。

重试运行中出现异常情况时自动重启,实现了一定程度的自动运维,进行应用自动修复,很好的解决了应用上线初期或是出现异常时,无人值守情况下,快速重启自动修复,让客户可以快速恢复使用,降低了影响范围。

当客户做活动时,或者其他原因导致QPS快速上升的时候可以配置k8s的HPA,实现自动扩缩容。可以根据cpu或者内存阈值来决定怎么进行扩容和缩容。

更高级的用法:还可以根据阿里云的其他监控产品,应用监控的参数来配置扩容和缩容,实现更合理的资源利用,也能有效的降低成本,提高系统的稳定性。

通过配置工作负载的需求和限制cpu和内存可以精确的分配和利用对应工作节点的cpu和内存,实现最大化资源利用情况,保证稳定性。当某个容器异常的时候,不会对其他容器造成影响。

与原来自己在ECS上自行分配,提高了稳定性,也增加了资源利用率。我们在使用容器服务ACK后,成本有了较大幅度降低。

亮点7: 容器服务ACK-回滚

image.png

当发生问题的时候,云效配合ACK还能进行快速回滚,通过流水线运行历史可以回滚到任意一次构建的版本。当然也可以直接在ACK中根据指定工作负载的历史版本进行回滚。

容器服务 ACK 的些配置。一定程度上省掉了很多运维工作,直接由kps自动完成,并且使用和学习成本非常低,非常适合我们团队。

我们转型用容器服务 ACK之后,的确得到了很大的收益。


四、方案效果

云效提效成果:

对比内容

使用云效前

使用云效后

发布时长

10分钟

3分钟

代码评审

很少

合并主分支强制要求

构建通知

不通知

自动钉钉通知

版本回滚时长

1小时

3分钟

日常和生产环境区分

代码中配置文件区分,存在开发人员误修改影响部署环境配置的危险

自动注入环境变量来区分,最大程度防止代码库配置文件影响部署环境配置

代码扫描

IDE中插件自己扫描,比较随意

提交后自动扫描,清晰提示扫描结果

定时部署

人工等待到时间进行操作

设置定时发布

交付质量

依靠开发人员个人水平以及随机检查保证

通过各种检测插件进行质量检测,防止异常构建或部署

容器服务ACK提效成果:

使用ACK前

使用ACK后

零停机部署

不支持

支持

应用异常自动修复

不支持

支持

扩容耗时

1小时

1分钟

扩容方式

手动修改nginx配置

自动扩容

敏感信息安全

代码库保存,存在泄露风险服务器配置文件,管理成本高,以及有丢失风险,不容易复用

配置项以及保密字典储存,简单复用,保密性高,不容易暴露

新应用部署

半天

10分钟

生产环境稳定性

出现问题客户发现或监控发现后,手动回滚再修复问题,重新发布,影响时间长

通过健康监测等手段阻止异常容器接受流量,以保证线上应用的基本质量

相关实践学习
Docker镜像管理快速入门
本教程将介绍如何使用Docker构建镜像,并通过阿里云镜像服务分发到ECS服务器,运行该镜像。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
2月前
|
运维 JavaScript Devops
DevOps实践:通过云效实现hexo自动构建部署发布
DevOps是一种融合开发、技术运营和质量保证的流程,旨在增强跨部门沟通与协作。通过自动化软件交付和架构变更,DevOps加速了构建、测试和发布软件的过程。本文作者分享了如何使用阿里云效平台实现个人Hexo博客的自动化部署,从而实现持续集成和持续部署(CI/CD)。在应用DevOps之前,作者需手动上传和部署文件;应用后,只需提交Markdown文件,其余步骤由DevOps平台自动完成。通过云效平台的代码管理和流水线功能,实现了从代码提交到自动发布的无缝衔接。
61 2
DevOps实践:通过云效实现hexo自动构建部署发布
|
22天前
|
运维 Devops 持续交付
现代运维的转型:从传统模式到DevOps的演进
本文将探讨现代IT运维领域正在经历的一场深刻变革:从传统的运维模式向DevOps文化和实践的转型。通过分析传统运维的挑战、新兴技术的推动力以及DevOps的核心理念,本文旨在为读者提供一个全面的视角,理解如何通过这一转型实现效率提升、风险降低和更高的业务价值。
|
22天前
|
运维 监控 Devops
如何轻松搞定DevOps?云效告诉你答案!
【6月更文挑战第11天】云效提供一站式DevOps解决方案,涵盖代码管理、持续集成、持续部署、自动化测试及监控告警,助力企业提升协作效率,加速软件交付。通过云效Git代码库进行协作,利用Jenkins自动化构建和测试,实现Java项目的持续集成。成功构建和测试后,云效支持自动化部署至各种环境,并具备监控告警功能,确保应用稳定运行。借助云效,企业可轻松落地DevOps,实现开发运维一体化。
|
2月前
|
人工智能 运维 监控
智研未来,直击 AI DevOps,阿里云用户交流日杭州站来啦!
在这个技术日新月异的时代,云上智能化DevOps正以前所未有的速度推动企业创新边界,重塑软件开发的效率与品质。 为深入探索这一变革之路,我们诚邀您参与我们的专属闭门技术沙龙,携手开启一场关于云上智能化DevOps的挑战、实践与未来的展望之旅。
7400 0
智研未来,直击 AI DevOps,阿里云用户交流日杭州站来啦!
|
2月前
|
数据可视化 搜索推荐 Devops
从DevOps实践者的角度谈谈云效Flow
一名DevOps实践者参与了云效流水线Flow的评测,认为Flow对新手友好,具有可视化编排功能。但在上手过程中,了解相关术语和流畅编排设计可能构成一些挑战。Flow的功能基本满足需求,但开放性有待提高,建议开放插件开发以丰富生态。YAML编排作为趋势,Flow在易用性和功能完善上仍有进步空间,如语法检查、智能提示等功能。此外,产品模块间的逻辑性和交互清晰度也需改进。总结来说,Flow功能齐全,适合中小企业,但在用户体验和生态建设上有改进余地。
267 3
|
2月前
|
数据可视化 搜索推荐 Devops
从DevOps实践者的角度谈谈云效Flow
这篇文章是一位DevOps实践者对云效流水线Flow的评测。首先介绍了自己参与评测的背景,并对Flow的易用性给予了肯定,认为它适合新手,尤其是可视化的编排功能。然后,作者讨论了Flow在新人上手、产品功能、性能和开放性方面的表现,指出Flow在插件开发能力和YAML编排体验上存在提升空间。他还提到了YAML编排的学习曲线和与可视化的结合问题,以及任务管理和步骤名称的混淆。此外,作者建议Flow增强模块间的逻辑性和交互清晰度,以提供更顺畅的工作流程体验。最后,作者总结了Flow的优点(功能齐全,适合中小企业)和需要改进的地方(业务逻辑、制品库能力和私有化场景的支持),并对其未来发展提出了期待。
420 0
|
2月前
|
存储 Kubernetes Docker
容器服务ACK常见问题之阿里云控制台进不去了如何解决
容器服务ACK(阿里云容器服务 Kubernetes 版)是阿里云提供的一种托管式Kubernetes服务,帮助用户轻松使用Kubernetes进行应用部署、管理和扩展。本汇总收集了容器服务ACK使用中的常见问题及答案,包括集群管理、应用部署、服务访问、网络配置、存储使用、安全保障等方面,旨在帮助用户快速解决使用过程中遇到的难题,提升容器管理和运维效率。
|
2月前
|
人工智能 运维 Kubernetes
阿里云容器服务ACK AI助手正式上线带来的便利性
作为开发者想必大家都知道,云原生容器技术的优势,尤其是近两年的随着容器技术的迅猛发展,Kubernetes(K8s)已成为广泛应用于容器编排和管理的领先解决方案,但是K8s的运维复杂度一直是挑战之一。为了应对这一问题,就在最近,阿里云容器服务团队正式发布了ACK AI助手,这是一款旨在通过大模型增强智能诊断的产品,旨在帮助企业和开发者降低Kubernetes(K8s)的运维复杂度。那么本文就来详细讲讲关于这款产品,让我们结合实际案例分享一下K8s的运维经验,探讨ACK AI助手能否有效降低K8s的运维复杂度,并展望ACK AI助手正式版上线后的新功能。
301 2
阿里云容器服务ACK AI助手正式上线带来的便利性
|
11月前
|
人工智能 Cloud Native 文件存储
阿里云容器服务ACK云原生AI套件测评
随着人工智能(AI)技术的快速发展,越来越多的企业开始在其业务中引入AI能力,以提高运营效率、优化用户体验,以及创造新的商业价值。像我们这种小型企业也不例外,希望通过集成先进的AI技术来提升业务运营的智能化水平。在这样的背景下,阿里云容器服务ACK推出了云原生AI套件,它能够帮助企业在Kubernetes容器平台上快速构建和运行AI应用,实现全栈优化。本次通过一次实验体验,简单对云原生AI套件进行测评。
96762 1
|
10月前
|
边缘计算 运维 Kubernetes
阿里云原生容器服务产品体系-阿里云边缘容器服务ACK@Edge介绍
阿里云原生容器服务产品体系-阿里云边缘容器服务ACK@Edge介绍
1037 0
阿里云原生容器服务产品体系-阿里云边缘容器服务ACK@Edge介绍

热门文章

最新文章