advanced php programming

18
1 Advanced PHP Programming [email protected]

Upload: alpha86

Post on 13-Jun-2015

3.757 views

Category:

Documents


9 download

TRANSCRIPT

Page 1: Advanced php programming

1

Advanced PHP Programming

[email protected]

Page 2: Advanced php programming

PHP

•面向web开发

•Shared Nothing Architecture •同步模型

•多进程模型

•弱类型,无所不能的array

Page 3: Advanced php programming

Php所不能的

•不支持线程

•没有过多的编译优化

•没有太多的内存

•没太多的时间

•没太多的cpu

•有太多的框架也没太多的限制

Page 4: Advanced php programming

怎么做?

•就是web开发

•做好模块拆分

•需要各种“服务”的配合

•管理好模块依赖

•隔离好同步/异步,在线/离线

•打好日志,做好监控,查好问题

•部署不要混乱

•关注性能

•合适的地方再找合适的东西来用

Page 5: Advanced php programming

Web开发

业务开发模式

路由框架

模板引擎

Page 6: Advanced php programming

Web开发

•模板引擎

–很多可选的

–提高fe效率,方便rd/fe配合,xss漏洞

•路由框架

–还是是很多可选的

–KISS,理清楚路由框架跟模块之间的关系

•业务开发模式

–每个人想怎么搞就怎么搞?

–统一业务开发模式的必要性

Page 7: Advanced php programming

模块拆分

•不同的业务划分为不同的模块

•粒度问题

–减少分支开发,又要一个需求过来不至于修改太多的模块

Page 8: Advanced php programming

服务

•通用服务

–不局限于通用服务

•划分为一个模块还是一个服务?

–Fe在前端做处理,还是rd在后端处理

–性能,稳定性方面

–e.g.,新首页的并行调度

•模块内业务来实现,还是剥离出个服务?

–性能,稳定性,php是否适合做?

–e.g.,新首页导航自动分类

•做为一个lib还是作为一个服务?

–多大通用性?开发成本?

–Memcached冗余,扩容

Page 9: Advanced php programming

模块依赖

•分了这么多模块,需求的变化总是出乎意料?

–模块之间必然会产生依赖

•怎么依赖

–不能有直接的跨模块require

•怎么管理

•统一的RPC框架管理模块依赖

•交互日志,接口,client由框架支持

•RPC的实现上

–http调用或是框架require

Page 10: Advanced php programming

同步/异步,在线/离线

•系统/模块那么多,命令备份

–提交通常是异步的

–哪些异步,哪些同步?

–e.g.,社区传统的cm/transfer模式

•总是有那么多慢查询,长耗时请求

–能不能转化为离线的(离线算出来,crontab

–e.g.,榜单类,全局统一的数据(实时热点)

Page 11: Advanced php programming

打好日志

• Logid

• 交互日志

– Backendip,耗时,主要参数

• 哪些要打warning

– Warning日志对应于异常逻辑

– Warning日志不作为出错的强依据

• 哪些要打fatal

–逻辑执行不下去了,要打fatal

– Fatal是出错的强依据

•一条fatal就意味着对用户一次500或者404

• 哪些抛Exception

–逻辑执行下去了再exception

–也就是一个exception对应于一条fatal

–在基础库上做个封装,统一catch exception

Page 12: Advanced php programming

做好监控

•环境挂了要监控

–监控webserver,php

•服务有问题要监控

–错误日志监控,最好能有些自动聚合和去重

•问题追查

–线下/沙盒复现

–查日志,找异常

–Core出来

Page 13: Advanced php programming

部署

•部署同构

•所有的机器部署一模一样不管是目录结构还是模块

•及时这组机器不处理某些模块的请求,也可以部上去,保证所有的机器环境一模一样

Page 14: Advanced php programming

关注性能

• Php性能

– Eacc/APC之类的opcode cache

– 自动加载的优化

• 代码性能

– Php没有过多的编译优化

– Rd需要关注代码性能

• 性能出问题的地方

– 大部分时候都不是代码写的太烂

– 查清楚db,后端服务等对php耗时的影响(就那么多cpu)

– 代码结构的问题

• 发现

– Xhprof

– xdebug

• 优化

– 优化代码结构,架构

– 扩展化

Page 15: Advanced php programming

合适的地方找合适的东西来用

•该用扩展的用扩展

•该用c的服务用c的服务

•该用离线的用离线的

•该用并行的用并行的

•不合适php的地方,换别的

Page 16: Advanced php programming

模块/异步提交划分的case-baike

webserver2

Action

PageService

DataService

Dao

Rewrite规则分到指定app

RS

Action

PageService

Rewrite规则分到指定app

Webserver1

user

guanxi/

DataService

Dao

LemmaRelation Category

Rewrite规则分到指定app

Action

PageService

DataService

Dao

webserver3

guanxi

CM DBAntisapm Pic Message

webserver4

webserver2

w/

Search

HttpProxy

MQ Transfer

DataService

Page 17: Advanced php programming

并行调度,离线的case-新首页

Page 18: Advanced php programming

Q&A