(祈福九寨)网易蜂巢基于容器和微服务加快迭代速度实践

简介:


题图:Afterquake by Angelo Giordano@pixabay

编辑:冷锋


文章转自网易云(微信公众号Netease_cloud)


刘超

网易云首席解决方案架构师,代码级略懂OpenStack、Hadoop、Docker、Lucene、Mesos等开源软件,10多年的云计 算架构与开发经历,积累了丰富的企业级应用的微服务化,容器化实战经验,曾出版《Lucene应用开发揭秘》,个 人博客可搜索popsuper1982。



刘超在分享了题为“网易蜂巢基于容器和微服务加快迭代速度实践”的演讲, 主要讲述了网易蜂巢根据具体的业务场景和架构,进行逐步微服务化,容器化的实践。

坊间一直有“网易出品,必属精品”的言论流传,网易云音乐、考拉海购、有道云笔记、网易云课堂等都是深受大家喜爱的应用,而这些应用的背后,都少不了网易蜂巢的支撑。目前网易95%以上的应用都已经部署在了网易蜂巢上,基于蜂巢,考拉扛过了6·18、双11,每天更新达700余次,网易云音乐用户也已经达到2亿,成为最受欢迎的音乐播放器之一。




从私有到公有,从虚拟机到容器


网易蜂巢是网易云推出的云计算基础服务,用丁爸爸的话就是为“解放全中国的程序员”而生的。网易蜂巢的发展也经历了从基于虚拟机的私有云平台,向基于容器的公有云平台的转变历程。平台层从虚拟机向容器的转变,给整个迭代过程和环境的管理带来了极大的便捷性,而容器的使用也让应用层不得不进行调整,架构上要向微服务迁移,流程上则要DevOps转变。



上图是网易蜂巢整个平台的架构,从下向上依次是硬件层、IaaS层和PaaS层。


硬件上,网易云全部都是五星级的机房,多线BGP网络接入,万兆网络互联,全SSD存储。


其次是网易云是基于OpenStack的自研IaaS


  • 计算:定制KVM系统镜像,实现云主机IP静态化,优化OpenStack创建云主机流程;

  • 网络:二层至四层网络过滤防止MAC/IP欺骗,基于Linux TC修改OVS实现网络QoS;

  • 存储:云硬盘架构基于iscsi和Ceph实现,优化Ceph核心模块OSD;


最上层是高可用、高性能的PaaS,蜂巢在这个方面的积累非常深厚:


  • 数据库:网易定制的MySQL内核分支,主从切换数据零丢失,提供健康检查和SQL优化工具;

  • 缓存服务:主从热备、跨可用域部署,自动容灾,高性能单笔延时毫秒级;

  • 对象存储:高可用性为99.99%,高可靠性三备份8个9,基于自研分布式非结构化存储系统。



对于开发者来说,之前基于虚拟机的部署,操作上是比较简单的。只要调用IaaS层的API,把虚拟机创建出来;数据库、对象存储等中间件放到PaaS平台就可以了。如果应用比较少,直接手工部署就行,但是如果应用量比较大,或者分的服务比较多,就需要用到一些自动化部署的工具,比如Puppet、Chef和Ansible。之所以要用到这些工具是因为,仅仅资源层面的弹性,并不能满足互联网快速迭代的需求。比如电商大促期间,原来10台机器,要扩展到20台,另外的10台虚拟机还要靠手工一台台去部署,整个扩展的速度还是达不到要求,就要靠脚本做一些事情。



电商系统的架构发展


上图就是一个电商系统的雏形,对于一个互联网+的应用,为了系统快速上线,进行观念的验证,多数都会采取集约化的单体架构,主要包括用户管理、商户管理、订单管理、商品管理、支付管理这么几块。这样做的好处是易开发、易测试、易部署、易运维。



