【可靠性架构】可靠性架构第1部分:概念

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 本故事的目标是提供可靠性的最佳实践来管理您的云环境。尽管它引用了AWS和Cloud,但这些原则同样适用于其他云提供商和内部环境。

可靠性

本故事的目标是提供可靠性的最佳实践来管理您的云环境。尽管它引用了AWS和Cloud,但这些原则同样适用于其他云提供商和内部环境。

本故事将分为三个部分。

  • 第1部分-描述各种术语和最佳实践的概念
  • 第2部分-云的弹性和可用性设计模式
  • 第3部分—实现特定SLA的高可用性体系结构

本故事集中在第1部分

AWS于2015年发布了良好架构框架,并描述了良好架构原则的五大支柱,即

  • 可靠性
  • 安全
  • 性能效率
  • 成本优化
  • 卓越运营

本故事侧重于可靠性支柱,提供了可靠性的要点,以供快速参考,并基于AWS白皮书和Microsoft云设计模式。

可靠性集中在以下方面

  • 能够从基础设施/服务故障中恢复
  • 快速获取需求资源以满足需求的能力
  • 缓解配置和瞬态网络问题

可用性

可用性=正常运行时间/总时间,表示为正常运行时间的百分比,例如99.99%。简而言之,以9的数量表示,例如99.999表示为五个9

作为快速参考,99%的可用性意味着每年3天15小时的停机时间99.999%意味着每年5分钟的停机时间。要计算特定值,请使用链接https://uptime.is/99.9或结账https://en.wikipedia.org/wiki/High_availability

如果存在相关性,则可用性是系统可用性和从属系统可用性的乘积。例如,如果系统A具有99.9%,系统B具有99.9%,并且A依赖于B,则聚合系统的可用性为99.9*99.9=99.8%

如果系统存在冗余,则正常运行时间计算为100减去组件故障率的乘积。例如,如果可用性为99.9,则故障率为0.1%,由此产生的可用性为100减去(0.1*0.1)=999.99%,这表明由于冗余而增加了可用性。

有时可能不知道依赖项的可用性。如果我们知道平均故障间隔时间(MTBF)和平均恢复时间(MTTR),那么可用性=MTBF/(MTBF+MTTR)。例如,MTBF为150天,MTTR为1小时,则可用性为99.97%。使用链接对此进行更深入的了解。

实现最高级别的可用性意味着部署/容量添加/回滚等方面的系统成本和复杂性更高。即使没有使用所有功能,也通常会为已建立的系统支付更高可用性的费用。必须考虑成本,小心制定正确的可用性目标。

弹性网络设计-关键指南

  • 在设计VPC和子网CIDR块时,考虑到所有对等可能性、本地重叠、Lambdas/ELB所需的IP数量等,考虑到未来的情况。
  • 为VPN连接和直连使用冗余
  • 利用AWS Shield、WAF、Route 53等AWS服务防止DDoS攻击

高可用性应用程序设计

为“五个9”或更高的HA进行设计需要极端的考虑。许多服务提供商和软件库的设计并不是为了提供这样的数量,这需要添加多个服务提供商,避免单点故障和定制开发,以及操作的极端自动化和彻底的故障测试。

应用程序必须处理的一些中断类型如下

  • 硬件故障
  • 部署失败
  • 增加的负载
  • 意外的输入错误
  • 凭据/证书过期
  • 依赖项失败
  • 电力等基础设施故障

所有这些故障都必须得到处理,恢复必须自动化。这意味着实现HA的工作不是微不足道的,并导致了可用性目标需求的细化。这可能是因为某些交易必须比其他交易更可靠,高峰时间、地理差异等。。

了解可用性需求

整个系统不需要设计为高可用性。例如,实时操作可能比批处理更重要,非高峰时间可能对可用性有容忍度,数据平面与控制平面,例如,现有EC2的健康状况和操作可能比能够启动新实例更重要,等等。

应用程序可用性设计

通过利用经验证的实践,可以显著提高应用程序可用性。以下原则指导HA的应用程序设计

  • 故障隔离区:通过利用AWS可用区和区域,可以将影响降低到特定区域。跨区域利用复制技术可降低数据丢失的风险
  • 冗余:避免单点故障是关键。构建对单个断层带故障具有弹性的软件非常重要
  • MicroServices:通过使用MicroServices架构构建,我们可以区分不同组件之间的可用性需求。架构中存在权衡,请查看https://martinfowler.com/articles/microservice-trade-offs.html
  • 面向恢复的计算:减少恢复影响时间至关重要。恢复程序基于影响而不是发生的问题类型。在某些情况下,如EC2,终止它并让ASG生成一个新实例可能比试图确定确切的问题并修复要好。定期测试恢复路径对于始终评估程序的有效性至关重要
  • 分布式系统最佳实践:分布式系统的一些最佳实践包括:节流(速率限制)、在返回故障之前重试一定次数、在特定条件下快速失败、确保处理一次的Idemptency令牌、保持服务始终以恒定工作预热、检查依赖性可用性的断路器、,静态稳定性,以确保系统在故障期间工作更少,而不是使系统进一步过载

可用性的操作注意事项

