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

互联网时期,很多公司为了适应更加灵巧的业务需求,基于 HTTP 协议和 Restful 的架构风格及简洁和构造清晰的 JSON 措辞成为企业开拓的最佳实践,在 SOA 架构中,企业做事总线技能 ESB 所暴露的集中式架构的劣势让开发者明白基于注册和创造的分布式架构才是办理问题的关键办法。
由此,微做事架构逐渐盛行起来。

在《微做事设计》中如何界定一个微做事,便是利用松耦合 & 高内聚原则,把因相同成分变革的事情聚拢在一起,把因不同成分变革的事情区隔开来。

jspetl一篇文章读懂微办事与网关技巧SIAGateWay React

二. 微做事架构特性

微做事,实在是一种架构风格…异构

做事不同最适宜的技能方案不同,微做事可以帮助我们轻松采取不同的技能,并且理解这些新技能的好处,考试测验新技能常日伴随这风险。
但对付微做事系统而言,总会存在一些地方让你可以考试测验新技能,可以选择一个风险最小的做事采取新技能,并降落风险。

隔离

微做事架构将系统分解为独立运行单元给系统带来更好的隔离性,独立的微做事在发生非常时更随意马虎定位和隔离问题,隔离性也是做事扩展性的根本。

扩展

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

支配大略

在微做事架构中,各个做事的支配是独立的,这样就可以更快的对特定部分的代码进行支配。
做事涌现问题也更随意马虎快速回滚,同时敏捷的交付和支配带来了更好的业务需求相应体验。

灵巧

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

三. 微做事与网关技能

下图是一个范例的微做事架构,仅供参考

什么是微做事网关

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

微做事网关的分类

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

微做事网关的浸染

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

四. 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 作为微做事根本举动步伐充分考虑到了与业务系统的兼容性和干系技能生态的成熟度。

末了在微做事架构下,随着微做事规模的扩大,一定带来分布式事务同等性、网络相应、容错等等问题, 以是微做事管理是微做事架构的难点,保障微做事架构的高可用和高可扩展性须要在根本举动步伐层面增加更多的技能投入和技能保障, 这样才能让业务更好的专注于业务实现,敏捷的开拓,持续快速的做事交付。