企点微服务网关演进之路--郑榕@PHPCON2017

PHPConChina

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

企点微服务网关演进之路--郑榕@PHPCON2017

PHPCon2017 

文字内容
1. 企点微服务网关演进之路 郑榕
2. 郑榕(roman),腾讯后台高级工程师, 腾讯企点Web后台基础技术建设负责人。 十年C/C++开发,曾就职于大唐电信, 科达科技等通信领域公司,涉及音视频实时 通信,音视频存储,流媒体点播等方面。 两年PHP开发,喜欢折腾Nginx,PHP扩 展,Zend内核。
4. 5.安全控制 6.服务监控 3.动态路由 2.网关技术选型 1.初代架构 4.服务注册发现 7.整体回顾 未来规划
5. 初代架构 公司接入层 接入层 • 手动配置路由 • 集群难以管理 业务接入层 展现层 逻辑层 监控 业务逻辑层 数据访问层 数据层 DB Cache 日志 • 按大业务划分 • 手动注册服务 • 自我监控
6. 单体服务越来越大 代码量迅速膨胀 轻重不分离 功能越来越多 内部模块划分混乱 流量越来越大 读写不分离 服务负载不均衡 一个服务多人编写 服务又异常了 谁改了这个函数 是时候考虑微服务了 接口A扩容,接口B:关我啥事…… 接口性能时好时坏
7. 微服务主流架构
8. 网关技术选型 主流方案 考量因素 1 调用链 增加 2 技术栈 统一 3 特殊业 务场景 4 对接公 司服务
9. 网关技术选型 • 最美好的就在身边 • 高性能服务器的典范 • 资源占用少 • 稳定性极佳 • 灵活的扩展性 Why Not ? NGINX API网关
10. 聊聊 ProxyPass Location /test{ proxy_set_header Host testhost.com; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://testhost.com/$request_uri; } upstream testhost.com { ip_hash; server XX.XX.XX.XX:XXXXX;'>XX.XX.XX.XX:XXXXX; server XX.XX.XX.XX:XXXXX;'>XX.XX.XX.XX:XXXXX; }
11. 聊聊 ProxyPass 赖以成名的反向代理 优秀的性能 良好的协议兼容 极佳的稳定性 NGINX的精华 但是,我们要的是 动态路由……
12. 动态路由 • 重写反向代理吗? • 如果要,怎么做? • 使用upstream机制 • 什么是upstream? 客户端(NGINX的下游) 基于HTTP的 DownStream响应 HTTP请求 NGINX 其实…… 原生反向代理模块用 的也是upstream机制 基于TCP的 请求 基于TCP的 UpStream响应 后端服务器(NGINX的上游)
13. 动态路由 原生Proxy_module代码行数 5000+ 我们只要动态路由, 原生Proxy_module提供命令数 62个 真的要放弃原生Proxy_module吗…… 一个灵活可靠的反向代理不简单
14. 动态路由 • 先看个例子 • 好像有办法了…… Location /test{ proxy_pass http://10.1.1.1/$request_uri;'>http://10.1.1.1/$request_uri; proxy_set_header Host testhost.com; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_pass http://$qdrouter/$request_uri; proxy_pass http://10.1.1.1/$request_uri;'>http://10.1.1.1/$request_uri; }
15. 动态路由 • HTTP十一个处理阶段 HTTP_POST_READ_PHASE HTTP_SERVER_REWRITE_PHASE HTTP_FIND_CONFIG_PHASE HTTP_REWRITE_PHASE HTTP_POST_REWRITE_PHASE HTTP_PREACCESS_PHASE HTTP_ACCESS_PHASE HTTP_POST_ACCESS_PHASE HTTP_TRY_FILES_PHASE HTTP_CONTENT_PHASE HTTP_LOG_PHASE
16. 动态路由 REWRITE_PHASE HTTP_ROUTER_MODULE (自定义模块) CONTENT_PHASE HTTP_PROXY_MODULE (原生模块) ngx_http_add_variable ( qdrouter ) Location /{ proxy_pass http://$qdrouter/$request_uri; } • 优雅重用 • 事半功倍
17. 动态路由 • 终于可以尽情控制路由行为了 坐稳,出发了!
18. 5.安全控制 6.服务监控 3.动态路由 2.网关技术选型 1.初代架构 4.服务注册发现 7.整体回顾 未来规划
19. 服务注册发现 • SNAME->IP:PORT'>IP:PORT • SNAME->LBID • LBID->IP:PORT'>IP:PORT API GATEWAY NGINX 发现 ProxyPass 服务 注册 发现 注册 XXService
20. 不只是寻址 • 负载均衡算法 • 门限收缩算法 对接公司级路由决策系统 NGINX LBAPI • 宕机探测算法 LBRouteGet LBAGENT ProxyPass LBCENTER XXService 横向伸缩热更新
21. 性能优化 服务注册发现 • 路由表缓存 • 本地Agent同步 增量同步 REWRITE_PHASE RouterAgent ShmKV LBAPI
22. 安全控制 在线部分 数据旁路 离线部分 行为分析 Http转发 门神Server 是否恶意 规则下发 • 处理阶段前置 • 降级容错 • 站在巨人的肩膀 • 公司级服务门神 规则管理 安全专家
23. 安全控制 • 频控维度 UIN 鉴权中心 IP RID 频控后台服务 访问上报 拦截拉取 本地统计 本地 Agent • 统一鉴权 调用上报队列 拦截记录存储 共享 内存
24. 服务监控 上帝 视角 服务 画像 • 服务流量 • 服务质量 • 服务调用链 • 实时告警 • 大盘数据
25. 服务监控 • 日志阶段,天生的监控基因 • 对接公司平台 流量统计 HTTP_ROUTER_MODULE 性能统计 HTTP_PROXY_MODULE 数据旁路 LOG_PHASE 大盘分析 HTTP_MONITOR_MODULE 告警平台
26. 5.安全控制 6.服务监控 3.动态路由 2.网关技术选型 1.初代架构 4.服务注册发现 7.整体回顾 未来规划
27. 整体回顾 HTTP_MENSHEN_MODULE 鉴权 HTTP_QDAUTH_MODULE 服务发现 HTTP_ROUTER_MODULE 原生模块 HTTP_PROXY_MODULE 监控 HTTP_MONITOR_MODULE 门神 频控 HTTP_POST_READ_PHASE HTTP_REWRITE_PHASE 负载均衡 ProxyPass 报警 XXService HTTP_LOG_PHASE
28. 未来规划 工具集 开放平台 多协议 PHP嵌入
29. 腾讯Web后台开发 JOIN US! romanzheng@tencent.com