您的帮助将使我更好地了解Windows azure . 提前致谢 .
我理解工作者角色就像一个方法(工作者角色中的Run()方法),这是做一些耗时的操作 . 这允许我拥有此工作者角色的多个实例,以便在流量激增时加快速度 .
1)我可以拥有一个工作角色,而不仅仅是: - 创建PDF的方法; - 创建图表的方法; - 解析som HTML的方法; - 处理图像的方法
我可以轻松地完成所有这4个工作角色(上面每个功能的一个RUN()方法),但这非常昂贵 . 我可以将这4件事作为方法放在同一个 Worker 角色上吗?
2)在worker角色上托管WCF服务有什么缺点?
3)通过WCF排队队列在同一Azure解决方案中的实例之间进行通信的缺点是什么?这慢了吗?
2 回答
worker角色的接口很简单......你实现了一个永不返回的Run()方法,我们称之为 . 你在那里做什么可以有任何东西......你可以使100个线程做不同的事情,你可以使用Process.Start()来启动单独的进程,你可以启动一个Web服务器等 .
我不知道在工作者角色中托管WCF是否有缺点 . 在Web角色中,您可以使用IIS作为主机,与运行您自己的主机相比,这可能有助于提高服务的可伸缩性 .
一种常见的模式是让工作者角色从队列中拉出工作 . 队列的优点是它可以保证每条消息至少被传递一次(因此您不会丢失工作) . 它还分配负载,因为每个工作人员可以在准备好进行更多工作时从队列中提取消息 . 如果您使用WCF或其他同步通信,则必须自己处理如何分发工作以及如何从错误中恢复(不丢失工作) . 它当然是可能的(实际上可能比到队列的往返速度更快),但以这种方式构建可靠,可扩展的服务更加困难 .
只需添加到Smarx - 小心你如何分割你的功能 - 你为每个工作者角色付费,所以除非你的工作流程中有一个特别热点,并且你已经以最大容量运行多个工作人员,你会更好off创建可以作为多个实例运行的单个辅助角色 .