如何实现系统的可扩展性和高可用性

概述

可扩展性,高可用性和性能

可扩展性,高可用性,性能和关键任务这些术语对不同组织或组织内的不同部门来说意味着不同的事情。它们经常被互换,造成混乱,导致管理不善的预期或延迟的实现或不现实的指标。本文为您提供了定义这些术语的工具,以便您的团队能够完全了解性能目标来实现目标关键系统。

可扩展性

可扩展性是系统或应用程序的属性,用于处理大量的工作或更易轻松扩展,用于响应对网络,任务处理,数据库访问或文件系统资源需求的增加

水平可扩展性

当系统通过添加具有相同功能的新节点扩展时,系统可以水平扩展,从而在所有节点之间重新分配负载。 SOA系统和Web服务器通过向负载均衡网络添加更多服务器来扩展,以便传入的请求可以在所有这些网络之间分配。集群是描述扩展系统的常用术语。

图1:集群

垂直可扩展性

当系统通过向节点添加处理器,主存,存储或网络接口进行扩展时,系统可以垂直或向上扩展,以满足每个系统更多的请求。托管服务公司通过增加处理器数量或主存来扩展,以在同一硬件中托管更多的虚拟服务器。

图2:虚拟化

高可用性

可用性描述了系统在一段时间内提供有用资源的情况。高可用性保证在正常运行时间和停机时间之间的时间窗口内有绝对的功能连续性。

A = 100 - (100 * D / U),D :: =计划外停机时间,U :: =正常运行时间; D,U表示分钟

正常运行时间和可用性并不意味着同样的事情。一个系统可能在一个完整的测量期间,但由于网络中断或相关支持系统的停机时间可能不可用。停机时间和不可用性是同义词。

测量可用性

供应商将可用性定义为表1中的给定数量的“九进制”,其中还描述了与365天内的分钟数相关的估计停机时间的分钟数或秒数,即525,600,使U为他们的营销目的。

可用性%

停机时间分钟

每年停机时间

供应商术语

90

52,560.00

36.5 天

1个9

99

5,256.00

4 天

2个9

99.9

525.60

8.8 小时

3个9

99.99

52.56

53 分钟

4个9

99.999

5.26

5.3 分钟

5个9

99.9999

0.53

32 秒

6个9

表1:每年总运行时间的百分比的可用性

分析

高可用性取决于系统要求定义的预期正常运行时间;不要被供应商的数字误导。具有高可用性系统及其可测量的正常运行时间的含义是服务级别协议的直接功能。考虑到计划的停机时间,例如每月8小时的维护窗口,可用性会上升。每增加九个可用性的成本可能呈指数增长。可用性是将系统升级或缩小并实现系统,网络和存储冗余的功能。

服务水平协议(SLA)

SLA是谈判条款,概述了涉及交付和使用系统的双方的义务,如:

系统类型(虚拟或专用服务器,共享托管)

可用性级别

最低限度

目标

正常运行时间

网络

功率

维护窗口

操作性能

性能和指标

开票

SLA可以在两个内部组织(例如IT和电子商务部门)之间或组织与外包服务提供商之间承担义务。 SLA建立评估系统性能的指标,并提供可用性和可扩展性目标的定义。除非正在绘制SLA或已经存在SLA,否则不要谈论这些主题。

弹性

灵活性是能够根据需求动态地添加和删除系统中的资源,并且是水平或垂直缩放的专门实现。

随着请求在忙碌期间增加,当需求退减时,更多的节点可以自动添加到集群中,以便在实体零售商的季节性招聘中进行扩展和删除。此外,系统资源可以重新分配,以更好地支持一个动态扩展的系统。

实施可扩展系统

SLA确定系统是否必须扩展或扩展。他们也推动了增长时间表。股票交易系统必须在最小和最大可用性水平内实时扩展。相比之下,电子商务系统可能会在一年的“缓慢”月份扩大,并在零售节假期间扩大,以满足更大的需求。

负载均衡

负载均衡是通过在两个或更多资源之间分发请求来最小化响应时间和最大化吞吐量的技术。负载均衡器可以在专用硬件设备或软件中实现。图3显示了负载均衡系统如何通过一个公共的地址暴露给消费者使用。负载均衡器负责根据调度规则将请求路由到可用系统。

