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

基于GateKeeper网关的微服务架构

时间:2019-10-25 17:06:37  来源:  作者:

什么是微服务?

在了解微服务架构前,我们需要先了解什么是微服务

干货技术分享:基于GateKeeper网关的微服务架构

 

在传统单体架构(如上图左侧)中,我们一个项目的所有模块是聚合在一个程序中。我们所有模块数据都存放到一个数据库中。因为这种架构很简单的原因,所以开发效率很快,部署方便,在项目初期阶段比较常用。但随着项目复杂度增加,开发规模上升缺点也有很多比如:模块之间代码容易引起冲突,因为太容易修改到同一个文件了。还有就是一个小改动也需要整体上线,线上稳定性很难得到保证。

随着软件架构的不断演进,微服务架构逐渐流行起来。在微服务架构(如上图右侧)中,模块是独立运行的进程服务,每个模块都有独立的数据库,当业务流量增大时可以通过增加部署实例的方式来应对。

「 微服务 」的理念提倡每个服务都是单一职责,且每一个服务都能实现自治,因此可以带来一些明显好处:

部署简单:每个微服务都可以独立去部署,方便快捷。

逻辑清晰:将一个独立功能逻辑封装在单一微服务里面,实现整体项目的逻辑清晰。

可扩展:因为可以随时增加和减少微服务,可以很方便的扩展功能。

可靠性高:某一个功能的异常可以隔离在单一微服务里面,可以提高整体可靠性。

微服务架构实现形式

实现形式大致有三种:

基于云原生的微服务

干货技术分享:基于GateKeeper网关的微服务架构

 

当前概念最火的微服务实现方式,这种方式需要依赖k8s集群来管理服务的容器。

如上图,每个微服务其实就一个Service,Pod是每个服务的部署实例。服务的对外访问提供需要依赖Ingress来实现。

优点很多: 需要考虑服务注册发现问题(内部已集成)、支持容器的弹性伸缩等

存在问题: 非云原生的应用无法使用、架构复杂导致运维成本很高、

基于微服务框架的微服务

干货技术分享:基于GateKeeper网关的微服务架构

 

JAVA系的spring-cloud、Go系的go-micro都是微服务框架的代表。 上图以go-micro为例进行说明:

Register确保每个Server的启动和消亡最终写入到Consul。Client是请求服务的接口,请求服务时会先使用Selector选择一个服务器,然后再经过transport和codec的最终抵达目标Server.

优点:内部集成了服务注册发现、服务间调用都是代码形式实现更便捷、插件丰富

缺点:与开发语言强绑定、功能复用性不强(A服务的功能,即使做成公共库其他服务也需要调用才行)

基于网关的微服务

干货技术分享:基于GateKeeper网关的微服务架构

 

基于网关的微服务架构,我们以GateKeeper进行说明。

1、用户通过接入层 (一般选用 Nginx、Haproxy、LVS) 连接到 GateKeeper 实例中。

2、每个 GateKeeper 实例,针对每个子服务模块,单独进行服务探测。

3、在线服务管理时,配置数据先保存到 GateKeeper 配置 DB 中,然后再通过调用配置更新接口( /reload ),更新所有实例机器配置。

基于网关的微服务架构优势:

1、网关提供服务的注册发现机制和负载均衡

2、外部访问可以直接使用网关接入,内部服务互调也可以经由网关接入

3、网关可提供额外的其他功能拓展支持(如:登陆、权限验证)只实现一次多出调用。

4、接入的服务不受语言限制

5、非云原生应用、云原生应用皆可使用。

为什么考虑开发 GateKeeper?

我们公司项目在发展初期时,我们的服务比较少。而且大多是内部服务,对外服务只有一个后端(php)。18年下半年 随着业务发展,增加了N多个服务模块。考虑到之前的单体架构已经无法满足当前需求了,所以开始考虑微服务化划分,在划分好业务边界后,我们整理出共 10+个服务,5个服务需要对外服务。

这5个对外服务在部署完毕后首要解决的问题是需要接入用户权限系统(UPM),因为之前功能是下挂在PHP系统中的,当时我们考虑了三种方式:

1、是多个服务单独接入UPM、SSO系统。这样成本很高而且相同代码需要多出维护。

2、是仍然使用之前的 PHP项目当做外层项目,通过转发请求做统一权限和登陆操作。这是当时成本最低的方式。

