PHP在2345的业务实践 高旭 PHPCON2019

从一线业务开发的角度出发,通过业务需求的角度来介绍的各个场景下的技术架构分析和选型,PHP是如何在各个场景下扮演好最重要的角色,具体内容如下:

1、如何构建完善的统计分析系统
2、如何打造服务器和应用日志的全链路监控
3、项目中如何管控好代码的质量
4、高并发场景下优化探索
5、实时消息推送场景处理方式
6、实时消息处理的处理探索

展开查看详情

1. | PHP在2345的业务实践 高旭

2.PHPCon PPT https://github.com/ThinkDevelopers/PHPConChina PPT PHPCon

3.关于我 • 高旭 • 10年服务端工作经验 • 主导多个项⽬从0到1的架构设计和功能开发 • 开源技术爱好者 • 目前就职于2345,担任PC业务服务端技术负责人

4. PHP在2345的业务实践 1 业务基础服务 2 业务风险管控 3 业务场景实践 4 业务中台升级

5.业务基础服务

6.案例Ⅰ 服务器实时监控 实时知晓服务器状态 实时查看各维度指标数据 监控指标异常⽴即通知负责人

7.部分监控指标

8.监控系统设计 PHP Client SDK MEM 负载 IO 流量 端口 进程 SWAP 磁盘 MySQL指标 FPM指标 QPS …… 监控中心Server Redis队列 PHP定时消费 RDD绘图 存档MySQL 机器管理 权限分配 资产管理 分组管理 监控报表 实时告警 机器信息 故障率分析

9.关键点 Client如何⾼效获取系统指标,及兼容各个操作系统版本 PHP进程如何保证常驻稳定运行 异常指标及时告警

10.案例Ⅱ 业务日志实时查看分析预警 及时发现恶意攻击 及时发现恶意刷量、异常IP 监控突发增长的PHP错误、Nginx错误 有详细的报警分析数据

11.监控指标模板

12.业务日志处理流程

13.每日数据情况 线上错误检测实时性 策略命中数据异常情况 1万+ 1分钟 20亿+ 4.5万 承载日志量条数 发现异常IP用户

14.业务风险管控

15.流程Ⅰ 代码开发和测试 内部自研PHP框架Octopus GitLab Merge Request检查,Code Review 使用APM监控提高开发质量 测试环境Jenkins自动化构建、集成Sonar 关键点的业务完善单元测试

16.流程Ⅱ 代码发布和运行 PHP disable_functions 配置禁止危险函数 eval编写PHP扩展进行禁用 禁止任何非发布系统上线代码 专人发布、危险代码必须审计 CodeSniffer 安装及每周代码规范周报

17.流程Ⅲ 业务线上部署 全面拥抱PHP7系列 Apache更换到Nginx、Linux系统升级 统一使用Utf8和Utf8mb4编码

18.流程Ⅳ 线上指纹监控 收集文件MD5 上报指纹平台 对比版本库代码 指纹报警

19.业务场景实践

20.Ⅰ、每日亿级数据实时处理

21.数据处理流程 1、数据接收 客户端产生日志后通过接口实时上传到服务器,服务器使 用OpenResty+Lua接受日志 2、数据生产 3、数据消费 接受日志进行简单的ETL处理后,将日志转发到Kafka集群 PHP使用常驻主进程+子进程的方式,对Kafka每个分区进 行数据读取,并根据制定的规则进行数据实时消费 4、结果存储 每个进程累计到一定数据量和时间阈值后写入到存储 MongoDB中

22.数据处理流程

23.关键问题 No. Issue Solve 001 实时数据处理的重跑考虑 PHP消费时对重要数据进行打点 002 为何选⽤Openresty进⾏数据发? Lua在业务简单、并发高下表现优异 003 如何保证消息不丢失? 针对生产者、消费者选用不同的策略方法

24.Ⅱ、千万级在线消息推送系统?

25.推送架构设计

26.TCP推送系统图

27.系统优化经验 ulimit设置 关闭 TCP ip_conntrack 开启TCP tcp_tw_reuse参数 每个单独的账号进行设置,ulimit -SHn lsmod | grep ip_conntrack 并进行关闭 sysctl -a | grep tcp_tw_reuse 确认是否关闭并设 1000000 置开启 关闭TCP tcp_tw_reclye参数 开启CoreDump 关闭虚拟内存 sysctl -a | grep tcp_tw_recycle 查询是否开启并 设置程序崩溃的dump记录, ulimit -c unlimited 设置/proc/sys/vm/swappiness,关闭虚拟内存 进行设置关闭

28.应用优化经验 使用多用户机制 进程采用Systemd托管 采用PACK打包协议 使用多用户的机制来突破swoole的100w的限制 系统所有服务采用systemd的方式进行托管 与客户端TCP交互的协议定义包头,减少传输的 内容 根据连接数负载均衡 服务代码支持平滑重启 采用MongoDB分片存储 根据swoole提供的用户连接数,http机组进行自 采用平滑重启的机制,并通过后台进行控制,可 用户数据存储采用Nosql的Mongodb数据库,并 动负载均衡,提高各机器的利用率 满足一些ABTest场景 使用了分片提高读写的效率

29.业务中台升级