您当前的位置:首页 > 电脑百科 > 程序开发 > 架构

一篇文章读懂微服务与网关技术

时间:2019-08-09 10:58:40  来源:  作者:

一. 背景

软件架构,总是在不断的演进中…

把时间退回到二十年之前,当时企业级领域研发主要推崇的还是 C/S 模式,PB、Delphi 这样的开发软件是企业应用开发的主流。随着时间不断的推移,基于浏览器的的 B/S 架构开始渐渐流行了起来。初期,Web 开发 ASP 还占据了不少优势,但 JSP 的预编译模式让性能有了很大的提升,随后基于 JAVA 语言的 J2EE 架构变的越来越流行。

早期软件架构基本都是单体架构,系统之间往往不需要进行交互,这也导致数据孤岛和 ETL 工具的发展。随着企业应用越来多,相互的关系也越来密切。应用之间也迫切需要进行实时交互访问,随后基于 XML 的异构系统集成和数据交互技术开始被很多公司采用,SOA 的概念被提了出来,web service 逐渐流行起来。

技术干货分享:一篇文章读懂微服务与网关技术

 

互联网时代,很多公司为了适应更加灵活的业务需求,基于 HTTP 协议和 Restful 的架构风格及简洁和结构清晰的 JSON 语言成为企业开发的最佳实践,在 SOA 架构中,企业服务总线技术 ESB 所暴露的集中式架构的劣势让开发者明白基于注册和发现的分布式架构才是解决问题的关键办法。由此,微服务架构逐渐流行起来。

在《微服务设计》中如何界定一个微服务,就是使用松耦合 & 高内聚原则,把因相同因素变化的事情聚集在一起,把因不同因素变化的事情区隔开来。

二. 微服务架构特性

微服务,其实是一种架构风格…

  • 异构

服务不同最适合的技术方案不同,微服务可以帮助我们轻松采用不同的技术,并且理解这些新技术的好处,尝试新技术通常伴随这风险。但对于微服务系统而言,总会存在一些地方让你可以尝试新技术,可以选择一个风险最小的服务采用新技术,并降低风险。

  • 隔离

微服务架构将系统分解为独立运行单元给系统带来更好的隔离性,独立的微服务在发生异常时更容易定位和隔离问题,隔离性也是服务扩展性的基础。

  • 扩展

庞大的单体服务只能作为一个整体进行扩展,即使系统中只有一小部分模块存在性能问题,也需要对整个系统进行扩展。而微服务架构可以根据性能需要对不同的模块进行水平扩展,微服务的弹性也可以很好的处理服务不可用和功能降级问题。

技术干货分享:一篇文章读懂微服务与网关技术

 

  • 部署简单

在微服务架构中,各个服务的部署是独立的,这样就可以更快的对特定部分的代码进行部署。服务出现问题也更容易快速回滚,同时敏捷的交付和部署带来了更好的业务需求响应体验。

  • 灵活

在微服务架构中,系统会开放很多接口供外部使用。当情况发生改变时,可以使用不同的方式构建应用,而整体化的应用程序只能提供有一个非常粗粒度的接口供外部使用。把单体应用分解成多个微服务,可以达到可复用,可组合的目的。

三. 微服务与网关技术

下图是一个典型的微服务架构,仅供参考

技术干货分享:一篇文章读懂微服务与网关技术

 

什么是微服务网关

微服务网关是微服务架构中的一个关键的角色,用来保护、增强和控制对于微服务的访问,微服务网关是一个处于应用程序或服务之前的系统,用来管理授权、访问控制和流量限制等,这样微服务就会被微服务网关保护起来,对所有的调用者透明。因此,隐藏在微服务网关后面的业务系统就可以更加专注于业务本身。

微服务网关的分类

常见的微服务网关根据使用特性大致被分成流量网关和业务网关。两种网关分别有不同关注点,下面是总结的两种网关类型特性:

技术干货分享:一篇文章读懂微服务与网关技术

 

微服务网关的作用

微服务网关作为连接服务的消费方和服务提供方的中间件系统,将各自的业务系统的演进和发展做了天然的隔离,使业务系统更加专注于业务服务本身,同时微服务网关还可以为服务提供和沉淀更多附加功能,下面是总结的微服务网关主要作用:

技术干货分享:一篇文章读懂微服务与网关技术

 

四. SIA-GateWay

SIA-GATEWAY 是基于 SpringCloud 微服务生态体系下开发的一个分布式微服务网关系统。具备简单易用、可视化、高可扩展、高可用性等特征,提供云原生、完整及成熟的接入服务解决方案。

关键特性

简单易用, 支持基于 Docker 容器的快速部署及交付。

兼容性良好, 兼容 SpringBoot 微服务及传统 HTTP-URL 的负载均衡及路由服务。

  • 高可扩展性, 支持基于 Java 语言的第三方插件扩展特性及动态加载机制。
  • 支持多租户,多用户角色下的网关拆分管理。
  • 可视化管理,提供实时路由拓扑、网关集群拓扑展示功能。
  • 服务治理,支持网关集群 Dashboard、实时日志、历史日志查询、熔断管理、预警管理等功能。
  • 多注册中心支持,提供分布式网关集群下对多注册中心集群的切换管理功能。
  • 动态路由组件绑定机制,提供包括 URL 统计、日志、灰度发布、限流、安全等公共服务组件。

下图是 SIA-GATEWAY 的整体架构图,架构由 CORE 和 Admin Cluster 组成,其中:

  • CORE 承载网关 HTTP 请求的主要服务节点,CORE 节点可以根据所属的网关组信息自动注册到 Admin 管理端。
  • Admin 是网关集群的管理后台,由 Admin、Service、Stream、Monitor 等服务组成。
技术干货分享:一篇文章读懂微服务与网关技术

 

下图是网关的整体部署架构图:

技术干货分享:一篇文章读懂微服务与网关技术

 

面向业务系统的微服务网关

微服务网关系统是一个处于应用程序或服务(提供 REST API 接口服务)之前的中间件系统, 所以 SIA-GateWay 在建设初期做技术选型时就充分考虑到所使用的技术方案应该兼容后端代理业务系统所使用的技术栈和技术体系,所以我们使用了 Netflix 的 ZUUL 作为我们网关系统技术栈,单纯的脱离使用场景谈某一种网关功能如何强大的做法,后续都会给业务方的使用带来更多的麻烦。 更明确的说如果目前大部分业务系统采用的技术栈是 JAVA 系统, 那么不建议使用 Nginx, Kong 或者 OpenResty 等网关系统, 这里主要是处于软件工程性方面考虑。举个例子,业务方需要将一个公共组件以 Plugin 机制集成到微服务网关, 如果使用 Lua 脚本文件或者其他脚本语言,那么引入一种新的语言技术栈所带来的复杂度会给业务系统带来更多的不确定性,系统后期维护成本和运维的难度都会呈指数级的提升。

基于组件模块化的设计

微服务网关的一个很重要的作用就是可以将微服务的 API 聚合后提供一个统一的 EntryPoint 作为业务使用方的一个统一入口以及屏蔽和隐藏业务内部逻辑。下面是 SIA-GateWay 提供的公共组件类型及分类。

目前 SIA-GateWay 通过组件管理的机制实现了 5 个大类 8 个子类的公共服务组件供业务方使用, 其中提供的路由组件绑定机制可以让业务方灵活的决定是否要在运行时执行相关组件逻辑。

技术干货分享:一篇文章读懂微服务与网关技术

 

去中心化的网关架构设计

微服务架构的一个重要的特性就是去中心化的架构设计思路,SIA-GateWay 在软件设计层面上增加了一个“网关组”的抽象概念,一个网关组对应就是一个独立的业务领域。网关组的概念也契合了微服务架构中的一些理念:业务系统依赖微服务网关提供明确清晰的服务边界;业务系统通过微服务网关对外暴露业务的标准服务接口。

从实现层面, SIA-GateWay 充分利用并结合了容器自动化的部署技术,在解决最后一公里的问题上,将网关以云端容器资源的方式交付给不同业务方,通过共享网关 SDK 部署包的方式将网关的服务下沉到容器中实现和执行,从而在时间和空间上做到了系统的弹性和灵活交付。同时中心化的管理能力又给使用网关的具有不同权限的用户可以同时维护各自所属网关组下的网关节点带来了便利。

