项目
博客
文档
归档
资源链接
关于我
项目
博客
文档
归档
资源链接
关于我
47| 【高级篇幅】业务网关集群配置+海量请求下容器自动化扩容+外部服务
2024-09-21
·
·
原创
·
·
本文共 555个字,预计阅读需要 2分钟。
### 聚合访问入口网关-业务微服务升级 * 微服务不对外进行访问 * 通过网关对外是最终的入口 ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-09-21/8b3f3d85-fb06-44c8-ac0b-9b3080ff1cf8.png) * 操作 * 业务微服务不用配置端口,通过网关去寻找,结合注册中心 * rancher部署网关和对应的服务需要在同个网络里面才可以访问(先都在同个网络进行访问) * 和nacos可以分开不通的机器,但最好还是同个机房,性能才高 * 如果nacos在不同机房,注册中心里面的地址是服务的容器ip地址,网关也是可以识别的,因为网关和服务是同个网络 ### Nginx与业务网关gateway区别 * 有了gateway,为啥还需要nginx呢? 前端请求到gateway,gateway在转发到相应的业务微服务,为什么不可以直接从nginx转发到相应的业务中心,还要加多一层 ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-09-21/d866ef09-c771-418b-8e12-a718a864542a.png) * nginx和Spring Cloud Gateway在功能上是有一些重叠的地方,但是各司其职互相配合会更强大 * Spring Cloud Gateway层 * 可以认为是业务网关,针对SpringCloud体系专门推出,但是如果有其他服务不是用Cloud开发的怎么办? * 有部分复杂业务逻辑nginx解决不了,可以用gateway用java语言开发 * 容器部署微服务的ip地址一直在换,需要结合注册中心来使用,所以gateway更灵活 * Nginx * 关注的是协议和路由的转发,聚合入口方便配置管理 * 在性能、容错机制上比Gateway强,多语言多环境下兼容性更好 * 日志统计、协议路由转发、业务数据缓存前置、资源压缩等也是比较强大 * 配置HTTPS证书更灵活、Openresty+Lua开发各个强大的功能模块 * 例子:如何做一个动态黑名单控制 ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-09-21/64c09213-22fa-49b3-8548-11101a1f9c87.png) ### 线上容器化部署Nginx+阿里云域名解析映射 * rancher部署nginx的问题 > 有个问题:Rancher部署nginx+宿主机映射版本有兼容问题,后续再排查 * 使用Docker容器化部署也一样 ```dockerfile docker run --name nla-nginx -d -p 80:80 -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf nginx ``` * nginx.conf配置文件 * 配置域名解析 ### 网关Gateway集群部署+Nginx反向代理负载均衡配置 * Gateway启动多节点 * nginx配置gateway负载均衡 (内网ip) ```nginx upstream gateway { server 172.18.119.139:8889; server 172.18.119.139:8888; } server { listen 80; server_name nla.com; location / { proxy_pass http://gateway/; } } ``` * 申请https证书,配置https域名访问 https://xdclass.net/videoDetailsPage?id=56 ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-09-21/e687049a-8ddc-43ae-86db-acf998e5b356.png) ### **海量请求下-业务微服务集群-容器自动化缩容和扩容实战 * 什么业务容器的缩容和扩容 * 突发流量可以快速扩容 * 流量峰值过去可以快速缩容 * API -> WebHook -> Receiver Hooks ->名称/类型/操作(扩容/缩容)/目标服务/步长/最大最小数/ * WebHook介绍 * 钩子监听器,用于触发事件 * 思路 * 监控系统监听->接口RT、CPU、内存、IO 等负载 * 配置对应的阈值情况,超过最大阈值则进行扩容,恢复正常则缩容 * 最快且容易方式:nginx的访问日志:pv、uv、rt * 注意事项: * hook需要使用post方式请求 * 业务微服务端口不能写死,不然不知道扩容或者缩容使用哪个 * 最终都是通过网关进行访问对应的微服务 * 资源池需要足够多,一般互联网公司都有足够多的机器作为备用 * 补充:hook请求http响应码是200就是成功,如果非200,就是调用失败,可以超过最高或者最低节点数 ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-09-21/2336aaa7-df85-4896-a448-fb1f2fe8b511.png) ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-09-21/5216369d-8a19-4aa7-94e8-ceb62e6239bb.png) ### **高级技能-Rancher外部服务和解耦配置实战 部署在Rancher之外的服务想要整合进Rancher,通过添加一个外部服务的功能将它添加到Rancher集群 * 在应用上,通过 **添加服务** 旁边的下拉菜单按钮添加外部服务,选择 **外部服务** ![](https://yn-blog.oss-cn-chengdu.aliyuncs.com/v_2023/2024-09-21/9176edc6-9d59-4d32-b63b-281d637881af.png) * 微服务容器间通信的方式 * 方式一:不同主机间容器网络互通的话,直接使用升级应用 采用 ”服务链接“ 的方式 * 方式二:通过 外部服务 指定ip,微服务配置文件不用写死ip,通过 ”服务链接“ 的方式 举例:添加应用下分为两部分:Paas(基础设施:数据库/REDIS/MQ等) +Service(应用服务:nal-gateway/user...) - 进入Service应用服务下 -> 添加服务 ->添加外部服务 ->名称:nla-mysql-out,指向IP,添加目标IP, - 在nacos中配置服务对应的数据库地址时,可以使用这个名称: ```yaml url: jdbc:mysql://nla-mysql-out:3306/a_nla_user ``` ### 海量请求应对-Rancher部署Sentinel限流实战 **简介: Rancher部署Sentinel限流实战** * 部署Sentinel 镜像:bladex/sentinel-dashboard:latest * 配置文件修改