但是随着业务的飞速发展,整个应用的架构会变得很复杂,网络流量、用户请求、日活都会大幅度增长,功能也会越来越完善,比如用户的个性化推荐、积分系统,商户的供应商管理、物流管理。这时单体架构的好处几乎都会消失,服务器的重复部署和数据库的查询都会成为瓶颈,整个系统的迭代速度也会慢下来,一个功能的修改可能要牵扯到很多模块。



电商系统的微服务化


为了解决这个问题,要进行应用架构的改造,比如加上负载均衡器和缓存服务器,数据库进行读写分离,使用中间件把大服务拆成小服务,服务之间通过消息组件进行交互,这样应用首先可以水平扩容了,比如下订单特别的忙,3个节点不够就可以扩成9个节点,结合脚本还能实现弹性的伸缩。

 

这样的改造后也会出现新的隐忧,比如随着系统模块的增多,每个模块又有自己的开发环境、测试环境和生产环境,应用的管理成本会变得很高;另外,虚拟机的部署效率是很差的,因为每创建一个虚机都是有内核的;产品发布慢,业务上线慢;依赖组件搭建麻烦(服务发现、分流);监控,日志管理复杂。



容器+微服务相得益彰


容器的诞生恰好弥补了虚拟机的这些不足:

 

  • 首先,容器非常轻量级,如果你要跑一个2G的程序,创建一个2G内存就够了,因为内核是共享的;

  • 另外的好处是易迁移环境的一致性,容器的镜像将所有的应用、环境、配置、依赖都打包在内了,镜像无论在哪里启动都能保持一致,而且整个镜像非常小;

  • 最后,镜像是有版本的,这个版本和环境的一致性结合起来,就可以保证我们能很放心地进行版本的回滚,进行版本控制

 

当然容器在追求这些优势的同时,也牺牲了一些特性,比如内核共享使得容器间的隔离不足,在公有云中会存在安全隐患;应用的迁移也是应用逻辑的迁移,数据是迁移不了的,这就要求应用是无状态的;此外,容器的网络、存储、日志和配置功能都不够完善,需要做很多优化。



网易蜂巢的进一步优化


网易蜂巢在采用容器作为部署单元的同时,进行了很多优化工作,去解决这些问题:

 

蜂巢在编排方面的优化:

  • 支持多租户: 默认kubernates的namespace只隔离replication controller,pod 等资源,网易实现节点,存储、网络的租户隔离;

  • 调度性能优化:kubernetes调度优化,任务串行队列改为多个优先级队列;

  • 集群扩展性:根据Pod/Node/Replication Controller等资源到拆分不同的etcd集群;

 

蜂巢在容器方面的优化:

  • 虚拟化扁平二层网络,基于VXLAN实现租户隔离,外网网卡直接挂载到容器内部;

  • 有状态容器挂载云盘,可实现跨主机迁移;

  • 提供统一的日志收集,分析,搜索服务,利于分布式架构问题定位;

  • 引入服务端 APM 解决细粒度性能分析,迅速发掘性能瓶颈;

 

总之,蜂巢就是用IaaS层和容器层紧密结合的方式来解决了以上提到的各种问题,比如:

  • 使用虚拟机解决内核隔离问题

  • 使用IaaS层能力解决网络和存储问题

  • 使用Kubernetes解决编排和配置问题

  • 使用统一日志和监控解决容器日志监控问题

  • 有状态容器暂时解决状态保持问题



其中有状态的容器只是暂时的方案,还是建议进行应用的无状态化改造,主要就是把内存中的数据保存到缓存中,把用户数据保存到数据库中,把文件保存到分布式存储中。这样应用中只包含商务逻辑,无论怎么扩展都只是商务逻辑的扩展,下面的存储也都有自己的集群,不需要应用层做过多的考虑。



基于Kubernetes的编排


蜂巢容器层的编排是Kubernetes开源技术,Kubernetes的编排方式,能让应用拆成微服务后,以一种非常优雅的方式进行部署、编排、自发现、自修复和实现CI/CD。比如一个应用拆成了A、B、C、D四个服务,如果中间那台机器挂了,Kubernetes会把B服务和C服务移到另外2台没有挂的机器上。

 

