|
|
51CTO旗下网站
|
|
移动端

2.3.1.1 应用程序模型简介

《Microsoft Azure 管理与开发(下册)平台服务PaaS》本书由世纪互联蓝云Microsoft Azure 开发技术支持团队的资深工程师们编写,主要阐述MicrosoftAzure PaaS 服务的开发应用,涉及计算服务、集成认证服务、数据存储服务、大数据服务等方面的内容。本节为应用程序模型简介。

作者:世纪互联蓝云公司来源:电子工业出版社|2018-07-12 17:17

2.3.1.1 应用程序模型简介

Service Fabric 的应用程序,是由相关或者同一模块下的多个服务构成的组合,在应用模型中,每个服务都是由代码、配置文件和数据三部分组成。应用的结构如图2.3.1-1所示。

在一个Service Fabric 群集中,可以部署多个不同的应用,为了区分不同的应用,ServiceFabric 定义了应用类型的概念。应用类型中定义了应用程序以及包含服务的配置。每个应用类型都有一到多个服务组成。为了定义和配置每个服务,Service Fabric 提出了服务类型的概念,以此来描述服务的种类、配置和代码数据等信息,如图2.3.1-2 所示,可以看到应用类型和服务类型之间的关系。

1. 应用程序包结构

整个应用程序是由应用描述文件,以及其他必需的服务相关文件组成的。只要按照Service Fabric 规范来组织包的内容,就可以将其发布到群集中,如图2.3.1-3 所示,就是一个简单的Service Fabric 应用程序包的结构。

文件夹的名称会跟配置文件中每个配置项的name 属性相对应。例如,如果在服务描述文件中添加两个CodePackage,并分别设置name 属性为Code1 和Code2,那么就需要在服务目录下创建两个名为Code1 和Code2 的目录,来存放两个编译后的程序包。通常会使用开发工具来协助打包,操作过程如图2.3.1-4 所示。

当完成打包之后,也可以借助PowerShell 命令来检查程序包是否正确,如果使用VisualStudio 打包,就无需检查程序包的正确性,因为开发工具在打包过程中会检查配置和相应的目录结构。如果出现错误,开发工具会提示修改后再打包。以下是Test-ServiceFabricApplicationPackage 测试打包命令的使用示例:

  1. Test-ServiceFabricApplicationPackage .\SFApplication 

当验证正确时,会返回会True,当验证失败就会提示具体的错误信息。该验证只会校验配置和文件夹的正确性,并不会校验文件夹下程序代码和数据的正确性。

当应用程序中代码非常大或者有包含非常多的文件时,可以通过压缩文件的方式来减少文件数量和文件大小,这样可以减少上传应用程序的时间。但是这样也会相应地增加注册和取消注册应用类型的时间。上传压缩的应用程序和上传非压缩应用程序的方法是类似的,均是使用Copy-ServiceFabricApplicationPackage 命令,区别在于,上传压缩的应用程序需要添加CompressPackage 参数;上传非压缩应用程序使用UnCompressPackage 参数。在默认情况下是不会压缩应用程序的。使用该命令,会将程序包上传到Service Fabric。如果不想上传可以命令中添加参数SkipCopy 来在本地打压缩包。

  1. PS D:\temp> Copy-ServiceFabricApplicationPackage –Application PackagePath.\  
  2. SFApplicationType -ApplicationPackagePathInImageStore MyApplicationType  
  3. -ImageStoreConnectionString fabric:ImageStore -CompressPackage -TimeoutSec 5400 

在Azure Service Fabric 内部会对上传的压缩包进行文件MD5 校验,以保证文件完整性。只有校验成功,才能使用其部署应用程序。

2. 应用程序描述文件

应用类型和服务类型均是以XML 文件的形式来定义应用程序和服务。这两个配置文件分别是ApplicationManifest.xml 和ServiceManifest.xml。当在Visual Studio 或者Eclipse中创建Service Fabric 应用程序时,就会在项目中找到这两个配置文件。

