嘉宾 | 徐鑫 整理 | 姜君泽
出品 | CSDN云原生
技术是不断发展的,云原生技术也是一个不断更新迭代的过程,面对云原生迭代过程中所带来的变化与挑战,工程师应该如何同云原生一起成长呢?
(资料图片仅供参考)
2022年7月26日,在CSDN云原生Meetup·广州站上,火山引擎服务端架构师徐鑫结合自身情况带来了分享。
什么是云原生
云原生不只是一系列技术的组合,而是一套适用于云计算时代的IT架构与方法论,包括容器化、微服务、DevOps、持续交付、声明式API、自动化等主题。它的核心是通过优化应用的架构设计、开发流程和部署、运维方式,让云计算的弹性、灵活、自动化优势得到充分的发挥,让工程管理和基础设施管理变得更加高效和自治,从而帮助管理者将精力集中到业务创新之中。
云原生旨在帮助企业在各种环境去构建、运行可伸缩的应用,帮助工程师搭建弹性、易于管理、可观测且内部松耦合的系统,让工程师用更少的精力Cover更大、更频繁的变更。
云原生技术使企业能够在现代动态环境(如公共云、私有云和混合云)中构建和运行可扩展的应用程序,容器、服务网格、微服务、不可变的基础设施和声明式的API就是这种方法的典范。这些技术能够使松散耦合的系统具有弹性、可管理和可观察性,通过与自动化相结合,让工程师能够以最小的工作量频繁地、可预测地做出影响巨大的改变。
云原生带来的变化
DevOps(简易)
下图是传统的在本地部署文件的方式:用户直接与本地建立连接,打包文件拷贝到生产环境中。
虽然这样的部署方法涉及组件少、学习成本低,但也存在诸多问题:
当程序报错或用户反馈问题时,程序几乎不可观测,若想观测程序各节点的实现情况,需要人工在对应的SDK上埋点;
部署环境对特定组件具有强依赖性,如实现音频、视频时,需要使用解析二进制的特定组件;
部分构建部署需依靠人工,如将文件搬运到云服务上。
DevOps(高度云原生)
高度云原生化后的文件部署流程如上图所示,研发人员有自己的VCS系统,通过系统将自定义的脚本流程触发到CI/CD系统中进行打包,产生ReleaseHub。ReleaseHub用于存储不同脚本的版本,并放到容器的镜像Hub中。如果脚本通过自动化测试,那就可以部署到容器平台中,实现全自动化。相比于传统部署方案的优势在于:
构建、质量检测、打包、扩缩容等全自动化;
程序发布有可观测指标与告警;
构建产物版本化,随时回滚。
但在这个过程里,任何一个系统在开发时都允许众多开发人员同时参与进来,这会使得学习成本、维护成本及部署成本都非常高。
请求链路(简易)
传统请求通过LB/Gateway,来区别内部和外部边界网络,涉及组件少,学习成本低。
但这样的单体架构存在诸多劣势:
任意功能(业务or通用)发布变更会导致整个单体服务发布;
缺少流量治理能力,灰度、蓝绿部署等实施困难;
没有数据库中间件,一些通用能力(分库分表、数据分流等)只能耦合到服务中。
请求链路(高度云原生)
高度云原生化后的请求链路过程如上图所示,用户发出请求首先通过边缘节点和中继节点进行动态加速,再通过LB进入到内部。随后业务网关提供功能需求,进而通过Mesh进行资源和服务编排到微服务中,最后访问DB。云原生化后的链路请求过程有以下优点:
完善的流量治理能力,可以很好地支持灰度发布、蓝绿部署、单元化等;
微服务使得系统具备局部发布的能力,降低风险、提升效率;
数据库中间件可以为业务降低心智负担。
其缺点依旧是学习成本、维护成本、部署成本颇高,需要研发人员进一步的去学习。
云原生带来的挑战
虽然转型云原生体系能够解决大量问题,但也带来了挑战,其中,访问服务失败和传输速度慢是两类最常见的问题。
恶意攻击、配置不当、资源竞争会造成访问服务失败。
恶意攻击
容器本身遭受攻击,FD耗尽;
宿主机其他服务遭受攻击,Conntrack被写满,IPVS无法正常工作。
配置不当
内核的连接队列太小,在高并发情况下,Sync包被丢弃;
进程可用FD数配置太少,无法打开新的FD进行请求;
配置了tcp_recycle且链路中存在NAT。
资源竞争
宿主机带宽被其他服务消耗完;
宿主机软中断的CPU被打满;
数据包数量过大时,网络质量也会下降很快。
传输速度过慢的情形一般由资源竞争、组件瓶颈、配置不当而导致。
资源竞争
带宽小或与其他用户有竞争;
端到端延迟过大。
组件瓶颈
例如,一些组件默认会将请求写入内存和本地磁盘,再转发到后端;
本身存在缺陷,传输速度过快时,内存释放不及时导致OOM;
读写Buffer共用一块,导致锁竞争剧烈。
配置不当
读写缓冲区设置过小和BDP不匹配。
如何同云原生一起成长
保持好奇
具有钻研精神,深挖问题根因,了解社区热点项目背景、目标及解决方式,不着急给出方案,多对比社区项目的实现方法。
乐于分享
多与他人交流,分享对技术的见解,及时将有价值的东西沉淀为文档。
独立思考
不人云亦云,不套用他人意见作为自己的见解,多实践、验证并总结经验,在保持独立思考的同时也要认真聆听。
本篇文章整理来自@姜君泽,由CSDN修订完成 。
想要参与到专家技术分享的一手整理过程中并获得相应权益吗?关注【CSDN云原生】公众号并回复关键词“志愿者”了解详情,我们期待你的加入~