文档章节

#技术分享# 我所理解的【微服务】中的【网关】之001篇

边缘行者
 边缘行者
发布于 12/03 19:20
字数 1848
阅读 21
收藏 0

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

     “面对微服务时代”,感觉自己有点无所适从,仿佛一夜之间一切都需要微服务化,没有微服务的架构简直项目简直不值得去讲,言必称“微服务”行业的老大 Spring Cloud、以及前几年比较流行的 Ali 的 dubbo 框架。算是目前主流的两大微服务框架,目前SpringCloud 占据了主导地位,毕竟有专业的团队打理,而且可以与Spring家族系列更好的集成,逐渐成为了微服务框架的主力。

      我们先忽略框架本身带给我们的限制,单纯的从【微服务】自身出发, 治理上存在哪些难点,为何要引入微服务【网关】的概念,并且把它独立为微服务中一个重要的【支撑域】,它在整个体系架构中,充当了什么样的角色....本章节内容是我对微服务业务本身的思考,不涉及具体的框架,所以......见仁见智读者自己揣摩。刨析问题我采用的是基于DDD的思维模式,DDD是一套分析分析问题方法论之一(搞的如同哲学似的.....),接下来的篇章,我们围绕【微服务网关】的开展阐述,以及他所解决的问题:

      1、目前的【微服务】普遍采用Restful 风格对外发布服务,这就带来一个问题有待解决:每个微服务模块的启动需要监听一个给定的IP+端口地址,随着【微服务】模块的增加,监听的IP+端口 也会成线性增长,完成一个业务逻辑的处理有时候不是一个模块能搞定的,可能先后要调用很多个模块,每个模块都需要指导其他依赖模块的IP+端口,显然这样的治理成本会很高,故 这里引入 【微服务网关】的第一个功能点:充当Http代理的功能,类似设计模式上的 调停者模式,所有请求都发给他,由他在决定发送的实际地址是什么,所有【微服务】模块都基于网关模式来协作,效率的确提高很多,就算遇到某个【微服务】的重新部署,也只要动态修改 网关配置即可。

     1.1 【微服务网关】既然有HTTP代理的功能,那么他应该具备代理的一些特性,例如  故障转移 抑或 负载均衡, 系统在运行的过程中如果某个【微服务】的运算量比较大,消耗的CPU内存资源过高,需要把该服务进行独立多点部署,说白了就是把单点【微服务】 部署为多点【微服务】 以量多取胜,用于缓解大量请求下的负载处理,但是对于调用者而言,他只知道【微服务网关】,有【网关】来自动分配该请求到底应该发给那个处理。

     1.2 目前的主流网关都待主动注册功能,把自己的信息主动告诉给网关,协助网关完成其配置。 如果说Http代理是很多Http服务器已经标配的功能,但是自动注册功能,目前还不具备

   2、健康主动检测功能,大量的【微服务】模块分布在不同的服务器上,每个微服务的运行情况如何,则需要一个统一的管理平台,网关恰好成为充当这个角色的承载着,首先他指导并了解每个微服务的具体位置,每个微服务有自带一套标准的性能检测接口,定时被动与网关发生通信(可主动 可被动,类似TCP的心跳机制),完成健康状况的上报,例如 内存使用、CPU使用,IO操作等一些粗粒度的性能参数,如果设计到了 负载均衡的时候,这些参数就可以判断那个【微服务】模块可以接受更多的请求等。 我也是在做的过程中发现,需要监控,很有用也很有必要。发不后的健康问题,是我在做微服务模块的时候深刻体会到的。

   2.1  健康检测带来的一个附加功能就是 熔断机制的诞生,网关可以清晰的了解到,那个微服务状态欠佳,或者已经GameOver 了,网关就可提前预知,如果该节点是执行某个业务流程中的某一个环节,那么整个业务流程都需要被中止掉。这就是熔断,把异常的信息前置了,当业务复杂度上来后,这一点的存在也是至关重要的。

 3、限流机制,这也是网关功能,就是限制某个请求或者某一类请求的最大并发量,超过这个并发就就需要丢弃该请求,这样可以有效的保护业务【微服务】运行维持在一个较为合理的范围内,避免出现一些不必要的异常,最系统进行有效的防护。这一点在项目中也有尝试使用,仅仅是用来监控具体请求调用的次数,先写入Cache,在按照固定的频率把Cache的数据持久化到数据库,如果 间隔是 1s 或者 100ms 都可以的,该项是可配置项。