容器还有一个特性就是启动后IP地址会变,而Kubernetes的服务间引用是通过服务名实现的,这就让容器的自修复成为了可能。Kubernetes的机制还让容器的动态扩展变得非常容易。

 

另外,Kubernetes还能让整个开发的流程变得很优雅,一方面容器的镜像可以使业务的代码、系统库、权限完全一致,所有的配置通过容器的编排也会保持一致,这样从Dev到Ops的各种环境维护的都是一套东西,开发人员一旦提交了代码,代码可以通过hook的方式触发到容器平台,容器平台会自动把当前的代码打包成镜像,一分钟之内测试环境就会更新,去进行自动化测试,测试完成后Ops就可以一键部署到生产环境,形成一套非常顺畅的DevOps流程。



聚焦应用,拥抱开源


上面就是经过蜂巢微服务化后的一个比较理想的电商系统的简版架构。



整个网易蜂巢的特色在于聚焦应用,解放开发者。对于互联网+公司和创业公司来说,无论是IaaS平台还是PaaS平台,无论是数据库、分布式存储还是缓存,想要做好调优还是非常花时间和精力的,就算是用Kubernetes,想要用好,做好二层网络的打通,和统一的存储,也是很有难度的。我们希望蜂巢的用户都能聚焦于自己的业务和产品,把基础设施的部分交给云平台来做。

 

另外,蜂巢是一个全开源的平台,包括MySQL、Redis、Kubernetes和OpenStack都是当下最流行的开源技术,以便让平台的应用接口和行为习惯符合大多数开发者的习惯。蜂巢会作为一个知识输出的平台,服务于企业的微服务化改造。


提问环节

您刚才提到容器的隔离度不够,所以蜂巢是在IaaS层的虚拟机上再做容器的,请问是如何对性能、开销和启动时间进行调优的呢?

Q


刘超:这个调优首先要找到慢的原因,比如容器启动比较慢,我们发现IaaS层OpenStack的很多操作对于容器平台并不是必要的,我们就把KVM弄得很简单,把IP做成静态化的配置,使得整个启动过程从分钟级降到了秒级,在启动第一个容器的时候会多几秒的时间,后续的容器如果虚拟机的资源足够就完全没有损耗了。



来源:中生代技术

