概述:
本文描述的组合框架 SuperCI,是一个四层框架,包含 Controller、Business、Dao、View 层。Controller仅是一个路由控制器,Bussiness实现业务逻辑, Dao层与数据库打交道, 这里抽象了部分常用的Dao操作,以及加入以redis作为前置缓存,View层为视图层,支持 Redis 主从,以及在Core_Dao中封装了 Dao 的一些快速操作,包含对数据库的缓存代理。极大的提升了生产效率,并保证性能。
源码地址: https://download.youkuaiyun.com/download/caohao0591/10618566
背景:
我们自己的业务之前框架是基于CI框架写的,每天PV差不多10亿左右,设计接口达到500多个,如果全面改用其他框架,修改工作量将非常大,如何在不大规模修改业务代码的基础上让它性能更高成为我研究的方向。
越是简单的东西越是好的,基于此最近研究了PHP的各种框架, 有yaf, phalcon, CI框架,
1、其中Yaf 是PHP国内第一人写的纯C框架, 核心在于路由部分与类的加载功能, 可惜没有数据库ORM操作,极轻量级。
2、phalcon是国外非常火的一个框架,也是一个纯C框架,3.0之后由Zephir实现,非常重量级,过于臃肿,文档不太完善。
3、CI也是一个市场占有率非常高的框架,是纯PHP框架,适度轻量级,文档丰富,性能不及 Yaf 的 1/3。
先贴一个各个框架性能比:
依照上面的原理,我对项目进行了优化升级,在此基础上开发了一个新的轻量级组合框架(4层架构),命名为 SuperCI:
1、考虑之前做的项目都是CI框架,如果全部推翻,将会有超级多的东西需要修改,所以我将CI引擎替换,但是SuperCI对外提供的调用方式不变,
2、框架支持4层架构,Controller、Business、Dao、View 层。
3、首先我将CI框架的路由部分抽取出来, 替换成Yaf。
4、然后将CI的数据库ORM操作底层引擎替换成Phalcon, 然而这并不是一个全部的Phalcon, 而是将Phalcon所有其它模块全部删除,仅保留DB操作部分,重新编译之后生成的ORM引擎,替换到CI的数据库底层操作,相当于给五菱宏光装上了悍马的发动机,数据库操作性能能提升2倍。
5、代码模块分离,并加入自己写的模块、类库、配置加载类。
6、加入自己的日志记录类 Logger::get_instance("log_name"):
7、加入redis的通用实例化加载方法 Loader::redis("default");
8、替换 PHP 5 到 PHP 7 , 开启代码缓存opcache。
通过以上工作,CPU利用率提升5倍,内存使用大幅提升,响应时间降低到原来50%, 线上运行半年,稳定可靠,线上服务器使用减少2/3,框架极度轻量级, 越是简单的东西越是好的,不说了,上图上源码。
源码下载地址: https://download.youkuaiyun.com/download/caohao0591/10405303 ,包含源码和抽离出DB部分的Phalcon 。源码里面有简单Demo,包含最基本的框架骨架!
3月7日上线前后CPU占用率(1日-7日为0是正在部署)
3月7日上线前后内存空闲率
接口响应速度
框架介绍
运行环境: PHP 7 / PHP 5, opcache
依赖扩展: yaf.so , phalcon.so
注意:官网的phalcon, 在PHP7下,由于phalcon的一个数据库绑定导致的 opcache 会和 phalcon冲突,导致两个不能同时用, 两者都是提升性能的利器,尤其 Opcache,能提升1倍性能, 请用我提供的源码中的tool/phalcon的源码重新编译生成 phalcon.so,这里的源码去掉了phalcon除了数据库DB操作以外的所有功能,而且解决了与opcache冲突的问题。
如果是PHP5需要到phalcon官网去下载扩展。
代码结构:
配置文件:
superci/conf/application.ini
我们看看路由配置部分:
;自定义路由, 顺序很重要
routes.regex.type="regex"
routes.regex.match="