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

微服务架构详解

时间:2022-09-12 14:10:24  来源:网易号  作者:互联共商

一、微服务架构的由来

在微服务架构出现之前,最常用的架构就是单体架构,俗称"一个jar(war)包打天下"。在一个jar包工程中,采用MVC架构,分为表现层,业务层,数据访问层,所有的业务模块,都放在这个工程中集成,如下图所示:


 

随着软件行业规模的增长,这种单体架构的弊端也越来越多,包括:

 

  1. 耦合性高,某个地方出问题,很可能影响其他业务模块的使用
  2. 代码管理成本高,项目沉重,并会随着需求的增加越来越重
  3. 随着访问量的增多,这种架构的工程并发力不够

 

为了解决单体结构带来的问题,就出现了微服务架构。

微服务架构就是将单一程序拆分成一个一个的微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信,通常是HTTP RESTFUL

API。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。

二、微服务架构优势与劣势

优势:

复杂的业务拆分成多个业务,每个业务是一个独立的微服务,彻底地去耦合,利于分工,当需要增加业务的时候,可以方便创建新的微服务扩展业务,而不用担心有没有别的地方耦合

每个微服务都是独立部署的,如果其中一个宕机了,不会影响整个系统;也方便功能变更时,服务的部署;当流量增大后,可以将服务集群化部署,增强抗击高并发的能力

每个微服务之间可以使用不同的编程语言和不同的数据库

劣势:

在复杂程度上来说,微服务比单体建构要更为复杂些

部署比单体项目复杂

服务之间是用HTTP协议通信的,通信成本比单体项目高

数据一致性问题。

三、适用场景

通过上面的描述可以看出,微服务在解决了单体架构带来的问题的同时,也出现了部署复杂,需要增加中间件联络各服务的问题。所以,不是所有的场景都推荐使用微服务架构,具体如下:

适用场景:

①:大型复杂的项目…(来自单体架构200W行代码的恐惧)

②:快速迭代的项目…(来自一天一版的恐惧)

③:并发高的项目…(考虑弹性伸缩扩容的恐惧)

不适场景:

①:业务稳定,就是修修bug ,改改数据

②:迭代周期长 发版频率 一二个月一次.

四、微服务与SpringCloud的关系

SpringCloud简单来说是上述微服务架构技术落地实现的集合体,是微服务架构下的一站式解决方案。

SpringCloud是一个技术的集合体,将上述的微服务架构进行落地。下面看一下这个集合体里包含哪些组件:

注册中心Eureka:

拆分成多个服务之后,总得有个管理多个服务的模块吧,这就是注册中心的作用。起到服务注册和服务发现的作用。

网关Zuul:

拆分成多个服务之后,涉及到服务之间的调用吧,一个服务调用了三个服务的模块,那在这个服务里,配置三个调用地址,看起来是不是很麻烦呀,所以就出现了网关,所有的服务调用都调用到网关,然后在网关里配置路由,进行服务的转发,类似于代理的作用。当然网关需要配合注册中心进行使用,去发现转发到哪个服务上去。

负载均衡Ribbon:

网关找到请求发送到哪个服务后,如果这个服务做了集群,有多个实例,那该发送到哪个实例上呢,于是就出现了Ribbon组件,进行负载均衡。

远程调用方式Feign:

服务之间相互调用的时候,可以使用RestTemplate进行调用,SpringCloud也提供了Feign客户端访问,即提供了一种远程调用方式。

断路器Hystrix:

SpringCloud提供了一个监控组件,用于监控服务接口的状态和断路情况。Hystrix Dashboard是个监控面板,提供了可视化界面查看服务调用的耗时等等。

上述就是微服务的五大组件。微服务架构就是对服务进行拆分,多个小的项目,组成一个大型项目。那么,拆分后的服务,肯定需要增加中间件,来统一维护这些服务,于是就有了注册中心。拆分成小型服务后,涉及到服务之间接口的调用,于是产生了Feign技术。为了实现高可用,每个小型服务都需要集群,那么集群如何选举呢?就出现了负载均衡技术Ribbon。最后通过网关统一管理请求路径的配置,进行请求的转发。SpringCloud还为我们提供了断路器,用于监控服务的各种指标信息。

