编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

负载均衡实践:SLA(服务等级协议)+集群性能分析!

wxchong 2024-08-19 23:40:15 开源技术 15 ℃ 0 评论

SLA简介

SLA(Service Level Agreement,服务等级协议)是指提供服务的企业与客户之间就服务的品质、水准、性能等方面所达成的双方共同认可的协议或契约。

典型的SLA内容有参与各方对所提供服务及协议有效期限的规定;服务提供期间的时间规定,包括测试、维护和升级;对用户数量、地点及提供的相应硬件的服务的规定;对故障报告流程的说明,包括将故障升级到更高水平的支持条件。

下面介绍一下爱奇艺生产环境中实现SLA的主要内容:服务自助化、服务器警及流量异常检测。

9.3.1 服务自助化

爱奇艺生产环境的服务自助化平台架构如图9-6所示。业务方可以通过在爱奇艺凌虚系统提交工单来申请负载均衡服务,为实现资源的平衡,需要管理员进行资源分配。分配好资源之后,业务方可以根据服务的变动,自主进行参数修改,以及配置下发。管理员和业务方通过内部配置分发系统完成新建和修改操作。该系统会从凌虚系统获取数据库中业务方业务配置信息,生成相应的配置文件,然后推送到目标机器上。其中,目标机器信息是通过凌虚系统配置的数据库进行保存的,并由凌虚系统提供的API实时获取。

9.3.2 服务告警

对于线上四层负载均衡的vip port和七层负载均衡的upstream,系统会通过Hubble监控脚本进行拨测监控,用于判断服务可用性。Hubble告警分别是“QLB vip/rss检测失败”和“QLB upstream检测失败”,这两类告警会发给业务对应的申请人和后备告警人,希望业务方在接收到此类告警时,能及时定位分析、处理相关后端服务器。告警的具体配置可以在申请服务时进行定制,监控数据可以通过Grafana监控面板查看,下面简要介绍一下相关的监控配置。

当申请四层负载均衡时,可以选择服务的检测方式,目前可供选择的服务检测方式有curl、nmap、quic和anycast等(见图9-7),分别对应监控业务后端服务器提供的HTTP、QUIC、ANYCAST和UDP/WebSocket等其他服务。若通过使用这些方式都无法正确检测服务,则可能因为提供的测试服务是不稳定的,这时可以选择“none”选项,表示不检测该业务,且不进行告警。

当申请七层负载均衡时,添加upstream需要选择是否接受告警,如果是,则需要配置机器健康检查方式和对应的健康检查成功代码,如图9-8所示为默认配置。部分upstream服务的健康检查需要自定义绝对路径,或者在“请求头”文本框中添加“Host:域名”,又或者在“健康检查成功代码”文本框中添加“http_2xx”或“http_3xx”。

9.3.3 流量异常检测

流量是系统的黄金指标之一,它能直观反映系统的运行状态。健康的系统流量通常平稳波动变化,当流量突然上涨或下降时可能预示系统出现了故障。因此,流量异常检测对发现系统故障、维护系统的稳定性十分重要。

爱奇艺流量异常检测功能采用了无监督机器学习的方法,可以对vip的流量指标数据进行时间序列异常检测并实时告警,流量异常检测算法架构如图9-9所示。简单来讲,就是从流量曲线上把人眼觉得是异常的点用算法识别出来。至于是否是真的异常,还需要根据业务进行进一步确认和反馈,这对于一般的流量异常可以实现较好的检测效果,在一定程度上减少了异常流量带来的危害。

图9-9中的曲线类型检测方法如下。

1.周期性良好的曲线(周期型曲线)检测方法

● 对历史数据进行拟合,得到拟合模型和拟合误差,基于拟合模型对未来进行预测;在实时检测中,将实际值和预测值的误差与拟合误差进行比较,判断是否生产了异常。

● 根据曲线比较前一个点在前一天与上周同一天的变化,判断是否产生了异常,如图9-10所示。

2.周期性比较差的曲线检测方法

通过历史数据的均值、标准差、分位数等统计信息设置固定的上、下阈值,如图9-11所示。

集群性能分析

在进行DPVS和Nginx集群性能分析之前,我们先熟悉一下性能分析的方法及性能测试的方法。

1.性能分析的方法

目前有很多系统性能分析的方法,我们可以通过这些方法来获取目前系统性能低的主要影响因素,表9-3罗列一些通用的系统性能分析的方法。

表9-3 通用的系统性能分析的方法

2.性能测试的方法

为了保证服务的可靠性,在产品开发及新版本发布阶段均需要进行必要的测试,下面介绍一下常见的4种性能测试的方法。

● 负载测试。

负载测试是在不限制软件的运行资源、测试软件吞吐量上限的情况下,发现设计上的错误或验证系统的负载能力的方法。负载测试可以用于性能测试。

● 压力测试。

压力测试是一种基本的软件质量保证行为,其执行的基本思路很简单:在计算机数量较少或系统资源匮乏的条件下进行测试。压力测试就是在内存、CPU可用性、磁盘空间和网络带宽等资源限制的条件下,观察软件运行的极限,从而发现性能缺陷。现在有很多压力测试工具,如Apache JMeter、Loadstorm、WebLOAD、压测宝等。

● 并发测试。

并发测试主要用于测试多用户并发访问同一应用、模块、数据时是否会产生隐藏的并发问题,如内存泄露、线程锁、资源争用等。这是几乎所有性能测试 中 都 会 使 用 的 一 种 测 试 方 法 。 目 前 使 用 比 较 广 泛 的 测 试 工 具 有ApacheBench、wrk、Postman及Apache JMeter。

● 失效恢复测试。

失效恢复测试主要用于当系统出现部分故障时检测服务是否可用,该方法主要针对的是冗余备份、负载均衡类的服务。通过强制使主服务或负载均衡服务中的某个后端服务挂掉,测试系统是否能够自动检测、摘除故障点并切换到可用服务上。这属于人工干预测试,需要进一步评估修复时间等来确认服务的可用性。

对于集群性能分析,我们主要采用压力测试和并发测试来进行分析。大家已经对七层Nginx集群的性能有所了解,目前大多数公司的七层负载均衡都是用Nginx来搭建的。通过在较差的运行环境下进行并发测试,我们发现七层Nginx集群的性能瓶颈也至少可以达到50000并发连接数。

对于四层DPVS集群,我们可以对比七层Nginx集群的性能获得直观的感受。图9-12所示为DPVS在多核工作场景下的包转发率柱状图,其中,当DPVS工作在三核环境下时,就会使后端的Nginx服务器过载(此处DPVS/Nginx均运行在单台服务器上,属于非集群模式部署)。

本文给大家讲解的内容是负载均衡实践:SLA简介+集群性能分析

  • 下篇文章给大家讲解负载均衡实践:负载均衡与Kubernetes云原生

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表