节约服务器成本50%以上,独角兽完美日记电商系统容器化改造历程

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 今年4月,完美日记IT系统实现全面云原生化。

完美日记创立于2017年,这家公司上线不到两年即成为天猫彩妆销冠,2019年成为11年来第一个登上天猫双十一彩妆榜首的国货品牌,包揽天猫2019全年彩妆销冠;2020年4月成为首个亮相天猫超级品牌日的国货彩妆品牌,同时勇破彩妆品牌销售纪录。另外,完美日记已在全国各地开设了100家线下店,计划至2022年底开店超600家。截至2020年4月,品牌SKU超过700个,全网用户粉丝数量超过2500万,月曝光量10亿+。

“轻研发、重营销”是流量思维企业的通病,为了“打造互联网时代新的美妆集团”,在依靠流量和营销快速占据市场的同时,完美日记也在不断夯实其技术底座。今年4月,完美日记已完成IT系统全面容器化,保证了每一次大促活动的系统稳定性和可用性,同时利用阿里云ACK容器快速弹性扩缩容,节约服务器成本50%以上。

1、完美日记容器化改造之路

对于一家创业公司而言,常常有三个问题摆在面前:

如何高效、低成本地搭建系统,同时确保安全稳定?
如何敏捷构建和发布应用,满足业务需求?
如何提高团队开发效率,确保开发质量?

早期大部分互联网公司都是直接购买服务器,租用IDC机房的机架部署,应用是直接运行在物理机上,如果要扩展必须购买新的服务器。IDC会频繁出现各种故障,如果遇到IDC迁移就更麻烦,必须半夜搬机器,天亮前上线,对于企业来说,在成本、服务稳定性、工作效率上都是很大的消耗。

2019年双11前期,完美日记小程序刚刚上线两个月,就经历双11大促的磨砺。在这两个月里,传统的部署方式,特别是有部分应用需要(openrestry)在SLB上面配置,那么运维人员就要在SLB上一个个勾选服务器,这会导致发布版本的时间需要半个小时以上。如果发版过程中出现问题,往往时间还会延长到一个小时以上。

在扩容机器的时候,使用其中2台服务器在阿里云打OS镜像,采用开机自启动脚本方式启动应用,针对每次运营活动的实际情况进行扩容。为了保持系统的稳定性,运维人员就需要在每晚23:00点以后通过人工操作进行扩容,手工配置SLB。最后测试人员进行测试,平均每次扩容都需要半个小时以上。并且由于双11期间处于大流量、高并发的场景,整个运维人员对服务器维护、版本迭代、数据库运维等都必须格外谨慎,稍有不慎会导致线上生产事故,服务器运维压力巨大。

2019年双11之后,完美日记就开始针对性测试阿里云容器服务ACK,并开始容器化改造。

之所以选择容器技术,是因为完美日记要构建一套现代化IT系统以满足快速变化的需求和挖掘更多的数据价值。具体来看,一方面,完美日记对业务的快速创新以及现有业务的实时性和交互性需求都在不断地增长;另外一方面,完美日记对数据的重视程度也在不断提高,尤其是用户数据的重要性。如何提供优于竞争对手的服务和用户体验,如何合理、有效地发掘更多的数据价值,成为完美日记迫切的需求。容器技术以其独有的高效敏捷和易于扩展的特性,加之庞大的生态系统,可以充分满足完美日记不同阶段的IT需求,这也是完美日记最终选择IT系统全面容器化改造的原因。

完美日记最开始是自建K8s,使用的是K8s开源版本,但是开源版本有很多bug未知,安全性也是未知,并没有一个比较友好的Web操作界面,还需要大量运维人员解决运行时出现突然的各种问题。从成本和效率等维度来看,并不是一条便捷的路,思虑再三,完美日记最终选择阿里云容器服务ACK。“我们的技术人员跟阿里云的技术人员其实非常熟悉,在双11期间他们也给予了很多技术层面的支持,我们遇到的问题他们基本都遇到过,我们没遇到的问题,他们也都遇到过,站在巨人的肩膀上进行容器化改造,对于当下的完美日记而言,是最合适的。”

完美日记的容器化实践是按照项目区分两条线并行,第一条线是一次性前后端全部迁移,第二条线是分应用分批次前后端分别迁移。

