车轮Swoole微服务架构--韩天峰@PHPCON2017

Razor

2017/06/21 发布于 编程 分类

车轮Swoole微服务架构--韩天峰@PHPCON2017

PHPCon2017 

文字内容
1. 2017 车轮Swoole微服务架构 @hantianfeng Rango-韩天峰 / 车轮互联
2. 关于我 • 车轮互联总架构师 • PHP官方扩展开发组成员 • 微博:@hantianfeng • Github: https://github.com/matyhtf
3. 分享内容 一.Service通信框架 二.微服务架构 三.微服务公共组件
4. 01 Swoole 实现 Service 服务框架
5. 为什么要进行服务化治理(SOA)
6. 基于数据库表、Redis实现服务 1. 存储层未隔离,数据不可迁移调整,耦合性极高 2. 扩展性、可维护性极差
7. PHP代码(函数/类)实现服务 1. 客户端必须include/require一个文件 2. 代码修改必须通知所有业务方升级 3. 可能存在不同版本的兼容问题 4. 无法跨语言,不支持C++、Java等其他语言程序
8. HTTP+JSON的Web API 1. 解决了耦合问题,可以提供良好的服务隔离 2. 优点:目前最通用的服务治理方案 3. 缺点:a) Http不支持并发,b) 长连接支持差,c) 不 支持订阅与消息主动推送
9. 基于Swoole实现Service方案 1. 基于Swoole提供的包头+包体自动协议处理 2. Server/Client两端无需写任何底层代码 3. 支持单连接并发,客户端只需要与服务器建立一条连接 4. 支持php-fpm中使用TCP长连接,需要依赖swoole扩展 5. 自带Task进程池功能,可直接将慢速请求异步执行 6. 支持跨语言调用,C++、Java等其他语言程序也可以方便使用 7. Server/Client两端可以实现异步
10. REST 1. Domain:dns + host + port 2. Header 3. Cookie 4. Method:GET/POST/DELETE/PUT 5. Parameter:name=rango&value=test#stop 6. POST:form-data格式、urlencode格式
11. 微服务理念 1. 轻量:客户端、服务端无需额外工作即可运行 2. 简单:元素少,使用简单,无需培训,无需手册
12. 车轮微服务 服务名 接口名 参数 环境信息
13. 车轮微服务 :调用方
14. 车轮微服务 :串行调用
15. 车轮微服务 :并行调用
16. 车轮微服务 :提供方
20. 为什么不用Thrift、ProtoBuf 1. 优点:解包/打包性能好,IDL,自动生成多语言调用 代码,对静态语言友好 2. 缺点:服务提供者需要编写维护IDL文件,门槛较高, 不方便抓包调试
21. 运行环境 1. Server支持 Win/Mac(仅开发)、Linux (生产环境) 2. 服务提供方可以使用 Java、C++、GO 实现接口 3. PHP Client支持 stream、sockets、swoole 3种驱动 4. 支持语言客户端 Java、C++、Node.js、GO、Python
22. 02 Swoole 微服务架构
23. 服务发现 故障转移 集群管理 微服务 监控报警 负载均衡 调用统计
24. 配置中心 1. 每台服务器安装一个NodeAgent程序 2. 配置文件可以拉也可以推 3. 可以根据集群key得到机器列表
25. 服务发现 & 负载均衡 1. 服务器程序 onStart 时调用 curl http://config'>http://config_center/api/online 注册到集群,并设置为 在线 2. 终止运行脚本 php server.php stop 前调用 curl http://config'>http://config_center/api/offline 从集群中摘除 3. 配置中心收到节点变更时会主动推送新的机器列表到调用端 4. 基于客户端实现的权重+随机,选择不同的集群节点
26. KeepAlived守护进程 1. 每秒调用一次Service接口侦测集群每个节点是否可用 2. 发现节点无法访问,自动将此节点从Service集群中摘除 3. 发现节点重新可用时,自动将此节点加入Service集群 4. 配置中心发现有变更时,自动推送新配置到调用端
27. 统计与监控报警
28. 统计与监控报警
29. 统计与监控报警
30. 统计与监控报警
31. 服务注册
32. 服务注册
33. 进程调度 1. 基于 Supervisor 实现,机器启动时自动启动 Service 进程 2. 远程调度和扩容,在管理端增加新节点,通知 SuperVisor 启动 Service 进程 3. 断电重启,自动恢复全部服务
34. 基于发布系统自动部署 1. 发布代码后执行php server.php reload 2. Service程序会重启工作进程加载最新的代码
35. Swoole Compiler 1. 将PHP源码编译为二进制程序,保护源代码不被泄漏和修改 2. 通过发布系统发布二进制版本到线上集群 3. 无需opcache/apc即可运行
36. 03 基于 Swoole 开发 公共组件
37. StatsServer 1. 基于Swoole开发,日均处理100亿以上请求 2. UDP协议 3. Master -> Worker(x24) -> Task(x24) 4. Map-Reduce 5. cpp-swoole + protobuf 密集计算性能优化
38. NodeAgent 1. 部署到线上每台机器 2. 加密传输大文件(1G) 3. mcrypt扩展AES 128位加密 4. 收集机器节点信息 5. 发送reload信号到Server程序 6. 配置中心基于NodeAgent程序实现配置文件主动推送
39. MySQL-Proxy 2.0 1. 基于Swoole+PHP-X实现,完全实现MySQL协议 2. 客户端直接使用MySQLi/PDO长连接 3. 超高性能,比Kingshard(GO语言实现)性能高20% 4. 后端使用连接池可以有效减少MySQL服务器的连接数 5. 支持自动读写分离,支持事务处理 6. 管理端可统计SQL执行耗时、慢SQL、超大结果集请求 7. 管理端可实时配置数据库、用户、IP授权
40. MySQL协议(query请求) u 3字节长度 + 1字节packet_id + 1字节cmd + n字节SQL语句 u http://blog.csdn.net/wind520/article/details/43964821
41. MySQL协议(ResuleSet)
42. THANK YOU - 期待2018年再见- Q&A