Azure 设计模式
_iorilan
10年以上软件工程经验,先后从事在线教育/IT金融/即时通信/政府/物流平台/零售/门禁/监控等领域。专注夯实基础/项目成本与架构平衡/框架调研/团队高效协同工作
展开
-
Azure 设计模式之大使模式
大使模式为消费者服务或应用程序创建发送请求的辅助服务。大使服务可被认为是与客户端协同工作的进程外代理。该模式可用于完成常见的客户端连接相关的任务,如监视,日志记录,路由,安全性(如TLS)和弹性模式(https://docs.microsoft.com/en-us/azure/architecture/patterns/category/resiliency) 。它常与较传统的或难以修改的应用程序翻译 2018-01-10 22:13:12 · 751 阅读 · 0 评论 -
Azure设计模式之端点监控模式
端点监控模式使用外部工具定期为应用程序做功能检查。可以帮助验证应用程序和服务是否正确运行。问题背景对web应用程序和后端服务进行监控是很好的做法,通常是业务上的需求,以保证它们的可用性并在正确地执行。然而,监控云服务比监视传统服务更困难。例如,没有完全可控的宿主环境,服务通常依赖于平台供应商或他人提供的服务。影响云应用程序的因素很多,如网络延迟、底层计算和存储系统的性能和可用性,以及它们之间的网络翻译 2018-01-27 01:32:18 · 454 阅读 · 0 评论 -
Azure设计模式之索引表
为经常被查询的数据存储区中字段创建索引。使得应用程序能够更快速地从数据存储区检索数据,从而可以提高查询性能。问题背景许多数据存储使用主键来数据集。应用程序可用于查找和检索数据。下图显示了保存客户信息的数据存储示例。主键是客户ID。该图显示了由主键(客户ID)进行组织的客户信息。虽然主键对于获取其键值的数据非常有用,但如果应用程序需要使用其他字段进行数据查询时,可能无法使用主键。在"客户"示例中,如翻译 2018-01-27 01:34:37 · 446 阅读 · 0 评论 -
Azure设计模式之领导者选举
领导选举模式选择一个实例作为其他实例的负责人来协调分布式应用程序中的实例。有助于确保实例不会相互冲突,产生共享资源的争用,或者干扰到正在执行操作的实例。问题背景云应用程序中有许多任务以协调的方式运行着。这些任务可能执行着相同的代码并访问相同资源的实例,或作为复杂计算的一部分并行执行。任务实例可能会在很长一段时间内单独运行,但也可能会需要协调工作的介入,以确保它们不会发生冲突、导致共享资源争用或干扰翻译 2018-01-27 01:36:36 · 409 阅读 · 0 评论 -
Azure设计模式之实例化视图
实例化视图模式当数据不是查询的理想格式时,可以在一个或多个数据存储区中生成填充视图。用以支持高效的数据提取,并提高应用程序性能。问题背景在存储数据时,开发人员和数据管理员通常会关注数据的存储方式,而不是它的读取方式。而存储格式通常与数据格式、数据大小和数据完整性要求以及所使用的存储类型密切相关。例如,当使用NoSQL时,数据通常表示为一系列文档,每个文档包含某实体的所有信息。但是,这会对查询带来负翻译 2018-01-27 01:37:46 · 411 阅读 · 0 评论 -
Azure设计模式之管道过滤器模式
管道过滤器模式将复杂任务分解为一系列可重用的独立元素。可通过将任务处理单元进行独立部署和伸缩来提高性能、可伸缩性和可重用性。问题背景应用程序需要执行不同复杂任务,每个任务包含不同的信息。一种不太灵活的实现方式是将应用程序作为一个整体模块来执行。但是如果应用程序中的其他部分需要相同的处理逻辑,这种方法就会减少重用的机会。下图说明了在单机结构下处理数据的问题。应用程序包含接收和处理来自两个源的数据。在翻译 2018-01-27 01:40:09 · 1080 阅读 · 0 评论 -
Azure设计模式之优先消息队列
将发送到服务的请求的优先级进行排序,使具有较高优先级请求的接收和处理比低优先级的优先处理。此模式在为单客户端提供不同服务级别保证的应用中非常有用。问题背景应用程序可以将特定任务委托给其他服务,例如放后台处理或与其他应用程序或服务进行集成。在云中,消息队列通常用于将任务委托给后台。在许多情况下,服务接收的订单请求并不重要。但在某些情况下,有必要规定特殊请求的优先级。这些请求应比较低优先级请求的优先处翻译 2018-01-27 01:42:03 · 849 阅读 · 0 评论 -
azure设计模式之队列负载均衡
基于队列的负载均衡在任务和调用的服务之间的缓冲区使用队列缓冲负载,避免导致服务失败或任务超时。可以帮助减少需求峰值对任务和服务可用性和响应能力的影响。问题背景云中的许多解决方案的任务中都调用了服务。在这种环境中,如果某服务受到间歇性的超载,则会导致任务性能或可用性问题。服务可以是与任务相同解决方案的一部分,也可以作为提供常用资源(如缓存或存储服务)访问的第三方服务。如果同一服务由多个并发任务使用,...翻译 2018-02-09 23:48:54 · 387 阅读 · 0 评论 -
Azure设计模式之重试模式
重试模式对失败操作进行重试执行,使应用程序能够有机会处理如网络链接这样的瞬态故障。从而提高应用程序的稳定性。问题背景在云环境运行中进行通信的应用程序必须对环境中可能发生的瞬时故障很敏感。故障包括断开与组件和服务的网络连接、服务的暂时不可用性或服务繁忙时发生的超时等等。这些错误通常是能够自我校正的,如果触发故障的操作在适当的延迟后重复操作,则很可能会成功。例如,处理大并发请求的数据库服务可以实现某种...翻译 2018-02-09 23:50:00 · 495 阅读 · 0 评论 -
Azure设计模式之计划任务代理模式
计划任务代理模式将一组分布式操作放在一个操作中进行统一协调。如果任何操作失败试着处理,或对已执行的工作进行撤销,来使整个操作整体成功或失败。使得分布式系统处理瞬时故障、长时间故障或失败的操作,从而可以增加灵活性。问题背景应用程序执行的任务可以包括多个步骤,一些可能会调用远程服务或访问远程资源。各个步骤相互独立,由实现该任务的应用程序逻辑决定。应用程序应自行解决由于访问远程服务或资源时的故障。发生故...翻译 2018-02-09 23:51:21 · 467 阅读 · 0 评论 -
Azure设计模式之水平切分
水平切分模式将数据存储进行水平切分,以提高大数据读写时的伸缩性。问题背景单服务器数据存储可能会受以下限制:存储空间。大型云应用程序的数据存储区包含了大量数据,随着时间的推移可能会显著增加。服务器通常只提供有限的磁盘存储空间,随数据的增长,可将现有磁盘替换为大一点的,或添加更多磁盘。但是系统最终会达到一个极限,即在给定的服务器上无法轻易增加存储量。计算资源。一个云应用程序需要支持大并发用户,每一个实...翻译 2018-02-09 23:52:34 · 420 阅读 · 0 评论 -
Azure设计模式之挎斗模式
挎斗模式将应用程序的组件部署到单独的进程或容器中,以提供隔离和封装。使用此模式还可以使用异构组件和技术来构建应用程序。此模式之所以称作“挎斗”(Sidecar),是因为它类似于三轮摩托车上的挎斗。在该模式中,挎斗附加到父应用程序,为应用程序提供支持性功能。此外,挎斗与父应用程序具有相同的生命周期:与父应用程序一起创建,一起停用。挎斗模式有时也称为搭档模式,这是一种分解模式。问题背景应用程序和服务通...翻译 2018-02-09 23:54:20 · 512 阅读 · 0 评论 -
Azure设计模式之静态内容托管
静态内容托管模式将静态内容部署到云存储服务,再将它们直接传送给客户端。可避免使用很昂贵的计算单元实例。问题背景Web应用程序通常会包括静态内容。静态内容包括HTML页面和其他资源,例如供客户端使用的图像和文档,以HTML页面(例如内联图像、样式表、客户端JavaScript文件)或独立下载项目(例如PDF文档)的形式提供。尽管可以对Web服务器进行优化,使其可以高效且动态地执行页面代码以及对输出进...翻译 2018-02-09 23:55:06 · 523 阅读 · 0 评论 -
Azure设计模式之蜕变模式
蜕变模式将功能逐渐取代为新的应用程序和服务,逐步对旧系统完成迁移。随着旧系统的功能被替换,新系统最终将取代旧系统的所有功能,最终将旧系统停用。问题背景随着系统老化,系统所使用的开发工具、托管环境和系统体系结构变得过时。添加新功能后,这些应用程序的复杂性可能会大幅增加,这使得维护系统或添加新功能变得十分困难。完全替换一个复杂系统是一项艰巨的任务。通常情况下,需要逐步迁移到新系统,同时要保留旧系统处理...翻译 2018-02-09 23:56:55 · 400 阅读 · 0 评论 -
Azure设计模式之资源限制
资源限制模式对应用程序实例、租户或服务使用的资源消耗进行控制。 这样,即使需求增加了资源的负载,系统也可以继续运行以满足服务可用性。问题背景云应用程序的负载通常会根据活动用户量或其执行的活动的类型随时间而变。例如,在运营时间内可能有更多用户处于活动状态,而系统在每个月末可能需要执行昂贵的计算成本分析。还可能会突然出现意外的活动量激增的情况。如果系统的处理要求超出了可用资源的容量,则系统性能将降低甚...翻译 2018-02-09 23:57:39 · 428 阅读 · 0 评论 -
Azure设计模式之网关路由模式
网关路由模式使用单个端点将请求路由到多个服务。当希望在单个端点上公开多个服务并路由请求到相应服务时,此模式非常有用。问题背景当客户端需要使用多个服务时,为每个服务分别设置一个端点并让客户端管理每个端点的访问会很复杂。例如,电商应用可能会提供如搜索、审阅、购物车、结帐和订单历史等服务。每个服务都有一个与客户端交互的API,客户端必须知道具体端点(地址)才能连接到服务。如果API发生变化,客户端也必须翻译 2018-01-27 01:30:35 · 809 阅读 · 0 评论 -
Azure设计模式之网关卸载模式
网关卸载模式将共享或特殊的服务功能卸载到网关代理中。此模式可通过将共享类的服务(如SSL证书)从应用程序的其他部分移动到网关中,从而简化应用程序的开发。问题背景某些功能需要跨多服务,这些功能需要配置、管理和维护。在分布式环境中被一些服务共享的应用程序,在部署时会增加额外的管理开销和出错的可能性。对共享服务的任何更新都必须再次部署在引用该服务的所有服务中。要正确的处理安全问题(令牌验证、加密、SSL翻译 2018-01-27 01:29:19 · 590 阅读 · 0 评论 -
Azure 设计模式之创建隔离层
创建隔离层在当前应用程序和旧系统之间创建外观或适配器层。该层负责完成当前应用程序和旧系统之间的调用请求。该模式可确保应用程序的设计不受旧系统的限制。问题背景大多数应用程序依赖于其他系统的某些数据或功能。例如,当旧的应用程序迁移到新系统时,它可能仍然需要旧的资源。因此新功能必须能够调用旧系统。对于逐步迁移的系统尤其如此,随着时间的推移,大型应用程序的不同功能被转移到新系统中。这些传统系统通常会遇到质翻译 2018-01-10 23:17:16 · 390 阅读 · 0 评论 -
Azure 设计模式之为特殊前端创建后端服务
为特殊前端创建后端服务创建单独的后端服务以供特定的前端应用程序或接口使用。当您想避免多个接口共享单个后端时,此模式很有用。问题背景应用程序最初可能定位于桌面WebUI。通常会并行开发后端服务,以提供该UI所需的功能。随着应用程序用户群体的增长,就要开发与相同后端进行进行交互的移动应用。后端服务同时满足桌面和移动界面的要求。但是,在屏幕尺寸,性能和显示限制等方面,移动设备的功能与桌面浏览器的区别很大翻译 2018-01-10 23:24:24 · 377 阅读 · 0 评论 -
Azure 设计模式之船舱模式
船舱模式将应用程序中的元素放到隔离的池中,以便如果一个失败,其他的将继续运行。之所以这种模式被命名为“舱壁”,因为将其类比于对船体的剖面划分。如果一个船体受到损害,只有损坏的部分才会充满水,从而防止整个船舶沉没。问题背景云应用可以包括多个服务,每个服务具有一个或多个消费者。服务中的负载过重或故障将影响该服务的所有消费者。此外,消费者可以使用同一个请求资源同时向多个服务发送请求。当消费者向配置错误或翻译 2018-01-10 23:25:38 · 776 阅读 · 0 评论 -
Azure设计模式之缓存模式
缓存模式将数据按需从数据库加载到缓存中。可以提高性能,并且还有助于保持缓存数据与数据库中数据的一致性。问题背景应用程序使用缓存来改进对数据库信息的重复访问。然而,若使缓存中数据始终与数据库中的完全一致是不切实际的。应用程序应实现有助于确保缓存中数据尽可能保持最新的策略,也可检测并处理缓存中数据变得过时出现的情况。解决方案许多商业缓存系统提供直读,直写,后台写操作。在这些系统中,应用程序通过引用缓存翻译 2018-01-10 23:27:09 · 535 阅读 · 0 评论 -
Azure设计模式之断路模式
断路模式在连接远程服务或资源时,遇到故障时的故障恢复时间是不等的。就可以使用断路模式。来提高应用程序的稳定性和弹性。问题背景在分布式环境中,对远程资源和服务的调用可能由于故障而失败,例如网络连接速度慢,超时或资源暂时不可用。这些故障通常会在短时间内自行修正,并应通过使用适当策略(如Retry模式)(https://docs.microsoft.com/en-us/azure/architectur翻译 2018-01-10 23:29:14 · 452 阅读 · 0 评论 -
Azure设计模式之命令与查询隔离(CQRS)
命令和查询职责隔离 (CQRS) 模式使用接口把更新数据的操作与读取数据的操作隔离。这可以最大限度地提高性能、可伸缩性和安全性。提供给系统随时间持续演化的灵活性,并防止更新命令会导致域级别的合并冲突。问题背景在传统的数据管理系统中,命令(对数据的更新)和查询(对数据的请求)都是针对单库中的同一组实体执行的。这些实体可以是关系数据库(如SQLServer)中一个或多个表中的行的子集。通常在这些系统中翻译 2018-01-10 23:31:30 · 327 阅读 · 0 评论 -
Azure设计模式之补偿事务模式
补偿事务模式如果一个或多个步骤失败,则需要撤消这个步骤相关的一系列步骤,它们一起定义了事务的最终一致性。通常包含复杂业务流程和工作流的云应用都遵循最终一致性。问题背景在云环境的应用程序经常需要修改数据。这些数据可能会分布在不同地理位置的数据源中。为了避免分布式环境中的资源争用以提高性能,应用程序不应提供事务的强一致性。相反,应用程序应该实现最终一致性。在这个模型中,业务操作由一系列单独的步骤组成。翻译 2018-01-10 23:42:47 · 556 阅读 · 0 评论 -
Azure 设计模式之资源整合
资源整合模式将多个任务或操作合并到一个计算单元中以提高计算资源利用率,并降低在云托管应用程序中的计算成本和管理开销。问题背景云应用程序通常用于实现各种操作。在某些解决方案中,遵循关注点分离的设计原则是有意义的,并将这些操作划分为独立的计算单元,可独立运行和部署(例如,分离出独立的web应用,虚拟机或webRole)。但是,即使这样可以帮助简化解决方案的逻辑设计,部署大量计算单元会导致运行时托管成本翻译 2018-01-10 23:50:39 · 588 阅读 · 0 评论 -
Azure设计模式之资源争竞下的消费者模式
竞争的消费者模式允许多并发处理在同一消息传输通道上所接收的消息。这能够使系统同时处理多个消息以提高吞吐量,提高可伸缩性与可用性,并平衡工作负载。问题背景在云环境中运行的应用程序需要异步处理大量的请求。而不是同步处理每个请求,传统的技术是应用程序通过消息系统传递给另一个服务(使用者服务)达到异步处理的目的。此策略有助于确保在处理请求时不会阻塞应用程序中的业务逻辑。而由于多种原因,请求的数量随着时间的翻译 2018-01-10 23:45:59 · 482 阅读 · 0 评论 -
Azure 设计模式之事件源模式
不应只存数据的当前状态,而要以追加的方式来存储每个操作。每个记录可用于实现域对象。这样就可以简化任务的复杂度,避免了数据模型和业务的同步,从而提高性能、可伸缩性和响应能力。它还可以提高事务数据一致性,并保存了完整审核跟踪和历史记录用于完成补偿操作。问题背景大多数应用程序都会用数据,而典型的方法是应用程序通过在用户处理数据时对其进行更新来维护其当前状态。例如,在传统的创建、读取、更新和删除(CRUD翻译 2018-01-27 01:19:23 · 563 阅读 · 0 评论 -
Azure设计模式之外配存储模式
外部配置存储模式将配置信息从应用程序中抽出来集中管理。可以更方便地管理和控制配置数据并实现跨应用程序实现共享配置。问题背景大多数应用程序的运行环境包括应用程序部署文件中的配置信息。在某些情况下,可以通过编辑这些文件来更改应用程序运行时的行为。但是,对配置的更改要求重新部署应用程序,这会导致不可避免的停机时间和其他管理开销。本地配置文件也会限制配置为单个应用程序,但有时在多个应用程序之间需要共享配置翻译 2018-01-27 01:22:54 · 394 阅读 · 0 评论 -
Azure设计模式之看门人模式
看门人模式通过在客户端和应用程序或服务间使用专门的代理保护应用程序与服务,对请求进行验证或过滤,并在它们之间传递请求与数据。这样就提供了额外的安全层,并降低了系统被攻击的范围。问题背景应用程序通过接受和处理网络请求向客户端提供功能。在云方案中,应用程序连接到终端中,通常包括用于处理客户端请求的代码。该代码执行身份验证、部分或全部的请求处理,可能也会访问存储和其他服务。如果存在恶意代码蓄意破坏系统并转载 2018-01-27 01:25:13 · 375 阅读 · 0 评论 -
Azure设计模式之联邦身份模式
联合身份模式将身份验证职责交给外部标识提供程序。这样可以简化开发,并最大限度地减少用户管理的任务,提高了应用程序的用户体验。问题背景用户信息通常来自不同组织所提供的应用程序,来满足不同的业务需要。这些用户可能需要使用特定的(和不同的)凭据。这可能导致用户体验下降。当用户使用太多不同的登录凭据,有可能会忘记它们,也会暴露安全漏洞。当用户离开公司时,该帐户必须立即被注销。在大公司很容易忽略这一点。那里翻译 2018-01-27 01:24:07 · 627 阅读 · 0 评论 -
Azure设计模式之网关模式
使用网关将多个请求聚合到单一请求中。当客户端对不同的后端系统进行多次调用时, 此模式非常有用。问题背景有时客户端可能需要对不同后端服务进行多次调用。依赖多服务来执行任务的应用程序导致每个请求上耗费额外资源。当向应用程序添加任何新功能或服务时,导致额外的请求,进而增加资源和网络的使用。客户端和后端之间过多的信息通信对应用程序的性能和扩展产生了负面影响。在微服务架构中这个问题显得更加普遍,由多个小服务翻译 2018-01-27 01:28:13 · 823 阅读 · 0 评论 -
Azure设计模式之附属秘钥模式
附属密钥模式向客户端发放用于直接访问特定资源的权限令牌,以减少应用程序进行的数据传输。在使用云托管存储系统或队列的应用程序中特别有用,可以最大程度降低成本并提高可伸缩性和性能。问题背景客户端程序和Web浏览器通常需要对应用程序文件或数据流的读写。通常应用程序会处理数据的传输—从存储拿数据并传输到客户端,或通过从客户端读取上传的流并存储在数据存储中。但是,这种方法会占用宝贵资源,如计算、内存和带宽。...翻译 2018-02-09 23:58:59 · 561 阅读 · 0 评论