图3:可用性占总年度总运行时间的百分比

调度规则是用于确定哪个服务器必须为请求提供服务的算法。 Web应用程序和服务通常通过遵循循环调度规则进行平衡,但也可以基于最少连接、IP hash或多个其他选项进行平衡。通过应用频率规则和到期算法来均衡缓存池。无状态请求以任何数量的服务器的统一概率到达的应用可以使用伪随机调度器。诸如音乐商店之类的应用程序(其中某些内容在统计学上更受欢迎)可能会使用不对称的负载均衡器将较多的请求转移到更高性能的系统,使用不太强大的系统或集群服务于其余的请求。

持久负载均衡器

有状态应用程序需要持久或粘性的负载均衡,其中保证消费者与池中的特定服务器维护会话。图4显示了一个粘性均衡器,用于维护来自多个客户端的会话。图5显示了群集如何通过使用数据库共享数据来维护会话。

图4:粘性负载平衡器

负载均衡器的常见特性

不对称负载分配 - 分配一些服务器来处理比其他服务器更大的负载

内容过滤:入站或出站。

分布式拒绝服务(DDoS)

攻击防护

防火墙。

有效负载切换:根据URI,端口和/或协议向不同的服务器发送请求。

优先激活:将服务器置于池中。

速率整形:能够给不同的流量赋予不同的优先权。

脚本:通过实施编程规则或操作减少人际交往。

SSL终止:硬件辅助加密可以释放Web服务器资源。

TCP缓冲和卸载:对池中的服务器的请求。

GZIP压缩:降低传输带宽利用率。

图5:数据库会话

缓存策略

有状态的负载均衡技术需要服务提供商之间的数据共享。缓存是一种在计算或获取成本高昂的多个消费者或服务器之间共享数据的技术。数据被存储和检索在一个子系统中,可以快速访问经常访问的数据的副本。

缓存被实现为索引表,其中使用唯一的键来引用一些基准。消费者首先检查(命中)缓存并从中检索数据来访问数据。如果不存在(缓存未命中),则会进行成本较高的检索操作,消费者或子系统将数据插入高速缓存。

写政策

如果后备存储更改而不更新缓存,缓存可能会变得过时。缓存的写策略定义了缓存数据的刷新方式。一些常见的写策略包括:

直写:每次写入高速缓存都会对后备存储进行同步写操作。

写入:更新的条目在缓存表中被标记为脏,只有在请求脏数据时才更新。

无写入分配:仅读取请求被缓存,假定数据不会随时间而变化,但检索成本很高。

应用缓存