3、独立做一个权限和登陆的API gateway,让它作为统一接入服务。以后再加项目时加一个配置即可。

从长远发展以及通用性来说我们最终选择了,独立做一个 API gateway。

为什么不选择主流API gateway,而是采用自研?

首先,当前GO这个技术栈 没有成熟的API gateway。

另外其他主流的API gateway,大多都有依赖软件较多的问题,比如要实现动态服务注册就需要 Consul这类的分布式数据库。

而我们的业务有时候需要本地化部署,这就需要:依赖少、快速简易部署、支持多种权限配置等。

综合以上因素,我们就考虑使用GO自研API网关了。

我们下一步的精力主要会放在三个方面:

1、持续不断推进项目稳定性建设和问题修复。

2、增加示例代码,让使用者更加容易、便捷。

3、增加新特性:熔断机制、基于云原生的部署等

end:如果你觉得本文对你有帮助的话,记得关注点赞转发,你的支持就是我更新动力。



Tags:微服务架构   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
前言要理解微服务,首先要先理解不是微服务的那些。通常跟微服务相对的是单体应用,即将所有功能都打包成在一个独立单元的应用程序。从单体应用到微服务并不是一蹴而就的,这是一...【详细内容】
2021-07-09  Tags: 微服务架构  点击:(112)  评论:(0)  加入收藏
一、Zuul简介Zuul相当于是第三方调用和服务提供方之间的防护门,其中最大的亮点就是可动态发布过滤器二、Zuul可以为我们提供什么1、权限控制2、预警和监控3、红绿部署、(粘...【详细内容】
2021-04-21  Tags: 微服务架构  点击:(230)  评论:(0)  加入收藏
前不久作为架构师完成了某知名快消企业的一个业务中台建设。系统上线后,经历了双十一活动的流量高峰,整体运行稳定。最近有空,便将此次架构的思路,心得稍作整理在这篇博客中分享...【详细内容】
2021-02-07  Tags: 微服务架构  点击:(182)  评论:(0)  加入收藏
文章简介:作者结合自身微服务架构研发经验进行回顾、总结,本文将介绍微服务架构中,在技术选型时需要注意哪些选型原则,会遇到哪些开源框架,又该如何选择, 进行了全面的归纳、对比,希望能够为大家提供一些思路、方向,少走一些...【详细内容】
2021-02-05  Tags: 微服务架构  点击:(160)  评论:(0)  加入收藏
思维导图 文章已收录Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary一、前言伴随着Eurka2.0版本已停止维护,开始要考虑使用微服务新一代的开源的注册中心...【详细内容】
2020-11-13  Tags: 微服务架构  点击:(160)  评论:(0)  加入收藏
消息总线的定义前面在1.4.2节中强调过,在微服务架构中,经常会使用REST 服务或基于消息的通信机制。在3.6节中也详细介绍了消息通信的实现方式。消息总线就是一种基于消息的通...【详细内容】
2020-09-29  Tags: 微服务架构  点击:(141)  评论:(0)  加入收藏
微服务的高级主题一自动扩展Spring Cloud 提供了大规模部署微服务所必需的支持。为了获得像云服务环境一样的能力, 微服务实例也应该能够根据流量的规模来自动扩展,也称自动缩...【详细内容】
2020-09-23  Tags: 微服务架构  点击:(96)  评论:(0)  加入收藏
Spring Cloud 微服务总体架构图Spring cloud作为当下主流的微服务框架,让我们实现微服务架构简单快捷,Spring cloud中各个组件在微服务架构中扮演的角色如图所示。spring-cl...【详细内容】
2020-09-20  Tags: 微服务架构  点击:(133)  评论:(0)  加入收藏
常见微服务的消费者本节就常见的微服务的消费者进行介绍。在Java领域比较常用的消费者框架主要有HttpClient、Ribbon、Feign 等。 Apache HttpClientApache HttpClient是Apa...【详细内容】
2020-09-11  Tags: 微服务架构  点击:(129)  评论:(0)  加入收藏
什么是微服务模式随着网络基础设施的高速发展,以及越来越多的个体接入互联网,在考虑构建支持海量请求以及多变业务的软件平台时,微服务架构成为多数人的首选。微服务架构的出现...【详细内容】
2020-09-09  Tags: 微服务架构  点击:(95)  评论:(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)  加入收藏
最新更新
栏目热门
栏目头条