微服务网关优势(微服务架构 网关)

网友投稿 303 2023-01-08


本篇文章给大家谈谈微服务网关优势,以及微服务架构 网关对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享微服务网关优势的知识,其中也会对微服务架构 网关进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

微服务的优点是什么?

(1)服务的独立部署,每个服务都是独立的项目,可以独立部署,不依赖于其他服务,耦合性低。
(2)服务的快速启动,拆分之后服务启动的速度要比拆分之前快很多,因为依赖的库少了,代码量也少了。
(3)更加适合敏捷开发。敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行。服务拆分可以快速发布新版本,修改哪个服务只需要发布对应的服务即可,不用整体重新发布。
(4)职责专一,由专门的团队负责专门的服务。业务发展迅速时,研发人员也会越来越多,每个团队可以负责对应的业务线,服务的拆分有利于团队之间的分工。
(5)服务可以动态按需扩容,当某个服务的访问量较大时,我们只需要将这个服务扩容即可。
(6)代码的复用,每个服务都提供REST API,所有的基础服务都必须抽出来,很多的底层实现都可以以接口方式提供。想要了解更多,我推荐你去看看时速云,他们是一家全栈云原生技术服务提供商,提供云原生应用及数据平台产品,其中涵盖容器云PaaS、DevOps、微服务治理、服务网格、API网关等。大家可以去体验一下。
希望能给您提供帮助,可以给个大大的赞不。

微服务的好处(优点)有哪些?

显然,随着系统复杂度的提升,以及对系统扩展性的要求越来越高,微服务化是一个很好的方向,但除此之外,微服务还会给我们带来哪些好处?

独立,独立,还是独立

我们说微服务打响的是各自的独立战争,所以,每一个微服务都是一个小王国,这些微服务跳出了“大一统”(Monolith)王国的统治,开始从各个层面打造自己的独立能力,从而保障自己的小王国可以持续稳固的运转。

首先,在开发层面,每个微服务基本上都是各自独立的项目(project),而对应各自独立项目的研发团队基本上也是独立对应,这样的结构保证了微服务的并行研发,并且各自快速迭代,不会因为所有研发都投入一个近乎单点的项目,从而造成开发阶段的瓶颈。开发阶段的独立,保证了微服务的研发可以高效进行。

服务开发期间的形态,跟服务交付期间的形态原则上是不需要完全高度统一的,即使我们在开发的时候都是各自进行,但交付的时候还是可以一起交付,不过这不是微服务的做法。

在微服务治理体系下,各个微服务交付期间也是各自独立交付的,从而使得每个微服务从开发到交付整条链路上都是独立进行,这大大加快了微服务的迭代和交付效率。

服务交付之后需要部署运行,对微服务来说,它们运行期间也是各自独立的。

微服务独立运行可以带来两个比较明显的好处,第一个就是可扩展性。我们可以快速地添加服务集群的实例,提升整个微服务集群的服务能力,而在传统 Monolith 模式下,为了能够提升服务能力,很多时候必须强化和扩展单一结点的服务能力来达成。如果单结点服务能力已经扩展到了极限,再寻求扩展的话,就得从软件到硬件整体进行重构。

软件行业有句话:“Threads don't scale,Processes do!”,很明确地道出了原来 Monolith 服务与微服务在扩展(Scale)层面的差异。

对于Java开发者来说,早些年(当然现在也依然存在),我们遵循 Java EE 规范开发的 Web 应用,都需要以 WAR 包的形式部署到 TOMCAT、Jetty、RESIN 等 Web 容器中运行,即使每个 WAR 包提供的都是独立的微服务,但因为它们都是统一部署运行在一个 Web 容器中,所以扩展能力受限于 Web 容器作为一个进程(process)的现状。

无论如何调整 Web 容器内部实现的线程(thread)设置,还是会受限于 Web 容器整体的扩展能力。所以,现在很多情况下,大家都是一个 TOMCAT 只部署一个 WAR,然后通过复制和扩展多个 TOMCAT 实例来扩展整个应用服务集群。

