前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >单体转向微服务架构-网关篇(一)

单体转向微服务架构-网关篇(一)

作者头像
小柒2012
发布2018-05-15 17:36:38
6000
发布2018-05-15 17:36:38
举报
文章被收录于专栏:IT笔记IT笔记

背景

如果我们打开天猫APP想购买一件商品,从搜索、商品展示、购物车、下单、支付、订单中心、物流详情等等一系列的功能,前台一气呵成,用户不需要关心后端到底做了什么,但是后端可能会调用不同的服务才能完成这一系列的操作需求。

如果客户端直接和微服务进行通信,会存在以下诸多问题:

  • 客户端会多次请求不同微服务,增加客户端的复杂性
  • 存在跨域请求,在一定场景下处理相对复杂(特别是分布式session认证)
  • 每一个微服务都需要独立认证逻辑、无疑增加了复杂度和重复工作
  • 难以重构,随着项目的迭代,可能需要重新划分微服务,如果客户端直接和微服务通信,那么重构会难以实施

网关

于是微服务网关应运而生,以上问题,都可以通过网关解决。网关是介于客户端和多个微服务的中间层,所有的客户端请求都会先经过网关,如下图所示:

API网关.png
API网关.png

Zuul介绍

Zuul是从设备和网站到Netflix流应用的后端的所有请求的前门。 作为边缘服务应用程序,Zuul旨在实现动态路由,监控,弹性和安全性。 它还可以根据需要将请求路由到多个Amazon Auto Scaling Groups。

Zuul使用一系列不同类型的过滤器,使我们能够快速灵活地将功能应用于我们的边缘服务。 这些过滤器可帮助我们执行以下功能:

  • 身份验证和安全 - 识别每个资源的身份验证要求,并拒绝不满足他们的请求。
  • 洞察和监测 - 跟踪边缘的有意义的数据和统计数据,以便我们准确地了解生产情况。
  • 动态路由 - 根据需要将请求动态路由到不同的后端集群。
  • 压力测试 - 逐渐增加到集群的流量,以衡量性能。
  • 负载分配 - 为每种类型的请求分配容量并删除超出限制的请求。
  • 静态响应处理 - 直接在边缘构建一些响应,而不是将它们转发到内部集群
  • 多区域弹性 - 跨AWS地区的路由请求,以使我们的ELB使用多样化,并使我们的边缘更接近我们的成员

编写Zuul微服务网关

maven依赖:

代码语言:javascript
复制
  <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
        <relativePath/>
  </parent>
  <dependencies>
     <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-zuul</artifactId>
     </dependency>
  </dependencies>
  <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>Edgware.SR3</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
  </dependencyManagement>

启动类:

代码语言:javascript
复制
/**
 * 网关服务 
 * 创建者 小柒2012 
 * 创建时间 2017年4月18日
 * linux 下 后台启动  nohup java -jar getway.jar &
 */
@SpringBootApplication
@EnableZuulProxy
public class ZuulApplication {
    private final static Logger logger = LoggerFactory.getLogger(ZuulApplication.class);

    public static void main(String[] args) throws Exception {
        SpringApplication.run(ZuulApplication.class, args);
        logger.info("ZuulProxy Start Success");
    }
}

配置application.properties:

代码语言:javascript
复制
server.port=9001
spring.application.name=itstyle_gateway

zuul.routes.api-pay-url.path=/pay/**
zuul.routes.api-pay-url.url=http://localhost:8080/

zuul.routes.api-user-url.path=/user/**
zuul.routes.api-user-url.url=http://localhost:8081/

zuul.routes.api-order-url.path=/order/**
zuul.routes.api-order-url.url=http://localhost:8082/

zuul.routes.api-shop-url.path=/shop/**
zuul.routes.api-shop-url.url=http://localhost:8083/

当然,以上应该是最简单的网关服务了,随着微服务的增多,我们不可能再去手动维护一个个路由配置,后面我们将会引入Eureka实现服务的注册发现。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 背景
  • 网关
  • Zuul介绍
  • 编写Zuul微服务网关
相关产品与服务
多因子身份认证
多因子身份认证(Multi-factor Authentication Service,MFAS)的目的是建立一个多层次的防御体系,通过结合两种或三种认证因子(基于记忆的/基于持有物的/基于生物特征的认证因子)验证访问者的身份,使系统或资源更加安全。攻击者即使破解单一因子(如口令、人脸),应用的安全依然可以得到保障。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档