Service Fabric 教程:从零开始构建云原生微服务
这份教程将引导你了解 Service Fabric 是什么,为什么选择它,并手把手教你创建第一个应用程序。

第一部分:Service Fabric 是什么?(核心概念理解)
在开始动手之前,先理解几个核心概念至关重要。
什么是 Service Fabric?
Service Fabric 是一个微软开源的分布式系统平台,用于构建和管理可缩放、可靠的应用程序,你可以把它想象成一个“操作系统”,专门用来运行你的微服务。
想象一下,你要盖一座非常复杂的大楼(你的应用程序),里面有很多功能独立的房间(微服务),如果没有一个统一的框架,你需要自己处理:
- 水电问题:服务之间如何通信?
- 房间调度:哪个房间应该放在哪一层(哪个服务器)?
- 房间损坏:如果一个房间(服务)崩溃了,如何自动修复?
- 扩建大楼:如何根据人流(用户量)增加或减少房间数量?
Service Fabric 就是帮你解决这些问题的“智能大楼管理系统”。

核心概念
理解这些术语是掌握 Service Fabric 的关键:
| 概念 | 中文解释 | 类比 |
|---|---|---|
| Cluster (集群) | 一组相互连接的服务器(物理机或虚拟机),共同构成一个统一的计算资源池。 | 一栋大楼的所有楼层和房间。 |
| Node (节点) | 集群中的一台服务器(虚拟机或物理机)。 | 大楼里的一个楼层。 |
| Application (应用程序) | 部署在集群上的一个或多个服务的集合,它是一个部署包。 | 入住大楼的一个租户,科技公司”或“餐饮公司”。 |
| Service (服务) | 应用程序中实现特定业务功能的独立、可部署的单元,是 Service Fabric 的基本构建块。 | “科技公司”里的“研发部”或“市场部”。 |
| Code Package (代码包) | 包含服务可执行文件(.exe)的文件夹。 |
“研发部”里的“程序员”和他们写的代码。 |
| Data Package (数据包) | 包含服务所需静态数据的文件夹。 | “研发部”里的“设计图纸”或“产品文档”。 |
| Config Package (配置包) | 包含服务配置文件的文件夹(如 Settings.xml)。 |
“研发部”里的“工作流程手册”。 |
| Partition (分区) | 将一个服务状态化的实例拆分成多个分片,以提高可扩展性。 | 将“市场部”拆分成“华东市场组”和“华南市场组”,独立运作。 |
| Replica (副本) | 一个服务分区的实例,为了实现高可用性,会在多个节点上复制。 | “华东市场组”在上海、杭州、南京都有办公室,确保一个出问题,其他还能正常工作。 |
为什么选择 Service Fabric?
- 微服务架构:天生为微服务设计,简化了服务的生命周期管理。
- 高可用性与可靠性:通过“有状态服务”的副本机制,自动检测和恢复故障的服务实例。
- 高可扩展性:可以轻松地向集群添加或移除节点,服务也可以进行水平扩展(分区)。
- 简化运维:自动处理部署、升级、监控、故障转移等复杂操作,让你专注于业务逻辑。
- 支持多种语言:支持 C#、Java、Python、Node.js 等,并提供了内置的 Actor 模型(Stateful Reliable Services)。
- 混合云支持:可以在本地数据中心、Azure 或其他任何云上部署,实现无缝迁移。
第二部分:动手实践 - 创建你的第一个 Service Fabric 应用
我们将使用 Visual Studio 在本地创建一个简单的无状态服务。
步骤 1:环境准备
- 安装 Visual Studio 2025:确保安装了 “使用 .NET 的桌面开发” 或 “ASP.NET 和 Web 开发” 工作负载。
- 安装 Service Fabric SDK:在 Visual Studio 安装程序中,搜索并安装 “Azure Service Fabric 开发” 工作负载。
- 本地集群管理器:SDK 会自动安装一个本地的 Service Fabric 开发群集,你可以在 Windows 系统托盘中找到它,图标像三个相互连接的球。
步骤 2:创建项目
-
打开 Visual Studio 2025。
-
选择 “创建新项目” (Create a new project)。
(图片来源网络,侵删) -
在搜索框中输入
Service Fabric,然后选择 “Service Fabric 应用程序” (Service Fabric Application) 模板,点击“下一步”。 -
配置项目:
- 名称:给你的应用程序起个名字,
MyFirstApp。 - 位置:选择项目存放的路径。
- 点击“创建”。
- 名称:给你的应用程序起个名字,
-
选择服务模板:
- 在下一个窗口中,选择 “无状态服务” (Stateless Service),这是最简单的入门类型。
- 服务名称:可以保持默认,
MyFirstApp.Service1。 - 点击“确定”。
Visual Studio 已经为你生成了一个完整的 Service Fabric 应用程序骨架。
步骤 3:理解项目结构
展开解决方案资源管理器,你会看到类似下面的结构:
MyFirstApp/
├── MyFirstApp (Application) // 应用程序项目,定义如何打包和部署
│ ├── ApplicationManifest.xml // 应用程序清单,描述了应用包含哪些服务
│ └── Packages/
│ └── Code/
│ └── MyFirstAppPkg/
│ ├── ServiceManifest.xml // 服务清单,描述了服务的代码、配置和数据
│ └── Code/
│ └── Service1/
│ ├── Service1.cs // 你的服务核心逻辑
│ └── Service1Interface.cs // 服务接口定义
│ └── Config/
│ └── Settings.xml // 服务配置文件
└── MyFirstApp.Service1 (Service) // 服务项目,包含你的业务逻辑代码
步骤 4:编写服务代码
打开 Service1.cs 文件,你会发现一个核心类 StatelessService,它继承自 StatelessService。
using System.Fabric;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.ServiceFabric.Services.Communication.Runtime;
using Microsoft.ServiceFabric.Services.Remoting.Runtime;
using Microsoft.ServiceFabric.Services.Runtime;
namespace MyFirstApp.Service1
{
// 使用服务远程接口来定义服务契约
[ServiceContract]
public interface IService1
{
[OperationContract]
string GetHelloWorld();
}
internal class Service1 : StatelessService, IService1
{
public Service1(StatelessServiceContext context)
: base(context)
{ }
// 这是服务的主要入口点,用于创建侦听器
protected override IEnumerable<ServiceInstanceListener> CreateServiceInstanceListeners()
{
// 使用服务远程处理来创建侦听器
return new ServiceInstanceListener[]
{
new ServiceInstanceListener(context =>
this.CreateServiceRemotingListener(context))
};
}
// 实现你的业务逻辑
public string GetHelloWorld()
{
return $"Hello, World from Service Fabric! Instance ID: {Context.NodeContext.NodeId}";
}
}
}
代码解释:
IService1:定义了一个服务契约,客户端可以通过这个接口调用服务的方法。Service1:实现了这个契约。CreateServiceInstanceListeners():这个方法告诉 Service Fabric 你的服务需要监听哪个端口来接收请求,这里我们使用了最简单的“服务远程处理”(Service Remoting),它基于 .NET 的BinaryFormatter,方便开发。
步骤 5:运行和调试
- 在 Visual Studio 中,确保启动项目是
MyFirstApp(应用程序项目)。 - 按下
F5键启动调试。 - 第一次运行:Visual Studio 会自动启动本地的 Service Fabric 开发集群,这可能需要几分钟时间,请耐心等待。
- 集群启动后:你的应用程序会被部署到集群中,并自动启动,你会看到浏览器自动打开,并显示一个页面,内容类似
Hello, World from Service Fabric! Instance ID: ...。 - 调试技巧:你可以在
GetHelloWorld()方法中设置断点,然后刷新浏览器,观察代码的执行过程。
本地集群管理器:系统托盘的 Service Fabric 图标会变成绿色,右键点击它,选择 “管理本地集群” (Manage Local Cluster),可以打开一个网页,可视化地查看你的应用程序和服务是否正在运行。
第三部分:进阶学习路径
当你成功运行了第一个“Hello, World”之后,可以按照以下路径深入学习:
学习有状态服务
无状态服务不保存数据,每次请求都是独立的,而有状态服务可以持久化数据,这是 Service Fabric 的核心优势之一。
- :
- Reliable Collections:像字典、列表一样使用,但数据会自动复制到多个节点,保证高可用。
- Reliable Actors:基于“Actor 模型”的有状态服务,非常适合处理并发和隔离性要求高的场景(如游戏、IoT 设备管理)。
- 实践:在 Visual Studio 中创建一个新的“有状态服务”项目,并学习如何读写
IReliableDictionary。
学习服务通信
除了默认的服务远程处理,还有其他更灵活的通信方式。
- :
- WCF:如果你有 WCF 背景,可以集成 WCF 服务。
- Web API:创建一个 RESTful API 服务,让任何客户端(Web、移动端)都能调用。
- 自定义侦听器:使用 TCP、HTTP 等底层协议构建自己的通信方式。
- 实践:尝试将你的无状态服务改造成一个 Web API 服务。
学习高级部署和运维
- :
- 应用程序升级:如何在不中断服务的情况下,零停机时间地升级你的应用(
Delta-Quorum升级模式)。 - 服务配置和密钥管理:如何在不重新部署代码的情况下,动态更新服务配置(如连接字符串)。
- 监控和诊断:集成 Application Insights,收集日志和性能数据。
- 部署到 Azure:学习如何在 Azure 上创建一个生产级别的 Service Fabric 集群,并将你的应用部署上去。
- 应用程序升级:如何在不中断服务的情况下,零停机时间地升级你的应用(
- 实践:修改
Settings.xml中的配置值,然后通过 Visual Studio 的“发布”功能,体验配置的动态更新。
学习测试策略
- :
- 本地测试集群:使用
TestCluster程序启动一个轻量级的本地集群,用于自动化测试。 - Fakes:使用 Visual Studio 的 Fakes 框架来模拟
FabricClient和StatelessServiceContext等,进行单元测试。
- 本地测试集群:使用
- 实践:为你的服务编写单元测试和集成测试。
第四部分:推荐资源
- 微软官方文档(首选):
- Service Fabric 文档:最权威、最全面的学习资料,涵盖了所有主题。
- Azure Service Fabric 教程:一系列动手教程,从基础到高级。
- GitHub:
- Service Fabric Samples:官方的 .NET Core 示例项目,非常实用。
- Microsoft Learn:
- 学习模块:Azure Service Fundamentals:交互式的学习路径,适合初学者。
Service Fabric 是一个功能强大的平台,虽然概念较多,但一旦掌握了核心思想,构建高可用、可扩展的微服务系统将变得前所未有的简单。
学习建议:
- 从本地开发开始:不要急于上云,先把本地环境玩熟。
- 先无后有:先掌握无状态服务,再挑战有状态服务。
- 多看官方文档:官方文档是最好的老师。
- 动手实践:跟着教程敲代码,并尝试修改和扩展,这是最快的学习方式。
祝你学习顺利!
