以阿里云全球故障为例,聊聊如何保障 Auth 服务的 SLA

news2024/11/24 17:48:10

在刚刚过去的“双十一”购物狂欢季,阿里云经历了一次大规模故障,导致阿里系产品集体中断服务。据报道,11 月 12 日,淘宝、钉钉、闲鱼、阿里云盘等阿里系产品出现无法使用的问题, “阿里全系产品崩了” 的话题迅速引发众多关注。此次故障不仅阿里自家的产品受到影响,据天眼查数据,阿里云的企业用户超过 300 万家,这些客户由于云服务不可用,业务运营受到严重影响。

故障的地域范围广泛,覆盖了包括华北、华东、华南、中国香港以及国际地区在内的多个地区。根据阿里云官网的官方通告,故障于 11 月 12 日 17:44 开始被阿里云监控系统检测到,直到 21:11,所有受影响的云产品最终恢复正常,整个事故过程持续了超过 3 个小时。

01.故障原因猜测

什么样的故障能致使阿里云全线服务不可用,且故障范围覆盖全球各个区域,故障恢复长达 3 个小时?

由于故障涉及到多个机房和区域,不太可能是存储或网络等基础设施的问题,因为这些通常采用多可用区部署。

现象主要表现为:被管控的资源,如云服务器 ECS 和云数据库 RDS,仍然可以继续运行,但用户无法通过控制台或API 进行管理操作。因此极有可能是 Auth 这样的一种全球性的基础服务。
虽然以上分析仅为推测,并不代表确切的故障原因,但不少业内专业也给出了类似的推测:

图片来源:DevOpSec

02.什么是认证服务?

认证服务( Auth 服务)是一种用于身份认证和授权的基础服务。它在许多系统和应用程序中起着关键作用,确保只有经过授权的用户可以访问受保护的资源和功能。大家常用的以下功能,都属于认证服务的范畴:身份验证、访问控制、用户管理、单点登录(SSO)、安全审计。作为系统的基础安全服务,它是建立安全、可信赖的系统和保护敏感资源的关键组成部分。

03.如何保证 Auth 服务的 SLA ?

对于如此重要的基础安全服务,其企业相关负责人如何提高企业认证服务的 SLA ,避免"全球性故障"?其使用者应该如何评估及挑选优质的认证服务厂商?围绕 "高 SLA (Service Level Agreement )的认证服务",其核心指导思想为:防治结合。

  • :在故障真的发生的时候,能及时收到故障通知,采用对应的降级策略,防止由于认证服务不可用造成全线服务不可用的大故障。
  • :在基础设施层面,保持云中立、保证异地多活、提升系统可观测性,拥抱容器化技术及微服务治理,从而全面提升整个系统的 SLA ,避免出现“短板效应”。下面将以 Authing ( Authing 就是身份云) 为例,为大家具体讲解“防治结合”的实施落地方案。

防:事件通知驱动 + SDK 快速集成 + 启动降级措施

为帮助认证服务使用方实现 “在故障发生时,能及时收到相关事件,采用降级策略” 这一防御目标,其解题思路为:通过 SDK 方式快速接入认证服务,减少研发成本的同时,通过让 SDK 订阅 Authing 服务端的相关故障事件,及时采取降级措施。

  • 多语言 SDK / API / 认证组件

通过丰富且兼容多种开发语言、多种开发框架的 SDK / API / 认证组件,可让用户 5 行代码快速接入认证服务,让其应用服务具备账号密码认证、短信验证码认证、社交账号登录、企业账号登录、单点登录 SSO、多因素认证 MFA 等安全能力。

  • 事件驱动的云原生身份平台

事件表明状态发生变化,即:某事已经发生。事件用于向相关方发出状态发生变化的信号。在本案例中,事件即为“故障事件”;

Authing 3.0 是以事件驱动(EDA)架构重塑的云原生身份平台,通过事件驱动架构大幅提升了平台的响应速度、可扩展性和开发者体验,并能够实现更加及时的安全事件响应和更加卓越的客户体验。

使用 Authing 的事件相关 SDK,开发者可以订阅 Authing 平台产生的事件,当事件发生时,Authing 服务会实时把事件的类型及当前事件关联的数据以 WebSocket 方式以 JSON 的数据格式主动推送给开发者。也可以在 Authing 控制台添加自定义事件,然后使用事件 SDK 向 Authing 服务推送自定义事件,用来触发特定的工作流程。式将事件内容以 JSON 格式进行推送。

借助事件驱动变化的理念,用户可以订阅“认证服务故障事件”,Authing SDK 在收到该事件后可根据用户的配置和期望方式,实施降级措施,避免全服不可用的故障。

  • 降级措施

