Service Fabric是什么?

题记:鉴于社区对Service Fabric有诸多误解,希望借本文能让大家正确了解Service Fabric是一个什么东西,算是给其正名。

术语与分类

Service Fabric不仅仅是容器编排器

Service Fabric 是一种开源的跨平台的分布式应用平台,通过它可轻松开发、打包、部署和管理可缩放且可靠的微服务(或者非微服务)。所以Service Fabric不仅仅是一个容器编排器或者微服务平台,而是一个分布式平台,也意味着你要开发一个分布式应用,那么藉由SF,可以更容易的解决所遇到的一些问题:服务发现、高可用下的分布式状态一致性、服务生命周期管理、健康和资源监控、服务移动、按需缩放、故障恢复、滚动升级、良好的DevOps支持等等

Service Fabric家族

为什么说家族呢?因为根据不同的形态或者平台,SF分为如下几种:

  • 按操作系统平台:
    • Service Fabric for Windows
    • Service Fabric for Linux
  • 按编程模型:
    • Service Fabric Native:提供了特定的SDK,可以让你在入侵代码(即可靠服务,支持.NET、.NET Core和Java)或者无入侵代码(即来宾可执行程序和容器应用,支持任意技术平台)的情况下,运行分布式应用。这种模式下,如果把SF当作一个容器编排器的话,SF=K8S。
    • Service Fabric Mesh:提供了特定的SDK,让你无入侵代码(仅容器应用)的情况下,运行分布式应用。这种模式类似于Istio。应用可以是Linux的也可以是Windows的(比如旧的ASP.NET应用,当然需要容器化后)。
  • 按托管环境:
    • Azure Service Fabric:在Azure上开箱即用的Native集群,可以选择Windows集群还是Linux集群,在国际和国内的Azure都支持。
    • Service Fabric Standalone:在本地数据中心或者第三方云平台IaaS上,创建的Native集群。官方文档专门有一节讲如何在AWS中安装Standalone集群。当然由于官方只提供了Windows的安装包,所以如果你需要创建Linux的Standalone集群的话,要不通过源代码编译安装,要不联系微软帮你安装。
    • Service Fabric Mesh:目前Service Fabric Mesh是一个纯托管的Azure PaaS,在国际和国内的Azure上处于预览状态。所谓PaaS就是你无需关心底层的基础设施,只需要部署Mesh应用就行,类似于Serverless。这点Service Fabric Mesh非常超前。
    • Service Fabric开发集群:在本机安装一个用于开发目的的集群。这里安装的不是一个模拟器,而是和生产集群同样的运行时,这样的好处是应用在本地开发和生产运行的行为是一致的。Service Fabric Native的开发集群可以在Windows上安装,在Linux上安装(微软虽然没有提供生产集群的Linux安装包,但是提供了开发集群的安装包哦),在MacOS上通过Docker的方式来安装(Image:microsoft/service-fabric-onebox)。Service Fabric Mesh的开发集群只能在Windows上安装,但是你可以把Docker的模式改为Linux(或者利用LCOW模式,Linux Container On Windows),就可以在Windows上开发Linux的Mesh应用。
  • 按容器编排模式:
    • 资源模式:这是Service Fabric Mesh特用的编排模式,通过一系列yaml文件来描述你的Mesh应用的结构和依赖,这点类似于Helm Charts。
    • 原生模式:这是Service Fabric Native支持的,通过xml清单文件来描述容器应用的结构和依赖,可以达到Helm Charts的效果。甚至于,这种模式支持在容器中运行可靠服务。
    • Docker Compose模式:这也是在Service Fabric Native支持的一种变通模式,方便你把原有的Docker Compose应用迁移到SF中。

容器编排

在容器编排大战中,以Kubernetes胜出告终。尤其在最近的v1.14版本发布后,Kubernetes在生产级别支持Windows集群,感觉Service Fabric作为容器编排器更是一无是处了。

但是Kubernetes有几个缺点还是值得我们注意(当然随着时间推移,可能也不成问题):

  1. 对Windows的生产级支持刚刚提供,估计还没有什么实际案例,尝试过程也会有很多坑。遇到坑,除非你有能力给Kubernetes提PR,不然只有干瞪眼。
  2. 仅支持Windows Server 2019,这就需要对现有基础设施进行升级。
  3. Kubernetes是中心化的架构设计,SF是非中心化架构设计。理论上说,非中心化可以管理更多的节点。详细比较可以见:http://cncc.bingj.com/cache.aspx?q=service+fabric+vs+kubernetes&d=4956308203112741&mkt=en-US&setlang=en-US&w=yS0m4YqKykfN3kzC17BYsOdrCrlumxkV (这篇文章也分析了Service Fabric的底层机制和应用场景)

但是,实际上Service Fabric Native对容器的编排能力是非常强的,只是弱在了相关生态建设和推广上。

同时,不要忘了Service Fabric Native除了可以编排容器以外,还可以编排在进程中跑的服务。因为并不是所有应用都能顺利容器化(技术限制和法律限制(我就遇到过)),在这种情况下,如果你不想入侵代码就用来宾可执行程序,或者稍作改动使用可靠服务。