(1)一次性前后端全部迁移

2019年11月初-2019年11月中旬,完美日记开始计划容器化改造的准备事宜以及改造方案,包括容器化改造方案初步实施,阿里云K8s选型,阿里云K8s选型后进行初步测试,结合公司情况和人员相配比情况,最终选择了阿里云托管K8s Master版本进行大规模测试工作,并开始准备UAT环境切换前期工作等事宜。

2019年11月中旬,第一次切换UAT环境到K8s中失败,因为还有部分在开发中的模块,而K8s中没有对应的模块,因此切换回非K8s环境。

2019年11月底-2019年12月初,将UAT环境切换到K8s中,这次切换吸取了第一次切换失败的经验,UAT环境正式切换到K8s中。

2019年12月初-2019年12月中,观察整个UAT环境是否存在有重大问题,然后进行调整。将整个K8s UAT环境按照双11量级进行四轮压力测试,将结果反馈,然后不断进行调整。2019年12月中,尝试将后台正式环境切换到K8s正式环境中,但由于UAT环境中代码版本和正式环境中代码版本不一致,导致第一次尝试切换失败。

2019年12月中,在第一次切换后台失败中吸取了版本不一致的教训后,经过一天的努力终于将后台正式环境切换到K8s正式环境中,正式环境走出艰难的容器化改造第一步。2020年1月初,经过一天努力,将正式环境顺利切换到K8s正式环境中。

(2)分应用分批次迁移

2019年11月底开始准备迁移测试环境方案,2019年12月初,后端和中间件开始新增UAT环境。

2020年1月2日,后端准备完成。1月3日准备开始前端,1月17日前端完成、UAT环境正式使用。1月17日开始准备正式环境迁移方案,2月迁移方案完成,2月中上旬开始迁移后端,3月中旬后端迁移完成,ZooKeeper、Eureka迁移完成。3月下旬,前端开始迁移,4月初前端基本迁移完成。最终在4月中旬,完美日记IT系统全部迁移完成。

至此,完美日记全面容器化改造完成。image.png
在容器化部署过程中,利用ACK的快速弹性应对大促时的资源快速扩容。将完美日记IT系统提前接入阿里云链路追踪产品ARMS,用于对分布式环境下复杂的服务调用进行跟踪,对异常服务进行定位,完美日记可以在测试和生产中快速发现问题,快速修复。使用性能测试服务PTS进行压测,利用PTS的秒级流量拉起、真实地理位置流量等特性,以最真实的互联网流量进行压测。收集压测数据,分析系统强弱依赖和关键瓶颈点,对关键业务接口、关键第三方调用、数据库慢调用、系统整体负载等进行限流保护。在大促前进行ECS/RDS/安全等产品扩容、链路梳理、缓存/连接池预热、监控大屏制作、后端资源保障等,帮助完美日记在大促平稳进行,保持丝般顺滑。

除了采用容器服务ACK之外,完美日记在一开始进行容器化改造时就使用了阿里云镜像企业版ACR EE,它的优势是比自建harbor要稳定与低成本,因为自建harbor需要考虑计算、数据库以及磁盘成本,如果项目很多或者镜像比较多,那么磁盘成本将比较高。镜像企业版不用考虑维护成本。另外,镜像企业版并发比自建harbor要高,如果大批量进行扩容,自建harbor往往容易出镜像PULL问题,但是镜像企业版就没有这种担忧。

另外,完美日记也通过ARMS Prometheus来监控系统可能出现的问题,并能针对性地解决问题。ARMS还可以解决整个K8s底层监控(Prometheus)的维护和成本高的难题,它能监控应用每个pod资源使用情况,对pod资源进行调整。K8s底层监控(Prometheus)可以做一个自定义大盘,将Prometheus全部监控信息完整显示出来。

容器化改造之后,整个系统“轻松了很多”。1月初,在切换到K8s正式环境后,扩容时间只需要90秒左右,节约了6~8倍时间,减少了一名服务器运维人员。根据运营节奏进行扩容,服务器扩容成本节约70%~90%。同时,部署效率大幅提升,可根据文件模板秒级创建一个服务,部署时间减少90%以上。