降级措施是指在某种情况下,为了保证系统的可用性或确保某项功能的正常运行,采取的临时替代方案或备用方案。当系统或功能遇到问题或无法以预期的方式运行时,降级措施可以帮助系统继续正常运行,但会以降低的性能、功能或安全性为代价。

在本案例中,为了能让系统正常运行,将会牺牲较小部分的安全性。其中一种实现方式为:在接收到“故障”事件后,通过忽略本地缓存的认证 Token 的过期时间,持续提供认证能力;待收到“故障恢复”的事件后,再恢复到常规的更安全的认证方式上,即重新申请 Token 并验证 Token 的过期时间。

在主流的认证方式及协议,如 OAuth 2.0、OpenID Connect、单点登录等,都会使用 JWT(JSON Web Token)用于在不同实体之间安全地传输信息。客户端,例如浏览器等,会将 JWT 进行缓存,以便在后续的请求中使用。JWT 会有过期时间,用于指定 JWT 的有效期。在验证 JWT 时,依赖方通过不检查 JWT 的过期时间,持续使用本地缓存的 JWT 来提供认证服务,从而达到降级的目的。

治:云中立 + 异地多活 + 可观测性 + 微服务治理

尽管“防”的手段,可以通过牺牲部分安全性或功能来换取系统可用性,但其治本之道还是需要从基础建设、服务治理、可观测性的角度提升整体认证服务和系统的可用性,从而提升整体的 SLA。

  • 云中立

系统做到云中立,才能保证不被某一朵云厂商绑定,拥有了选择权,促进数据流动和互操作性。一旦出现某一朵云服务故障的时候,可以迅速将流量切到其他云上提供服务,缩短不可用时间。

为了让系统做到云中立,应该尽可能使用各个云的通用服务,减少对某一朵云的服务依赖;在设计服务架构时,最大程度去兼容用户私有云、各类公有云的云环境。通过成熟 Kubernetes 容器化技术,使整套服务体系同时支持公共云、混合云和私有云部署,并且达到分钟级别弹性扩容,最大可支持亿级别用户认证访问场景。

Authing 使用 Kubernetes 作为容器编排和管理平台,用于在跨多个主机和集群中自动化部署、运行、编排和管理容器化应用程序。同时在数据存储层面,选择通用标准的数据库、缓存、KMS、消息队列、日志等云服务,并在架构设计时,对各个云服务进行适配,从而达到灵活配置兼容各种云服务、多云部署、故障时能及时切换、系统云中立等目标。其架构如下图所示:

  • 异地多活

异地多活、多数据中心、两地三中心等,每当提到这些主流措施,其本质在于:增加冗余副本服务,用于在故障发生时,迅速使用副本服务提供系统可用性。地理位置、网络连接、副本个数和复杂性、数据同步复制、数据安全和合规性、SLA 等级、成本等是在设计异地灾备时,要重点考虑和平衡的。

Authing 通过多云部署 + 多 AZ (Available Zone) + 智能 DNS 的方式,实现异地多活、国内外多 Region 部署、故障时自动切流的方式,提升系统整体的可用性和对客户的 SLA。

  • 可观测性

可观测性(Observability)是指在复杂系统中全面了解、理解和监测系统的运行状态、行为和性能的能力。它是一种系统设计和运维的理念,旨在提供对系统内部和外部的可见性,以便快速识别和解决问题,优化性能,并提供对系统行为的深入洞察。

在本案例中上述的“事件通知驱动”从而实施降级措施的基础建设重要部分,即是系统的可观测性。要做的系统的可观测性,需要注重考虑:

1. 监测:通过收集、记录和分析系统的指标、日志和事件,实时监测系统的运行状态和行为。
2. 日志管理:管理和分析系统的日志数据,以了解系统的运行过程、事件和错误。
3. 追踪和分布式跟踪:通过跟踪请求在系统中的流经路径,了解分布式系统中不同组件之间的相互作用和性能延迟。
4. 管理:捕获和处理系统中的事件,如警报、通知和异常情况。
5. 可视化:通过仪表板、图表和可视化工具,将系统和应用程序的指标、日志和事件以可视化的方式展示出来。

Authing 基于对上述理念的理解,在公用云部署架构、私有化部署架构中都进行了考虑和设计,通过 Tracing、Metrics、Logging 的采集,进行事件管控,并及时将变更推送到客户端、服务端,从而启动相关策略的变化。此外,可视化报表大屏可帮助客户持续、及时地了解到一线的系统可用性指标情况、认证链路追踪、系统性能指标变化等,从而做到“心知肚明”,“及时响应”。

  • 微服务治理

微服务治理(Microservices Governance)是指在微服务架构中对微服务进行管理和控制的一系列实践和策略。由于微服务架构的复杂性和分布式特性,需要一种有效的方式来确保微服务系统的可靠性、可扩展性和一致性。重要要考虑以下方面:

1. 服务发现和注册:可以帮助服务在集群中自动注册和发现其他服务,并提供负载均衡和故障转移的能力。
2. 服务通信和协议:需要定义和管理服务之间的通信协议、消息格式和接口规范,以确保服务之间的互操作性和一致性。
3. 服务网关:服务网关是微服务架构中的入口点,可以提供统一的访问接口和安全性保护,并隔离客户端与后端微服务之间的直接通信。
4. 服务监控和可观测性:通过监控指标、日志和分布式追踪等工具,可以实现对微服务的实时监控和故障排查。
5. 服务安全和访问控制:包括身份验证、授权、数据加密和审计等安全措施,以保护服务免受恶意访问和攻击。
6. 服务版本控制和演化:需要管理服务的版本控制、发布策略和回退计划,以确保服务的无缝演化和兼容性。
7. 服务质量和 SLA 管理:包括定义和监测服务的性能、可用性和可靠性等指标,并确保满足业务需求和用户期望。

微服务治理是一个主流且较为成熟服务治理领域,Authing 也是按照上述的核心点进行具体的服务治理落地;但由于各个业务系统对微服务治理的需求和期望各有不同,这里不再具体阐述。

阿里云全球故障事件带来的巨大影响,又一次给行业的从业者、系统设计人员、企业服务采购者敲了警钟。虽然官方并未公布其故障背后的原因,但认证服务,作为最基础的门户安全服务,其 SLA 的高保证能最大程度避免这样的“全线”、“全球性”故障。本文通过“防治结合”的理念详细阐述了如何在认证服务领域,通过事件驱动设计理念、云中立理念、异地多活的措施、可观测性的提升、微服务治理的策略等具体方式提高系统的可用性、为用户承诺最高水平的 SLA。其设计理念也可以应用到其他服务领域。在具体落地时,还需要考虑具体 SLA 需求和成本的平衡,最终实现业务场景驱动技术迭代,技术迭代促进和保障业务场景。

作者:潘娟,Apache Member & Incubator Mentor,Apache ShardingSphere PMC,AWS Data Hero,中国木兰开源社区导师,腾讯云 TVP。曾负责京东数科数据库智能平台的设计与研发,现专注于分布式数据库 & 中间件生态及开源领域。被评为《2020 中国开源先锋人物》,2021 OSCAR 尖峰开源人物。CSDN 2021 年度 IT 领军人物,2022 年在 ICDE 发表论文 “Apache ShardingSphere:A Holistic and Pluggable Platform for Data Sharding”。

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

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

相关文章

龙迅LT9211D MIPI(DSI/CSI)转LVDS和集创北方ICN6202 MIPIDSI转LVDS比对

龙迅LT9211D描述: Lontium LT9211D是一款高性能的MIPI DSI/CSI- 2到双端口LVDS转换器。LT9211D反序列化输入的MIPI视频数据,解码数据包,并将格式化的视频数据流转换为AP和移动显示面板或摄像机之间的LVDS发射机输出。LT9211D支持最大14 dB输…

【luckfox】0、开发环境搭建

前言 本章简单介绍如何搭建luckfox的开发环境。 一、抓取luckfox源码 需要提前准备好ubuntu环境。 git clone https://github.com/LuckfoxTECH/luckfox-pico.git二、编译 youkaiubuntu:/home/luckfox/luckfox-pico$ ./build.sh lunchyoukaiubuntu:/home/luckfox/luckfox-p…

二十、泛型(7)

本章概要 动态类型安全泛型异常混型 C 中的混型与接口混合使用装饰器模式与动态代理混合 动态类型安全 因为可以向 Java 5 之前的代码传递泛型集合,所以旧式代码仍旧有可能会破坏你的集合。Java 5 的 java.util.Collections 中有一组便利工具,可以解…

ubuntu中使用 vscode 连接docker开发环境

文章目录 ubuntu中使用 vscode 连接docker开发环境步骤一:安装 Remote Development 插件步骤二:连接远程环境步骤三:开发 问题解决参考连接 ubuntu中使用 vscode 连接docker开发环境 Remote Development 是一个 Visual Studio Code 插件&…

【python 生成器 面试必备】yield关键字,协程必知必会系列文章--自己控制程序调度,体验做上帝的感觉 1

python生成器系列文章目录 第一章 yield — Python (Part I) 文章目录 python生成器系列文章目录前言1. Generator Function 生成器函数2.并发和并行,抢占式和协作式2.Let’s implement Producer/Consumer pattern using subroutine: 生成器的状态 generator’s st…

【EI会议征稿】第四届环境资源与能源工程国际学术会议(ICEREE 2024)

第四届环境资源与能源工程国际学术会议(ICEREE 2024) 2024 4th International Conference on Environment Resources and Energy Engineering ICEREE(2020-2023)大会先后在珠海,昆明,长沙成功召开。会议主…

