我们总结了弹性伸缩的五个条件与六个教训

前言

弹性伸缩是云计算时代给我们带来的一项核心技术红利,但是 IT 的世界中,没有一个系统功能可以不假思索的应用到所有的场景中。这篇文章,我们将应用企业级分布式应用服务-EDAS 的客户在进行系统架构设计时,在弹性场景下遇到的点滴做了一个系统的梳理,总结为五个条件和六个教训分享给大家。

五个条件

1、启动无需手动干预

是否需要手动干预是弹性伸缩和手动伸缩的本质区别。在传统应用的运维中,一个进程的启动往往需要在机器上手动准备一系列的事情,如:环境搭建,依赖服务的配置梳理,本地环境配置调整等。如果是在云上的应用可能还需要手动调整安全组规则,依赖服务的访问控制等;但这些需要手动执行的动作在自动弹性时都会变得不可行。

2、进程本身无状态

确切的说,无状态主要是指业务系统运行时对于数据的依赖程度,数据是在进程执行的过程中产生的,产生的数据会对后来的程序行为产生持续的影响,程序员需要在编码逻辑的时候,就考虑如果系统在一个新环境中重新拉起时,这份数据是否对于行为会造成不一致的情况?推荐做法是数据应该最终以存储系统中为准,让存储计算做到真正的分离。

3、启动的要快,走的要有“尊严”

弹性,尤其是云上的弹性,其中一个特点是会进行得很频繁。尤其是流量突发型的业务,带着一定的不确定性。而启动后的系统往往处在一个“冷”的状态,启动之后如何快速的“加热”是弹性有效性的关键。而在弹性结束之后,往往伴随着一次自动的缩容,由于这个过程也是自动的,所以我们需要能从技术上能做到自动流量摘除的能力,这里的流量不仅仅包括 HTTP/RPC,也包括消息、任务(后台线程池)调度等。

4、磁盘数据可丢失

在应用启动过程,我们的应用程序可能会使用磁盘配置一些启动依赖项之外;在进程运行的过程中,我们也会习惯性使用磁盘打印一些日志,或者记录一些数据。而弹性场景是进程快起快没,没了之后放在磁盘上的数据也都没了,所以我们要做好磁盘数据丢失的准备,可能有人会问日志怎么处理?日志应该通过日志收集组件收走,进行统一的聚合、清洗和查阅。这一点在 12 factor apps 中也做了强调。

5、依赖的服务充分可用

成规模的业务系统,往往不是一个人在战斗。最典型的架构中,也会使用到一些缓存、数据库等中心服务。一个业务弹性扩容上来之后,很容易忽略中心依赖服务的可用性。如果依赖服务出现不可用,对于整个系统可能就是一个雪崩的效应。

六个教训

1、指标值设置不合理

弹性整体分为三个阶段:指标获取、规则计算、执行伸缩;指标获取一般通过监控系统或者 PaaS 平台自带的组件获取。基础监控指标常见的如:CPU/Mem/Load 等。短期内有一些基础指标数值会存在不稳定的特点,但是时间拉长,正常来看会处在一个“平稳”的状态,我们设置指标的时候,不能以短时间的特征为依据,参考较长时间的某种水位数据才能设置一个合理值。且指标不宜过多,同时缩容指标要和扩容指标存在明显的数值差。

2、把“延时”当指标

很多时候我们识别系统可用性的一个很大的判断,就是看系统屏幕是不是在“转圈圈”,即系统很慢。常理推断,很慢就要扩容了。所以我们有一些客户直接把系统的平均 RT 当成了扩容指标,但系统的 RT 是多维度的,比如 health check 一般都是很快的,这类 API 出现的频率稍高一点,一下就拉低了平均值。也有的客户会精确到 API 级别,可是 API 也是根据参数不同逻辑不一样的从而造成 RT 不一样。总之,根据延时去做弹性策略是很危险的一种做法。

3、指定单一的扩容规格

扩容规格指的是资源的规格,比如在云上的场景中,对于同一种 4c8g 的规格,我们可以指定内存型、计算型、网络增强型等。但是云上是一个大资源池,对于某一种规格,会存在售罄现象;如果我们只指定了单一的规格,就会出现资源无法提供而出现扩容失败的情况。这里最危险的还不是扩容失败本身,是出现业务故障之后的排查过程会特别漫长。

4、只考虑RPC链路中的应用策略

