PHP进阶之路——亿级PV网站架构学习

最近,沉迷于在segmentfault上看大神们的技术直播讲堂,果然小白的世界看视频比看技术书更容易接受的多。听了周梦康大神的《PHP 进阶之路 - 亿级 pv 网站架构的技术细节与套路》,虽一时无法全部吸收和听懂,仍然打开了深入学习PHP的大门。现将讲座中提到的一些内容整理和细化,慢慢补充。

先以两句讲座中的提到的励志鸡汤开头,激励一下自己(^o^)/~:

  • 八小时之内决定现在,八小时之外决定未来,人与人的区别就在于八小时之外如何运用。
  • 一个好的程序员,要学会不停地学习和总结,而不是每天重复的做着相同的会的事。

    一、后端架构的套路

1、服务解耦,业务拆分

为什么要业务拆分?

  • 各个请求耗时不同,防止阻塞
  • 功能属性、登录启动冷数据、重组feed流,计算密集;上传文件I/O密集
  • 方便故障排查
  • 业务拆分,代码不一定拆分

服务之间,session通过redis共享

2、后端架构常见套路

  • 负载均衡
  • 动静分离
  • 读写分离
  • 缓存
  • 分布式
    后端架构

扩展:cdn切片

什么是集群?什么是分布式?分布式和集群有什么区别?

  • 分布式:一个业务分拆多个子业务,部署在不同的服务器上
  • 集群:同一个业务,部署在多个服务器上
  • 集群是个物理形态,分布式是个工作方式。
  • 只要是一堆机器,就可以叫集群
  • 分布式将任务放在多个物理隔离的节点上进行
  • 分布式中各个子节点互不通信,统一受管控中心管理调度
  • 分布式管控中心指定路由、负载均衡,发现并踢出故障设备,方便扩容

实现一个分布式数据库

  • 一个数据库
    一个数据库
  • 多个数据库
    多个数据库
    多个数据库

php函数 sys_getloadavg + redis 来实现负载的动态分配

1
uptime|awk '{print $10,$11,$12}'|awk -F',' '{print $1}' 也可以打印出负载

面试题:如何保证读写分离

  • SQL语句的预处理,关键字判断:如果是insert、update、delete就是写,如果是select就是读(代码层面)
  • 账号权限设置方面:从库只拥有读权限

面试题:数据库服务器负载高,如何排查如何解决?

show processlist 能看到当前的线程数

杀死阻塞的操作:

1
mysql -uroot -e "show processlist;" |grep -i 'delete'|awk '{printf "mysql -uroot -e \"kill %d;\"",$1}'|sh

事后记得检查分析mysql慢日志

二、架构和性能优化的核心(分)

架构和性能优化的核心

扩展:

  1. 雅虎军规29条

  2. Nosql(not only sql)

  • 现在主流的NoSQL数据库有BigTable、Hbase、Cassandra、SimpleDB、CouchDB、MongoDB和Redis等。
  • sql:关系型数据库,Nosql:非关系型数据库
  • mysql:多线程,redis:单线程

三、服务治理(分)

1、为什么需要服务治理

我们坐在高高的谷堆上面听康哥讲 - 服务治理

服务治理

2、服务治理的原理

服务治理原理

订单系统,就是服务的提供者。用订单系统的是服务的消费者。

3、服务治理的核心之一 RPC

什么是RPC?

RPC (Remote Procedure Call)是一个计算机通信协议,该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而程序员无需额外地为这个交互作用编程。RPC是一个分布式计算的CS模式,总是由Client向Server发出一个执行若干过程请求,Server接受请求,使用客户端提供的参数,计算完成之后将结果返回给客户端。RPC的协议有很多,比如最早的CORBA,Java RMI,Web Service的RPC风格,Hessian,Thrift,甚至Rest API。

四、日志的收集与分析

1、日志的分类

日志

2、日志平台

  • 使用logstash+elasticsearch+kibana快速搭建日志平台
  • sentry

面试题:从nginx日志中找出请求耗时最长的100条请求?
耗时最长

五、完善的监控系统

1、监控系统

2、需要监控哪些数据?

  • 系统层:CPU、内存、负载、网卡、I/O 等
  • 应用层:QPS(Query Per Second)、api 响应时长 、redis 内存使用量、队列任务数、php-fpm进程数、mysql 线程数
  • 健康巡查:dns 解析、ip 是否访问、硬盘、各种基础服务

六、分布式计划任务

1、分布式计划任务的实现

分布式计划任务

2、为什么这么多计划任务服务

  • 让一台服务器有多个用处,如主用途是 lvs 的备用机、图片存储服务器。
  • 要因为是后台运行就完全不考虑性能, 如查询不带条件,要注意内存消耗。

3、怎么保证执行单一入口的文件里面的任务列表是非阻塞的

  • popen(管道),不要用fread 来接收返回的数据

七、性能的压测

1、要看响应事件

您的支持将鼓励我继续创作~