原文链接

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
5月前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
2053 10
|
7月前
|
Cloud Native 中间件 调度
云原生信息提取系统:容器化流程与CI/CD集成实践
本文介绍如何通过工程化手段解决数据提取任务中的稳定性与部署难题。结合 Scrapy、Docker、代理中间件与 CI/CD 工具,构建可自动运行、持续迭代的云原生信息提取系统,实现结构化数据采集与标准化交付。
373 1
云原生信息提取系统:容器化流程与CI/CD集成实践
|
10月前
|
Cloud Native Serverless 流计算
云原生时代的应用架构演进:从微服务到 Serverless 的阿里云实践
云原生技术正重塑企业数字化转型路径。阿里云作为亚太领先云服务商,提供完整云原生产品矩阵:容器服务ACK优化启动速度与镜像分发效率;MSE微服务引擎保障高可用性;ASM服务网格降低资源消耗;函数计算FC突破冷启动瓶颈;SAE重新定义PaaS边界;PolarDB数据库实现存储计算分离;DataWorks简化数据湖构建;Flink实时计算助力风控系统。这些技术已在多行业落地,推动效率提升与商业模式创新,助力企业在数字化浪潮中占据先机。
543 12
|
11月前
|
Ubuntu 关系型数据库 MySQL
容器技术实践:在Ubuntu上使用Docker安装MySQL的步骤。
通过以上的操作,你已经步入了Docker和MySQL的世界,享受了容器技术给你带来的便利。这个旅程中你可能会遇到各种挑战,但是只要你沿着我们划定的路线行进,你就一定可以达到目的地。这就是Ubuntu、Docker和MySQL的灵魂所在,它们为你开辟了一条通往新探索的道路,带你亲身感受到了技术的力量。欢迎在Ubuntu的广阔大海中探索,用Docker技术引领你的航行,随时准备感受新技术带来的震撼和乐趣。
444 16
|
12月前
|
监控 Kubernetes Cloud Native
基于阿里云容器服务Kubernetes版(ACK)的微服务架构设计与实践
本文介绍了如何基于阿里云容器服务Kubernetes版(ACK)设计和实现微服务架构。首先概述了微服务架构的优势与挑战,如模块化、可扩展性及技术多样性。接着详细描述了ACK的核心功能,包括集群管理、应用管理、网络与安全、监控与日志等。在设计基于ACK的微服务架构时,需考虑服务拆分、通信、发现与负载均衡、配置管理、监控与日志以及CI/CD等方面。通过一个电商应用案例,展示了用户服务、商品服务、订单服务和支付服务的具体部署步骤。最后总结了ACK为微服务架构提供的强大支持,帮助应对各种挑战,构建高效可靠的云原生应用。
|
搜索推荐 NoSQL Java
微服务架构设计与实践:用Spring Cloud实现抖音的推荐系统
本文基于Spring Cloud实现了一个简化的抖音推荐系统,涵盖用户行为管理、视频资源管理、个性化推荐和实时数据处理四大核心功能。通过Eureka进行服务注册与发现,使用Feign实现服务间调用,并借助Redis缓存用户画像,Kafka传递用户行为数据。文章详细介绍了项目搭建、服务创建及配置过程,包括用户服务、视频服务、推荐服务和数据处理服务的开发步骤。最后,通过业务测试验证了系统的功能,并引入Resilience4j实现服务降级,确保系统在部分服务故障时仍能正常运行。此示例旨在帮助读者理解微服务架构的设计思路与实践方法。
822 17
|
人工智能 运维 监控
阿里云ACK容器服务生产级可观测体系建设实践
本文整理自2024云栖大会冯诗淳(花名:行疾)的演讲,介绍了阿里云容器服务团队在生产级可观测体系建设方面的实践。冯诗淳详细阐述了容器化架构带来的挑战及解决方案,强调了可观测性对于构建稳健运维体系的重要性。文中提到,阿里云作为亚洲唯一蝉联全球领导者的容器管理平台,其可观测能力在多项关键评测中表现优异,支持AI、容器网络、存储等多个场景的高级容器可观测能力。此外,还介绍了阿里云容器服务在多云管理、成本优化等方面的最新进展,以及即将推出的ACK AI助手2.0,旨在通过智能引擎和专家诊断经验,简化异常数据查找,缩短故障响应时间。
阿里云ACK容器服务生产级可观测体系建设实践
|
关系型数据库 MySQL Docker
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
《docker高级篇(大厂进阶):5.Docker-compose容器编排》包括是什么能干嘛去哪下、Compose核心概念、Compose使用三个步骤、Compose常用命令、Compose编排微服务
771 24
|
存储 人工智能 调度
容器服务:智算时代云原生操作系统及月之暗面Kimi、深势科技实践分享
容器技术已经发展成为云计算操作系统的关键组成部分,向下高效调度多样化异构算力,向上提供统一编程接口,支持多样化工作负载。阿里云容器服务在2024年巴黎奥运会中提供了稳定高效的云上支持,实现了子弹时间特效等创新应用。此外,容器技术还带来了弹性、普惠的计算能力升级,如每分钟创建1万Pod和秒级CPU资源热变配,以及针对大数据与AI应用的弹性临时盘和跨可用区云盘等高性能存储解决方案。智能运维方面,推出了即时弹性节点池、智能应用弹性策略和可信赖集群托管运维等功能,进一步简化了集群管理和优化了资源利用率。
|
12月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。