自定义Matplotlib中的颜色映射(cmap)

要自定义Matplotlib中的颜色映射(cmap),您可以按照以下步骤进行操作: 导入所需的库: import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import LinearSegmentedColormap创建自定义颜色映…

ViewPager2和TabLayout协同使用,实现多Fragment页面切换类似于QQ音乐,bilibili效果

一、ViewPager2的基本用法 使用前先添加依赖: implementation androidx.appcompat:appcompat:1.4.0 // AndroidX AppCompatimplementation com.google.android.material:material:1.4.0 // Material Design Components1、制作Fragment 首先制作一个Fragment的xml布…

欧拉回路和欧拉路径

目录 欧拉回路基础 欧拉回路的定义 欧拉回路的性质 判断图中是否存在欧拉回路的java代码实现 寻找欧拉回路的三个算法 Hierholzer算法 详细思路 代码实现 欧拉路径 欧拉路径的定义 欧拉路径的性质 欧拉回路基础 欧拉回路的定义 欧拉回路遍历了所有的边,…

spring cloud 简介

springcloud 定义 1.定义:springcloud为开发人员提供了在分布式系统中快速构建一些通用模式的工具(例如配置管理、服务发现、断路器、路由、控制总线等)2.微服务:基于单体应用,基于业务进行拆分,每个服务都是独立应用…

栈的实现---超详细

栈的实现 文章目录 栈的实现一、栈的模型二、栈的代码实现以及测试用例①栈的初始化②入栈③出栈④弹出栈顶⑤判断栈空间是否为空⑥计算栈空间长度⑦销毁栈⑧测试用例 一、栈的模型 首先栈有两个概念 1.数据结构里的栈。2.语言/操作系统中的栈(内存空间),可能会在递…

xshell连接云服务器(保姆级教程)

文章目录 1. 前言2. 查看云服务器的信息3. xshell7连接云服务器 1. 前言 云服务器,也被称为Elastic Compute Service (ECS),是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。它源于物理服务器集群资源池,可以像从大海中取水一样&am…

从流程优化到经营提效,法大大电子签全面助力智慧零售升级

在新零售模式下,“商业综合体、百货商场、连锁商超、连锁便利店、线上电商平台”等各类商业零售企业借助数字化的手段来改造和重塑传统零售流程和逻辑,实现全面数字化转型,包括线上线下一体化、全场景覆盖、全链条联通、全渠道经营、客户服务…

大数据安全 | 【实验】RSA加密解密

文章目录 📚关于RSA📚实验目的📚流程梳理🐇Step1:求解乘法逆元🐇Step2:生成密钥🐇Step3:加密解密🐇Step4:最后数据导入 📚实验结果 &a…

github使用手册

核心代码 配置用户名/邮箱 best practice git init #在本地初始化一个仓库 git add . #将当前目录所有的文件加入&#xff08;注意这里是加入&#xff09;到缓存区 git commit -m "xxx" #将当前缓存区里的内容提交到本地仓库 git remote add <remote_rep_name&g…

开启学习新时代,电大搜题助您实现梦想!

亲爱的读者朋友们&#xff0c;当您拥有追求知识的渴望&#xff0c;秉持着对成功的执着追求时&#xff0c;浙江开放大学&#xff08;广播电视大学&#xff09;诞生了——它向您开启了一扇通向知识殿堂的大门。而今&#xff0c;我们荣幸地向您推荐一款既简便又高效的学习利器——…

Android设计模式--原型模式

一&#xff0c;定义 原型模式就是用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象 也就是说用户从一个实例中复制出一个内部属性一致的对象&#xff0c;这个被复制的对象就是原型。 原型模式多用于创建复杂的或者构造耗时的实例&#xff0c;因为这…

YOLO目标检测——苹果数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;监测果园中苹果的生长情况、水果品质监控、自动化分拣数据集说明&#xff1a;苹果检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(…

淘宝京东优惠券信息API接口系列

获取淘宝优惠券信息接口需要使用淘宝开放平台提供的API接口。以下是获取优惠券信息的步骤&#xff1a; 进入淘宝开放平台&#xff0c;注册并登录账号。在开放平台页面中&#xff0c;找到“优惠券”或“营销工具”等相关的API接口&#xff0c;根据需要进行选择。根据接口文档&a…

计算机组成原理:大而快——层次化存储

原文链接www.xiaocr.fun/index.php/2023/11/14/计算机组成原理大而快-层次化存储/ 引言 关于两种局部性 时间局部性&#xff1a;如果某个数据被访问&#xff0c;那么在不久的将来它可能再次被访问空间局部性&#xff1a;如果某个数据项被访问&#xff0c;与它相邻的数据项可…