4、中断执行其他逻辑,网关需要在收到用户的业务请求之后,保持当前的请求,自己在完成其他的请求,之后在执行之前的请求继续,这一点使用比较多的用来做鉴权以及用户登录认证。当一个用户请求业务时,网关拦截到请求后,先从请求头拿到Token值,先对Token值进行验证,通过的情况下,在完成其业务逻辑的其他部分。这个过程必须要轻量化........,期间还可以有其他的一些拦截,也可以通过 Sevlte-filter 完成....

5、流程装配能力:完成一个业务逻辑的处理可能先后要调用不同的逻辑模块完成,这个业务逻辑过程的调用依赖应该在 这一层完成装配,同时也配合熔断机制完成熔断的监听。 这些配置项都应该时灵活配置可热加载。

        上述只是从理论上来论述【微服务网关】的一些特点,他与Http代理还是有很大区别的。也是本人对 微服务网关 的一些理解。。。 毕竟我也在学习中~~~ZUUL 目前时一个不错的网关实现。

     网关如此重要,单点故障一定要避免的,这时需要在网关外层增加一个 http的代理,再来一次LB的解析,分解单点故障能力~~~~

 

 

 

 

 

 

© 著作权归作者所有

边缘行者
粉丝 77
博文 75
码字总数 143571
作品 0
广州
技术主管
私信 提问
【微服务】之七:轻松搞定SpringCloud微服务-API权限控制

【微服务】之七:轻松搞定SpringCloud微服务-API权限控制 Harries Blog™2017-12-210 阅读 httpSpringAppcatbeanAPIhttps 【微服务】轻松搞定SpringCloud微服务 目录 本系列为连载 文章 ,阅...

Harries Blog™
2017/12/21
0
0
脑残式网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

本文引用了“帅地”发表于公众号苦逼的码农的技术分享。 1、引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又...

JackJiang2011
2018/11/20
0
0
网络编程入门(六):什么是公网IP和内网IP?NAT转换又是什么鬼?

本文引用了“帅地”发表于公众号苦逼的码农的技术分享。 1、引言 搞网络通信应用开发的程序员,可能会经常听到外网IP(即互联网IP地址)和内网IP(即局域网IP地址),但他们的区别是什么?又...

首席大胸器
2018/11/20
167
0
Netty干货分享:京东京麦的生产级TCP网关技术实践总结

1、引言 京东的京麦商家后台2014年构建网关,从HTTP网关发展到TCP网关。在2016年重构完成基于Netty4.x+Protobuf3.x实现对接PC和App上下行通信的高可用、高性能、高稳定的TCP长连接网关。 早期...

JackJiang2011
2017/12/01
0
0
知乎技术分享:知乎千万级并发的高性能长连接网关技术实践

本文来自知乎官方技术团队的“知乎技术专栏”,感谢原作者faceair的无私分享。 1、引言 实时的响应总是让人兴奋的,就如你在微信里看到对方正在输入,如你在王者峡谷里一呼百应,如你们在直播...

首席大胸器
09/05
334
0

没有更多内容

加载失败,请刷新页面

加载更多

CrashReport

CrashReport.initCrashReport(getApplicationContext(), buglyID, false); https://bugly.qq.com/v2/ https://blog.csdn.net/Crystal_xing/article/details/86249373......

shzwork
10分钟前
2
0
OSChina 周日乱弹 —— 吃这个吮指原味小松鼠

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @这次装个文艺青年吧 :#今日歌曲推荐# 分享Sam Jonsson/Mattafix的单曲《Big City Life (Sam Jonsson Remix)》: 《Big City Life (Sam Jons...

小小编辑
今天
8
0
使用Docker部署第一个Springboot项目

创建springboot项目后pom文件添加 <packaging>jar</packaging> 双击package打包。 双击package即可,最后只要等待控制台输出SUCCESS即可。 我们会在项目中的target文件夹中到自己打包的jar。...

Ryub
今天
7
0
Spring Boot 中使用@DateTimeFormat和@JsonFormat注解

import com.fasterxml.jackson.annotation.JsonFormat;import lombok.Data;import lombok.experimental.Accessors;import org.springframework.format.annotation.DateTimeFormat;......

不再熬夜
昨天
6
0
Qt编写图片及视频TCP/UDP网络传输

一、前言 很多年前就做过类似的项目,无非就是将本地的图片上传到服务器,就这么简单,其实用http的post上传比较简单容易,无需自定义协议,直接设置好二进制数据即可,而采用TCP或者UDP通信...

飞扬青云
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部