高可用架构实例:在多云和多区域中穿行(2)

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
日志服务 SLS,月写入数据量 50GB 1个月
简介: 高可用架构实例:在多云和多区域中穿行(2)

这是单个AZ内部的结构:


微信图片_20220123190303.jpg


在这种情况下,我们使用两个AWS区域:us-west-2(主集群)和us-west-1(备份集群)。在正常情况下,所有请求都将转到us-west-2,由三个单独的可用区域提供服务。


这就是我们实现高可用性的方式:所有服务(包括数据库)都在每个可用区(AZ)上运行实例。如果一个AZ由于数据中心故障而关闭,我们仍有两个AZ来处理来自的请求。如果整个区域出现故障或出现错误,我们可以更新Route53以故障转移到us-west-1并恢复操作。

我们通过在每个AWS可用区域上运行所有服务实例来实现高可用性

我们在服务故障转移方面有不同的成熟度级别:某些服务,例如用户搜索v2(在Elasticsearch上构建缓存)可能有效,但数据稍有延迟;另外,核心功能保持按预期工作。

在数据层中,我们使用:

  • MongoDB的跨区域集群。
  • PostgreSQL的RDS复制。
  • Elasticsearch的每个区域的群集具有自动快照和恢复,定期运行以解决缺少跨区域群集的问题。


我们每年至少进行一次故障演练,我们有手册和自动化,以帮助新的基础设施工程师快速了解如何做到这一点以及产生什么影响。

(编者:每年至少一次故障演练,对于真正发生区域不可用的时候指导意义是否足够?)


我们的部署通常由Jenkins节点触发; 根据服务,我们使用Puppet,SaltStack和/或Ansible来更新单个节点或节点组,或者我们更新AMI并为不可变部署创建新的自动缩放组。 我们为新旧服务部署了不同类型的部署。维护文档和监控应该统一的内容,在我们需要维护自动化的同时,作用上很大程度上显得微乎其微。

自动化测试

除了每个项目的单元测试覆盖率外,我们还提供多个功能测试套件,可在各种环境中运行; 我们在部署到生产之前在预生产环境中运行它,并在完成部署后再次在生产环境中运行它们以确保一切正常。

亮点:

  • 在不同的项目中有数千个单元测试。
  • 每分钟执行Pingdom来探测核心功能。
  • 我们在每次部署之前和之后都使用Selenium和基于CodeceptJS的功能测试。 功能测试套件测试不同的API端点,身份验证流程,身份提供程序等等。

除了每个项目的单元测试覆盖率外,我们还有多个功能测试套件,可在各种环境中运行:在部署到生产之前进行分段,在完成部署后再次进行生产。


CDN

直到2017年,我们在多个地区使用NGINX,Varnish和EC2节点运行我们自己定制的CDN。从那时起,我们转向CloudFront,这给了我们几个好处,包括:

  • 更多位置接入,这意味着我们的客户延迟更少。
  • 降低维护成本。
  • 配置更简单。

有一些缺点,比如我们需要运行Lambdas来执行某些配置(比如将自定义标头添加到PDF文件等等)。 不过,好处远远大于这些。

Extend

