SlideShare una empresa de Scribd logo
1 de 18
Descargar para leer sin conexión
1




Advanced PHP Programming



         chenchao01@baidu.com
PHP

•面向web开发
•Shared Nothing Architecture
•同步模型
•多进程模型
•弱类型,无所不能的array
Php所不能的

•不支持线程
•没有过多的编译优化
•没有太多的内存
•没太多的时间
•没太多的cpu
•有太多的框架也没太多的限制
怎么做?

•就是web开发
•做好模块拆分
•需要各种“服务”的配合
•管理好模块依赖
•隔离好同步/异步,在线/离线
•打好日志,做好监控,查好问题
•部署不要混乱
•关注性能
•合适的地方再找合适的东西来用
Web开发



        业务开发模式

         路由框架

         模板引擎
Web开发

•模板引擎
 –很多可选的
 –提高fe效率,方便rd/fe配合,xss漏洞
•路由框架
 –还是是很多可选的
 –KISS,理清楚路由框架跟模块之间的关系
•业务开发模式
 –每个人想怎么搞就怎么搞?
 –统一业务开发模式的必要性
模块拆分

•不同的业务划分为不同的模块
•粒度问题
 –减少分支开发,又要一个需求过来不至于修改
 太多的模块
服务

• 通用服务
 – 不局限于通用服务
• 划分为一个模块还是一个服务?
 – Fe在前端做处理,还是rd在后端处理
 – 性能,稳定性方面
 – e.g.,新首页的并行调度
• 模块内业务来实现,还是剥离出个服务?
 – 性能,稳定性,php是否适合做?
 – e.g.,新首页导航自动分类
• 做为一个lib还是作为一个服务?
 – 多大通用性?开发成本?
 – Memcached冗余,扩容
模块依赖

•分了这么多模块,需求的变化总是出乎意料?
 –模块之间必然会产生依赖
•怎么依赖
 –不能有直接的跨模块require
•怎么管理
 • 统一的RPC框架管理模块依赖
 • 交互日志,接口,client由框架支持
•RPC的实现上
 –http调用或是框架require
同步/异步,在线/离线

•系统/模块那么多,命令备份
 –提交通常是异步的
 –哪些异步,哪些同步?
 –e.g.,社区传统的cm/transfer模式
•总是有那么多慢查询,长耗时请求
 –能不能转化为离线的(离线算出来,crontab
  )
 –e.g.,榜单类,全局统一的数据(实时热点)
打好日志

• Logid
• 交互日志
  – Backendip,耗时,主要参数
• 哪些要打warning
  – Warning日志对应于异常逻辑
  – Warning日志不作为出错的强依据
• 哪些要打fatal
  – 逻辑执行不下去了,要打fatal
  – Fatal是出错的强依据
    • 一条fatal就意味着对用户一次500或者404
• 哪些抛Exception
  – 逻辑执行下去了再exception
  – 也就是一个exception对应于一条fatal
  – 在基础库上做个封装,统一catch exception
做好监控

•环境挂了要监控
 –监控webserver,php
•服务有问题要监控
 –错误日志监控,最好能有些自动聚合和去重
•问题追查
 –线下/沙盒复现
 –查日志,找异常
 –Core出来
部署

•部署同构
•所有的机器部署一模一样不管是目录结构
 还是模块
•及时这组机器不处理某些模块的请求,也
 可以部上去,保证所有的机器环境一模一
 样
关注性能

•   Php性能
    – Eacc/APC之类的opcode   cache
    – 自动加载的优化
•   代码性能
    – Php没有过多的编译优化
    – Rd需要关注代码性能
•   性能出问题的地方
    – 大部分时候都不是代码写的太烂
    – 查清楚db,后端服务等对php耗时的影响(就那么多cpu)
    – 代码结构的问题
•   发现
    – Xhprof
    – xdebug
•   优化
    – 优化代码结构,架构
    – 扩展化
合适的地方找合适的东西来用

•该用扩展的用扩展
•该用c的服务用c的服务
•该用离线的用离线的
•该用并行的用并行的
•不合适php的地方,换别的
模块/异步提交划分的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
并行调度,离线的case-新首页
Q&A

Más contenido relacionado

Similar a Advanced php programming

Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvementsXinchen Hui
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New翀 刘
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构drewz lin
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰Scourgen Hong
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维guiyingshenxia
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维colderboy17
 
大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京vanadies10
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列XiaoJun Hong
 
Redis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdfRedis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdfjaydenhu
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合Qiangning Hong
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808OpenCity Community
 
VMware zimbra email and collaboration for the post pc era
VMware zimbra email and collaboration for the post pc eraVMware zimbra email and collaboration for the post pc era
VMware zimbra email and collaboration for the post pc era零壹科技股份有限公司
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践Jackson Tian
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用hugo
 
微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)Xinchen Hui
 
章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务drewz lin
 
4.陈群-唯品会大规模Redis集群存储架构演进.pdf
4.陈群-唯品会大规模Redis集群存储架构演进.pdf4.陈群-唯品会大规模Redis集群存储架构演进.pdf
4.陈群-唯品会大规模Redis集群存储架构演进.pdfStevenShing
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)Will Huang
 

Similar a Advanced php programming (20)

Weibo lamp improvements
Weibo lamp improvementsWeibo lamp improvements
Weibo lamp improvements
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New美丽说的架构发展与变迁 New
美丽说的架构发展与变迁 New
 
大规模网站架构
大规模网站架构大规模网站架构
大规模网站架构
 
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
从林书豪到全明星 - 虎扑网技术架构如何化解流量高峰
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维
 
网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维网易 李弈远 网易服务集成框架的构建与运维
网易 李弈远 网易服务集成框架的构建与运维
 
大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京大型系统的Java中间件实践q con北京
大型系统的Java中间件实践q con北京
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 
分布式缓存与队列
分布式缓存与队列分布式缓存与队列
分布式缓存与队列
 
Redis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdfRedis在唯品会的应用实践.pdf
Redis在唯品会的应用实践.pdf
 
合久必分,分久必合
合久必分,分久必合合久必分,分久必合
合久必分,分久必合
 
Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808Pm 04 华胜天成openstack实践汇报-20120808
Pm 04 华胜天成openstack实践汇报-20120808
 
VMware zimbra email and collaboration for the post pc era
VMware zimbra email and collaboration for the post pc eraVMware zimbra email and collaboration for the post pc era
VMware zimbra email and collaboration for the post pc era
 
D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践D2_Node在淘宝的应用实践
D2_Node在淘宝的应用实践
 
lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用lua & ngx_lua 的介绍与应用
lua & ngx_lua 的介绍与应用
 
微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)微博Lamp性能优化之路(2014)
微博Lamp性能优化之路(2014)
 
章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务章文嵩:使用Lvs集群架设高可扩展的网络服务
章文嵩:使用Lvs集群架设高可扩展的网络服务
 
4.陈群-唯品会大规模Redis集群存储架构演进.pdf
4.陈群-唯品会大规模Redis集群存储架构演进.pdf4.陈群-唯品会大规模Redis集群存储架构演进.pdf
4.陈群-唯品会大规模Redis集群存储架构演进.pdf
 
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
使用 C#/Razor 開發互動式 WebAssembly 網站 (Modern Web 2018)
 

Advanced php programming