另外,服务器资源自动计算部署到服务器,利用隔离技术可部署多个项目服务器,利用率提高50%以上。服务模块的自动负载均衡无需人工干预,工作量减少90%以上。服务模块伸缩容无需编写脚本,只需点击伸缩按钮即可,减少人工错误率,工作量减少70%以上。服务模块不可用会自动剔除,自动重启服务模块。服务器宕机时,服务器上运行的服务模块会自动转移到可用服务器上,无需人工干预,工作量减少100%。

2、容器化改造更大的挑战是在技术和人员上做好准备

当企业完成了容器化改造之后,在生产环境中应用容器技术,并计划扩大应用规模,这时企业就必须在技术和人员上做好准备:运维人员是否有足够的能力来应对大规模应用带来的挑战,研发人员是否有足够的技术准备能随时解决大规模应用带来的问题,产品的架构设计是否可以满足未来的企业需求,同时组织架构和文化是否已经适应企业新的战略发展等。

换句话说,如何让项目组和开发人员之间达成技术同频、战略同频更具挑战性,这其实也是很多在做容器化改造的企业面临的共同难题。

出现这个问题的核心是项目组的开发人员、架构师、运维人员关注点不一致。开发人员关注系统平稳运行和业务开发,而不关心生产环境底层,只要不影响到生产环境和测试环境就可以。架构师关注底层是否稳定运行,技术架构是否符合未来3~5年技术发展,技术是否简单高效等。运维人员关注发布版本是否简单高效,环境是否能统一,扩缩容时间成本,底层运维过程是否能有解决方案等。

正是由于三方的关注点不同,因此在迁移过程中就不可避免会花费大量的沟通成本。因为K8s这套系统有别于传统的部署过程,开发人员对 centOS系统、Nginx、MQ、MySQL、查询日志等比较熟悉,但对于K8s不甚了解,Ingress、Docker配置化、Deployment配置、Service等往往已经到了开发人员对技术认知的边界了,这就需要花费较长的时间去解答大家的疑问,才能往下一步进行。

对于这类问题,每个企业的解决方案都不同,最核心的就是把相关人员的知识边界尽量拉到同一级别,最大程度地减少沟通成本和冲突。完美日记是采用“及时同步、责任到人、内部培训”的方法,比如每次在任何环境做的调整都需要在容器化改造群内通知相关人员,保证大家的认知一致;在内部推进“谁负责谁完善”的文档制度;同时组织一些内部技术培训,让关键开发人员在公司内部对K8s进行培训讲解。还有就是推进企业内部新的、统一的技术文化等。

3、未来规划

目前各大公有云厂商都推出了容器服务,还有不少独立的容器云公司。如果企业一开始就是建立在公有云之上,推荐直接使用相应的容器服务,不仅可以快速搭建系统,还能大幅降低运维成本,提高效率,轻松实践DevOps。在容器环境下,很多日常操作都自动化或半自动化了,比如应用的部署和发布、扩容等,容器编排具有自愈能力,即使出现问题,也能减少人工的干预,大大减轻运维人员的工作压力。

完美日记下一步会重点关注三方面,一是进行Ingress+Gateway单独部署;二是使用ECI+HAP+EW+AHAS(自动扩容数据来源)进一步优化成本,应对突发流量;三是考虑采用服务化网格技术。

如今,云原生已经成为企业数字化转型的关键策略,由于应用需要快速开发和交付,这就促使企业采用云原生的方法来开发应用,以提高效率,并增加灵活性。对于身处云原生时代的企业和开发者而言,不仅需要了解如何通过容器实现构建应用的新方式,更是要以开阔的视野和开放的心态去拥抱云原生生态。

对于企业而言,需要具备一定的前瞻性,对于容器生态圈的主流技术和发展要有足够的把握,才能更好地将现有业务与容器技术相结合。随着企业对技术的不断探索,业务系统的逐步演进,应用规模的日渐增大,如何更好地与开源生态系统相结合,扩大企业的技术影响力,同时引入更合适的人才,是云原生时代下企业要考虑的问题。

点击阅读原文,了解更多阿里云容器服务ACK技术详解与客户案例。
阅读原文链接:https://www.aliyun.com/product/kubernetes?spm=5176.12825654.1kquk9v2l.1.e2cd2c4aqP4QCp