所以,SpringCloud是一套微服务架构的落地技术方案,对于程序员而言,只要在这套技术框架里面,进行业务模块的开发实现即可。

同时可以发现,我们要使用SpringCloud,还需要维护注册中心,网关等等技术,这也是使用微服务架构需要花费的成本。

官网: https://spring.io/projects/spring-cloud

中文文档: https://www.springcloud.cc/

Spring Cloud中国社区:http://springcloud.cn/

SpringCloud微服务架构图


 

五、SpringCloud与SpringCloud Alibaba的关系

SpringCloud Alibaba是阿里研发的一套微服务架构的落地技术方案,可以很好的兼容SpringCloud,只需修改一些配置和注解,原生SpringCloud就可以接入到SpringCloud Alibaba中。

SpringCloud Alibaba提供了一些新组件,来落地微服务架构,阿里之所以要开发这套技术架构,主要是为了推广相关的产品,当然有付费产品。

下面看SpringCloud与Alibaba组件对比:


 


 

SpringCloud Alibaba技术架构:



Tags:架构   点击:( )  评论:( )
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:[email protected]),我们将及时更正、删除,谢谢。
▌相关推荐
技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方...【详细内容】
2022-09-13  Tags: 架构  点击:(4)  评论:(0)  加入收藏
一、微服务架构的由来在微服务架构出现之前,最常用的架构就是单体架构,俗称"一个jar(war)包打天下"。在一个jar包工程中,采用MVC架构,分为表现层,业务层,数据访问层,所有的业务模块...【详细内容】
2022-09-12  Tags: 架构  点击:(0)  评论:(0)  加入收藏
在介绍QP前先简单介绍一下有赞搜索平台的整体设计,方便大家快速了解QP在搜索平台中的作用。下图简单展示了一个搜索请求开始到结束的全部流程。业务通过简洁的api接入los,管理员在搜索平台新建配置并下发,完成整个搜索接...【详细内容】
2022-09-07  Tags: 架构  点击:(9)  评论:(0)  加入收藏
FreeIM 是什么?FreeIM 使用 websocket 协议实现简易、高性能(单机支持5万+连接)、集群即时通讯组件,支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能。 ImCore 已...【详细内容】
2022-09-02  Tags: 架构  点击:(14)  评论:(0)  加入收藏
前言最近一段时间一直在参与一些SaaS产品的设计,发现SaaS主产品有90%的功能基本都是通用性,其中10%各个租户都会出现定制化,比如一些页面表单字段的差异化、业务规则差异化以及...【详细内容】
2022-09-02  Tags: 架构  点击:(18)  评论:(0)  加入收藏
软件定义网络 (SDN) 是一种架构,它抽象了网络的不同、可区分的层,使网络变得敏捷和灵活,SDN 的目标是通过使企业和服务提供商能够快速响应不断变化的业务需求来改进网络控制。...【详细内容】
2022-08-30  Tags: 架构  点击:(7)  评论:(0)  加入收藏
今天带大家认识下DDD,一个听起来很垃圾却真的很牛X的设计思想,架构师必备!前言在日常工作中,接手或维护的工程,大多数使用的是三层架构,即controller、service、dao三层,在使用的过...【详细内容】
2022-08-29  Tags: 架构  点击:(25)  评论:(0)  加入收藏
架构师可以说是许多IT程序员的终极职业目标,这一岗位在技术团队中的发挥着总指挥和总架构的重要作用。因此,能力越大责任越大。一名合格的架构师需要具备多项基本能力。本文为...【详细内容】
2022-08-24  Tags: 架构  点击:(20)  评论:(0)  加入收藏
通过本文可快速了解:1.为何使用 MVI2.为何最终考虑 SharedFlow 实现3.repeatOnLifecycle + SharedFlow 实现 MVI 思路为何使用 MVIMVI 是一响应式模型,通过唯一入口入参,并从唯...【详细内容】
2022-08-23  Tags: 架构  点击:(25)  评论:(0)  加入收藏
微服务能够对企业产生积极影响。因此,了解如何处理微服务架构(MSA)以及一些微服务设计模式,一个微服务架构的一些通用目标或者设计原则是很有价值的。下面是在微服务架构方案中...【详细内容】
2022-08-16  Tags: 架构  点击:(34)  评论:(0)  加入收藏
▌哈哈电竞推荐
技术传播的价值,不仅仅体现在通过商业化产品和开源项目来缩短我们构建应用的路径,加速业务的上线速率,也体现在优秀工程师在工作效率提升、产品性能优化和用户体验改善等经验方...【详细内容】
2022-09-13  dbaplus社群  搜狐号  Tags:架构   点击:(4)  评论:(0)  加入收藏
一、微服务架构的由来在微服务架构出现之前,最常用的架构就是单体架构,俗称"一个jar(war)包打天下"。在一个jar包工程中,采用MVC架构,分为表现层,业务层,数据访问层,所有的业务模块...【详细内容】
2022-09-12  互联共商   网易号  Tags:架构   点击:(0)  评论:(0)  加入收藏
在介绍QP前先简单介绍一下有赞搜索平台的整体设计,方便大家快速了解QP在搜索平台中的作用。下图简单展示了一个搜索请求开始到结束的全部流程。业务通过简洁的api接入los,管理员在搜索平台新建配置并下发,完成整个搜索接...【详细内容】
2022-09-07  有赞coder  微信公众号  Tags:架构设计   点击:(9)  评论:(0)  加入收藏
环境搭建// maven <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId>...【详细内容】
2022-09-07  陈三岁98  今日头条  Tags:RabbitMQ   点击:(20)  评论:(0)  加入收藏
前言 在文章《小谈Springcloud中的几个主流熔断器》,我们介绍了SpingCloud架构中的几个主流熔断器,其中SpringCloud官方推荐的Resilience4j作为2020.x以后的新秀,远远没有hystr...【详细内容】
2022-09-07  程序员紫龙  今日头条  Tags:SpringCloud   点击:(17)  评论:(0)  加入收藏
Part1序 随着互联网业务复杂性慢慢提高,单机服务的架构慢慢出现了生产效率问题 微服务架构带来的有优点也有缺点,使用前需要调研清楚 微服务架构的网关设计、服务注册/发现、...【详细内容】
2022-09-06  二哥学Java  今日头条  Tags:微服务   点击:(18)  评论:(0)  加入收藏
背景kubeasz是一个利用ansible-playbook基于二进制方式自动化部署和运维k8s集群的开源项目,目前该项目最新发布版本为3.3.0,基于该版本我们可以快速实现部署最高版本为1.24.1...【详细内容】
2022-09-05  Java小文  今日头条  Tags:kubeasz   点击:(20)  评论:(0)  加入收藏
Apache Kafka 中用于错误处理的死信队列:来自 Uber 和 Crowdstrike 的替代方案、最佳实践和案例研究。识别和处理错误对于任何可靠的数据流管道都是必不可少的。这篇博文探讨...【详细内容】
2022-09-04  qaseven     Tags:Kafka   点击:(19)  评论:(0)  加入收藏
Spring Cloud 的配置服务器功能使跨系统更新微服务变得轻而易举。让我们一步一步地设置和更改属性。 使用微服务,我们创建了一个中央配置服务器,其中微服务的所有可配置参数都...【详细内容】
2022-09-04  qaseven     Tags:Microservices   点击:(14)  评论:(0)  加入收藏
前言最近一段时间一直在参与一些SaaS产品的设计,发现SaaS主产品有90%的功能基本都是通用性,其中10%各个租户都会出现定制化,比如一些页面表单字段的差异化、业务规则差异化以及...【详细内容】
2022-09-02  互联网技术集中营  今日头条  Tags:微内核   点击:(18)  评论:(0)  加入收藏
站内最新
站内热门
站内头条