当前位置: 首页 > news >正文

Azure设计模式之网关路由模式

网关路由模式


使用单个端点将请求路由到多个服务。当希望在单个端点上公开多个服务并路由请求到相应服务时,此模式非常有用。


问题背景
当客户端需要使用多个服务时,为每个服务分别设置一个端点并让客户端管理每个端点的访问会很复杂。例如,电商应用可能会提供如搜索、审阅、购物车、结帐和订单历史等服务。每个服务都有一个与客户端交互的API,客户端必须知道具体端点(地址)才能连接到服务。如果API发生变化,客户端也必须随之更新。如果将服务重构为两个或多个单独的服务,则必须同时改服务和客户端的代码。


解决方案
在一组应用程序、服务前面放置一个网关。在应用程序层将请求路由到相关实例节点。


使用此模式时,客户端应用程序只需了解并与某端点通信。如果服务被整合或分解,则客户端并不一定需要更新。它可以继续向网关发出请求,只需要改路由。


网关还能帮助从客户端抽象出后端服务,使得网关后面的后端服务被更改的同时保持客户端调用的简单性。客户端调用可以被路由到处理客户端行为的任何服务,即在不更改客户端的情况下在网关后面进行添加、拆分和重组服务。



该模式还能够通过管理更新来简化部署。当部署新版本服务时,可以与现有版本并行部署。有了路由,就可以控制向客户端提供的服务版本,从而可以灵活地使用各种发布策略,无论是增量、并行还是完全更新。部署新服务后发现任何问题都可以通过在网关进行配置更改来快速还原,而不会影响到客户端。


问题和注意事项
网关服务可能会引入单点故障。需要在设计时考虑到可用性要求。在实现时,也要考虑恢复和容错能力。
网关服务可能会成为瓶颈。确保网关具有足够的性能来处理负载,并可以随压力增长自行扩展。
对网关执行负载测试,以确保不为服务带来级联失败。
网关的路由级别是7。在IP、端口、报头或 URL之上。


何时使用此模式
在以下情况下可使用此模式:
客户端需要访问多个服务,可将其部署在网关后方。
希望使用单个端点来简化客户端应用程序的调用。
需要将来自外部寻址端点的请求路由到内部虚拟端点, 例如将VM上的端口暴露为集群的虚拟IP地址。
当应用只使用了一个或两个服务时, 此模式可能不合适。


例子
本例使用Nginx作为路由器,下面是一个服务器的配置文件,它将在不同虚拟目录中应用程序的请求路由到不同计算机。


server {
    listen 80;
    server_name domain.com;


    location /app1 {
        proxy_pass http://10.0.3.10:80;
    }


    location /app2 {
        proxy_pass http://10.0.3.20:80;
    }


    location /app3 {
        proxy_pass http://10.0.3.30:80;
    }
}

相关阅读
为前端创建专门的后端服务(https://docs.microsoft.com/en-us/azure/architecture/patterns/backends-for-frontends)
网关聚合模式( https://docs.microsoft.com/en-us/azure/architecture/patterns/gateway-aggregation)
网关卸载模式( https://docs.microsoft.com/en-us/azure/architecture/patterns/gateway-offloading)

相关文章:

  • Azure设计模式之端点监控模式
  • linux-2.6.26内核中ARM中断实现详解(3)
  • Azure设计模式之索引表
  • 你该如何填报高考志愿?
  • 网管师与网管员和 网络工程师的区别
  • Azure设计模式之领导者选举
  • 如何从零开始开发一款嵌入式产品(20年的嵌入式经验)
  • Azure设计模式之实例化视图
  • Azure设计模式之管道过滤器模式
  • 用系统函数获取当前季度
  • Azure设计模式之优先消息队列
  • Azure应用部署方式对比
  • BadImageFormatException or An attempt was made to load a program with an incorrect format
  • 获取中国标准时间(由美国官方时间折算)
  • C# 使用ExcelReader 上传excel
  • 【笔记】你不知道的JS读书笔记——Promise
  • Apache的80端口被占用以及访问时报错403
  • DOM的那些事
  • iOS编译提示和导航提示
  • Redux 中间件分析
  • SpingCloudBus整合RabbitMQ
  • Sublime text 3 3103 注册码
  • tensorflow学习笔记3——MNIST应用篇
  • Vue.js 移动端适配之 vw 解决方案
  • vue数据传递--我有特殊的实现技巧
  • ------- 计算机网络基础
  • 警报:线上事故之CountDownLatch的威力
  • 蓝海存储开关机注意事项总结
  • 浏览器缓存机制分析
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 如何借助 NoSQL 提高 JPA 应用性能
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (Oracle)SQL优化技巧(一):分页查询
  • (八)Spring源码解析:Spring MVC
  • (二)换源+apt-get基础配置+搜狗拼音
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (附源码)spring boot火车票售卖系统 毕业设计 211004
  • (六)Hibernate的二级缓存
  • (算法二)滑动窗口
  • (转) ns2/nam与nam实现相关的文件
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .NET DataGridView数据绑定说明
  • .net 提取注释生成API文档 帮助文档
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .NetCore Flurl.Http 升级到4.0后 https 无法建立SSL连接
  • .net操作Excel出错解决
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET上SQLite的连接
  • .net最好用的JSON类Newtonsoft.Json获取多级数据SelectToken
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [20140403]查询是否产生日志
  • [20150321]索引空块的问题.txt
  • [AutoSAR系列] 1.3 AutoSar 架构