隐性缓存发生在程序员很少或没有参与实现缓存时。该程序使用其本机API执行查询和更新,并且缓存层自动缓存请求,而不依赖应用程序。示例:Terracotta(https://www.terracotta.org/)。

显式缓存发生在程序员参与实现缓存API并且还可以实现缓存策略时。程序必须将缓存API导入到其流中才能使用它。示例:

memcached(http://www.danga.com/memcached),Redis(https://redis.io)和Oracle Coherence(http://coherence.oracle.com)。

通常,隐式缓存系统特定于平台或语言。例如,Terracotta只适用于Java和JVM托管的语言,如Groovy或Kotlin。显式缓存系统可以与许多编程语言一起使用,并且可以在多个平台上同时使用。 Memcached和Redis与每种主要的编程语言一起工作,Coherence可与Java,.Net和本机C ++应用程序配合工作。

Web缓存

Web缓存用于存储文档或部分文档(“粒子”),以减少服务器负载,带宽使用和Web应用程序的滞后。 Web缓存可以存在于浏览器(用户缓存)或服务器上,本节的主题。 Web缓存不可见,客户端可能会被分类到以下任何类别中:

Web加速器:它们代表原始服务器运行。用于加速访问重型资源(如媒体文件),并且通常地理位置更接近预期的接收者。内容分发网络(CDN)是Web加速缓存的示例; Akamai,Amazon S3,Nirvanix是这项技术的例子。

代理缓存:它们向可能都可以访问相同资源的一组客户端提供请求。它们可用于内容过滤和减少带宽使用。 Squid,Apache,Amazon Cloud Front,ISA服务器是这项技术的例子。

分布式缓存

可以跨多个系统实现缓存技术,从而为多个消费者和多个资源提供请求。这些被称为分布式缓存,如图6中的设置。Akamai是分布式Web缓存的示例,memcached是分布式应用程序缓存的示例。

图6:分布式缓存

集群

集群是一组计算机系统,它们一起工作,让用户感觉好像是单个系统在服务。部署群集以提高服务可用性或增加计算或数据操纵性能。在等效计算能力方面,与具有相同性能特征的单系统相比,集群更具成本效益。

集群中的系统通过诸如千兆以太网,光纤分布式数据接口(FDDI),Infiniband,Myrinet或其他技术的高速局域网互连。

图7:负载均衡集群

负载平衡集群(主/主):在多个后端冗余节点之间分配负载。集群中的所有节点都向消费者提供全方位服务功能,并同时处于活动状态。

高可用性集群(主/备):通过冗余集群提供不间断服务来提高服务可用性,从而消除单点故障。高可用性集群至少需要两个节点,一个“心跳”来检测所有节点是否准备就绪,以及一个路由机制,如果主集群出现故障,则会自动切换流量或故障切换。

图8:群集故障切换

网格:将工作负载定义为不需要进程间数据共享的独立作业。存储或网络可以在网格的所有节点上共享,但中间结果与其他作业进度或网格中的其他节点(例如Cloudera Map Reduce集群(http://www.cloudera.com))无关。

图10:计算集群

计算集群:执行需要原始计算能力而不是执行事务操作(如Web或数据库集群)的进程。节点紧密耦合,均匀,物理接近。他们经常取代超级计算机。

冗余和容错

冗余系统设计取决于任何系统组件故障与其他组件故障无关的期望。

容错系统在组件或子系统故障的情况下继续运行;吞吐量可能会降低,但总体系统可用性保持不变,通过组件冗余或安全回退来处理硬件或软件故障。如果依赖系统不可用,软件中的容错通常被实现为回退方法。容错要求来自SLA。实现取决于硬件和软件组件以及它们交互的规则。

容错SLA要求

没有单点故障:冗余组件确保连续运行,并允许维修而不中断服务。

故障隔离:问题检测必须确定特定故障组件

故障传播遏制:一个组件中的故障不能传播到其他组件。

恢复模式:将系统重新设置为已知状态。

冗余集群系统可以提供更高的可用性,更好的吞吐量和容错能力。图10中的主 / 主集群为可扩展的无状态应用程序提供了不间断的服务。

图10:主 / 主完全容忍和恢复

一些有状态的应用程序可能只会扩大;图11中的主 / 备集群为此类应用程序提供了不间断的服务和灾难恢复。主/主配置提供故障透明度。主/备配置可以以更高的成本提供故障透明度,因为通过反馈控制系统实现自动故障检测和重新配置,反馈控制系统更昂贵并且更复杂。

图11:主 / 备容错和恢复

企业系统通常通过将服务转移到备分系统并将其尽快上线,通过故障透明度实现主 / 备容错和恢复。机器人和生命关键系统可以实现概率,线性模型,故障隐藏和优化控制系统。

多区域

冗余系统通常跨越多个区域,以隔离地理现象,提供故障转移功能,并尽可能靠近消费者提供内容。这些冗余通过系统级联到所有服务中,并且单个可扩展系统可以在整个过程中具有多个负载均衡的集群。

云计算

云计算描述在第三方拥有和运营的分布式计算资源上运行的应用程序。

最终用户应用程序是最常见的示例。他们利用软件即服务(SaaS)和平台即服务(PaaS)计算模型。

图12:云计算配置

云服务类型

网络服务:Salesforce com,USPS,Google Maps。

服务平台:Google App Engine,Amazon Web Services(EC2,S3,Cloud Front),Nirvanix,Akamai,MuleSource。

故障检测方法

故障检测方法必须提供足够的信息来隔离故障并执行自动或辅助故障切换操作。一些最常见的故障检测方法包括:

内置诊断

协议嗅探器

健康检查

看门狗检查

临界性定义为两个或多个检测机制在固定时间段内报告的连续故障的数量。如果报告每个单一故障(噪声)或者在多个监控周期内无法报告真实故障,则故障检测机制是无用的。

系统性能

性能指的是指定时间段内特定工作负载下的系统吞吐量和延迟。性能测试验证关于系统吞吐量,可扩展性,可靠性和资源使用情况的实施决策。性能工程师与开发和部署团队合作,确保系统的非功能需求(如SLA)作为系统开发生命周期的一部分实现。系统性能包括硬件,软件和网络优化。

提示:性能测试工作必须与开发项目同时开始,并继续部署。如果可能,应对生产环境的镜像执行测试。

绩效工程师的目标是尽早发现瓶颈,并与开发部署团队合作,消除这些瓶颈。

系统性能测试

性能规格与SLA和系统设计一起记录在案。性能故障排除包括以下类型的测试:

持久性测试:在连续的,预期的负载下识别资源泄漏。

负载测试:确定特定负载下的系统行为。

峰值测试:显示系统如何运行以响应负载的剧烈变化。

压力测试:在长时间的剧烈负载变化下识别应用的断点。

软件测试工具

市场上有许多软件性能测试工具。许多很好的工具已开源。这些工具可适用于包括Java,原生的,PHP,.Net和其他语言和平台等。

原文发布于微信公众号 - IT技术精选文摘(ITHK01)

原文发表时间:2017-08-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏WeTest质量开放平台团队的专栏

我是如何一步步攻破一家互联网公司的

最近在研究Web安全相关的知识,特别是SQL注入类的相关知识。接触了一些与SQL注入相关的工具。周末在家闲着无聊,想把平时学的东东结合起来攻击一下身边某个小伙伴...

1262
来自专栏搜云库

分布式和集群区别?什么是云计算平台?分布式的应用场景?

分布式是指将一个业务拆分不同的子业务,分布在不同的机器上执行,集群是指多台服务器集中在一起,实现同一业务,可以视为一台计算机,一个云计算平台,就是通过一套软件系...

2645
来自专栏杨建荣的学习笔记

数据库无响应问题的紧急处理和分析 (r10笔记第42天)

黄金周里处理了一起紧急的问题,在外面幸亏有同事帮忙协助,等我赶回家去,赶紧继续处理。 首先问题是在晚饭时间左右开始发生,但是过了没多久又恢复了,所以这个问题暂时...

33112
来自专栏杨建荣的学习笔记

防火墙开通的自动化尝试和感悟

对于一个从零到一的系统或者平台,你会有几十次几百次的调试,为的是能让系统/平台真正跑起来,用起来。我想这背后需要的坚持真是百般煎熬,一方面希望能够像建造...

1141
来自专栏后端技术探索

nginx安全加固心得

nginx发展多年,自身的安全漏洞比较少,发现软件漏洞,一般利用软件包管理器升级一下就好了。 本文侧重讲述的不是nginx自身的安全,而是利用nginx来加固w...

2625
来自专栏张戈的专栏

教你如何查看Linux的CPU负载

记得博主以前被问到 CPU 负载如何才算高的时候,出过一次糗,具体就不记录了。。。在网上找了一篇比较详细的 Linux 下的 CPU 负载算法教程,科普一下。不...

5806

32位 or 64位:Apache CloudStack系统VM架构选择

最近我和一些朋友讨论了一个关于CloudStack的问题:为什么现在CloudStack 4.3同时提供32位或64位系统虚拟机的选项。我提出了一个观点,并将其...

2176
来自专栏FreeBuf

中国深圳一家厂商的智能摄像头曝出漏洞:至少 17.5 万设备可被远程攻击

安全企业 Bitdefender 和 Checkmarx 均发布报告表示,安全研究员在多个常用智能摄像头中发现远程侵入漏洞,涉及 VStarcam、Loftek...

3385
来自专栏CDA数据分析师

10月精选Python开源项目Top10!

【导读】过去一个月里,我们对近 250 个 Python 开源项目进行了排名,并挑选出热度前 10 的项目。这份清单的平均 github star 数量高达 1...

871
来自专栏大魏分享(微信公众号:david-share)

深度分析:Istio替代Spring Cloud的合理性

一、现有微服务架构 微服务本质上是分布式架构、分布式应用、分布式计算。 分布式计算可以带来的好处有:性能、可靠性、弹性、可扩展性、可用性、稳健性。 而从应用开发...

1.6K8

扫码关注云+社区

领取腾讯云代金券