针对单个应用往往都很简单的,难的是整个业务场景的梳理。梳理思路一个简单的办法就是按照应用调用的场景进行,从应用间调用的场景来看,一般来说分为三种:同步(RPC,中间件如 Spring Cloud)、异步(消息,中间件如 RocketMQ)、任务(分布式调度,中间件如 SchedulerX)。我们一般会很快整理出第一种情况,但是很容易忽略掉后面两种。而后面两种出现问题的时候,问题排查诊断又是最为耗时。

5、没有配套相应的可视化策略

弹性伸缩是一个典型的后台任务,在治理一个大集群的后台任务的时候,最好是有一块大屏进行直观的可视化治理。对于扩容失败的情形,不能静默处理。如果是核心业务出现扩容失败,可能带来的就是直接的业务故障,但是故障真正发生时,很多时候不会去关心扩容策略是否生效,如果真是因为扩容造成的故障,也很难排查到这个点。

6、事前没做正确评估

虽然云计算给弹性提供了近乎无尽的资源池,但这也只是解放了用户预备资源的工作,而微服务系统本身复杂,单一组件的容量变化会产生全链路的影响,既解除一处风险之后系统瓶颈点可能会迁移,有些隐形约束也会随着容量变化逐步显现,所以做弹性策略大多数时候不能靠力大砖飞的思想,需要做好全链路的压测、验证,演练到适应于全局的弹性配置;我们还是建议事前从高可用的多个维度了解各种技术手段,形成多套预案以备使用。

尾声

云原生场景下弹性能力更为丰富,可供弹性的指标也更具备业务定制能力。应用 PaaS 平台(如企业级分布式应用服务 EDAS/ Serverless 应用引擎 SAE 等)能结合云厂商在计算、存储、网络上的技术基础能力,能让使用云的成本更低。但是这里对于业务应用会提出一点点挑战(如:无状态/配置代码解耦等等)。从更广的侧面来看,这是云原生时代应用架构面临的挑战。不过应用越来越原生的话,云的技术红利也会离我们越来越近。

作者:孤弋

原文链接

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

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

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

相关文章

KubeVela 1.5:灵活框选 CNCF 原子能力打造独特的企业应用发布平台

KubeVela 1.5 于近日正式发布。在该版本中为社区带来了更多的开箱即用的应用交付能力,包括新增系统可观测;新增 Cloud Shell 终端,将 Vela CLI 搬到了浏览器;增强的金丝雀发布;优化多环境应用交付工作流等。进一步提升…

开源小白到核心开发——我与 sealer 的成长故事

个人简介 大家好,我是周欣元,本科就读于杭州师范大学,今年 9 月将去往云南大学进行研究生学习。本科研究方向为 docker 容器在网络攻防中的应用,目前作为 sealer member 加入了核心模块 sealer runtime 的研发工作。 个人主页&a…

全链路灰度新功能:MSE 上线配置标签推送

背景 微服务场景下,全链路灰度作为一种低成本的新功能验证方式,得到了越来越广泛的应用。除了微服务实例和流量的灰度,微服务应用中的配置项也应该具备相应的灰度能力,以应对灰度应用对特殊配置的诉求。 为什么需要配置标签推送…

hdu3527spy(STL,map)

Description The NationalIntelligence(情报工作) Council(委员会) of X Nation receives a piece ofcredible(可靠的) informationthat Nation Y will send spies(间谍) to stealNation X’s confidential(机密的) paper. So thecommander(指挥官) of TheNational Intelligen…

万节点规模云服务的 SRE 能力建设

背景及现状 系统架构简介 上图为阿里云内部实际使用的系统架构,系统主要用途为实时数据流的计算和存储。使用阿里云的容器服务 ACK 作为系统底座,容器化的部署、发布、管控等全部基于 K8s 标准。使用自己开发的 Gateway service 作为系统流量入口&#…

HDU 3532 Max Angle(计算几何——极角排序)

Description Given manypoints in a plane, two players are playing an interesting game. Player1 selects one point A as the vertex(顶点) of an angle. Then player2 selects other two points Band C. A, B and C are different with each other. Now they get an an…

阿里云 ACK 容器服务生产级可观测体系建设实践

ACK 可观测体系介绍 全景概要介绍 上图为 ACK 可观测体系全景图金字塔,从上至下可分为四层: 最上层是最接近用户业务的 Business Monitoring,包括用户业务的前端的流量、PV、前端性能、JS 响应速度等监控。通过容器服务的 IngressDashboard…

