- 快召唤伙伴们来围观吧
- 微博 QQ QQ空间 贴吧
- 文档嵌入链接
- 复制
- 微信扫一扫分享
- 已成功复制到剪贴板
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 .业务中台升级