我对使用 azure 云服务构建企业应用程序有一些疑问。
返回故事
我们有一个由 SQL 后端上的十几个 WCF Windows 服务组成的系统。我们目前有大约 10 个客户端,但预计可能会增长到 100 个,系统的吞吐量需求可能会增加 100 倍。当前的系统设计不佳,根本无法扩展。因此,现在似乎是在 azure 平台上重新设计的合适时机。
工艺流程
让我简要描述一组简化的服务和流程,然后问一些关于使用 azure 云服务构建新系统的问题。
服务 A 登录到外部系统并持续下载数据
服务 B 登录到第二个外部系统并持续下载数据
服务 A 和 B 中的每一个都只能有一个登录实例。
A 和 B 都将他们的数据传递给服务 C,后者协调来自两个外部源的数据。
然后将经过验证和核对的数据从 C 传递到服务 D,后者执行一些记帐功能,然后将结果数据传递给服务 E 和 F。
服务 E 不断登录到外部系统并向其上传数据。
服务 F 生成报告并通过 FTP 等发布给客户端
该系统实际上远比这复杂得多,但上面说明了所涉及的过程。该系统每周 6 天、每天 24 小时运行。队列将用于缓冲所有服务之间的消息传递。
我们可以使用 Azure 持久性虚拟机构建这个系统,并利用服务总线、队列等,但这会将我们与垂直扩展策略联系起来。鉴于以下问题,我们如何利用云服务来实现它。
问题
鉴于服务 A、B 和 E 永久登录到外部系统,每个系统只能有一个活动实例。如果我们将这些实现为单实例工作者角色,则会出现停机和修补问题(这是不可接受的)。如果我们为每个实例创建两个实例,是否有一种标准方法可以在 azure 上使用工作角色实现主动-被动负载平衡,或者我们是否必须构建自己的负载平衡器?这个问题有没有我没有想到的另一种解决方案?
服务 C 和 D 是使用多个工作角色实例进行扩展的良好候选者。然而,每个实例都必须处理相关数据。例如,我们可以有 4 个实例,每个实例为 5 个单独的客户处理数据。我们如何让每个实例分组处理消息(以客户端为中心)?此外,在进行修补等时,我们如何将负载从一个实例重新分配到其余实例。例如,如果为 5 个客户端处理数据的实例 1 因操作系统修补而停机,则其客户端的数据必须是由其余实例处理,直到它再次恢复。同样,如果我们决定增加额外的工作者角色,我们如何重新分配负载?
您能提供的任何见解或建议将不胜感激。
垫