PHP在2345的业务实践 高旭 PHPCON2019

Cloudwu

2019/08/20 发布于 技术 分类

PHPConChina2019 

文字内容
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万+ 20亿+ 1分钟 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、数据生产 接受日志进行简单的ETL处理后,将日志转发到Kafka集群 4、结果存储 每个进程累计到一定数据量和时间阈值后写入到存储 MongoDB中 3、数据消费 PHP使用常驻主进程+子进程的方式,对Kafka每个分区进 行数据读取,并根据制定的规则进行数据实时消费
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 1000000 lsmod grep ip_conntrack 并进行关闭 sysctl -a grep tcp_tw_reuse 确认是否关闭并设 置开启 关闭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机组进行自 动负载均衡,提高各机器的利用率 采用平滑重启的机制,并通过后台进行控制,可 满足一些ABTest场景 用户数据存储采用Nosql的Mongodb数据库,并 使用了分片提高读写的效率
29. 业务中台升级
30. Ⅰ、基础业务功能服务化
31. 第1步:解耦,一切皆服务 IP地址库服务 中台用户画像服务 用户中心 支付中心 ……
32. 第2步:封装,做到开箱即用 内部Composer包达到60个,各个对接服务封装成Composer以 SDK方式提供,几行命令即可使用。
33. Ⅱ、构建PHP的持续交付系统
34. 持续交付流程图
35. PHP接入流程 禅道 流程 接入项目管理系统,也是后续所有 操作的集中平台 根据模板编写持续交付的整体流水线,需要哪 些组件、哪些流程 接入项目系统 项目Docker化 Jenkins流水线 部署 环境 Kubernetes 根据模板编写项目的DockerFile,将原项目转 移到Docker下运行 通过项目管理系统对K8S进行控制发布部署 到线上
36. 总结 业务基础服务 1、如何构建服务器的实时监控平台 2、业务日志如何进行分析并预警 业务场景实践 1、如何对数据进行实时处理 2、千万级在线用户的消息推送方案 业务风险管控 1、代码规避和检查 2、代码管理和发布 3、业务效率提升 4、线上代码实时监控 业务中台升级 1、业务功能服务化、解耦和封装 2、PHP业务的持续交付
37. 二三四五 A股首家互联网上市公司,基于互联网平台的一流 综合服务商,主要业务涵盖互联网业务和金融科技 业务,有各领域的技术大牛,公司内有丰富的培训 内容,良好的技术氛围。 网址导航 加速浏览器 2345天气王
38. PHPCON http://www.phpconchina.com PHPCon https://k.weidian.com/H3=4lVho PHPConChina 11643
39. THANK YOU