(译者补充:Extend [https://goextend.io/]是Auth0开发的一个平台,用于实现SaaS的自定义和集成)

我们提供的功能之一是能够通过身份验证规则或自定义数据库连接将自定义代码作为登录事务的一部分运行。 这些功能由Extend提供支持,Extend是一个可扩展性平台,由Auth0开发,现在也被其他公司使用。 通过Extend,我们的客户可以在这些脚本和规则中编写他们想要的任何内容,允许他们扩展配置文件,规范化属性,发送通知等等。


我们专门为Auth0扩展了集群; 他们使用EC2自动扩展组,Docker容器和自定义代理的组合来处理来自租户的请求,每秒处理数千个请求并快速响应负载变化。 有关如何构建和运行它的更多详细信息,请查看有关如何构建自己的无服务器平台的帖子。


监控

我们使用不同工具的组合来监控和调试问题:

  • CloudWatch
  • DataDog
  • Pingdom的
  • SENTINL


我们的绝大多数警报都来自CloudWatch和DataDog。

我们倾向于通过TerraForm配置CloudWatch警报,我们在CloudWatch上保留的主要监视器是:


  • 来自主负载均衡器的HTTP错误。
  • 目标组中的不健康实例。
  • SQS处理延迟。


CloudWatch是基于AWS生成的指标(如来自负载均衡器或自动扩展组的指标)的最佳警报工具。 CloudWatch警报通常发送给PagerDuty,从PagerDuty发送到Slack / phones。


DataDog是我们用来存储时间序列指标并采取行动的服务。 我们从Linux机箱,AWS资源,现成服务(如NGINX或MongoDB)以及我们构建的自定义服务(如我们的Management API)发送指标。

我们有很多DataDog监视器。 几个例子:


  • $环境中$ service的响应时间增加。
  • $ instance($ ip_address)中$ volume的空间不足。
  • $ environment / $ host($ ip_address)上的$ process问题。
  • $environment下$service的处理时间增加。
  • NTP在$ host($ ip_address)上漂移/关闭时钟问题。
  • MongoDB副本设置在$ environment上发生了变化。


从上面的示例中可以看出,我们监控了低级指标(如磁盘空间)和高级指标(如MongoDB副本集更改,例如如果主节点定义发生更改,则会提醒我们)。 我们做了很多,并在一些服务周围有一些非常复杂的监视器。

DataDog警报的输出非常灵活,我们通常会将它们全部发送给Slack,只向那些应该“唤醒人们”的人发送给PagerDuty(如错误峰值,或者我们确定会对客户产生影响的大多数事情)。


对于日志记录,我们使用Kibana和SumoLogic; 我们使用SumoLogic来记录审计跟踪和许多AWS生成的日志,我们使用Kibana来存储来自我们自己的服务和其他“现成”服务(如NGINX和MongoDB)的应用程序日志。


未来


随着业务发展,我们的平台增长了,而且我们的工程组织规模不断扩大:我们有许多新团队建立自己的服务,并且需要自动化,工具和可扩展性指导。 考虑到这一点,这些是我们不仅要扩展我们的平台而且要扩展我们的工程实践的举措:

构建PaaS风格的平台:正如前面所提到的,今天我们有不同的自动化和部署流程;这会造成混乱并为工程师设置了障碍,因为很难在没有涉及太多存储库的情况下进行实验和扩展。我们正在开发一个平台的PoC(目前运行在ECS之上),工程师可以在其中配置YAML文件并将其部署以获取计算资源,监控,日志记录,备份等等。所有这些都无需明确配置。这项工作还处于早期阶段,可能仍会发生很大变化(EKS?)。但是,鉴于我们不断扩大的规模和可扩展性限制,我们认为我们正在采取正确的方向。


为每个新的PR(pull request)实施冒烟测试:除了单元测试(已经在每个新PR上运行),我们希望在可能的情况下在短暂环境中运行集成测试。


将我们的日志记录解决方案集中到一个提供商这可能意味着远离Kibana并仅使用SumoLogic,但我们仍需要评估功能集,数据量等。


自动化指标:现在我们的指标数据太多是手动的:在部署时添加与代码相关的指标调用,并使用DataDog界面构建仪表板和监视器。如果我们使用标准格式和命名,我们可以自动构建仪表板/监视器,从日志中提取度量而不是显式添加对代码的调用等等。


原文地址:https://auth0.com/blog/auth0-architecture-running-in-multiple-cloud-providers-and-regions/


这篇文章是由Auth0的网站SER Dirceu Pereira Tiegs撰写的,最初发表于Auth0。

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
23天前
|
存储 SQL 关系型数据库
Mysql高可用架构方案
本文阐述了Mysql高可用架构方案,介绍了 主从模式,MHA模式,MMM模式,MGR模式 方案的实现方式,没有哪个方案是完美的,开发人员在选择何种方案应用到项目中也没有标准答案,合适的才是最好的。
102 3
Mysql高可用架构方案
|
4月前
|
存储 Cloud Native 关系型数据库
PolarDB 高可用架构设计与实践
【8月更文第27天】 在现代互联网应用中,数据库作为核心的数据存储层,其稳定性和可靠性尤为重要。阿里云的 PolarDB 作为一款云原生的关系型数据库服务,提供了高可用、高性能和自动化的特性,适用于各种规模的应用。本文将详细介绍 PolarDB 的高可用架构设计,并探讨其实现数据安全性和业务连续性的关键技术。
103 0
|
23天前
|
存储 负载均衡 Kubernetes
混合云和多云策略:混合云架构设计详解
混合云和多云策略:混合云架构设计详解
57 1
|
28天前
|
Kubernetes 关系型数据库 MySQL
Kubernetes入门:搭建高可用微服务架构
【10月更文挑战第25天】在快速发展的云计算时代,微服务架构因其灵活性和可扩展性备受青睐。本文通过一个案例分析,展示了如何使用Kubernetes将传统Java Web应用迁移到Kubernetes平台并改造成微服务架构。通过定义Kubernetes服务、创建MySQL的Deployment/RC、改造Web应用以及部署Web应用,最终实现了高可用的微服务架构。Kubernetes不仅提供了服务发现和负载均衡的能力,还通过各种资源管理工具,提升了系统的可扩展性和容错性。
77 3
|
3月前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
4月前
|
运维 监控 关系型数据库
【一文搞懂PGSQL】7. PostgreSQL + repmgr + witness 高可用架构
该文档介绍了如何构建基于PostgreSQL的高可用架构,利用repmgr进行集群管理和故障转移,并引入witness节点增强网络故障检测能力。repmgr是一款轻量级的开源工具,支持一键部署、自动故障转移及分布式节点管理。文档详细描述了环境搭建步骤,包括配置postgresql参数、安装与配置repmgr、注册集群节点以及配置witness节点等。此外,还提供了故障手动与自动切换的方法及常用命令,确保集群稳定运行。
|
4月前
|
数据挖掘 关系型数据库 MySQL
Serverless高可用架构的解决方案体验
Serverless高可用架构的解决方案体验
166 6
|
4月前
|
弹性计算 运维 关系型数据库
云上Serverless高可用架构一键部署体验与测评
在数字化转型背景下,Serverless架构因其实现业务敏捷、降低成本及提升服务可靠性而备受青睐。本文以阿里云Serverless应用引擎(SAE)为核心,展示了一种高可用、低成本且易于扩展的解决方案。通过单地域双可用区部署,构建了具备自动伸缩与故障恢复能力的架构。借助阿里云的一键部署功能,大幅简化了搭建流程,实现了快速部署,并通过性能与成本分析验证了其优势。对比传统ECS,SAE在资源利用与运维效率上表现更佳,特别适合平均负载较低的应用场景。
|
4月前
|
弹性计算 运维 关系型数据库
Serverless高可用架构解决方案评测
Serverless高可用架构方案提供卓越效能与极简运维体验,支持服务托管、弹性伸缩及按量付费,有效降低成本并优化性能。一键部署快速启动,流程直观,文档详实;但在高级配置与特定场景实践方面指导有限。方案采用双可用区部署确保高可用性,自动故障切换保障服务连续。成本模型按需计费,减轻企业负担。功能上集成监控、日志与负载均衡,简化运维,加速上线。性能方面,秒级弹性伸缩保证资源高效匹配负载。总体而言,此方案竞争力强,特别推荐给初创公司及需灵活应对流量波动的场景。
160 2
|
4月前
|
运维 监控 负载均衡
如何构建高可用的系统基础架构
【8月更文挑战第15天】构建高可用的系统基础架构是一个复杂而系统的工程,需要综合考虑设计原则、关键技术和实践策略等多个方面。通过冗余设计、分布式架构、自动化与智能化等技术的运用,可以显著提升系统的可用性和稳定性。同时,加强运维团队的能力建设和制定完善的高可用性策略也是确保系统高可用性的重要保障。希望本文能为读者在构建高可用系统时提供有益的参考和借鉴。