培训
认证
Microsoft Certified: Azure Cosmos DB Developer Specialty - Certifications
使用 Microsoft Azure Cosmos DB 在 SQL API 和 SDK 中编写高效的查询、创建索引策略、管理和预配资源。
你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure Service Fabric 可简化无状态和有状态服务的编写与管理。 本主题的内容:
Reliable Services 是 Service Fabric 上可用的编程模型之一。 另一个是 Reliable Actor 编程模型,它在 Reliable Services 模型的顶层提供虚拟执行组件应用程序框架。 有关 Reliable Actors 的详细信息,请参阅 Service Fabric Reliable Actors 简介。
Service Fabric 通过 Service Fabric 应用程序管理管理服务的生存期,从预配和部署一直到升级和删除。
Reliable Services 提供简单且功能强大的顶级编程模型,以帮助你表达对应用程序至关重要的内容。 借助 Reliable Services 编程模型,会获得:
Reliable Services 与以前编写的服务不同,因为 Service Fabric 提供:
查找此页上的培训视频,以了解 Service Fabric 可靠服务编程模型,以及你的应用程序如何通过使用此 .NET 编程模型能够更紧密地与 Service Fabric 运行时集成:
无论服务有状态还是无状态,Reliable Services 都会提供简单的生命周期,可让你快速插入代码并开始执行。 启动并运行新的服务需要实现两种方法:
如果这是首次学习可靠服务,请继续阅读! 如果正在寻找可靠服务生命周期的详细演练,请查看 Reliable Services 生命周期概述。
让我们详细了解 Reliable Services 模型如何与无状态服务和有状态服务配合使用。
无状态服务是指每次调用后不会在服务中保留状态的服务。 现有的任何状态完全可释放,无需同步、复制、保留或高可用性。
以没有内存的计算器为例,它会接收所有项并同时执行运算。
在这种情况下,由于服务无需处理任何后台任务,因此,服务的 RunAsync()
(C#) 或 runAsync()
(Java) 可为空。 创建计算器服务后,该服务将返回 ICommunicationListener
(C#) 或 CommunicationListener
(例如 Web API),用于在某个端口上打开侦听终结点。 此侦听终结点挂接到不同的计算方法(例如:"Add(n1, n2)"),这些方法定义计算器的公共 API。
从客户端进行调用时,将调用相应的方法,并且计算器服务会对所提供的数据执行运算并返回结果。 它不存储任何状态。
不存储任何内部状态让此示例计算器变得十分简单。 不过大多数服务并不是真正的无状态。 它们是将状态外部化到其他某个存储。 (例如,任何依赖在备份存储或缓存中保留会话状态的 Web 应用程序便不是无状态的。)
Service Fabric 中常见的无状态服务使用示例是作为前端,它公开 Web 应用程序的面向公众的 API。 然后,前端服务指示有状态服务完成用户请求。 在这种情况下,来自客户端的调用将定向到无状态服务正在侦听的某个已知端口(如 80)。 此无状态服务将接收调用,并判断调用是否来自可信方以及其目标服务是哪一个。 然后,此无状态服务将调用转发到有状态服务的正确分区并等待响应。 无状态服务收到响应后,将回复原始客户端。 此类服务的一个示例是 Service Fabric 入门示例 (C# / Java),以及该存储库中的其他 Service Fabric 示例。
有状态服务是指必须存在状态的某部分并且使该部分保持一致才能正常运行的服务。 假设有一个服务不断地根据某个值收到的更新,计算它的滚动平均值。 为此,它必须具有目前需要处理的传入请求集以及目前的平均值。 检索、处理并将信息存储在外部存储(比如现在的 Azure Blob 或表存储)的任何服务都是有状态的, 只不过它将其状态保存在外部状态存储中。
现在的大多数服务将其状态存储在外部,因为外部存储可为该状态提供可靠性、可用性、伸缩性和一致性。 在 Service Fabric 中,服务无需将其状态存储在外部。 Service Fabric 将为服务代码和服务状态处理这些要求。
假设我们要编写一个服务来处理映像。 为此,该服务将提取一个映像,然后针对该映像执行一系列转换。 此服务将返回一个可公开 API(如 ConvertImage(Image i, IList<Conversion> conversions)
)的通信侦听器(假设为 Web API)。 在收到请求时,服务将请求存储在 IReliableQueue
中,然后将某个 ID 返回给客户端,使它能够跟踪该请求。
在此服务中,RunAsync()
可能更复杂。 服务在其 RunAsync()
内部使用一个循环从 IReliableQueue
中提取请求并执行请求的转换。 结果存储在 IReliableDictionary
中,以便当客户端返回时可以获取其转换后的映像。 为了确保即使发生故障映像也不丢失,此 Reliable Services 将从队列提取数据、执行转换,然后将整个结果存储在事务中。 在此情况下,仅当转换完成时,才会从队列中删除消息并将结果存储在结果字典中。 或者,服务可从队列中提取映像,并立即将其存储在远程存储中。 这可以减少服务必须管理的状态数量,但会增大复杂性,因为服务必须保留必要的元数据来管理远程存储。 不管使用哪种方法,如果某个环节在中途失败,请求将保留在队列中等待处理。
尽管此服务听起来像典型的 .NET 服务,但区别是其使用的数据结构(IReliableQueue
和 IReliableDictionary
)由 Service Fabric 提供,因此高度可靠、可用且一致。
在以下情况中,请考虑使用 Reliable Services API:
培训
认证
Microsoft Certified: Azure Cosmos DB Developer Specialty - Certifications
使用 Microsoft Azure Cosmos DB 在 SQL API 和 SDK 中编写高效的查询、创建索引策略、管理和预配资源。
文档
Service Fabric 服务的可用性 - Azure Service Fabric
介绍 Azure Service Fabric 应用程序中某项服务的故障检测、故障转移和恢复。
Azure Service Fabric 应用程序模型 - Azure Service Fabric
如何使用应用程序和服务清单文件在 Azure Service Fabric 中对应用程序和服务进行建模和说明。
Azure Service Fabric 中的副本和实例 - Azure Service Fabric
了解 Service Fabric 中的副本和实例,其中包括其生命周期和功能的概述。