190 likes | 349 Views
A Brief Introduction of Kiwiphp. Qin Jianxiang, lead developer of kiwiphp Nov 2008, Beijing. 什么是 Kiwiphp. Kiwiphp 是一个有两年历史的快速开发框架,适用于门户 Web 应用开发,也适用于中小应用开发。 Kiwi fruit 是奇异果,也就是猕猴桃。我是生物技术专业毕业,喜欢用简单的植物名给我的项目或 IT 设备命名。我还有台服务器叫 lily ,有个 AMP 套件叫 Kiwi Internet Server Suit
E N D
A Brief Introduction of Kiwiphp Qin Jianxiang, lead developer of kiwiphp Nov 2008, Beijing
什么是Kiwiphp • Kiwiphp是一个有两年历史的快速开发框架,适用于门户Web应用开发,也适用于中小应用开发。 • Kiwifruit是奇异果,也就是猕猴桃。我是生物技术专业毕业,喜欢用简单的植物名给我的项目或IT设备命名。我还有台服务器叫lily,有个AMP套件叫Kiwi Internet Server Suit • Kiwiphp是雅虎生活服务和ECS在用的框架。
为什么不是Symfony • 雅虎生活服务业务最初是用ysymfony作为开发框架的,数据库抽象层使用kiwiphp的db组件。 • 今年7月底项目组所有开发人员讨论决定迁移到kiwiphp上。迁移和重构从9月开始,最终于11月10日成功上线,历时44个工作日(含加班)。 • 下面回答上个演讲中的问题:Why Not Symfony?
Symfony的优点 • 良好的架构 • 完全支持五层架构,CV之后是lib,model只是lib的一部分 • Controller层支持Proj/App/Module/Action的架构,使多个App可以共用lib • View层概念封装的很好 • Autoload • 功能组件丰富:i18n, AJAX, Form… • 兼容第三方组件
Symfony的不足之处 • 不够轻量级。自身代码复杂,使用者不容易改其代码来hack和debug。ORM复杂的令人望而生畏 • 学习成本高。潜规则多,不能充分利用使用者已有知识经验 • 开发效率低。开发环境需要rc(有同事发现了绕过rc的办法) • 不可靠。如:YAML,没有明显好处,麻烦不断。莫名其妙的问题时有发生。 • 性能损失大。
我们需要什么样的框架 • 通用要求 • 简洁 • 实用 • 高效 • 易用,充分利用使用者已有知识经验 • 雅虎特有的需求 • 架构上支持海量数据和访问量 • 某些组件(如数据库,缓存)支持分布式,高可用
我们为什么选择kiwiphp • Kiwiphp满足(或即将满足)上述要求 • Kiwiphp的作者在公司内部,可以快速响应使用者的需求和帮助调试
Kiwiphp的历史 • 2006.11 • 我写出第一版,名为kiwifx,用于我的公司(不是雅虎,当时我还不在雅虎)的垂直门户产品 • 2007.11 • 改名kiwiphp,正式开源。NCP的ECS/UAS/nShop采用kiwiphp开发 • 2008.3 • 315项目采用kiwiphp的数据库和验证器组件 • 2008.8 • 生活服务项目组决定全面迁移到kiwiphp • 2008.11 • kiwiphp 0.1发布,基于kiwiphp的化蝶项目上线,代码托管到googlecode,开发组扩招,百度,51,搜狐公司开发人员加入
KiwiphpCore介绍 • Kiwiphp核心由kiwi.php和core目录下的input.php, config.php三个文件组成,共9个类,14.9K • Kiwi core主要做这几件事: • 初始化项目系统变量(如项目根目录等),加载项目配置(在生产环境,将这些变量存入opcode cache) • 自动加载kiwiphp库文件和项目库文件(在生产环境会自动打包成一个大文件) • 若是MVC模式,调用dispatcher调度请求 • 存取opcode cache和打包成大文件是独立API,可供部署工具调用
Kiwiphp的扩展 • 关键扩展 • MVC:Dispatcher和Action, Component, View基类 • 数据库抽象层:分布式,主从复制,驱动可替换,使用Prepared Statements • Cache接口(计划中) • 搜索API(如iSearch, Lucene索引、查询接口,计划中) • 其他扩展 • Validator, Url, Pagination, Cookie, Logger, RSS…
基于Kiwi的项目架构 • 某博客托管系统(虚拟)的项目架构 • 目录结构
Kiwiphp的性能 • 执行最简单的任务(return true),kiwiphp是Symfony和Zend Framework的十倍以上,是CakePHP,CodeIgniter的五倍以上。测试详情
Kiwiphp支持的数据库架构 • 如图:网页版 • Node:节点。同一个Group下的节点数据结构都相同,数据不同。水平切分。一个Group至少要有一个节点。 • Host:每个Host都有一种角色:M/S。一个节点可以有1~N个Master,0~N个Slave • Schema:Schema是介于Database和Table之间的一种Namespace。Oracle,DB2和PostgreSQL支持这个概念 • Kiwiphp支持单机单库,单机多库,多机多库几种模式
Kiwiphp支持的数据库架构 • 前面虚拟出来的博客托管系统,刚上线可能只有两台数据库硬件,一主一从,几百个个节点都在同一台机器上,不同的节点仅仅是数据库名字不一样。 • 增加数据库服务器时,应用程序只需要改动一个配置文件,改变部分节点的主机地址,即可实现在线热扩容
Kiwiphp代码演示 • Hello World • 操作数据库 • 数据库扩容 • 自定义Action和View • 整合Zend Framework组件
Kiwiphp发展计划 • 写使用者文档。利用国内外社区的人气调动已有project member做贡献的积极性 • 完善扩展机制,写贡献者指南,鼓励更多贡献者提交组件 • 功能开发计划 • MVC组件加强,Action间转发功能 • 缓存组件 • 搜索引擎接口 • 部署工具,方便雅虎环境的项目部署
Thank you! <?php class ThankYouAction extends Action { publicfunctionexecute() { echo"Thank you!"; } }