在该应用程序描述文件中,主要定义了应用类型名称、版本信息、服务清单,以及默认服务等信息。其中版本信息是由用户自己来定义,该值用来对应用程序进行版本控制,以进行升级。ServiceManifestImport 是用来引入该应用程序所有的服务清单,并可以在此处覆盖服务配置中的环境变量和设置。DefaultServices 声明应用程序下默认的服务,当实例化应用程序时自动启动默认服务。

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <ApplicationManifest ApplicationTypeName="SFApplicationType"  
  3. ApplicationTypeVersion="1.0.0"  
  4. xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  5. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  6. xmlns="http://schemas.microsoft.com/2011/01/fabric"> 
  7. <Parameters> 
  8. <Parameter Name=" Stateless_No" DefaultValue="-1" /> 
  9. </Parameters> 
  10. <ServiceManifestImport> 
  11. <ServiceManifestRef ServiceManifestName="Stateless1"  
  12. ServiceManifestVersion="1.0.0" /> 
  13. <ConfigOverrides /> 
  14. <EnvironmentOverrides CodePackageRef="MyCode"/> 
  15. </ServiceManifestImport> 
  16. <DefaultServices> 
  17. <Service Name="Stateless1"> 
  18. <StatelessService ServiceTypeName="Stateless1Type" InstanceCount="  
  19. [Stateless_No]"> 
  20. <SingletonPartition /> 
  21. </StatelessService> 
  22. </Service> 
  23. </DefaultServices> 
  24. </ApplicationManifest> 

3. 服务程序描述文件

在服务描述文件中,主要配置了服务名称、类型、版本、程序包配置等信息。其中Version的作用跟应用描述文件中的作用类似。ServiceType 定义此服务的支持的服务类型,会在后边的章节中详细介绍。剩余的配置主要分为三类,程序包设置、配置设置和数据设置。

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <ServiceManifest Name="Stateless1"  
  3. Version="1.0.0"  
  4. xmlns="http://schemas.microsoft.com/2011/01/fabric"  
  5. xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  6. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
  7. <ServiceTypes> 
  8. <StatelessServiceType ServiceTypeName="Stateless1Type" /> 
  9. </ServiceTypes> 
  10. <CodePackage Name="Code" Version="1.0.0"> 
  11. <SetupEntryPoint> 
  12. <ExeHost> 
  13. <Program>MySetup.bat</Program> 
  14. </ExeHost> 
  15. </SetupEntryPoint> 
  16. <EntryPoint> 
  17. <ExeHost><Program>Stateless1.exe</Program></ExeHost> 
  18. </EntryPoint> 
  19. </CodePackage> 
  20. <ConfigPackage Name="MyConfig" Version="ConfigVersion1" /> 
  21. <DataPackage Name="MyData" Version="DataVersion1" /> 
  22. <Resources> 
  23. <Endpoints> 
  24. <Endpoint Name="ServiceEndpoint" /> 
  25. </Endpoints> 
  26. </Resources> 
  27. </ServiceManifest> 

CodePackage 主要描述程序包的配置,其中SetupEntryPoint 用来应用启动前设置和安装必要的软件。该入口是以Local System 账户来执行的,所以相对权限较大。SetupEntryPoint典型的应用场景是在应用启动之前运行可执行文件,或者执行需要管理员权限的操作。例如:

(1) 设置和初始化服务或者可执行文件所需的环境变量,例如npm 需要设置一些环境变量来部署应用程序;

(2) 通过安装安全证书设置访问控制。

EntryPoint 是用来定义应用程序可执行文件或者容器镜像文件名称的入口,当启动应用时,会依据此处设置的值来找到应用程序文件所在的位置执行,EnvironmentVariables 用来定义应用程序所需的环境变量设置。

Config Package 主要是描述服务配置文件的名称以及版本。服务的配置文件Setting.xml就存放在该配置属性name 对应的目录中,该setting.xml 配置文件主要用来定义用户自定义配置,以便服务程序在运行时读取这些配置。当升级时,可以只更新配置,这样运行的程序就不会被重启,而是触发一个通知告知程序并将配置信息动态重新加载。

DataPackage 用来定义存放服务程序所需的静态数据文件的文件夹。文件夹名称以该节点的Name 属性来定义。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Linux标准教程

本书以Linux Redhat 9.0中文版为基础编写,从易用性和实用性角度出发主要介绍Linux Redhat 9.0中文版的应用知识,通过本书的学习,相信初中...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