使用php轻框架-lumen搭建api服务
之前负责为一个出行类的app构建micro-service架构的后端服务。其中负责php框架技术选型的一些问题。当时的背景如下:
【坑多】第一条业务线使用ci框架,发现会中很多坑,并且后续
一. 源起 之前负责为一个出行类的app构建micro-service架构的后端服务。其中负责php框架技术选型的一些问题。当时的背景如下: 【坑多】第一条业务线使用ci框架,发现会中很多坑,并且后续不容易维护(变量的作用范围)。 【性能不好】php作为主要的逻辑后端,性能上希望也有较高的保证。 【耦合重,不易扩展】当时调研了silex,slim,laravel等等,最终为了实现效率还是基于自己开发的轻量级框架完成了第一版。总结回忆当时的痛点 1)配置线上和线下多个版本的维护(需要来回切换,出现过上线后由于配置没有check到导致问题回滚的情况)2)mysql,memcache,log,redis的轮子都是自己造的,实际使用发现程序的健壮性不足 二. 遇见Laravel和Lumen 可能是由于c++后端的背景,之前在腾讯也是使用c++实现cgi来完成web服务。我理解上实现app后端API服务较好的框架应该是这样的 可以裁剪模块,以提升效率 更好的第三方软件的管理,类似于npm对于nodejs,pip对于python Laravel在国外的市场份额是第一,文档全面细致,但是在中国不太流行。 Lumen是Laravel的裁剪版本,为了获得性能上更好的收益。 lumen VS silex VS slim lumen VS laravel 并且,有了基于composer的laravel和lumen,我们就可以定制自己的第三方工具以来,比如: swoole, C扩展实现的PHP异步并行网络通信框架,可以重新定义PHP。过去PHP只能做Web项目,现在有了Swoole。任意服务器端程序都可以用PHP来写。swoole_framework,基于swoole扩展开发的一个开发框架php-webim,基于swoole实现的Web即时聊天工具,支持websocket+http comet长链接推送php轻框架,可以发送文字内容和图片workerman,类似swoole,不过是纯PHP实现的,官网有很多示例项目。底层功能比swoole少一些,但相对简单,应用层面的功能比swoole丰富。zephir,这个有点厉害,可以用近似PHP的一种中间代码写程序,然后自动转为C++,并作为扩展来运行。可以解决PHP语言密集计算性能差的问题。redis-async,基于swoole扩展写的异步redis客户端,压测起来性能跟Go语言之类的差不多 php好的轮子们 三. 主要模块使用说明 配置管理 lumen使用了.env文件来维护全局的最高优先级变量。变量取值.env中的优先级最高。() ,这个配置一般存放online的配置,在app/conf文件夹存放offline配置。并且,将.env添加到gitingore可以避免online正式环境的配置信息存放在代码中导致的安全风险 示例:读取$dotenv = new Dotenv\Dotenv(DIR);$dotenv->load();$s3_bucket = getenv('S3_BUCKET');$s3_bucket = $_ENV['S3_BUCKET'];$s3_bucket = $_SERVER['S3_BUCKET']; 数据库为了获得更好的执行效率,lumen默认使用了QueryBuilder而不是基于ORM的Eloquent来与数据库通讯。其原理是提供了构建sql语句的高级语法,类似的工具如:medoo 文件系统操作lumen支持本地文件和云存储的读写,通过配置即可切换。 lumen文件系统支持 cachelumen支持内存,文件,memcached,redis多种kv存储。 lumen cache服务 队列和计划任务一个很常见的需求就是:首次注册,希望一天后发一个提醒的消息来提升用户重复登录的行为。这个需求通过lumen可以很好的实现1)注册请求拼装好必要的job信息,填写delay时间(如:24小时)放入任务队列beanstalkd put job入队列 2)当job到达预定时间会进入ready队列,这时通过每分钟运行的计划任务可以执行对应的job任务(也可以使用linux自带的crontab实现) 计划任务 使用新的composer管理的第三方组件 lumen使用到的可选的组件列表 注意:在上线之前需要优化composer的autoloader composer dump-autoload --optimize不加这一选项,你可能会发现20%到25%的性能损失。 四. 参考资料 Laravel中文官网 Laravel英文官网 电子书《Easy Laravel 5》 互联网micro service架构 使用beanstalk搭建队列服务 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |