写点什么

针对可扩展的、高可用的云架构的模式与反模式

  • 2014-05-09
  • 本文字数:2089 字

    阅读完需:约 7 分钟

当设计一个具有高可扩展性和可用性的系统时,最重要的就是架构选择问题。以 Azure 客户的用法为例,微软讨论了与 Azure 客户一起看到的模式和反模式,以及它对系统架构的四个方面有怎样的影响:

  • 可扩展性:我能否增加资源以处理增加的需求?
  • 可用性:我的应用能否容忍短暂的和持久的故障?
  • 可管理性:我是否有办法了解生产系统的健康和性能?
  • 可行性:我能否在时间和成本预算之内构建和维护这个系统?

可扩展性

可扩展性来自于两个方面:资源和密度。能力是指增加额外的硬件,它可能微不足道(在一个负载均衡器后增加额外的网络服务器)也可能非常地困难(增加一个次要的数据库服务器)。密度是指你能以怎样的效率去使用已经拥有的能力。传统的性能调优可以大幅地增加密度。

附带报导:点钱照明

在演讲期间有一个共同主题是“点钱照明”。 Mark Simms 说,它的意思是无缘无故地做一些毫无效率的事。例子包括使用网络地址转换(NAT)去代替本身的负载均衡器,或者把 XML 作为内部数据交换格式。

可度量的资源

可度量的资源是某些需要小心监控的东西。举例来说,数据库连接就是一种可度量的资源。作为一种有限的资源,滥用它就会大幅度地降低密度。

以 Azure SQL 为例具体来说。它的标准版只允许每个数据库有 180 个连接。在 ADO.NET 中默认的连接池是 100。所以如果你有两个连接到 Azure SQL 数据库的网络服务器,并且这些网络服务器泄漏连接,那么你很容易就会超出限额。

其他可度量资源的例子还包括认证服务器和第三方网络服务。这些有时被称为“隐形的资源”,因为开发人员设计架构时经常会忽略掉它们。

通过队列负载均衡

上传时的峰值可能会成为问题,尤其是在那些针对大量读取工作负载优化过的系统上。一种降低这种峰值的方式是,通过使用队列以等待时间交换可用性。

在这种方案下,新数据在数据库中不是同步保存的。相反,它们会被放到一个队列中,这是个后台进程监控器。这个后台进程可以使负载趋于平滑,以便数据库始终会被使用,而不是某些时候忙,其他时候闲。

使用队列的其他好处是可以批量处理那些工作。一般来说,把信息批量写入到数据库中要比一次一条记录快得多。

最后要说的是,这还增加了解耦点。后台进程或数据库可以宕掉,完全不会影响前端应用接受新数据的能力。

改善消息队列的可用性

如果过多的消息是被同时接收的,可以使用辅助的消息队列去保存过量的部分。为了做到这一点,你需要设计应用能够支持多个队列,即使最初你打算只部署有一个队列的应用。

如果消息超出了应用能够处理的大小,避免数据丢失的一种技术是把消息写到 blob 存储中。然后队列中的逻辑消息改成了保存一个指向 blob 入口的指针,而不是原始信息。

网络服务器可用性

为了保持网络服务器的可用性,所有下游的调用一定要异步并有界限的。界限一定要在超时和并发请求这两个方面。后者经常被忽略。有一个多少会使人觉得有些尴尬的例子,那就是 Visual Studio Online 长达两个小时的运行中断。这次运行中断的根本原因就是对一个外部认证服务器有过多的并发请求,它已经临时地瘫痪了。

认证服务

这让我们引出了下一个主题——认证服务。当一台认证服务器瘫痪的时候,它完全可以被其他稳定的应用代替。因为这个原因,微软强烈推荐使用联合认证服务器。

记录错误的数据

大多数开发人员都很清楚需要去验证数据,但是当验证失败的时候,他们不知道做什么。仅仅弃掉数据和抛出错误是不够的。应该把错误的数据以它原有的格式记录下来,以便开发人员能够断定为什么会有这种错误的请求。

大多数错误的请求源自不匹配的版本。当用户拥有的客户端比处理请求的服务器的版本更旧(或者更新)时就会产生这种错误。

反模式:配置

微软的 Azure 团队评审客户端代码的时候,他们仍会看到硬编码连接字符串和其他配置数据。当配置需要修改成立即指向不同的硬件时,这可能就会成为一个现实的问题了。

反模式:假定数据库的可靠性

对于最新一代的程序员来说,数据库连接已经给定了。数据库和内网故障几乎从来都不会发生。所以开发人员通常都不会针对异常进行检查。或者即使他们做了检查,也不会正确地处理,然后数据就丢失了。