当然,说到在 TOMCAT 实例中只部署一个 WAR 包这样的做法,实际上不单单只是因为扩展的因素,还涉及微服务运行期间给我们带来的第二个好处,即隔离性。

隔离性实际上是可扩展性的基础,当我们将每个微服务都隔离为独立的运行单元之后,任何一个或者多个微服务的失败都将只影响自己或者少量其他微服务,而不会大面积地波及整个服务运行体系。

在架构设计上有一种实践模式,即隔板模式(Bulkhead Pattern),这种架构设计模式的首要目的就是为了隔离系统中的各个功能单元和实体,使得系统不会因为一个单元或者服务的失败而导致整体失败。

这种思路在造船行业、兵工行业都有类似的应用场景。现在任何大型船舶在设计上都会有隔舱,目的就是即使有少量进水,也可以只将进水部位隔离在小范围,不会扩散而导致船舶大面积进水,从而沉没。当年泰坦尼克号虽然沉了,但不意味着他们没有做隔舱设计,只能说,伤害度已经远远超出隔舱可以提供的基础保障范围。

在坦克的设计上,现在一般也会将弹药舱和乘员舱隔离,从而可以保障当坦克受创之后,将伤害尽量限定在指定区域,尽量减少对车乘成员的伤害。

前面我们提到,现在大家基本上弱化了 Java EE 的 Web 容器早期采用的“一个 Web 容器部署多个 WAR 包”的做法,转而使用“一个 Web 容器只部署一个 WAR 包”的做法,这实际上正是综合考虑了 Web 容器的设计和实现现状与真实需求之后做出的合理实践选择。

这些 Web 容器内部大多通过类加载器(Classloader)以及线程来实现一定程度上的依赖和功能隔离,但这些机制从基因上决定了这些做法不是最好的隔离手段。而进程(Process)拥有天然的隔离特性,所以,一个 WAR 包只部署运行在一个 Web 容器进程中才是最好的隔离方式。

现在回想一下,好像自从各个微服务打响独立战争并且独立之后,无论从哪个层面来看,各自“活”得都挺好。

多语言生态

微服务独立之后,给了对应的团队和组织快速迭代和交付的能力,同时,也给团队和组织带来了更多的灵活性,实际上,对应交付不同微服务的团队或者组织来说,现在可以基于不同的计算机语言生态构建这些微服务,如图 1 所示。

微服务的提供者既可以使用 Java 或者 Go 等静态语言完成微服务的开发和交付,也可以使用Python或者 Ruby 等动态语言完成微服务的开发和交付,对于团队内部拥有繁荣且有差异的语言文化来说,多语言生态下的微服务开发和交付将可以最大化的发挥团队和组织内部各成员的优势。

当然,对于多语言生态下的微服务研发来说,有一点需要注意:为了让服务的访问者可以用统一的接口访问所有这些用不同语言开发和交互的微服务,应该尽量统一微服务的服务接口和协议。

在微服务的生态下,互通性应该是需要重点关注的因素,没有互通,不但服务的访问者和用户无法很好地使用这些微服务,微服务和微服务之间也无法相互信赖和互助,这将大大损耗微服务研发体系带来的诸多好处,而多语言生态也会变成一种障碍和负累,而不是益处。

记得时任黑猫宅急便社长的小仓昌男在其所著的《黑猫宅急便的经营学》中提到一个故事,日本国铁曾经采用不同于国际标准的集装箱和铁路规格,然后发现货物的运输效率很低,经过考察发现,原来是货物从国际标准集装箱卸载之后,在通过日本国铁运输之前,需要先拆箱,重新装入日本国铁规格的集装箱,然后装载到日本国铁上进行运输。

但是,如果日本国铁采用国际标准的集装箱规格,那么货物集装箱从远洋轮船上卸载之后就可以直接装上国铁,这将大大加快运输效率(日本,国铁改革后也证明确实如此)。日本国铁在前期采用私有方案时,只关注了自己的利益和效率,舍弃了互通,也带来了效率的低下。

