PHP高级技能php面试题

基于swoole的php源码包升级原理实现

2018-12-11  本文已影响52人  AISpider

场景:假设一个员工管理系统项目有如下功能

项目的要求很简单,也很现实:第一个版本只要员工考勤和员工请假管理,出来后立即发布。当很多企业下载了该版本的员工管理系统,发现功能不齐,要求系统应该增加后面的功能。于是就有了版本升级。

当有新的版本(含了新功能薪资查询,报表统计等)如何才能做好版本的升级呢?

这里推荐用户一键升级的方式来升级项目,操作简单,就像桌面软件一样,发现有新的版本,点击更新,不用做任何操作就会升级到最新版本。

如何实现一键升级?

这里推荐swoole搭建一个websocket服务,来实现前端交互。整体设计流程如下图所示:


升级流程
主要文件如下:

version(文件)
db/(数据库目录)
db/userdb.sql(上传过程中产生的备份的用户数据)
upgrade.php (当前项目主升级文件)
...//其他项目文件
down/db/sys.sql (最新数据库结构,以及系统数据文件)
down/upgrade.php (上传包解压后的主升级文件)
down/(升级,上传压缩文件目录)
down/version
down/.. 其他文件

主要流程:
更好的升级办法

上传压缩包可以做成到云上自动下载。这样可以实现真正的一键升级,也可以避免因为上传错压缩包导致系统瘫痪的风向。

为什么要热重启?

也许,之前的upgrade.php文件并不完善,但是每次我们项目的upgrade.php文件是通过swoole运行在内存中,只要进程不断开,替换或者删除项目下的upgrade.php文件,原来的upgrade.php依旧正常运行。当upgrade.php升级逻辑做了改变的时候,怎样才能实现运行的是上传上去新版本的upgrade.php呢?
swoole官网提供了热重启功能。当热重启完成后,再次进入websocket接口,运行的便是最新上传的升级文件。

用户数据和系统数据

用户数据指的是用户产生的数据,比如该项目中的用户信息。系统数据指的是系统控制的数据,比如所有的员工类型。
升级数据库最好的办法就是 将数据表结构和系统数据升级到最新,然后导入原来的用户数据。


文档结束!
不懂可以加qq:1186969412 qq群:536633782
官网:http://uminicmf.com/


php在线面试题集:http://cainiaophp.com/
php面试讨论群:536633782

上一篇 下一篇

猜你喜欢

热点阅读