技术干货分享:一篇文章读懂微服务与网关技术

 

上图展示的是 SIA-GateWay 去中心化的网关架构。当然除了微服务网关模式, 目前下一代微服务架构 ServiceMesh 技术也是典型的去中心化架构,ServiceMesh 是从 SideCar 边车模式演进而来,是一种通过将服务治理能力下沉到业务节点的方式,通过控制面(control plane)和数据面(data plane)的处理解耦分离实现服务通信更加快速,便捷,智能。

然而目前来看, 从技术上及各大公司的实践中,ServiceMesh 在落地上还存在诸多复杂性及不可控性,这种模式会给运维带来极大的成本,如果贸然使用会给本就复杂的分布式系统带来更多的复杂和难度。所以从目前来讲,GateWay 网关的模式在组织粒度上可以调整,在实现方式上更加简单可控,是目前的微服务架构中比较适合采用的模式。

网关如何保证高可用

作为一个微服务网关系统, 因为所有流量都会经过网关, 网关必须成为一个高可用的中间件服务,网关系统的稳定性及可用性直接决定了所用下游服务的稳定性。因此 SIA-GateWay 在架构设计上主要做了如下几点:

集群化

在生产环境中,所用网关节点至少保证有 2 个节点组成集群同时提供服务,目前 SIA-GateWay 在公司内部主要使用容器化部署, 避免单点故障。

健康检查

在容器环境下,SIA-GateWay 会暴露一个 HTTP 健康检查接口,通过 Kubernetes 的健康检查机制,定期检查 HTTP 访问是否可用, 如果不可用,利用 Kubernetes 的服务编排能力可以做容器的切换;在 Zstack 环境下, 通过后台启动一个 Crontab 作为守护进程检查进程的状态,保证网关的稳定可用和进程重启机制。

技术干货分享:一篇文章读懂微服务与网关技术

 

备份机制

SIA-GateWay 提供了一种备份网关机制,在 Zstack 上会启动一个备份网关 API-GATEWAY-CORE,所有在容器环境(Kubernetes )中启动的网关节点,都会将自己的路由信息同步到备份网关中,另外, 利用 Nginx 的高可用性和健康检查机制, 当 Kubernetes 集群出现问题时所有容器流量无法响应时, 会将 Nginx 上的流量自动切换到 API-GATEWAY-CORE 备份节点。API-GATEWAY-CORE 在工作时也会触发预警,提示目前有不可用的 K8s 网关节点。

提供机制而不是策略

Unix 编程哲学里,一个重要的概念就是:“提到机制而不是策略”,通俗的讲“机制”就是接口, “策略”就是具体的实现。SIA-GateWay 提供的组件集成能力正是基于这样的理念。

SIA-GateWay 将架构的可扩展性作为重要的对外输出能力,第三方插件机制主要支持 JAVA 语言的 Filter 组件动态加载机制。Filter 机制是 JAVA 工程师最为熟悉的标准组件,所以对于业务方集成自己的业务逻辑提供了极大的便利,第三方业务组件加载到网关平台大体有如下几个步骤:

  • 根据 SIA-GateWay 提供的模板类及注解, 实现动态业务逻辑
  • 将实现好的动态组件通过 Maven 打包。
  • 在组件管理界面,通过组件上传按钮将组件上传到 Admin- 组件管理器。
  • 组件管理器执行文件存储逻辑。
  • 组件管理器执行组件下发操作,将组件分发到对应网关组。
  • 网关节点通过 ClassLoader 反射解析组件并动态加载到内存
  • 网关节点通过异步信号量机制响应组件加载状态。
  • 组件管理器同步插件 Plugin 状态。
  • 下图是 SIA-GateWay 组件加载机制的执行逻辑图:
技术干货分享:一篇文章读懂微服务与网关技术

 

强化可视化和微服务治理能力

俗话说流水的架构, 铁打的监控, 任何架构都需要软件监控。微服务应用本身 RPC 的交互方式和带来了对监控系统了解系统运行状态的难题。SIA-GateWay 对微服务监控主要做了如下方面增强:

全局的集群状态查看和容器状态 DashBoard 统计