技术选型

就个人观点而言,建议的技术选型如下:

  • 纯.NET Core的容器应用:使用Kubernetes或者Service Fabric Native或者Service Fabric Mesh都可以。如果你的组织已经在使用Kubernetes管理Linux集群来支持其他技术平台,那么就继续使用K8S来管理.NET Core容器应用(跑在Linux下)吧。
  • 有遗留的ASP.NET 应用:
    • 可以容器化:这个时候只能使用Windows容器集群,Kubernetes或者Service Fabric Native或者Service Fabric Mesh都可以,只是Service Fabric Native在编排Windows容器方面产品本身已经很成熟,已经有很多案例。
    • 不能容器化但可以自托管:所谓自托管就是不需要依赖IIS就能跑起来,那么在旧的ASP.NET技术当中,只有ASP.NET WebAPI等支持原生OWIN的才能自托管。这个时候可以代价非常小(仅启动代码改动)就可以转变为可靠服务。这种情况下采用Service Fabric Native是唯一选择。
    • 不能容器化也不能自托管:这个时候只能对应用进行迁移到ASP.NET Core。
  • 有遗留的.NET开发的Windows Service应用:
    • 可以容器化:在代码(较多)改造后,使用Kubernetes或者Service Fabric Native或者Service Fabric Mesh都可以。
    • 不能容器化:在代码(较少)改造后,变为Service Fabric Native的可靠服务。
  • 需要开发中间件产品:Service Fabric Native的可靠服务
  • 需要开发大规模并发应用:比如IoT的Event接收、游戏后端等,Service Fabric Native的可靠Actor服务

如果你只是想在容器中跑下应用,那么看到这里应该已经足够了。但是,我再次强调,Service Fabric Native不仅仅是一个编排器,它真正强大的地方是其可靠服务(尤其有状态服务)。

Service Fabric Native的可靠服务

Service Fabric Native体系结构

上图说明了,Service Fabric Native是跨平台且不绑定任何公有云平台的。并说明了一些内置的强大能力。

上图说明了,支持的多种运行形态,同时特有的SDK是支持.NET/.NET Core和Java的。

上图是Service Fabric Native的体系结构图,其他的不累述,我强调两个部分:

  1. 集群管理子系统:它背后的核心原理是专门研究拜占庭将军问题的图灵奖得主Leslie Lamport,在微软是杰出科学家,他解决了大规模集群中节点状态一致性问题。
  2. 可测试性子系统:它让你可以轻松实现混乱测试,这个东西在互联网公司可是非常NB的存在哦。

编程模型

Service Fabric Native提供了灵活的编程模型:

  • 来宾可执行程序:总是无状态的
    • 容器:本质是一种特殊的来宾。所以一切以容器为基础的平台,状态都只能在集群外部维护。
  • 可靠服务
    • 无状态服务
    • 有状态服务:集群可以帮助你维护状态
      • Actor服务(一种特殊的有状态服务)
    • 容器中的可靠服务:即在容器中运行利用SDK编写的服务,这样虽然有点画蛇添足,不过让你的运维环境统一为容器。

被严重低估和忽略的有状态服务

我一直说Service Fabric Native强大之处是可靠服务中的有状态服务,它通过提供一个强大的可靠集合(类似于NoSQL,但是是高可用、状态一致、可伸缩的)让你整个微服务的开发乃至中间件的开发变得轻而易举。

我们先来看两张示意图:

也就是,不需要依赖外部存储,直接把数据的保存和处理数据的逻辑放到一起,获得不一样的架构。这里还没有展开可靠Actor服务的强大呢。

有状态服务的强大不是口说无凭的,我们知道(估计还是很多人其实不知道),Azure上的很多PaaS的底层机制都是Service Fabric Native,如下图所示:

上图中,最为引人注目的就是Cosmos DB了,下面摘抄一份官方说明:

Azure Cosmos DB 从一开始就将分布和横向缩放作为其核心。通过透明地缩放和复制数据(无论用户位于何处),在任意数量的 Azure 区域提供统包分布。灵活缩放多个数据中心范围内的吞吐量和存储,只为需要的吞吐量和存储付费。Azure Cosmos DB 提供对 NoSQL 和 OSS API(包括 MongoDB、Cassandra、Gremlin 和 SQL)的本机支持,还提供多种明确定义的一致性模型,Azure Cosmos DB 保证各区域任意位置在第 99 个百分位为个位数毫秒的延迟,提供多种定义明确的一致性模型以微调性能,并保证多宿主功能的高可用性

为什么Cosmos DB能实现上述这种NB的特性,诀窍就是有状态服务!

最后,希望对可靠服务尤其有状态服务深入了解的朋友,可以仔细阅读官方文档,并深入理解这个示例:https://github.com/Azure-Samples/service-fabric-dotnet-web-reference-app

另外,如果你喜欢看纸质书,那么我参与撰写的《架构宝典》也对Service Fabric Native有所简单介绍:https://item.jd.com/12561926.html

原文地址:https://www.cnblogs.com/redmoon/p/10663116.html

时间: 2024-11-09 02:54:27

