Your SlideShare is downloading. ×
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Advanced php programming
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Advanced php programming

3,727

Published on

0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,727
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
31
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 1Advanced PHP Programming chenchao01@baidu.com
  • 2. PHP•面向web开发•Shared Nothing Architecture•同步模型•多进程模型•弱类型,无所不能的array
  • 3. Php所不能的•不支持线程•没有过多的编译优化•没有太多的内存•没太多的时间•没太多的cpu•有太多的框架也没太多的限制
  • 4. 怎么做?•就是web开发•做好模块拆分•需要各种“服务”的配合•管理好模块依赖•隔离好同步/异步,在线/离线•打好日志,做好监控,查好问题•部署不要混乱•关注性能•合适的地方再找合适的东西来用
  • 5. Web开发 业务开发模式 路由框架 模板引擎
  • 6. Web开发•模板引擎 –很多可选的 –提高fe效率,方便rd/fe配合,xss漏洞•路由框架 –还是是很多可选的 –KISS,理清楚路由框架跟模块之间的关系•业务开发模式 –每个人想怎么搞就怎么搞? –统一业务开发模式的必要性
  • 7. 模块拆分•不同的业务划分为不同的模块•粒度问题 –减少分支开发,又要一个需求过来不至于修改 太多的模块
  • 8. 服务• 通用服务 – 不局限于通用服务• 划分为一个模块还是一个服务? – Fe在前端做处理,还是rd在后端处理 – 性能,稳定性方面 – e.g.,新首页的并行调度• 模块内业务来实现,还是剥离出个服务? – 性能,稳定性,php是否适合做? – e.g.,新首页导航自动分类• 做为一个lib还是作为一个服务? – 多大通用性?开发成本? – Memcached冗余,扩容
  • 9. 模块依赖•分了这么多模块,需求的变化总是出乎意料? –模块之间必然会产生依赖•怎么依赖 –不能有直接的跨模块require•怎么管理 • 统一的RPC框架管理模块依赖 • 交互日志,接口,client由框架支持•RPC的实现上 –http调用或是框架require
  • 10. 同步/异步,在线/离线•系统/模块那么多,命令备份 –提交通常是异步的 –哪些异步,哪些同步? –e.g.,社区传统的cm/transfer模式•总是有那么多慢查询,长耗时请求 –能不能转化为离线的(离线算出来,crontab ) –e.g.,榜单类,全局统一的数据(实时热点)
  • 11. 打好日志• Logid• 交互日志 – Backendip,耗时,主要参数• 哪些要打warning – Warning日志对应于异常逻辑 – Warning日志不作为出错的强依据• 哪些要打fatal – 逻辑执行不下去了,要打fatal – Fatal是出错的强依据 • 一条fatal就意味着对用户一次500或者404• 哪些抛Exception – 逻辑执行下去了再exception – 也就是一个exception对应于一条fatal – 在基础库上做个封装,统一catch exception
  • 12. 做好监控•环境挂了要监控 –监控webserver,php•服务有问题要监控 –错误日志监控,最好能有些自动聚合和去重•问题追查 –线下/沙盒复现 –查日志,找异常 –Core出来
  • 13. 部署•部署同构•所有的机器部署一模一样不管是目录结构 还是模块•及时这组机器不处理某些模块的请求,也 可以部上去,保证所有的机器环境一模一 样
  • 14. 关注性能• Php性能 – Eacc/APC之类的opcode cache – 自动加载的优化• 代码性能 – Php没有过多的编译优化 – Rd需要关注代码性能• 性能出问题的地方 – 大部分时候都不是代码写的太烂 – 查清楚db,后端服务等对php耗时的影响(就那么多cpu) – 代码结构的问题• 发现 – Xhprof – xdebug• 优化 – 优化代码结构,架构 – 扩展化
  • 15. 合适的地方找合适的东西来用•该用扩展的用扩展•该用c的服务用c的服务•该用离线的用离线的•该用并行的用并行的•不合适php的地方,换别的
  • 16. 模块/异步提交划分的case-baike user w/ Webserver1 guanxi/ webserver2 webserver2 webserver3 Rewrite规则分到指定app Rewrite规则分到指定app Rewrite规则分到指定app guanxi Search Relation Lemma Category RS Action Action Action PageService PageService PageService DataService DataService DataService DataService Dao Dao Dao CM Antisapm HttpProxy DB Pic Message MQ Transfer webserver4
  • 17. 并行调度,离线的case-新首页
  • 18. Q&A

×