相关实践学习
使用ACS算力快速搭建生成式会话应用
阿里云容器计算服务 ACS(Container Compute Service)以Kubernetes为使用界面,采用Serverless形态提供弹性的算力资源,使您轻松高效运行容器应用。本文将指导您如何通过ACS控制台及ACS集群证书在ACS集群中快速部署并公开一个容器化生成式AI会话应用,并监控应用的运行情况。
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
3月前
|
弹性计算 编解码 大数据
性价比最高提升50%!阿里云企业级云服务器上新
阿里云ECS云服务器推出全新升级的u2系列实例,包括基于Intel的u2i实例与首个基于AMD的u2a实例,提供企业级独享算力,综合性价比最高提升50%。u2i实例已开放公测,适用于中小型数据库、企业网站建设等场景。同时发布基于AMD的第九代旗舰实例g9ae,性能提升65%,适用于大数据、视频转码等密集型业务。
366 0
|
6月前
|
存储 人工智能 弹性计算
飞天发布时刻丨阿里云基础设施助力企业全球化业务创新
丰富灵活的算力服务、稳定高可用的存储产品,覆盖了出海企业 AI 创新、 大数据分析、 应用管理和办公协同等不同场景和需求,助力客户业务全球化布局。
|
6月前
|
人工智能 数据挖掘 大数据
“龟速”到“光速”?算力如何加速 AI 应用进入“快车道”
阿里云将联合英特尔、蚂蚁数字科技专家,带来“云端进化论”特别直播。
208 11
|
4月前
|
人工智能 弹性计算 监控
【云故事探索】NO.16:阿里云弹性计算加速精准学 AI 教育普惠落地
全球首个K12教育超级智能体“寒雪老师”依托阿里云弹性计算,实现“超拟人”教学与教育普惠。智能精准学通过AI技术提供个性化学习方案,借助学习机等产品实现语音交互、答疑解惑,助力每个孩子拥有终身学习能力。面对实时交互与流量潮汐挑战,阿里云ECS与GPU算力保障低延迟、高并发服务稳定运行,实现30秒内弹性扩容,确保业务连续性。从实验室到千万课堂,算力支撑寒雪老师从城市到山区,推动AI教育公平发展。
|
4月前
|
人工智能 弹性计算 运维
通勤路上修故障?钉钉机器人+ OOS AI 助手实现 7×24 小时运维自由
通过钉钉机器人配置阿里云 OOS AI 助手,您可以直接在钉钉群内发送文字指令,实现免登录、跨设备、秒级响应的阿里云运维操作。
|
人工智能 弹性计算 运维
通勤路上修故障?钉钉机器人+OOS AI助手实现7×24小时运维自由
通过钉钉机器人配置阿里云OOS AI助手,您可以直接在钉钉群内发送文字指令,实现免登录、跨设备、秒级响应的阿里云运维操作。
|
8月前
|
存储 缓存 弹性计算
聚宽揭秘:为什么量化研究员喜欢在Kubernetes上使用Fluid简化数据管理?
通过引入阿里云的 ack-fluid 技术,基于 JindoRuntime 的分布式缓存加速,解决了多数据源、弹性扩展、动态挂载等挑战,显著提升了数据处理效率和资源利用率,降低运营成本。这一方案帮助量化研究员实现了更高效的开发和实验流程,为未来的优化和扩展奠定了基础。
|
9月前
|
Kubernetes Serverless 云计算
OpenKruise社区Rollouts组件重磅更新:即插即用的蓝绿发布能力
Kruise Rollouts作为OpenKruise社区提供的旁路组件,其能对原始工作负载进行增强。蓝绿发布是Kruise Rollouts在0.6.0版本中新引入的能力。
|
9月前
|
边缘计算 Prometheus 监控
边缘GPU节点的可观测原理和最佳实践
介绍ACK Edge接入的边缘GPU节点的可观测原理和最佳实践。
|
11月前
|
人工智能 Kubernetes Cloud Native
荣获2024年AI Cloud Native典型案例,阿里云容器产品技术能力获认可
2024全球数字经济大会云·AI·计算创新发展大会,阿里云容器服务团队携手客户,荣获“2024年AI Cloud Native典型案例”。