前言

沉寂了一个周末,去思考自己的职业规划,想了很多。总起来说,还是努力,坚持自己的那份本心。希望大家也能够坚持本心,砥砺前行。

近来,在想着重构一个新的产品。准备采用微服务的技术解决方案,来搭建基础设施框架。网关,是一个必不可少的组件。那么,网关到底是什么?

其又有什么特点或者特性,成为微服务必不可少的组件呢?今天,我们就来探讨下这个问题。希望通过本文,大家能够明白,为何用。

演变过程

传统的单体技术架构,所有的内容,被打包进一个包内。为了保证,系统的稳定、安全,需要开发一些过滤器、拦截器,来实现对客户端请求的过滤与拦截,以及完成最终请求的转发。如下图所示

微服务技术解决方案下,同样需要为每个服务开发过滤器、拦截器来进行请求管理。但由于服务数量众多,同时,客户端形式多样化,如果在每个服务身上开发,将会造成很大的代码冗余与开发负担。因此,期待,将相同的一些功能,抽取到一个服务内实现,这便成为了一个组件,就是现在的网关。

网关存在的原因:

解决微服务技术架构下,请求管理功能

解决微服务技术架构下,多客户端的适配,采用单一入口,完成协议适配

网关的基本功能

微服务技术解决方案下的,网关,至少需要具备图示基本功能。

网关作为单点入口,完成统一的请求管理

免去客户端直接对接众多微服务的复杂性,采用单点入口,实现路由转发,从而实现服务调用

服务对于整个系统来讲,是不稳定的,那么网关,需要进行限流熔断,保持系统的稳定与分区容错性

对于服务调用的链路,网关有职责进行记录,日志监控,保证整个系统,在监控下工作

系统可能不仅仅是由自有客户端调用,很多时候,系统开放能力API给外部,因此网关需要安全认证,来保证安全

网关的高级应用

蓝绿部署

红绿部署,将新旧版本并存发布,为了解决发布时间问题。将流量导向新版本,如果生产没有问题,则去除老版本,如果有问题,快速切换到老版本。

采用网关,可以简易实现蓝绿部署。

开发者测试分支

开发者对于生产,有些时候需要进行一定的测试。因此采用网关,可以实现,流量导向,路由转发到测试分支内,完成测试。

埋点测试

埋点测试,用来进行特殊业务需求或者技术需求下的测试。提前埋好点,可以按照埋点,检查整个调用链路情况。采用网关,快速实现流量导向。路由转发至需要埋点的服务集群。

压力测试

使用集群中一个或一组服务作为压力测试服务。那么必然还是使用到网关的流量导向、路由转发功能

调试路由

生产上,不方便测试的,可以采用网关,进行导向测试路由。

金丝雀测试

金丝雀测试,用于测试流量的可行性。类似于蓝绿部署。

粘性金丝雀测试

有些场景下,是需要客户端进入同样的服务内。粘性金丝雀,就是将客户流量粘住,保证流量导向单一。

失败注入测试

人为的测试系统的安全与稳定,需要进行失败注入。那么采用网关,即可实现流量的导向。

降级测试

服务具有不稳定性,因此微服务中,常见系统测试涵盖了降级测试这个方面。网关很好的可以承担起该职责。

防爬防攻击

网关作为请求的入口,自然可以承担起流量的管控。

健康检查与坏点检测

网关同样会作为服务注册到服务发现注册中心,因此,可以作为健康检查与坏点检测的工具,采用自动断开等手段,保证系统的稳定与及时通知。

跨区高可用

网关部署集群、跨区,可以实现,地域流量导向。

推荐阅读

看完三件事

如果你觉得这篇内容对你还蛮有帮助,我想邀请你帮我三个小忙:

点赞,转发,有你们的 『点赞和评论』,才是我创造的动力。

关注公众号 『 Java斗帝 』,不定期分享原创知识。

同时可以期待后续文章ing

