初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考
最近客户在逐步迁移应用从阿里云到Azure,这次又轮到一个PHP+MySQL应用了,顺便也记一下流水账。
需求:迁移部署在阿里云上的ECS服务器(系列2,IO优化+2核4G+50G的SSD云盘+10M带宽+Server 2012 R2+安装在操作系统上的MySQL数据库【版本不详】)到Azure上
最终的方案简易描述如下:
1、使用Azure虚拟机替代ECS服务器,使用MySQL Database on Azure替代本地MySQL
2、从Server 2012 R2操作系统升级到Windows Server 2016操作系统
3、为客户增加Windows下PHP Manager工具的Fast CGI PHP版本管理方式
4、增加HTTPS支持(客户买了赛门铁克SSL证书,顺便就升级一下)
5、将原有Web本地资源文件升级为CDN服务(实在抱歉,Azure的CDN开发工作才进展到一半,所以继续使用阿里云CDN蛤蛤)
这个方案本身平淡无奇,但其中还是有2个非常有意思的地方可以思考一下,第一个就是关于云服务中PHP环境搭建,先聊一聊这个话题
众所周知,在云服务时代之前,最火爆的就是虚拟主机(虚拟空间)了,而那个时候的虚拟机主机技术中,相当流行的一种,就是Windows宿主服务器+IIS接口开发+MySQL资源分配接口开发+SQL Server资源分配开发+Web控制面板服务开发
这种技术发展到后期,在适配上已经做到了全能空间,即对asp、asp.net、php、java等环境进行全方位的支持,在管理上也形成了全功能的控制面板,可以对域名绑定、FTP信息、运行状态等进行管控和查询,实在是建站神器
而从阿里云引领国内的云服务建设后,这种方式好像一夜之间消失不见了
取而代之的是Linux虚拟机+PaaS MySQL数据库服务+推荐Linux控制面板安装PHP环境,或者是Windows虚拟机+PaaS MySQL数据库服务+环境一键安装包等,在阿里云云服务市场也是这么推荐的,在社区里面的技术讨论也围绕着这样的方式展
这样的转变,微妙而又十分有趣。
紧接着,就要抛出一个观点,在云服务时代,对于月均预算在200元以上的用户(学生、技术爱好者、开发人员、小微企业甚至中小企业等)
Windows Server(2008 R2+)+Fast CGI+IIS+PHP Manager是PHP环境唯一最佳选择!
1、为何强调月均预算200以上,因为目前的云服务商的Windows Server(2008 R2+),4G以上内存的虚拟机的综合费用无法降价到200元以内,而内存不到4G,Windows Server 总感觉不得劲(注意:此处并不意味着Windows Server吃内存,只是GUI确实会耗费一些内存、带来一些内存泄露风险,你愿意的话也可以用 NoGUI版本)。
2、在IIS6(Windows Server 2003以前)时代,受制于ISAPI的低效率,Windows下的PHP环境总是被人诟病,而IIS7以后,FastCGI+IIS方式的效率,无论如何是不输任何Linux下的PHP运行方式了
3、如果在人才如此昂贵的今天,你还固执的认为Linux+第三方面板的管理方式要比Windows远程桌面来的先进、高效和可控的话,我表示出门向东朝鲜欢迎你
4、PHP Manager For IIS这种PHP版本管理神器,是任何一个PHP开发者和爱好者第一眼看到都无法拒绝的东西,一目了然的参数配置,快捷的插件安装,无需重启Server的版本切换,无不是PHP开发和部署的好伴侣,更别说如今PHP版本这么混乱和多变了,可惜的是,微软也不推广,由于非常稳定,程序也4年多没更新了,一直能适配高版本的IIS,所以也越来越鲜有人知。
5、高效的IT管理一定是云服务时代的重要话题和重要价值,如果你不选择Windows的PHP服务环境,那你就是在犯罪!
刚才说到虚拟空间的PHP环境变得越来越少,但有意思的是
Azure中的应用服务下Web应用让这种环境搭建方式重现江湖
话不多说,看下官网的介绍:
好家伙,支持的挺多,确实很有意思,而后的自动缩放、负载均衡和高可用性,这从微软的口中说出,突然觉得份靠谱,是虚拟机环境非常好的替代品
而中文官方也很好的给出了3种环境的额外说明教程
而当我们真的想尝试建一个Web应用的时候,更为高能的来了!!!
免费
所以说,1元试用+F1版本的Web应用=个人永久免费1G网站空间?
外国人就是实诚啊,这要是放在阿里云上,估计早就给玩坏了。。
为了试验一下这个空间的效果,我们申请一个F1版本,放一个phpinfo.php试试看
申请成功后,可以看到默认有一个URL,也分配了一个FTP,打开这个URL会有一个默认首页
于是我们在部署凭据中设置一下FTP账号密码
然后我们通过FileZilla Client for Windows,上传一下新建好的phpinfo.php文件到FTP
然而,失败了。。也不知道是啥原因,无论怎么设置FTP账号密码,改变模式,甚至下载发布配置文件查看FTP账号和密码也无效,所以最后无奈下
在Visual Studio 2017中新建了一个Web网站,然后导入了下载好的配置文件,终于可以Web Deploy成功了。。
发布一个phpinfo.php看看
http://webapptest0001.chinacloudsites.cn/phpinfo.php
紧接着进一步观察和尝试Web应用控制台的功能
我靠,微软简直是在技术上领先,简直就是在犯罪啊!功能也太丰富和全面了,这控制面板看的好爽,下面一个一个来过一遍
首先是
微软真是太与时俱进了,竟然以技术栈的方式列出了不同的应用方式
各种悉心引导
在应用程序设置中
可以很全面的看到Web应用的配置信息并进行各种参数设置
活脱一个Web版的IIS控制面板嘛
然后看到一个有趣的功能-MySQL In App
按照我的理解,这是一个和Web应用共享资源的迷你版MySQL PaaS服务,我们也打开试一试
具体怎么玩的话,可以点了解详细信息,今天就不细细深究了,因为不花钱的东西咱们不玩,只玩贵的,这免费的MySQL算什么自行车!!
下面是一个特别好玩的Web控制台
一进去就提醒你,这是沙盒环境哈哈,不要做无谓的尝试
试了几下命令,发现挺有意思的,所有的操作系统和程序相关的东西都在D盘,也看不出来这种Web应用的资源管理和调度方式,目录结构也挺凌乱的,不知道这种凌乱是微软还是个别Azure开发人员的作风呢
下面是个在线编辑器
也挺有意思的
其余的一些功能,技术性和维护性较重,就不一一细述了,但可以肯定的是,仍然有很多可挖掘的技术以及运维宝藏!
言归正传,再回到我们今天的正题迁移上来
刚才说有2个有意思的地方,另一个就是关于国内MySQL的PaaS服务了
也是众所周知,阿里云一直标榜的最强项RDS MySQL,相比同类同配普通MySQL PaaS提升性能5倍以上,价格也更便宜,暂且不考虑MySQL的基础能力如何,对于阿里云的MySQL很强这一点,我是相信的,阿里云再没点抓手那真是很丢脸了,但也不是一骑绝尘,腾讯云的MySQL能力自从财付通的数据库技术完全开放给腾讯后,在得到了极大的提升,印象中之前朋友圈看到过一个数据库性能大赛,一直第一名的阿里云在2016年输给了腾讯云团队。。
话扯远了,我想说的是,根据我肤浅的观察,云服务的MySQL PaaS服务能力,有如下几个进阶过程
- 第一级,能够根据MySQL的命令和接口,封装出MySQL的PaaS服务,功能和性能完全公版化
- 第二级,深入研究MySQL的源码和细节,能够在定制化的PaaS服务中,做较大的性能优化和提升
- 第三级,充分融合自身的云服务以及深度开发和定制,达到更加定制化、智能化、高效化的数据高可用、快可备、热迁移的PaaS服务能力
- 第四级,修改MySQL源码、定制出性能更强,适应场景更多的自主产权的MySQL仿版数据库,然后在细分行业发挥更大的价值和作用
而根据我不成熟的判断,腾讯云和阿里云均已达到了第四级,而腾讯云在第三级的细节上,较阿里云还有一些差距,而Azure最早版本的MySQL服务,应该还停留在第一级,最新版本的AzureMySQL还不清楚动向,不过按照微软一贯的特点,Azure的MySQL Database on Azure服务,可用性应该还是挺高的!(我确实不是数据库专家,甚至都不专长于关系数据库的开发,以上言论如有不正确的地方,还望指出!)
正好这次客户对MySQL的性能毫无要求哈哈,所以我也没啥好纠结的,直接建一个MySQL服务用就行了
下面是新建过程
考虑到负载不是很大,我们选择了一个MS2版本,100连接数
而MySQL版本则选择了5.7
大约5分钟不到新建完毕
捣鼓了一下,新建了用户名和密码,哈哈哈,怎么都连不成功!!!!以前老版本控制面板还成功过, 怎么到了新控制面板就不行了。。
然后,额。。这全局控制面板,真的是比我想象中还要简(弱)单(智),老控制面板很多功能好像也没了
服务器没有重启项,没有防火墙管理,没有细分权限管理,哈哈哈,微软,你搞MySQL以后,有没有得抑郁症!
今天时间有限。。就不捣鼓了,改天问下Azure的人怎么回事吧…
然后就是新建一个Azure虚拟机,详细的过程就不多说了,有想了解的可以参考这篇文章:《初码-Azure系列-记一次从阿里云到Azure的迁移和部署》
既然刚才提到PHP Manager是个神器,这边也介绍一下使用方式
首先到PHP Manager官网下载http://phpmanager.codeplex.com/releases/view/69115
记得下载X64的版本
不要害怕,虽然2011年就不更新了,但是完全适配所有IIS7.5以上的版本,只是IIS10有个小BUG,需要修改注册表才能安装,详细方法参见:Windows Server 2016中,安装PHP Manager,ARR3.0或者URL Rewrite 2.0无法成功的解决办法
然后就是下载不同的PHP版本,在http://windows.php.net/中直接下载zip包就可以了,当然了,有一些老版本的包,需要在网上自己找了,好像官网已经没有直接的下载地址了(或者我没找到)
我的习惯是在资源管理器中按照目录和功能进行PHP包的划分
然后打开IIS,打开PHPManager,进行不同的PHP版本的注册,非常简单,就1个步骤
然后选择PHP版本目录下的php-cgi.exe文件,就完成了注册
而PHPManager最为神奇的是,借助IIS的Web.Config管理,可以让不同的网站,使用不同版本的PHP,你说这是不是极大的提升了IT管理效率
好啦,今天的工作就算完成了,老规矩总结一下
总结与思考
1、Azure的Web应用服务,确实挺好的,很好很好很好!而在细节上,也确实又一次体现了微软的技术精神和技术能力,无论从价格上还是运维上看,都是一个非常好的站长建站工具,如有申请了1元账户的个人或者小微企业客户,大可放心的尝试、学习和研究。2、Azure的MySQL服务,在国内看的话,确实不在第一梯队,如果想在Azure上享受到高性能的关系数据库服务,麻烦将技术栈从MySQL转变为SQL Server并购买Azure SQL服务哈哈(我刚好有个客户也有这个需求,后面会详细记录下来过程)。
3、PHP的环境搭建,真的不用多想了,无论是想要高性能、高可用还是易维护,Windows环境都是唯一选择!一些小白们麻烦不要在技术上犯左倾错误了,LinuxPHP是没有前途的!也没有钱途!
4、Azure的MySQL服务,真的是。。。挺弱智的。。哈哈哈,别逼我笑
转载请注明出处,欢迎邮件交流:zhangrou@printhelloworld.com,或者加QQ群:11444444
初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考的更多相关文章
- Azure系列2.1 —— com.microsoft.azure.storage.blob
网上azure的资料较少,尤其是API,全是英文的,中文资料更是少之又少.这次由于公司项目需要使用Azure,所以对Azure的一些学习心得做下笔记,文中不正确地方请大家指正. Azure Blob ...
- 初码-Azure系列-文章目录
系统迁移 初码-Azure系列-记一次MySQL数据库向Azure的迁移 初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考 初码-Azure系列-记一次从阿里云到Azure的迁移和 ...
- 初码-Azure系列-记一次MySQL数据库向Azure的迁移
初码Azure系列文章目录 还在继续给客户迁移不同的系统到Azure,这一次是一个系统的MySQL数据库要迁移,将迁移过程记录一下 原系统环境 数据库版本:MySQL Community Editio ...
- 初码-Azure系列-记一次从阿里云到Azure的迁移和部署
有个客户在阿里云上,这次要迁移到Azure去,手工记一下流水账 原系统信息: 阿里云ECS单Web节点(8核16G,10000IOPS SSD云盘)+阿里云ECS单数据库节点(16核32G,15000 ...
- 初码-Azure系列-如何在控制面板中选择中文版操作系统
之前在文章<初码-Azure系列-记一次从阿里云到Azure的迁移和部署>中说到,默认的Windows Server 2016操作系统是英文版,后来摸索出中文版的方法,如下:
- 初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)
初码Azure系列文章目录 将消息队列技术模型简化,并打造成更适合互联网+与敏捷开发的云服务模式,好像已经是行业趋势,阿里云也在推荐使用消息服务(HTTP协议为主)而来替代消息队列(TCP协议.MQT ...
- 【初码干货】【Azure系列】1、再次感受Azure,体验Windows Server 2016并部署BlogEngine.NET
上个月末,在某人的建议下,重新注册了一个1元试用账户(包含1个月期限的1500元订阅),并充值了1000元转为了正式账户,相当于1000元得到了2500的订阅,于是又一次开启了Azure之旅. 在这不 ...
- Azure上A/D系列虚拟机到DS系列迁移(1)
有一些用户在刚开始的时候创建了A7,D14等虚拟机来跑一些IO要求比较高的应用,比如Oracle数据库,MySQL数据库,等到用户量上来之后,性能不够,需要升级数据磁盘到SSD固态硬盘,但是问题是: ...
- 【初码干货】在Window Server 2016中使用Web Deploy方式发布.NET Web应用的重新梳理
在学习和工作的过程中,发现很多同事.朋友,在做.NET Web应用发布的时候,依然在走 生成-复制到服务器 这样的方式,稍微高级一点的,就是先发布到本地,再上传到服务器 这种方式不仅效率低下,而且不易 ...
随机推荐
- Android多渠道打包
项目需要,简单2步实现(由于简单,所以对大量渠道打包不是最优的),比如1000个渠道同时打包的话可能花费的时间会过长.不过目前该方法能满足绝大需求了...根据截图一步一步走: 第一步 设置配置清单文件 ...
- Android 用 camera2 API 自定义相机
前言 笔者因为项目需要自定义相机,所以了解了一下 Android 关于 camera 这块的 API.Android SDK 21(LOLLIPOP) 开始已经弃用了之前的 Camera 类,提供了 ...
- Win7+CentOS双系统(一)
注意:1.由于涉及到对硬盘操作,请妥善备份数据,避免损失. 2.为了达到每个步骤都有图片覆盖,我使用了虚拟机来进行测试,不过请大家放心,我已经在自己的物理机上成功实现了. 3.我的步骤是绝对正确和缺一 ...
- iterable
iterable 阅读: 148111 遍历Array可以采用下标循环,遍历Map和Set就无法使用下标.为了统一集合类型,ES6标准引入了新的iterable类型,Array.Map和Set都属于i ...
- Nmap功能与常用命令
Nmap功能与常用命令 其基本功能有三个,一是探测一组主机是否在线:其次是扫描主机端口,嗅探所提供的网络服务:还可以推断主机所用的操作系统. Nmap可用于扫描仅有两个节点的LAN,直至500个节点以 ...
- 根据GPS经纬度判断当前所属的市区
这个事情分两步走 1. 拿到行政区划的地理围栏数据 2. 根据GPS定位判断一个点是否落在地理围栏的多边形区域里. 1. 获取行政区划的地理围栏数据可以利用百度API.打开以前我的一个例子在chrom ...
- Html5浏览器支持
HTML5 浏览器支持 把 HTML5 元素定义为块级元素 语义块级displayblock实例 header, section, footer, aside, nav, main, article, ...
- ZJOI2017 day1滚粗记
这几天去温州作为外省选手参加了$ZJOI day1$.打了几天的酱油,考试也滚粗了.. $day -2$ 中午从学校出发,坐飞机去温州.到了温州以后吃完晚饭就回宾馆.把一直想做的糖果公园做完了以后就堕 ...
- bzoj2884 albus就是要第一个出场
Description 已知一个长度为n的正整数序列A(下标从1开始), 令 S = { x | 1 <= x <= n }, S 的幂集2^S定义为S 所有子集构成的集合.定义映射 f ...
- Postmark介绍
一. 引言 Postmark是由著名的NAS提供商NetApp开发,用来测试其产品的后端存储性能. Postmark主要用于测试文件系统在邮件系统或电子商务系统中性能,这类应用的特点是:需要频繁.大量 ...