规划应用程序整个生命周期中使用的自动化或人工工作流非常重要。测试是输送管道的重要组成部分。除了单元和功能测试外,性能测试、持续负载测试和故障注入测试也很重要。操作准备审查,必须评估测试、监控的完整性,并能够根据SLA审计应用程序性能

自动化部署

使用高级部署技术,如

  • 金丝雀:通过监控影响,逐步引入更改并向前和向后移动
  • 蓝-绿:立即建立一个并行的新堆栈和交换流量(并根据需要快速回滚)
  • 功能切换-使用配置选项通过根据需要打开/关闭来部署新功能
  • 故障隔离区部署:使用故障隔离区隔离部署并围绕区域故障规划容量

测试

测试必须符合可用性目标。单元测试、负载测试、性能测试、故障测试和外部依赖性测试是必要的。

监控和警报

监控需要有效检测故障并发出警报。您最不希望的是客户在您之前知道问题。监控和警报系统应与主要服务分离,服务中断不应影响监控和警报。

监测分为五个阶段

产生

确定需要监控的服务、定义度量、创建阈值和相应警报。几乎所有AWS服务都提供大量监控和日志信息供用户使用。例如Amazon ECS和AWS Lambda流日志到CloudWatch日志,VPC流日志可以在VPC中的任何或所有ENI上启用

聚合

Amazon CloudWatch和S3是主要的聚合层。一些服务(如ASG和ELB)提供开箱即用的度量,其他流服务(如VPC流日志/CloudTrail事件数据)被转发到CloudWatch日志,这些日志可以被过滤以提取度量。这可以提供触发警报的时间序列数据。

实时处理和报警

警报可以与多个用户的SNS集成,或发送到SQS进行第三方集成,或使用AWS Lambda立即采取行动。

存储和分析

CloudWatch日志可以将日志发送到AmazonS3,EMR可以用于进一步了解数据。Splunk/Logstash等第三方工具可用于聚合/处理/存储和分析。数据保留要求是关键,旧数据可以移动到AmazonGlacier进行长期存档。

作战准备审查(ORR)

ORR对于确保应用程序可用于生产非常重要。团队需要有一份初始ORR检查表,必须重复以验证准确性。一个团队的ORR必须结合从其他应用中吸取的经验教训。

审计

审核监控方面以验证可用性目标至关重要。根本原因分析需要发现发生了什么。AWS提供以下服务以跟踪事件期间的服务状态

  • CloudWatch日志:存储日志并检查
  • AWS配置:随时查找基础设施的状态
  • AWS CloudTrail:查找由谁调用了哪些AWS API

请继续关注第2部分—高可用性体系结构,以实现特定的SLA

工具书类

Tags

本文:https://architect.pub/architecting-reliability-part-1-concepts

相关实践学习
日志服务之数据清洗与入湖
本教程介绍如何使用日志服务接入NGINX模拟数据,通过数据加工对数据进行清洗并归档至OSS中进行存储。
相关文章
|
2月前
|
缓存 前端开发 JavaScript
第三章(概念篇) 微前端架构模式
第三章(概念篇) 微前端架构模式
|
2月前
|
缓存 自然语言处理 前端开发
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
第一章 引言-HTTP协议基础概念和前后端分离架构请求交互概述
|
7天前
|
Java 数据库连接 Spring
Spring底层架构核心概念总结
Spring底层架构核心概念总结
|
7天前
|
存储 算法 C语言
【链表专题】深入探索链表:文章索引与知识架构(链表的概念、实现、应用、经典例题大合集)
【链表专题】深入探索链表:文章索引与知识架构(链表的概念、实现、应用、经典例题大合集)
|
12天前
|
负载均衡 算法 架构师
系统架构设计师-软件水平考试(高级)-论文-可靠性设计
系统架构设计师-软件水平考试(高级)-论文-可靠性设计
|
21天前
|
前端开发 JavaScript 安全
微前端架构采用 TypeScript 提升开发效率和代码可靠性
【6月更文挑战第12天】微前端架构采用 TypeScript 提升开发效率和代码可靠性。TypeScript 的类型安全防止了微前端间的类型错误,智能提示与自动补全加速开发,重构支持简化代码更新。通过定义公共接口和使用 TypeScript 编写微前端,确保通信一致性与代码质量。在构建流程中集成 TypeScript,保证构建正确性。总之,TypeScript 在微前端架构中扮演关键角色,推荐用于大型前端项目。
46 4
|
22天前
|
监控 持续交付 API
微服务架构:从概念到实践
【6月更文挑战第10天】微服务架构将大型应用拆分为独立小服务,每个服务运行在独立进程中,通过轻量级通信协作。其特点是模块化、可伸缩、灵活且容错性好。优势包括提高开发效率、降低系统复杂性、便于技术选型和提升系统可用性。实践中,涉及业务拆分、服务通信、治理、自动化部署及数据一致性管理。这种架构模式为企业应对复杂业务需求提供了有效解决方案。
|
15天前
|
存储 小程序 云计算
云计算概念与架构设计介绍
云计算概念与架构设计介绍
|
2月前
|
Kubernetes API 调度
Kubernetes学习-核心概念篇(二) 集群架构与组件
Kubernetes学习-核心概念篇(二) 集群架构与组件
|
25天前
|
消息中间件 数据采集 分布式计算
离线数仓(一)【数仓概念、需求架构】
离线数仓(一)【数仓概念、需求架构】