技术干货分享:一篇文章读懂微服务与网关技术

 

实时的路由拓扑和网关拓扑调用关系及状态展示, 实时的路由拓扑图如下:

技术干货分享:一篇文章读懂微服务与网关技术

 

网关集群拓扑管理界面,包含实时日志,实时 Hystix 监控,JVM 配置等

技术干货分享:一篇文章读懂微服务与网关技术

 

可视化的组件管理界面:

技术干货分享:一篇文章读懂微服务与网关技术

 

日志回溯,利用 EKK 架构实现日志归集到日志查看功能

技术干货分享:一篇文章读懂微服务与网关技术

 

熔断管理的分类及错误 Stacktrace 查看

技术干货分享:一篇文章读懂微服务与网关技术

 

URL 细粒度的监控统计功能(默认不打开,需要路由绑定监控组件), 包括 URL 的延迟统计,调用计数等指标。

技术干货分享:一篇文章读懂微服务与网关技术

 

五. 总结

软件工程没有银弹,软件系统的不确定性和复杂性贯穿软件工程的整个生命周期,微服务架构本质上是通过分层和解耦来降低系统的复杂性,这里组织的沟通方式、企业文化、团队技术学习能力都会对微服务架构的落地产生重要的影响。

对业务系统的核心能力洞察和业务边界的识别是系统微服务架构落地的重要环节;微服务基础设施的技术选型应该考虑到业务系统所使用的技术体系,选择成熟的生态体系和合适的技术方案有利于微服务架构的推广和持续的技术演进;SIA-GATEWAY 作为微服务基础设施充分考虑到了与业务系统的兼容性和相关技术生态的成熟度。

技术干货分享:一篇文章读懂微服务与网关技术

 

最后在微服务架构下,随着微服务规模的扩大,必然带来分布式事务一致性、网络响应、容错等等问题, 所以微服务治理是微服务架构的难点,保障微服务架构的高可用和高可扩展性需要在基础设施层面增加更多的技术投入和技术保障, 这样才能让业务更好的专注于业务实现,敏捷的开发,持续快速的服务交付。