所以,在开发和交付微服务的时候,尤其是在多语言生态下开发和交付微服务,我们从一开始就要将互通性作为首要考虑因素,从而不会因为执迷于某些服务或者系统的单点效率而失去了整个微服务体系的整体效率。

图 1  多语言的微服务生态

微服务 六:服务网关

服务除了内部相互之间调用和通信之外,最终要以某种方式暴露出去,才能让外界系统(例如客户微服务网关优势的浏览器、移动设备等等)访问到,这就涉及服务微服务网关优势的前端路由,对应的组件是服务网关(Service Gateway),见图(15),网关是连接企业内部和外部系统的一道门,有如下关键作用:

服务反向路由,网关要负责将外部请求反向路由到内部具体的微服务,这样虽然企业内部是复杂的分布式微服务结构,但是外部系统从网关上看到的就像是一个统一的完整服务,网关屏蔽了后台服务的复杂性,同时也屏蔽了后台服务的升级和变化。安全认证和防爬虫,所有外部请求必须经过网关,网关可以集中对访问进行安全控制,比如用户认证和授权,同时还可以分析访问模式实现防爬虫功能,网关是连接企业内外系统的安全之门。

限流和容错,在流量高峰期,网关可以限制流量,保护后台系统不被大流量冲垮,在内部系统出现故障时,网关可以集中做容错,保持外部良好的用户体验。

监控,网关可以集中监控访问量,调用延迟,错误计数和访问模式,为后端的性能优化或者扩容提供数据支持。

日志,网关可以收集所有的访问日志,进入后台系统做进一步分析。

图(15)gateway服务图

除以上基本能力外,网关还可以实现线上引流,线上压测,线上调试(Surgical debugging),金丝雀测试(Canary Testing),数据中心双活(Active-Active HA)等高级功能。

网关通常工作在7层,有一定的计算逻辑,一般以集群方式部署,前置LB进行负载均衡。

开源的网关组件有Netflix的Zuul,其工作原理如下图。

图(16)zuul工作原理图

在介绍过服务注册表和网关等组件之后,我们可以通过一个简化的微服务架构图(17)来更加直观地展示整个微服务体系内的服务注册发现和路由机制,该图假定采用进程内LB服务发现和负载均衡机制。在图(17)的微服务架构中,服务简化为两层,后端通用服务(也称中间层服务Middle Tier Service)和前端服务(也称边缘服务Edge Service,前端服务的作用是对后端服务做必要的聚合和裁剪后暴露给外部不同的设备,如PC,Pad或者Phone)。后端服务启动时会将地址信息注册到服务注册表,前端服务通过查询服务注册表就可以发现然后调用后端服务;前端服务启动时也会将地址信息注册到服务注册表,这样网关通过查询服务注册表就可以将请求路由到目标前端服务,这样整个微服务体系的服务自注册自发现和软路由就通过服务注册表和网关串联起来了。如果以面向对象设计模式的视角来看,网关类似Proxy代理或者Façade门面模式,而服务注册表和服务自注册自发现类似IoC依赖注入模式,微服务可以理解为基于网关代理和注册表IoC构建的分布式系统。

图(17)简化的微服务架构图

微服务网关

1、路由转发:接收一切外界请求微服务网关优势,转发到后端微服务网关优势的微服务上去微服务网关优势
2、 过滤器 :在服务网关中可以完成一系列的横切功能微服务网关优势,例如权限校验、限流以及监控等,这些都可以通过过滤器完成(其实路由转发也是通过过滤器实现的)。

https://zhuanlan.zhihu.com/p/101341556
https://blog.csdn.net/ztemt_sw2/article/details/106208946
https://studygolang.com/articles/13254
https://blog.csdn.net/micl200110041/article/details/82013032 关于微服务网关优势和微服务架构 网关的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 微服务网关优势的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于微服务架构 网关、微服务网关优势的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关优雅降级(微服务降级实现)
下一篇:Java常见面试题之多线程和高并发详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~