《使用php轻框架-lumen搭建api服务》

一. 源起

从前负责为一个外出类的app打造micro-service架构的后端服务。其中负责php框架技术选型的一部分标题。当时的背景如下:

  1. 【坑多】第一条业务线使用ci框架,发现会中过多坑,并且继续不易于保险(变量的效应范围)。
  2. 【质量不佳】php作为重大的逻辑后端,品质上仰望也有较高的承保。
  3. 【耦合重,不易扩张】当时调研了silex,slim,laravel等等,最终为了兑现效用依旧基于自己开发的轻量级框架形成了第一版。计算回想当时的痛点
    1)配置线上和线下多少个本子的维护(要求来回切换,现身过上线后由于配备没有check到导致难点回滚的景况)
    2)mysql,memcache,log,redis的车轱辘都是友好造的,实际行使发现先后的健壮性不足

二. 遇见Laravel和Lumen

或是是出于c++后端的背景,以前在腾讯也是使用c++完结cgi来成功web服务。我驾驭上落到实处app后端API服务较好的框架应该是那样的

  1. 可以裁剪模块,以升级效用
  2. 更好的第三方软件的管理,类似于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长链接推送,可以发送文字内容和图纸
workerman,类似swoole,可是是纯PHP完结的,官网有诸多示范项目。底层功用比swoole少一些,但相对不难,应用范围的功效比swoole足够。
zephir,那么些略带厉害,可以用类似PHP的一种中间代码写程序,然后自动转为C++,并作为伸张来运作。可以缓解PHP语言密集总计品质差的题材。
redis-async皇冠直营现金网开户,,基于swoole扩大写的异步redis客户端,压测起来品质跟Go语言之类的几乎

php好的车轮们

三. 主要模块使用验证

  1. 配置管理
    lumen使用了.env文件来爱惜大局的万丈优先级变量。变量取值.env中的优先级最高。(https://github.com/vlucas/phpdotenv)
    ,那几个布局一般存放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’];

  1. 数据库
    为了得到更好的执行效能,lumen默许使用了QueryBuilder而不是基于ORM的Eloquent来与数据库通信。其原理是提供了创设sql语句的高级语法,类似的工具如:medoo

  2. 文件系统操作
    lumen扶助地方文件和云存储的读写,通过安插即可切换。

lumen文件系统支持
  1. cache
    lumen援救内存,文件,memcached,redis各样kv存储。
lumen cache服务
  1. 队列和安排义务
    一个很宽泛的须要就是:首次注册,希望一天后发一个提醒的音讯来提高用户重复登录的行为。
    其一必要通过lumen可以很好的兑现
    1)注册请求拼装好要求的job音信,填写delay时间(如:24钟头)放入职分队列beanstalkd
put job入队列



2)当job到达预定时间会进入ready队列,这时通过每分钟运行的计划任务可以执行对应的job任务(也可以使用linux自带的crontab实现)



计划任务
  1. 运用新的composer管住的第三方组件

    lumen使用到的可选的机件列表

留意:在上线此前需求优化composer的autoloader

composer dump-autoload –optimize
不加这一选项,你也许会发觉20%到25%的性质损失

四. 参考资料

  1. Laravel汉语官网
  2. Laravel英文官网
  3. 电子书《Easy Laravel
    5》
  4. 互联网micro service架构
  5. 选用beanstalk搭建队列服务

相关文章