Tags:   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言什么是数据脱敏数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护常用脱敏规则替换、重排、加密、截断、掩码良好的数据脱敏实施1、尽...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
河南最有名的“13碗面”,吃过10种以上的一定是地道河南人,你吃过几碗?河南位于黄河中下游,优越的地理位置和条件,让河南的种植业在全国脱颖而出,被称为全国的“粮仓”。小麦是河南...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
在狗界中,有些狗狗比较凶残、霸道,今天我们就来说说被称为“犬中四煞”的4种狗,请认住它们的长相,看见了要绕路走! NO1:黑狼犬产地:中国寿命:11-12年黑狼犬是狼狗的一种,长大高大威猛...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
协议下的体面离婚 2015年1月 方晴供职于一家外企,袁亮硕士毕业后开了家公司。两人相识、恋爱后走进婚姻殿堂。 方晴和袁亮的儿子小浩出生了。本该是其乐融融的三口之家,却在一...【详细内容】
2021-12-28  Tags:   点击:(2)  评论:(0)  加入收藏
中国人神话世界五千年到一万年之前到底是一个什么样的世界?相信这个问题应该是困扰了大家许久吧!其实这些问题可以从远古时代的三皇五帝开始说起,三皇五帝对于中国人的影响就如...【详细内容】
2021-12-28  Tags:   点击:(2)  评论:(0)  加入收藏
去年有个新闻,说的是一名印度女孩自小被欧洲有钱人家收养,长大后要回来给自己出生的村子捐钱做慈善。等她回村的时候,村里人专门为女孩修了一条路。表面上看,这貌似是个暖心的故...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
日本在今年又给大家带来了一个巨大消息,日本著名的球星本田圭佑出资设立的一家公司,正式发售了飞行摩托车。 在之前可是在电视或者是电影中才能看到的,是具备了未来科幻的一个...【详细内容】
2021-12-28  Tags:   点击:(4)  评论:(0)  加入收藏
V社今日公布了2021年Steam最畅销游戏榜单,其中涵盖了本年度Steam上收入最高的100款游戏。为了得出每款游戏的总收入,Steam计算了2021年1月1日至2021年12月15日的游戏销售额、...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
“都怪我一时糊涂铸下大错,这几年为了蒙混过关,拆东墙补西墙就怕被发现,我对不起信任我的领导同事,更对不起我的家人。”内蒙古某国有合资公司原出纳员包某在庭审现场听取公诉人...【详细内容】
2021-12-28  Tags:   点击:(2)  评论:(0)  加入收藏
2021年黄金价格下跌11.3%,黄金现在已经下跌了6.5%。白银价格一度下跌19.3%,白银现在已经下跌了15%。美元通胀。白银自2020年2月份以来,五家中央银行(Fed、欧洲中央银行、日本中...【详细内容】
2021-12-28  Tags:   点击:(3)  评论:(0)  加入收藏
▌简易百科推荐
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标...【详细内容】
2021-12-27  大数据架构师    Tags:架构   点击:(5)  评论:(0)  加入收藏
前言 单片机开发中,我们往往首先接触裸机系统,然后到RTOS,那么它们的软件架构是什么?这是我们开发人员必须认真考虑的问题。在实际项目中,首先选择软件架构是非常重要的,接下来我...【详细内容】
2021-12-23  正点原子原子哥    Tags:架构   点击:(7)  评论:(0)  加入收藏
现有数据架构难以支撑现代化应用的实现。 随着云计算产业的快速崛起,带动着各行各业开始自己的基于云的业务创新和信息架构现代化,云计算的可靠性、灵活性、按需计费的高性价...【详细内容】
2021-12-22    CSDN  Tags:数据架构   点击:(10)  评论:(0)  加入收藏
▶ 企业级项目结构封装释义 如果你刚毕业,作为Java新手程序员进入一家企业,拿到代码之后,你有什么感觉呢?如果你没有听过多模块、分布式这类的概念,那么多半会傻眼。为什么一个项...【详细内容】
2021-12-20  蜗牛学苑    Tags:微服务   点击:(9)  评论:(0)  加入收藏
我是一名程序员关注我们吧,我们会多多分享技术和资源。进来的朋友,可以多了解下青锋的产品,已开源多个产品的架构版本。Thymeleaf版(开源)1、采用技术: springboot、layui、Thymel...【详细内容】
2021-12-14  青锋爱编程    Tags:后台架构   点击:(21)  评论:(0)  加入收藏
在了解连接池之前,我们需要对长、短链接建立初步认识。我们都知道,网络通信大部分都是基于TCP/IP协议,数据传输之前,双方通过“三次握手”建立连接,当数据传输完成之后,又通过“四次挥手”释放连接,以下是“三次握手”与“四...【详细内容】
2021-12-14  架构即人生    Tags:连接池   点击:(17)  评论:(0)  加入收藏
随着移动互联网技术的快速发展,在新业务、新领域、新场景的驱动下,基于传统大型机的服务部署方式,不仅难以适应快速增长的业务需求,而且持续耗费高昂的成本,从而使得各大生产厂商...【详细内容】
2021-12-08  架构驿站    Tags:分布式系统   点击:(23)  评论:(0)  加入收藏
本系列为 Netty 学习笔记,本篇介绍总结Java NIO 网络编程。Netty 作为一个异步的、事件驱动的网络应用程序框架,也是基于NIO的客户、服务器端的编程框架。其对 Java NIO 底层...【详细内容】
2021-12-07  大数据架构师    Tags:Netty   点击:(17)  评论:(0)  加入收藏
前面谈过很多关于数字化转型,云原生,微服务方面的文章。虽然自己一直做大集团的SOA集成平台咨询规划和建设项目,但是当前传统企业数字化转型,国产化和自主可控,云原生,微服务是不...【详细内容】
2021-12-06  人月聊IT    Tags:架构   点击:(23)  评论:(0)  加入收藏
微服务看似是完美的解决方案。从理论上来说,微服务提高了开发速度,而且还可以单独扩展应用的某个部分。但实际上,微服务带有一定的隐形成本。我认为,没有亲自动手构建微服务的经历,就无法真正了解其复杂性。...【详细内容】
2021-11-26  GreekDataGuy  CSDN  Tags:单体应用   点击:(35)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条