Azure 队列创建最佳实践和规模

2024-02-19

我正在研究 Windows Azure 上的大规模 Web 性能应用程序的架构(目前是理论上的),并想请教一下您有关“Windows Azure 队列(不是 SB)”以及如何最好地扩展/创建它们的知识。

我基本上关注的是 MVC 前端(Web 角色)、Windows Azure 队列(异步消息解耦)、Worker 角色和黑化 SQL DB。

我的理解是,我们在 Web Role 上接收消息,然后将其传递到队列,Worker Role 将轮询队列{执行工作...例如 SQL DB CRUD 操作}并发回完成消息。

处理 Windows Azure 队列创建以实现扩展以及通过 Web 角色和辅助角色来回传递消息的最佳方法是什么?最好有一个队列来发送工作,例如订单,然后是另一个通知队列,例如状态消息

我看到很多帖子说您应该在应用程序代码之外创建队列,这是有道理的,但是如何使用当前的队列限制来扩展它“单个 Windows Azure 队列的可扩展性目标被“限制”在 500 个事务/秒”?

MSDN 有一些关于通过队列进行扩展的优秀资源。

• 角色实例扩展是指添加和删除额外的Web 或辅助角色实例以处理时间点工作负载。这通常包括更改服务配置中的实例计数。增加实例计数将导致 Windows Azure 运行时启动新实例,而减少实例计数将导致其关闭正在运行的实例。

• 进程(线程)扩展是指通过根据当前工作负载上下调整线程数量,在给定角色实例中保持足够的处理线程容量。

简而言之,我正在寻找以下问题的答案:

  1. 队列创建最佳实践?
  2. Web 角色(MVC 应用程序)如何跟踪消息,即在传递消息后是否轮询“通知”队列,处理 Web 角色中的消息相关性以发送回客户端的最佳方法是什么(网络消费者)?
  3. 上面的扩展选项是最佳方法还是我应该考虑动态扩展队列(如果是这样怎么办?我认为 SB 队列在这种情况下可能会更好)创建新队列以规避 500 个事务/秒的限制?

如前所述,我的问题目前更具理论性,我想构建并证明未来的任何解决方案。

Thanks


对于如何跟踪回复的问题,我通常会执行以下操作:

  1. Web 角色将一条包含作业 ID 的消息写入队列。
  2. 辅助角色完成工作并将结果写入带有分区键的表中。
  3. Web 角色正在轮询表的该行。一旦存在,答案就会回来。

话又说回来,如果这是一个用户交互的事情,用户实际上正在等待打开的 HTTP 连接来获取结果,那么您最好只使用同步通信并跳过队列。

如果我是你,我至少会考虑使用 0MQ(ZeroMQ,或其新分支 Crossroads I/O)之类的东西,它为你提供了在原始套接字之上的很好的抽象,这对此类事情很有用。例如,Web 服务器通过 PUSH 套接字发送消息,辅助角色通过 PULL 套接字接收消息,辅助角色通过 PUB 套接字发布响应,Web 角色通过 SUB 套接字接收响应。 PUSH/PULL 执行负载平衡,PUB/SUB 负责将消息返回给等待的 Web 角色。仅供参考,这正是 Mongrel2 使用的消息传递架构和技术。

为了达到每秒 500 次以上的操作,您可以创建多个队列并向它们随机喷射消息。 (每个工作线程通常会轮询所有队列。)但请记住,单个存储帐户的限制为每秒 5,000 次操作,因此在创建 10 个队列后,您需要创建一个新的存储帐户才能获得可扩展性更有保证。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Azure 队列创建最佳实践和规模 的相关文章

