注册用户享全站资源 并成为粉丝 不定时福利发放
 

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

2
发表时间:2018-11-08 13:49来源:Java帮帮-微信公众号


背景

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

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

  • 客户端会多次请求不同微服务,增加客户端的复杂性

  • 存在跨域请求,在一定场景下处理相对复杂(特别是分布式session认证)

  • 每一个微服务都需要独立认证逻辑、无疑增加了复杂度和重复工作

  • 难以重构,随着项目的迭代,可能需要重新划分微服务,如果客户端直接和微服务通信,那么重构会难以实施

网关

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

API网关.png


Zuul介绍

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

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

  • 身份验证和安全 - 识别每个资源的身份验证要求,并拒绝不满足他们的请求。

  • 洞察和监测 - 跟踪边缘的有意义的数据和统计数据,以便我们准确地了解生产情况。

  • 动态路由 - 根据需要将请求动态路由到不同的后端集群。

  • 压力测试 - 逐渐增加到集群的流量,以衡量性能。

  • 负载分配 - 为每种类型的请求分配容量并删除超出限制的请求。

  • 静态响应处理 - 直接在边缘构建一些响应,而不是将它们转发到内部集群

  • 多区域弹性 - 跨AWS地区的路由请求,以使我们的ELB使用多样化,并使我们的边缘更接近我们的成员

编写Zuul微服务网关

maven依赖:

<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>

启动类:

/** * 网关服务 * 创建时间 2017年4月18日 * linux 下 后台启动  nohup java -jar getway.jar & */@SpringBootApplication@EnableZuulProxypublicclassZuulApplication{        privatefinalstatic Logger logger = LoggerFactory.getLogger(ZuulApplication.class);        publicstaticvoidmain(String[] args)throws Exception {            SpringApplication.run(ZuulApplication.class, args);            logger.info("ZuulProxy Start Success");    }}

配置application.properties:

server.port=9001spring.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实现服务的注册发现。


会员登录

会员登录

登录免费下载全站资源

获取验证码
登录
登录
开发简历

开发简历

简历模板网站自取

入坑需谨慎

入坑需谨慎

高薪完全靠自己

微信赞助-Java帮帮社区

微信赞助-Java帮帮社区

非盈利性学习社区

支付宝赞助-Java帮帮社区

支付宝赞助-Java帮帮社区

将分享做到极致

大公司资讯
文章附图

近日,在美国推出满一年的Facebook视频服务Watch,宣布正式向全球推广,这预示着视频领域中,YouTube...

文章附图

据彭博社北京时间9月19日报道,科技行业最引人注目的法律大战可能正在进入尾声。据高通CEO史蒂夫·莫伦科夫(Ste...

Java帮帮公众号生态

Java帮帮公众号生态

总有一款适合你

Java帮帮-微信公众号

Java帮帮-微信公众号

将分享做到极致

Python帮帮-公众号

Python帮帮-公众号

人工智能,爬虫,学习教程

大数据驿站-微信公众号

大数据驿站-微信公众号

一起在数据中成长

九点编程-公众号

九点编程-公众号

深夜九点学编程

程序员服务区-公众号

程序员服务区-公众号

吃喝玩乐,听学吐画

Java帮帮学习群生态

Java帮帮学习群生态

总有一款能帮到你

Java学习群

Java学习群

与大牛一起交流

大数据学习群

大数据学习群

在数据中成长

九点编程学习群

九点编程学习群

深夜九点学编程

python学习群

python学习群

人工智能,爬虫

测试学习群

测试学习群

感受测试的魅力

Java帮帮生态承诺

Java帮帮生态承诺

一直坚守,不负重望

初心
勤俭
诚信
正义
分享
合作品牌 非盈利生态-优质内容分享传播者
关于我们
友链申请
友链交换:加帮主QQ2524138991 留言即可 24小时内答复  
全站内容非商业用途,内容来源于网友,并遵循 CC BY-NC 4.0 许可,如有异议请联系客服。
会员登录
获取验证码
登录
登录
我的资料
留言
回到顶部