一. 背景

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

把时间退回到二十年之前,当时企业级领域研发主要推崇的还是 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 语言的第三方插件扩展特性及动态加载机制。

  • 支持多租户,多用户角色下的网关拆分管理