随机推荐

  • Haskell:instance Functor ((->) r) 的意义是什么

    我承认 我的问题可能源于缺乏知识 而且比较模糊 但我试着去理解 有一些疑问 却无法解决 那么GHC Base有这样的定义 它的意义是什么 instance Functor gt r where fmap 从编程语言的角度来看 我们有真正的基
  • 模拟多次调用的静态方法

    我有一个静态方法 在多个地方使用 主要是在静态初始化块中 它接受一个 Class 对象作为参数 并返回该类的实例 我只想在特定的 Class 对象用作参数时模拟此静态方法 但是 当从其他地方使用不同的 Class 对象调用该方法时 它会返回
  • 使用从文件读取的字符串在 Typescript 中进行字符串插值

    我读过关于模板字符串 http basarat gitbooks io typescript content docs template strings html在打字稿中 我想知道当我从这样的文件中读取字符串时是否可以使用它们 let x
  • 什么时候应该对

    假设我有这样的 HTML 结构 div class a div class floated left div div class floated left div div 我注意到如果我不设置overflow hidden to a 那么
  • Mono.Cecil:从其他程序集中调用基类的方法

    如何按名称获取对基类方法的 MethodReference 我试过了 type BaseType Resolve Methods 如果我将包含基类的 dll 添加到 assemblyresolver 它将返回方法 但是如果我使用添加呼叫 M
  • 在具有多个接口的服务器上接收多播(linux)

    要在我的非默认 NIC dvb 上接收多播 我执行以下操作 打开套接字 AF INET SOCK DGRAM 在 DVB 接口上使用 IP ADD MEMBERSHIP 加入多播地址 绑定多播地址 请注意 一个常见的错误是绑定 0 0 0
  • Winforms 日志框架

    我正在编写一个 WinForms 应用程序 我需要将信息记录到文件中 通常我使用log4net http logging apache org log4net 用于记录 但由于限制 我无法添加引用 我无法添加外部对我的项目的引用 因为我必须
  • 如何在 IIS 7.0 中允许混合模式身份验证

    如何使用在 IIS 7 0 上运行的表单身份验证对 Windows 用户进行后门身份验证进入网站 创建一个单独的页面来处理 Windows 登录 该页面将对用户进行身份验证 然后为其设置表单 cookie 然后 将该页面添加到 web co
  • 色调旋转滤镜背后的确切数学原理是什么

    理论上对于每一种可能改变颜色的CSS过滤功能 https developer mozilla org en US docs Web CSS filters like grayscale invert opacity saturate sep
  • Django + uWSGI + nginx url映射

    我想在 NGINX 后面运行带有 uWSGI 的 Django 我将使用 Django 作为 API 服务 该服务应位于此链接上 项目 测试 api Django项目本身是空白的 1 9 6 只是创建了一个应用程序 迁移并创建了一个超级用户
  • 在 OS X 上使用 Objective-C 或 C++ 获取有效全屏分辨率的方法?

    我正在制作一款游戏 我想获取启动器的有效全屏分辨率列表 我找不到任何方法可以在 Mac OS X 上执行此操作 就像在系统偏好设置 Displays pane 是否可以 如果您的意思是获取显示屏分辨率 这可能就是您所追求的 NSScreen
  • 为 .NET 4 和 .NET 4.5 构建 - 引用的 NuGet 包怎么样?

    我有一个构建项目的脚本 输出 NET 4 0 程序集 该项目包括来自 NuGet 的 NLog 所以项目文件中的引用如下所示
  • 为网站构建CMS

    我有我的主站点kansasoutlawwrestling com它将使用 Codeigniter 然后我还为自己创建一个 CMS 它是一个单独的实体 位于kansasoutlawwrestling com kowmanager 我的 CMS
  • 运行 SimpleHTTPServer 时设置当前目录

    有什么方法可以设置要启动 SimpleHTTPServer 或 BaseHTTPServer 的目录吗 如果您正在使用SimpleHTTPServer直接从命令行 您可以简单地使用 shell 功能 pushd path you want
  • NumPy 沿不相交索引求和

    我有一个应用程序 需要对 3D NumPy 数组中的任意索引组进行求和 内置 NumPy 数组求和例程将沿 ndarray 维度之一的所有索引相加 相反 我需要沿着数组中的一个维度总结索引范围并返回一个新数组 例如 假设我有一个形状为 nd
  • 为 64 位项目调用 C# 中的 Javascript 函数

    我试图从 C 代码内部调用 Javascript 函数 eval 以利用运算符解析器的字符串 我使用了以下代码 https stackoverflow com a 12431435 712700 https stackoverflow co
  • 是否有与 TestNG 连接的 log4j 附加程序?

    我使用 log4j 并希望通常在我的日志记录工具中结束的日志消息出现在我的单元测试期间 TestNG 创建的测试报告中 我认为这意味着 log4jAppender输出到 TestNGListener以及我的 Maven 项目的 src te
  • 删除 URL 查询字符串中的加号 (+)

    我正在尝试让以下 URL 中的字符串显示在我的网页上 http example com ks4day 星期五 九月 13日 http example com ks4day Friday September 13th EDIT URL 中的日
  • iFrame 中的 Firebug 和 jQuery 选择器

    我正在开发一个 Web 应用程序 并使用 jQuery 插件 Colorbox 弹出一个窗口 其中显示用于编辑父窗口元素的表单 我正在使用 Firebug 来调试我的 Javascript 和 jQuery 并且我注意到我无法使用 jQue
  • Azure 队列创建最佳实践和规模

    我正在研究 Windows Azure 上的大规模 Web 性能应用程序的架构 目前是理论上的 并想请教一下您有关 Windows Azure 队列 不是 SB 以及如何最好地扩展 创建它们的知识 我基本上关注的是 MVC 前端 Web 角