反模式:SQL注入

没错,这是个非常普遍的问题。在某些情况下,非常基本的网络请求他们都已经检查出有明显的 SQL 注入漏洞了。

反模式:向错误的资源写日志

日志的基础设施需要与应用栈的其他部分隔离开来。如果日志和产品数据一样写到同一个数据库中,丢失一个数据库必然意味着其他数据库也同样丢失了。

反模式:重抛异常

这个领域有两个常见的反模式。第一个是使用“throw ex;”重新抛出异常,而不是用“throw;”,导致堆栈跟踪被丢失了。第二个是重新抛出异常,但却没有更高层的处理去捕获它。在.NET 2.0 和之后的版本中,这必然会导致整个应用的崩溃。

可以在 Building Big: Lessons Learned from Azure Customers 的第九频道查看整个视频。

查看英文原文 Patterns and Anti-Patterns for Scalable and Available Cloud Architectures


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2014-05-09 00:021801

评论

发布
暂无评论
发现更多内容

ConceptDraw MINDMAP for mac(思维导图软件) 15.0.0.296中文激活版

mac

苹果mac Windows软件 ConceptDraw MINDMAP 思维导图绘制软件

万能音视频转换器Permute 3最新中文版

胖墩儿不胖y

Mac软件 音频处理工具 音频格式转换器

介绍SDK(C++版)使用方法

矩视智能

深度学习 机器视觉

语雀服务宕机带来的稳定性思考

老张

高可用 SRE 稳定性保障

装备修理行业数智化转型之道

用友BIP

装备修理行业

实测亚马逊 AI 编程助手 Amazon CodeWhisperer

全栈若城

用友BIP智能分析资产包正式发布,助力企业智能化决策!

用友BIP

智能分析

用友全球司库十问(五)| 企业如何主动管理资金流动性?

用友BIP

全球司库 流动性管理

英特尔以创新边缘AI技术赋能未来智慧城市建设

E科讯

支付宝权限问题大全|一文搞定,持续更新

盐焗代码虾

支付宝 经验分享 支付宝权限

云图说|华为云CodeArts Build,云端化的编译构建平台

华为云开发者联盟

华为云 华为云开发者联盟 编译构建

语音识别技术在医疗健康领域的应用与挑战

来自四九城儿

ConceptDraw PROJECT for Mac(项目管理软件) 14.0.0.302完整激活版

mac

项目管理工具 苹果mac Windows软件 ConceptDraw PROJECT

零代码开发、可视化界面!飞桨AI Studio星河社区带你玩转Prompt应用

飞桨PaddlePaddle

程序员 开发者 插件开发 Prompt

第10期 | GPTSecurity周报

云起无垠

Java类加载机制详解 | 京东云技术团队

京东科技开发者

Java spi 类加载机制 企业号10月PK榜

ETL工具与数据处理的关系

RestCloud

数据处理 ETL

1024 特别企划|揭秘 StarRocks 社区背后的神秘力量(内涵福利)

StarRocks

开源社区 StarRocks

Ready to go: IPQ4029/IPQ4019 with IPQ8072- Connect more and enjoy faster

wifi6-yiyi

wifi IPQ4019 IPQ8072 ipq4029

实况窗功能上线,即时掌握活动最新进展

HarmonyOS SDK

HarmonyOS

用友BIP,为打造世界一流光伏数智灯塔工厂聚势蓄能

用友BIP

光伏产业

和鲸赞助!第16届中国R会议暨2023 X-AGI大会通知

ModelWhale

机器学习 R 数据科学 X-AGI 统计之都

开放原子开源基金会联合主办的2023 CCF中国开源大会正式开幕

开放原子开源基金会

开源 CCF

Mac电脑图像处理AI软件 Topaz Photo AI最新激活版

mac大玩家j

Mac软件 图像处理软件 图像编辑处理

开放原子开源基金会理事长孙文龙一行赴拓维信息参观交流

开放原子开源基金会

开源

2023 CCF中国开源大会「开放科学——引领未来科学研究发展的新范式分论坛」成功举办

开放原子开源基金会

数智化浪潮中,广电行业收入管理流程该如何重构?

用友BIP

广电行业

SpringBoot自动配置原理解析 | 京东物流技术团队

京东科技开发者

spring-boot 自动配置 企业号10月PK榜

HarmonyOS SDK,赋能开发者实现更具象、个性化开发诉求

HarmonyOS SDK

鸿蒙 HarmonyOS

跨国企业如何选择跨境数据传输平台,了解这篇就够了

镭速

跨境数据传输

针对可扩展的、高可用的云架构的模式与反模式_架构_Jonathan Allen_InfoQ精选文章