中仑网络全站 Dubbo 2 迁移 Dubbo 3 总结

中仑网络在 2022 年完成了服务框架从 Dubbo 2 到 Dubbo 3 的全站升级,深度使用了应用级服务发现、Kubernetes 原生服务部署、服务治理等核心能力。来自中仑网络的技术负责人来彬彬对整个 Dubbo 3 的选型、升级过程及收益等做了深入总结。 来彬彬,2020 年…

hdu3526(最小费用流)

Description Xiao A isbecoming more and more unsatisfied with his computer since he is learninghacker(黑客技术) technologiesthese days but his computer always fails whenever he changes the configurationsof the NIC. He buys a new NIC but the motherboard doe…

hdu3530Subsequence【单调队列优化dp】2010多校联合

Description There is asequence(顺序,序列) of integers.Your task is to find the longest subsequence(子序列) that satisfies the following condition: the differencebetween the maximum element and the minimum element of the subsequence is nosmaller…

基于 OpenYurt 和 EdgeX 的云边端协同新可能

2022 EdgeX 中国挑战赛暨中关村国际前沿科技创新大赛 EdgeX 专题赛正式拉开帷幕。本次大赛分设两大赛道:医疗、教育、消费行业赛道和能源、工业、供应链赛道。大赛致力于构建一个物联网及边缘计算的学习和分享平台,基于 EdgeX Foundry、OpenYurt 等开源技…

OSCAR 2022 开源产业大会PolarDB-X、 PolarDB-PG获奖揭晓

9月16日,OSCAR 2022 开源产业大会在京召开,会议由中国信息通信研究院、中国通信标准化协会主办,中国通信标准化协会云计算标准和开源推进委员会承办。此次会议以“千行百业 可信开源”为主题,邀请上百位专家大咖和国内主流的开源社…

C链表(顺序表、静态链表区别)

#include <stdio.h> #include <stdlib.h> #define LIST_INIT_SIZE 1000 //线性表存储空间的初始分配量 #define LISTINCRESEMENT 100 //线性表存储空间的分配增量 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int elemType;//元素类型…

HDU3534 给你一个树让你找出其中最长路径以及个数数

Description In the Datastructure class of HEU, the teacher asks one problem: How to find the longestpath(路径) of one treeand the number of such longest path? Input There are several test cases. The firstline of each case contains only one integer N, m…

国庆训练赛

Description Consider the following programming language. This language contains only two types of statements: simple statements and compound statements. The simple statement is in the form “write (literal)”, where “write” is a key word indicating that …

App 隐私合规“免费”自动化检测

一、为什么要进行App隐私合规检测 2021年11月1日《个人信息保护法》正式生效&#xff1b;今年6月14日&#xff0c;国家互联网信息办公室公布《移动互联网应用程序信息服务管理规定》&#xff0c;这是针对App的最强监管新规&#xff0c;于8月1日起正式实施。新规要求应用程序提…

POJ3420 Quad Tiling(模板+矩阵快速幂)

Quad Tiling Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 4107 Accepted: 1878 Description Tired of(厌烦) the Tri Tiling gamefinally, Michael turns to(转向) a morechallengeable game, Quad Tiling: In how many ways can you tile(铺瓷砖) a 4 …

跨模态学习能力再升级,EasyNLP 电商文图检索效果刷新 SOTA

导读 多模态内容&#xff08;例如图像、文本、语音、视频等&#xff09;在互联网上的爆炸性增长推动了各种跨模态模型的研究与发展&#xff0c;支持了多种跨模态内容理解任务。在这些跨模态模型中&#xff0c;CLIP&#xff08;Contrastive Language-Image Pre-training&#x…

EasyNLP 带你实现中英文机器阅读理解

导读 机器阅读理解是自然语言处理&#xff08;NLP&#xff09;&#xff0c;特别是自然语言理解&#xff08;NLU&#xff09;领域最重要的研究方向之一。自1977年首次被提出以来&#xff0c;机器阅读理解已有近50年的发展史&#xff0c;历经“人工规则”、“传统机器学习”、“…

开关问题(模板+高斯消元)

开关问题Time Limit: 1000MS Memory Limit: 30000KTotal Submissions: 7771 Accepted: 3058 Description 有N个相同的开关&#xff0c;每个开关都与某些开关有着联系&#xff0c;每当你打开或者关闭某个开关的时候&#xff0c;其他的与此开关相关联的开关也会相应地发生变化&am…