java网关详解_一篇让你彻底理解网关是什么的文章相关推荐

  1. java callable 详解_详解Java Callable接口实现多线程的方式

    在Java 1.5以前,创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.无论我们以怎样的形式实现多线程,都需要调用Thread类中的start方法去向操作系统请求 ...

  2. java executors 详解_线程池—Executors 详解

    各位志同道合的朋友们大家好,我是一个一直在一线互联网踩坑十余年的编码爱好者,现在将我们的各种经验以及架构实战分享出来,如果大家喜欢,就关注我,一起将技术学深学透,我会每一篇分享结束都会预告下一专题 线 ...

  3. java velocity详解_[velocity] velocity详解

    (1)为什么要使用模版语言? 在服务器端可以使用 Velocity处理模板和生成的动态内容(HTML.XML等).这和JSP技术的目标非常接近.但是,JSP模型可以毫无阻碍地访问底层的Servlet  ...

  4. iostat命令详解_对iostat输出结果的理解

    前言: 日常工作中,线上服务会出现各种奇奇怪怪的问题,每次出现问题都是根据现象猜测出现问题的原因,比如请求响应慢了,就排查整个请求的逻辑,每一步花了多少时间,分析半天终于发现是某一步慢了以后,在分析为 ...

  5. java 开发详解_面向接口编程详解-Java篇

    相信看到这篇文字的人已经不需要了解什么是接口了,我就不再过多的做介绍了,直接步入正题,接口测试如何编写.那么在这一篇里,我们用一个例子,让各位对这个重要的编程思想有个直观的印象.为充分考虑到初学者,所 ...

  6. java集合类详解_【Java入门提高篇】Day20 Java集合类详解(三)List接口

    今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...

  7. java容器详解_详解Java 容器(第①篇)——概览

    ![](http://img.blog.itpub.net/blog/2020/04/02/9d89d3008962c127.png?x-oss-process=style/bb) 容器主要包括 Co ...

  8. java unsafe 详解_死磕 java魔法类之Unsafe解析

    问题 (1)Unsafe是什么? (2)Unsafe具有哪些功能? (3)Unsafe为什么是不安全的? (4)怎么使用Unsafe? 简介 本章是java并发包专题的第一章,但是第一篇写的却不是ja ...

  9. java集合详解_「软帝学院」Java进阶者专栏:集合框架详解3

    软帝学院笔记Day14 集合框架(HashSet存储字符串并遍历) A:Set集合概述及特点 通过API查看即可 B:案例演示 HashSet存储字符串并遍历 HashSet hs = new Has ...

  10. java保留字详解_下列( )不是Java中的保留字?

    [论述题]You are required to write a note according to the information given below in Chinese. 假设你是 John ...

最新文章

  1. CNN模型 int8量化实现方式(二)
  2. php中四种webservice实现的简单架构方法及实例
  3. Django 使用 HttpResponse 返回 json 字符串显示 Unicode 编码
  4. c语言ox32左移一位的值,程序设计基础 (C)(32+32) 实验指导书.docx
  5. stm32c语言设计以及注释,13个基于STM32的经典项目设计实例,全套资料~-嵌入式系统-与非网...
  6. 怎么修剪_幸福树怎么修剪——武汉花卉租摆
  7. 前端rem单位的使用研究
  8. UBUNTU安装 SSH 服务
  9. ORACLE的Copy命令和create table,insert into的比较
  10. linux centos7 配置ftp,Linux Centos7配置ftp服务器
  11. 软件管理 --软件仓库的搭建
  12. r2游戏服务器网站,神秘揭晓《R2》公测服务器名称首度公布
  13. 固体火箭发动机零维内弹道方程组
  14. 我的 iPhone XS Max 终于装上了这款高逼格数字时钟,优秀不优秀?!
  15. 【翻译】Chromium 网络栈 disk cache 设计原理
  16. 《Real-Time Rendering》第四版学习笔记——Chapter 9 Physically Based Shading(二)
  17. 【Vue】解决 Vue 视图不刷新和组件循环引用不加载问题
  18. 最近进行的一次技术选型(工作流引擎)及相关知识介绍
  19. 前端Q知识体系梳理与面试准备直播回顾
  20. 时钟抖动(Clock Jitter)和时钟偏斜(Clock Skew)

热门文章

  1. 程序员社死瞬间3.0 ……
  2. python+FTP 批量上传文件
  3. 数据分析案例-大数据相关招聘岗位可视化分析
  4. 百度谷歌搜索引擎研究,如何做SEO优化?网站优化实操(程序员必看)
  5. Microsoft Visual SourceSafe的使用
  6. ietester不错
  7. java this逃逸_java 中的 this 逃逸
  8. 杭电数据结构课程实践-重言式判别
  9. android 网络 adb,Android设备通过网络adb 调试
  10. .net mysql参数化查询_MySQL参数化查询的IN 和 LIKE