Service Fabric是什么?的相关文章

开发者为何对Service Fabric爱不释手?值得关注!

有了它,人人都可开发高可用高伸缩应用.今天小编就为大家介绍一款开发者的"利器"--Service Fabric . 在介绍它之前,先来了解一下它的背景. Service Fabric 是一款应用程序平台,可用于构建基于微服务的应用程序.其核心部分是一个分布式系统平台,用于构建可扩展的可靠应用.在便于封装可部署代码的同时,还内置了微服务最佳实践案例. 快速上市:通过 Service Fabric,开发人员可将重点放在创建可为应用程序增加商业价值的功能上,从而避免了为在基础结构中处理可靠性

拥抱Service Fabric —— 目录

理解分布式 经典分布式系统设计 分布式系统演进 Service Fabric基础概念 Node Type和Node Application Stateful Service Stateless Service Actor Service Fabric System Azure Service Fabric Azure Virtual Machine Scaleset Azure Load Balancer 开发Service Fabric应用 创建Azure Service Fabric 简单样

Service Fabric基本概念:Partition/Replicas示例

作者:张鼎松 (Dingsong Zhang) @ Microsoft 在上一节的结尾简单介绍了Service Fabric中分区Partitions和复制replicas的概念,本节主要以示例的形式来具体说明这个抽象概念在Service Fabric中的工作方式. 1. 分区Partitions和复制replicas 一个service可以包含多个分区Partition,Service Fabric通过使用分区作为扩展的机制来将工作分布到不同的service实例上. 一个分区Partition

Service Fabric Failover Manager

作者:潘罡 (Van Pan)@ Microsoft 什么是Failover Manager 我们回到Service Fabric系统架构图. Failover Manager是Reliability Subsystem其中的一部分核心组件.它被设计为SF的一个Service.你可以在Service Fabric Explorer中看到这个服务. 它主要负责以下功能: 维护全局可用的Node及Service视图 和Placement and Load Balancer (PLB) 以及 Reco

在 Linux 上创建第一个 Service Fabric Java 应用程序

先决条件 开始之前,请安装 Service Fabric SDK.Azure CLI,并在 Linux 开发环境中设置开发群集. 如果使用 Mac OS X,则可使用 Vagrant 在虚拟机中设置 Linux 开发环境. 此外还需配置 Azure CLI 2.0(推荐)或 XPlat CLI,以便部署应用程序. 创建应用程序 Service Fabric 应用程序包含一个或多个服务,每个服务都在提供应用程序功能时具有特定角色. 适用于 Linux 的 Service Fabric SDK 包含

Service Fabric SfDevCluster目录从默认的C盘移动

管理员权限打开Powershell CD\ 回车 CD "C:\Program Files\Microsoft SDKs\Service Fabric\ClusterSetup" 回车 比如新目录为 E:\SfDevCluster .\DevClusterSetup.ps1 -PathToClusterDataRoot E:\SfDevCluster\Data -PathToClusterLogRoot E:\SfDevCluster\Log 回车 清理SfDevCluster文件夹:

Service Fabric下删除实例并注销应用

Service Fabric下删除实例并注销应用: 以应用名称:Application1为例 1.打开PowerShell 2.连接集群: Connect-ServiceFabricCluster -ConnectionEndpoint localhost:19000 3.删除实例: Remove-ServiceFabricApplication -ApplicationName fabric:/Application1 –force 4.注销应用: Unregister-ServiceFabr

【Service Fabric】小白入门记录 本地Service Fabric集群安装及设置

本篇内容是自学自记,现在我还不知道Service Fabric究竟是怎么个入门法,反正按照入门教程先进行本地Service Fabric集群的安装,万里路始于足下,要学习总得先把环境装好了才能开始学习是不? 首先是先决条件,具体可见 https://docs.microsoft.com/zh-cn/azure/service-fabric/service-fabric-quickstart-dotnet#prerequisites,按照条件将所有必需的SDK安装完毕后,我们可以在windows菜

微服务之Service Fabric 系列 (一)

参考 微软官方文档  service fabric 百家号   大话微服务架构之微服务框架微软ServiceFabric正式开源 一.概述 1.概念 Azure Service Fabric 是一款分布式系统平台,可方便用户轻松打包.部署和管理可缩放的可靠微服务和容器. Service Fabric 还解决了开发和管理云本机应用程序面临的重大难题. 开发人员和管理员不需解决复杂的基础结构问题,只需专注于实现苛刻的任务关键型工作负荷,即那些可缩放.可靠且易于管理的工作负荷. Service Fab

如何在本地数据中心安装Service Fabric for Windows集群

概述 首先本文只是对官方文档(中文,英文)的一个提炼,详细的安装说明还请仔细阅读官方文档. 虽然Service Fabric的官方名称往往被加上Azure,但是实际上(估计很多人不知道)Service Fabric可以安装到本地数据中心或者任意公有云上,这不官方文档就有一章专门讲如何安装到AWS的内容. 所以现在为了区分,一般把在Azure上提供的开箱即用的PaaS称之为Azure Service Fabric,而把本地安装的称之为Service Fabric Standalone. 同时,Se