App Service 是微软Azure的PaaS产品。 为任何平台或设备创建Web App PaaS服务和mobile App PaaS服务。 将应用与SaaS解决方案集成、与本地应用程序进行连接,以实现业务流程的自动化。在我们日常开发中,经常会使用Web App PaaS服务来承载企业的业务。
本文试图通过一个案例来分别详细说明Azure Web App业务的下列几大特点:
- 应用服务计划
- 多种语言和框架
- 持续集成和部署
- 连接数据库服务
- 可用性全局缩放
就在本文撰写过程中,Azure Stack Development Kit GA,Azure Stack Tools也进行了一定程度的更新。后续,我们会根据更新内容测试之后,更新相关技术文档。
1. 应用服务计划
App Service Plan(应用服务计划) :表示托管应用的物理资源的集合,例如region(区域)、scale count(规模计数,多少个实例)、instance size(实例大小)、SKU(免费、共享、基础、标准、高级)。
App Service中的 Web 应用、移动应用、API 应用、Function App(或 Functions)均在应用服务计划中运行。 同一订阅、区域和资源组中的应用可共享应用服务计划。
值得注意的是, Azure Stack App Service提供的服务与目前Moonccake版本有所不同 。Azure Stack App Service提供了Serverless服务 Function App。这为应用开发的架构师提供了另一种技术路径。对于已有的企业级系统,Logic App提供了一种工作流程,把已有的系统与Azure Stack连接,进行数据的交互和处理。
功能 |
Azure Stack |
Azure Mooncake |
Web App |
有 |
有 |
Mobile App |
有 |
有 |
API App |
有 |
有 |
Logic App |
无 |
无 |
Function App |
有 |
无 |
2. 多种语言和框架
对于开发者而言,不需要知道Web App PaaS服务背后的支撑框架。不管是LAMP也好,还是Windows+.NET+IIS也罢,开发人员只需要使用熟悉的技术栈做相同的事情就行。Web App PaaS服务支持多种语言,如C#、Python、Java、PHP等,同时也支持.NET、J2EE之类的开发框架。下图很好的说明了Web App PaaS服务的组成,虚线之外是独立存在的开发者。把开发者与Web App PaaS连在一起的是众多的开发工具(我们会在第二节介绍使用情况)。
![](images/2017111338.png)
下面我们通过一个简单PHP 网站案例介绍,该特性。首先创建一个Web App应用。在New->Web + Mobile->Web App (preview)
![](images/2017111331.png)
初次创建Web App的过程中,需要用户新建 Resource Group (资源组)和 App Service Plan(应用服务计划)
![](images/2017111332.png)
创建完成之后,我们点击左侧导航栏 App Services
![](images/2017111333.png)
选择 Advanced Tools,点击 Go 图标
![](images/2017111334.png)
点击Go之后,显示 App Service 注册认证页面
![](images/2017111335.png)
选择用户名,输入密码。(用户名和密码为创建该Web App的租户信息)
![](images/2017111336.png)
此时,我们进入 Kudu Services。
Kudu是一个用于git部署的CI/CD引擎。详情可以参阅:https://github.com/projectkudu/kudu/wiki。
我们点击页面顶部的 debug console -> CMD,正如使用Windows操作系统cmd指令窗口一样,可以在该窗口进行command line的操作。
![](images/2017111337.png)
为了验证Web App PaaS服务的多语言性,输入php -v 检查Web App是否安装PHP语言。
![](images/2017111338.png)
如果需要安装python或者nodejs,点击 Site extensions->Gallery.
![](images/2017111339.png)
拖动滚动条,寻找需要安装的语言和第三方工作包。找到 Composer 工具包,点击 + 按钮。
![](images/20171113310.png)
等待片刻后,在 Installed 栏中出现我们要安装的工具包。
![](images/20171113311.png)
在返回Debug->console目录,在home/SiteExtensions下,我们可以看到Composer文件目录。
![](images/20171113312.png)
输入composer指令,此时工具包已经安装完成。
![](images/20171113313.png)
3. 持续集成和部署
编程语言和相关工具包是开发Web应用的基础,我们可以将代码部署到微软Web App PaaS服务中。Azure 公有云提供了包括Visual Studio Online、Git、Github、FTP等多种持续集成和部署的方式。虽然在Azure Stack PoC环境中,我们暂时只能测试 local gitrepository和external repository两种模式,但相信在GA之后,会有更多的第三方provider为开发者提供优质的软件服务。
![](images/20171113314.png)
在本案中,我们使用Github作为Web App的代码版本管理工具,进行简单的持续部署和开发的工作。
选中 Web App->Deployment credentials , 在此界面设置 Git 或者 FTP 的用户认证信息。这里,输入自己的Github账户和密码,点击 确定 。
![](images/20171113315.png)
然后,选择 Deployment options, 选择 external repository。
![](images/20171113316.png)
填写相关的Repository URL,同时选择 branch 分支。
笔者自己开发了一个基于php和mysql的简单web应用,想要了解朋友,可以下载代码。地址:https://github.com/Penergy/AzSwebDemo01.git
![](images/20171113317.png)
点击 确定 后,Azure Stack中的Web App便会自动更新代码。
![](images/20171113318.png)
下图显示了第一次更新后的结果。
![](images/20171113319.png)
值得一提的是在Azure Stack PoC环境中无法使用Deployment Slots。而这个功能的作用是定时从代码库中读取代码,这对于持续集成和部署作用不可言喻。相信在GA之后,开发者要想的功能会逐步的上线。我们仪电集团也会跟进后续的研究和开发。下图为上传的网站。
![](images/20171113320.png)
在本地环境中,我们更新了部分代码,上传到Github中。在Azure Stack Web App中,同步代码。
![](images/20171113321.png)
底下的按钮变成 Hello 字样。
![](images/20171113322.png)
4. 连接数据库服务
现在我们已经创建了Web App环境,上传代码,完成了网站静态页面的显示。接下来,将介绍Web App 如何与数据库对接,进行动态展示。
Azure Stack提供了众多的数据库存储环境,如Azure Table、SQL Server这样的微软产品。同时,微软也引入了第三方的Provider。对于熟悉LAMP网站开发的朋友,微软提供了MySQL数据库服务。在我们的案例中,也将为大家介绍Web App与MySQL链接实现持久化。
a. 创建MySQL Database (preview)
首先创建一个MySQL Database服务。点击 New -> Data + Storage -> MySQL Database (preview),输入基本信息。
![](images/20171113323.png)
![](images/20171113324.png)
创建之后,新建的MySQL数据库会显示在所属的Resource Group(资源组),此时数据库已经创建成功。
![](images/20171113325.png)
b. 使用MySQL Workbench或者Navicat
对于新建的数据库,我们需要为数据库新建 Schema(模式),并从中插入表格。开发者可以使用不同的工具,如MySQL Workbench、Navicat或者是其他指令行软件。这里为了方便,我们使用Navicat。
首先,进入新建的MySQL Database。在 Essential 中,获取 Connection String.
server=192.168.102.15;password= ** ** ** ** ** **; user id=root;port=3306;database=pengtestdb02 |
从上述字符串中,我们获得了几个重要信息,如server(数据库服务器ip地址)、user id(数据库用户名),port(端口号),database(数据库名称)。出于对credential信息保护的缘故,Azure Stack了屏蔽密码这类敏感信息。
![](images/20171113326.png)
打开Navicat,填写之前获取的信息,点击 连接。
![](images/20171113327.png)
进入数据库,数据库已经显示在软件中,我们要做的就是创建数据表。这里,创建名为 users 的数据表,分别添加id、username、email三个字段。
![](images/20171113328.png)
这样,创建数据表的工作做完。MySQL Database Server已经开始运转。
![](images/20171113329.png)
c. Web App连接数据库
为了让Web App连接已经创建好的MySQL服务器,我们需要将获取的Connection String填写到Web App中的 Application Settings 中。
![](images/20171113330.png)
在Application Settings中,有 Connection Strings 一栏,在这个表格中可以填写任意参数。这个由Key和Value组成的变量,会作为环境变量存在于Web App中。
![](images/20171113331.png)
在PHP代码中,我们使用如下代码,获取环境变量。
$appsetting = getenv("MYSQLCONNSTR_test");$conn = connectForAzure($appsetting); |
对于不同的数据库,Web app提供了不同的命名规则:
数据库类型 |
Key值
|
变量名称
|
Sql Databases |
sqldbdemo |
SQLAZURECONNSTR _sqldbdemo |
SQL Server |
sqlserverdemo |
SQLCONNSTR _sqlserverdemo |
MySQL |
mysqldemo |
MYSQLCONNSTR _mysqldemo |
Custom |
customdemo |
CUSTOMCONNSTR _customdemo |
在我们的案例中,点击 Hello 按钮之后,跳转到动态页面。开发者可以操作向数据库输入用户名和邮箱信息。
![](images/20171113332.png)
5. 可用性全局缩放
微软Web App PaaS提供两种自动全局缩放模式,一种是 扩大(Scale Out),另一种是 增加(Scale Up)。
扩大(Scale Out)
用于Web 应用访问的不确定性,可能导致不断变化的使用需求。Azure Stack中的扩大就是通过增加虚机实例的个数,使用负载均衡做到按需访问。这样做的好处在于动态分配资源,不用浪费资源。
![](images/20171113333.png)
下面是Scale Out界面,我们可以增加或者减少虚机实例。
![](images/20171113334.png)
增加(Scale Up)
通过改变App Service Plan的类型来增加单个虚机实例的虚机资源,包括 CPU个数、内存大小、存储资源 等。
![](images/20171113335.png)
不同于公有云Azure中的App Service服务, Azure Stack 管理员portal提供了一种配置App Service服务各种角色性能的可能性。
我们可以为App Service 新增角色,包括Web Worker、Front End、Publisher、Database、File Server、Controller等角色。这里新增 Worker Tier角色。
![](images/20171113336.png)
对于新增的角色,选择 Shared、Small、Medium、Large等角色。
![](images/20171113337.png)
6. 总结
微软的Web App PaaS服务,作为一种面向云端的快捷、有效的的开发模式之一。相较于传统Web App开发需要搭建服务器环境、安装相关的编程语言、配置相应的软件包和数据库而言,开发者只需要关注业务逻辑和代码本身,有效的提高了开发的质量和速度。
本文通过一个简单案例的实现,介绍了Azure Stack中Web App PaaS服务的开发过程。其目的是为开发者介绍如何在Azure Stack中进行应用的开发。希望开发者了解Azure Stack提供的服务和能力,更好的帮助开发者从应用开发、代码实施部署、需求动态分配、PaaS服务协同等四个角度,了解Web App PaaS功能。同时,我们也对Azure Stack和Azure Mooncake版本做了简短的对比介绍,Azure Stack提供了目前比较热门的Serverless服务- Function App,并为云管理员提供 动态分配App Service资源 的权利。可以说这两点是Azure Stack特有的亮点之一。 |