SpringCloud——微服务介绍+系统架构

news2024/9/17 8:44:28

目录

1. 微服务介绍

2.系统架构演变

3. 单体应用架构

3.1优点:

* 项目架构简单,小型项目的话, 开发成本低* 项目部署在一个节点上, 维护方便

3.2缺点:

* 全部功能集成在一个工程中,对于大型项目来讲不易开发和维护* 项目模块之间紧密耦合,单点容错率低* 无法针对不同模块进行针对性能优化和水平扩展

4.垂直应用架构

拆分完毕之后优点

* 系统拆分实现了流量分担,解决了并发问题,而且可以针对不同模块进行优化和水平扩展* 一个系统的问题不会影响到其他系统,提高容错率

拆分完毕之后缺点

* 系统之间相互独立, 无法进行相互调用* 系统之间相互独立, 会有重复的开发任务

5. 分布式架构

优点:

* 抽取公共的功能为服务层,提高代码复用性

缺点:

* 系统间耦合度变高,调用关系错综复杂,难以维护

6.SOA架构

优点:

* 使用注册中心解决了服务间调用关系的自动调节

缺点:

* 服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 )* 服务关系复杂,运维、测试部署困难

7.微服务架构

优点:

* 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展* 微服务之间采用Restful等轻量级http协议相互调用

缺点:

* 分布式系统开发的技术成本高(容错、分布式事务等)

7.1 微服务架构介绍

7.3 微服务架构的常见问题

8. 微服务架构的常见概念

8.1 服务治理

8.2 服务调用

8.3 服务网关

8.4 服务容错

8.5 链路追踪

9. 微服务架构的常见解决方案

9.1 ServiceComb

9.2SpringCloud

9.3 SpringCloud Alibaba

9.3.1 SpringCloud Alibaba介绍

9.3.2  主要功能

9.4  组件


1. 微服务介绍

微服务架构是一项在云中部署应用和服务的新技术。大部分围绕微服务的争论都集中在容器或其他技术是否能很好的实施微服务,而红帽说API应该是重点。

微服务可以在“自己的程 序”中运行,并通过“轻量级设备与HTTP型API进行沟通”。关键在于该服务可以在自己的程序中运行。通过这一点我们就可以将服务公开与微服务架构(在现有系统中分布一个API)区分开来。在服务公开中,许多服务都可以被内部独立进程所限制。如果其中任何一个服务需要增加某种功能,那么就必须缩小进程范围。在微服务架构中,只需要在特定的某种服务中增加所需功能,而不影响整体进程的架构。

2.系统架构演变

随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。
从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构--->垂直应用架构--->分布
式架构--->SOA架构--->微服务架构,当然还有悄然兴起的Service Mesh(服务网格化
)。
接下来我们就来了解一下每种系统架构是什么样子的, 以及各有什么优缺点

3. 单体应用架构

互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,
样可以减少开发、部署和维护的成本。

比如说一个电商系统,里面会包含很多用户管理,商品管理,订单管理,物流管理等等很多模块,
我们会把它们做成一个web项目,然后部署到一台**tomcat服务器**上。

 

3.1优点:

* 项目架构简单,小型项目的话, 开发成本低
* 项目部署在一个节点上, 维护方便

3.2缺点:

* 全部功能集成在一个工程中,对于大型项目来讲不易开发和维护
* 项目模块之间紧密耦合,单点容错率低
* 无法针对不同模块进行针对性能优化和水平扩展

4.垂直应用架构

随着访问量的逐渐增大,单一应用只能依靠增加节点来应对,但是这时候会发现并不是所有的模块都会有比较大的访问量.
还是以上面的电商为例子, 用户访问量的增加可能影响的只是用户和订单模块, 但是对消息模块的影响就比较小.

那么此时我们希望只多增加几个订单模块, 而不增加消息模块. 此时单体应用就做不到了, 垂直应用就应运而生了,所谓的垂直应用架构,就是将原来的一个应用拆成互不相干的几个应用,以提升效率。

比如我们可以将上面电商的单体应用拆分成:

* 电商系统(用户管理 商品管理 订单管理)
* 后台系统(用户管理 订单管理 客户管理)
* CMS系统(广告管理 营销管理)

这样拆分完毕之后,一旦用户访问量变大,只需要增加电商系统的节点就可以了,而无需增加后台
和CMS的节点。

 

拆分完毕之后优点

* 系统拆分实现了流量分担,解决了并发问题,而且可以针对不同模块进行优化和水平扩展
* 一个系统的问题不会影响到其他系统,提高容错率

拆分完毕之后缺点

* 系统之间相互独立, 无法进行相互调用
* 系统之间相互独立, 会有重复的开发任务

5. 分布式架构

当垂直应用越来越多,重复的业务代码就会越来越多。这时候,我们就思考可不可以将重复的代码
抽取出来,做成统一的业务层作为独立的服务,然后由前端控制层调用不同的业务层服务呢?
这就产生了新的分布式系统架构。它将把工程拆分成表现层和服务层两个部分,服务层中包含业务
逻辑。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。

 

优点:

* 抽取公共的功能为服务层,提高代码复用性

缺点:

* 系统间耦合度变高,调用关系错综复杂,难以维护

6.SOA架构

在分布式架构下,当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加
一个调度中心对集群进行实时管理。此时,用于资源调度和治理中心(SOA :Service Oriented Architecture,面向服务的架构)是关键。

 

优点:

* 使用注册中心解决了服务间调用关系的自动调节

缺点:

* 服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 )
* 服务关系复杂,运维、测试部署困难

7.微服务架构

微服务架构在某种程度上是面向服务的架构SOA继续发展的下一步,它更加强调服务的"彻底拆分"。

 

优点:

* 服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
* 微服务之间采用Restful等轻量级http协议相互调用

缺点:

* 分布式系统开发的技术成本高(容错、分布式事务等)

7.1 微服务架构介绍

微服务架构, 简单的说就是将单体应用进一步拆分,拆分成更小的服务,每个服务都是一个可以独立运行的项目。

7.3 微服务架构的常见问题

一旦采用微服务系统架构,就势必会遇到这样几个问题:

* 这么多小服务,如何管理他们?(服务治理 注册中心[服务注册 发现 剔除])
* 这么多小服务,他们之间如何通讯?(**restful rpc**)
* 这么多小服务,客户端怎么访问他们?(网关)
* 这么多小服务,一旦出现问题了,应该如何自处理?(容错)
* 这么多小服务,一旦出现问题了,应该如何排错? (链路追踪)

对于上面的问题,是任何一个微服务设计者都不能绕过去的,因此大部分的微服务产品都针对每一
个问题提供了相应的组件来解决它们。

 

8. 微服务架构的常见概念

8.1 服务治理

服务治理就是进行服务的自动化管理,其核心是服务的自动注册与发现。
**服务注册:**服务实例将自身服务信息注册到注册中心。
**服务发现:**服务实例通过注册中心,获取到注册到其中的服务实例的信息,通过这些信息去请求它们提
供的服务。
**服务剔除**:服务注册中心将出问题的服务自动剔除到可用列表之外,使其不会被调用到。

 

8.2 服务调用

在微服务架构中,通常存在多个服务之间的远程调用的需求。

目前主流的远程调用技术有基于HTTP的RESTful接口以及基于TCP的RPC协议。

* REST(Representational State Transfer)
  这是一种HTTP调用的格式,更标准,更通用,无论哪种语言都支持http协议
* RPC(Remote Promote Call)
  一种进程间通信方式。允许像调用本地服务一样调用远程服务。RPC框架的主要目标就是让远程服 务调用更简单、透明。RPC框架负责屏蔽底层的传输方式、序列化方式和通信细节。开发人员在使
  用的时候只需要了解谁在什么位置提供了什么样的远程服务接口即可,并不需要关心底层通信细节 和调用过程。

**区别与联系**

比较项RESTful    RPC        
通讯协议HTTP一般使用TCP
性能    略低

略低

灵活度低  
应用微服务架构SOA架构

8.3 服务网关

随着微服务的不断增多,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信可能出现:

* 客户端需要调用不同的url地址,增加难度
* 在一定的场景下,存在跨域请求的问题
* 每个微服务都需要进行单独的身份认证
* 针对这些问题,API网关顺势而生。

API网关直面意思是将所有API调用统一接入到API网关层,由网关层统一接入和输出。一个网关的
基本功能有:统一接入、安全防护、协议适配、流量管控、长短链接支持、容错能力。有了网关之后,
各个API服务提供团队可以专注于自己的的业务逻辑处理,而API网关更专注于安全、流量、路由等问
题。

 

8.4 服务容错

在微服务当中,一个请求经常会涉及到调用几个服务,如果其中某个服务不可用,没有做服务容错
的话,极有可能会造成一连串的服务不可用,这就是雪崩效应。

我们没法预防雪崩效应的发生,只能尽可能去做好容错。服务容错的三个核心思想是:

* 不被外界环境影响
* 不被上游请求压垮
* 不被下游响应拖垮

 

8.5 链路追踪

随着微服务架构的流行,服务按照不同的维度进行拆分,一次请求往往需要涉及到多个服务。互联
网应用构建在不同的软件模块集上,这些软件模块,有可能是由不同的团队开发、可能使用不同的编程
语言来实现、有可能布在了几千台服务器,横跨多个不同的数据中心。因此,就需要对一次请求涉及的多个服务链路进行日志记录,性能监控即链路追踪

 

9. 微服务架构的常见解决方案

9.1 ServiceComb

 

Apache ServiceComb,前身是华为云的微服务引擎 CSE (Cloud Service Engine) 云服务,是全球首个Apache微服务顶级项目。它提供了一站式的微服务开源解决方案,致力于帮助企业、用户和开发
者将企业应用轻松微服务化上云,并实现对微服务应用的高效运维管理。

9.2SpringCloud

 

Spring Cloud是一系列框架的集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基
础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用
Spring Boot的开发风格做到一键启动和部署。
Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服
务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留
出了一套简单易懂、易部署和易维护的分布式系统开发工具包。

开发工具包:

```
Hoxton.SR9
2020-11-09
Spring Cloud Starter Build Hoxton.SR9
Spring Cloud Aws 2.2.5.RELEASE
Spring Cloud Vault 2.2.6.RELEASE
Spring Cloud Sleuth 2.2.6.RELEASE
Spring Cloud Contract 2.2.5.RELEASE
Spring Cloud Kubernetes 1.1.7.RELEASE
Spring Cloud Config 2.2.6.RELEASE
Spring Cloud Openfeign 2.2.6.RELEASE
Spring Cloud Commons 2.2.6.RELEASE
Spring Cloud Zookeeper 2.2.4.RELEASE
Spring Cloud Consul 2.2.5.RELEASE
Spring Cloud Gcp 1.2.6.RELEASE
Spring Cloud Netflix 2.2.6.RELEASE
Spring Cloud Gateway 2.2.6.RELEASE
Spring Cloud Cli 2.2.3.RELEASE
```

9.3 SpringCloud Alibaba

 

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。

9.3.1 SpringCloud Alibaba介绍

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用服
务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。

参考:

https://spring.io/projects/spring-cloud-alibaba

https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md

9.3.2  主要功能

* **服务限流降级**:默认支持 WebServlet、WebFlux, OpenFeign、RestTemplate、Spring Cloud,Gateway, Zuul, Dubbo 和 RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修
  改限流降级规则,还支持查看限流降级 Metrics 监控。
* **服务注册与发现**:适配 Spring Cloud 服务注册与发现标准,默认集成了 Ribbon 的支持。
* **分布式配置管理**:支持分布式系统中的外部化配置,配置更改时自动刷新。
* **消息驱动能力**:基于 Spring Cloud Stream 为微服务应用构建消息驱动能力。
* **分布式事务**:使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。
* **阿里云对象存储**:阿里云提供的海量、安全、低成本、高可靠的云存储服务。支持在任何应用、任何时间、任何地点存储和访问任意类型的数据。
* **分布式任务调度**:提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
  同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有
  Worker(schedulerx-client)上执行。
* **阿里云短信服务**:覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速搭建 客户触达通道。

9.4  组件

* **Sentinel**:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳
  定性。
* **Nacos**:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
* **RocketMQ**:一款开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠
  的消息发布与订阅服务。
* **Dubbo**:Apache Dubbo™ 是一款高性能 Java RPC 框架。
* **Seata**:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。

* **Alibaba Cloud ACM**:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心
  产品。
* **Alibaba Cloud OSS**: 阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提
  供的海量、安全、低成本、高可靠的云存储服务。您可以在任何应用、任何时间、任何地点存储和
  访问任意类型的数据。
* **Alibaba Cloud SchedulerX**: 阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精 准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。
* **Alibaba Cloud SMS**: 覆盖全球的短信服务,友好、高效、智能的互联化通讯能力,帮助企业迅速
  搭建客户触达通道。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13582.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Data Catalog3.0:Modern Metadata for the Modern Data Stack

从2020年开始,在数据领域中,有一个比较流行的术语:The Modern Data Stack(现代数据堆栈),简单理解就是汇集了处理海量数据的最佳工具集。这包括在最好的工具上建立数据基础设施,如用于数据仓库的Snowflake,…

传奇外网架设常见的问题及解决办法-传奇创建人物失败/不开门/PAK显示密码错误/脚本错误

传奇外网架设常见的问题及解决办法-传奇创建人物失败/不开门/PAK显示密码错误/脚本错误 在架设传奇的时候是否有遇到无法创建人物、pak密码错误等一系列情况呢?咱们都知道是架设不对的问题,但是具体是哪部分的问题,很多同学都不清楚&#xff…

JDK与cglib动态代理

JDK动态代理 接口类 public interface Subject {void doSomething(); }接口实现 public class RealSubject implements Subject {Overridepublic void doSomething() {System.out.println("RealSubject do something");} }InvocationHandler类 package daili;imp…

随笔记:计算机基础及进制计数法

随笔记:计算机基础及进制计数法 记录一下最近接触的基本的概念,便于想看的时候随时来翻看一下。 基础理论还是比较重要滴,基础理论还是比较重要滴,基础理论还是比较重要滴 现代计算机是用 0 和 1 来表示信息的,使用的…

6、行为型模式-责任链模式

一、责任链模式描述 责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。 在这种模式中,通常每个接收者…

Unity AVPro 使用

AVPro 感觉我写的没多大用处,后面看看文档再完善一些。目前的东西是可以满足一些简单的需求的。 说明 标题名称内容Unity版本Unity 2021 .1.18f1c1AVPro 版本AVPro Video - Ultra Edition 2.5.6IDEVS2022系统版本Win 10 1909撰写日期2022 11月15日晚 需要注意的地…

防孤岛保护装置在光伏行业的应用

安科瑞 华楠 应用场景 防孤岛原理:防孤岛保护装置检测到并网点有逆功率、频率突变、 等异常数据时,即发生孤岛现象时,装置可配合断路器快速切除并网点,使本站与电网侧快速脱离,保证整个电站和相关维护人员的生命安全 …

Go:Signal信号量的简介与实践(优雅的退出)

文章目录简介一、kill与kill9的区别二、实践:优雅的退出小结简介 go中的信号量 有些信号名对应着3个信号值,这是因为这些信号值与平台相关,SIGKILL和SIGSTOP这两个信号既不能被应用程序捕获,也不能被操作系统阻塞或忽略。 一、…

智慧管廊解决方案-最新全套文件

智慧管廊解决方案-最新全套文件一、建设背景二、建设意义三、建设目标四、思路架构综合管廊目前存在的痛点1、安全防范不足2、管理技术落后3、信息孤岛问题4、多头管理问题五、建设方案六、获取 - 智慧管廊全套最新解决方案合集一、建设背景 综合管廊一般是建于城市地下用于容…

NUMA架构详解

基本概念 为什么要有多处理器架构? 由于摩尔定律的失效,单个CPU内的晶体管的数量接近于饱和状态,因此单个CPU的性能已经接近饱和状态,这时,要想提高计算机的性能,就必须朝着多核架构发展。多核架构中&…

力扣(leetcode)刷题分享,简单题(第2期)

力扣第二期介绍1. 反转链表2. 移除链表元素3. 找链表的中间节点4. 寻找链表中的倒数第k个结点5. 合并两个有序链表总结第二期介绍 本期博客主要讲解的题目是有关链表的一些经典OJ题,有一定难度,希望大家耐心看完。 1. 反转链表 题目介绍: …

VUE Date类型前端判断动态校验

需求 原本需求 一个编号和一个日期在流程中的审查人节点必填&#xff0c;于是我就直接写了前端必填校验 所有代码和名称已做更改&#xff0c;不涉及到公司隐私 <CustomFormItem label"登记编号" prop"registerNo" v-if"asset_examiner form.node …

cleanmymac2023免费版纯净mac电脑系统管家

如今&#xff0c;我们在生活的方方面面都使用支持互联网的设备——查找信息、购物、银行、做作业、玩游戏&#xff0c;以及与朋友和家人保持联系。因此&#xff0c;我们的设备包含许多关于我们的个人信息。 此外&#xff0c;随着时间的推移&#xff0c;任何伟大的设备都会变得…

VIAVI唯亚威FFL-050/-100 可视故障定位仪

不管是进行安装还是故障排查&#xff0c;可视故障定位仪 (VFL) 都是快速、 方便定位光纤问题区域的必要工具。通过显示光纤损坏的准确位置&#xff0c; 技术人员能诊断、定位并有效地修复故障点。VFL 也可用于执行连接 性测试和光纤识别。 用于检查光纤弯曲和断裂、损伤位置和…

iNFTnews|Facebook、Twitter先后扑街,社交媒体的未来属于Web3?

最近埃隆马斯克&#xff08;Elon Musk&#xff09;收购推特的举动引发了热议。一方面&#xff0c;一些用户认为这位特立独行、做事说一不二的亿万富翁可以真正充分发挥平台的巨大潜力。但另外一部分人却因此担忧互联网未来的发展。 想想看&#xff0c;推特是世界上用户最多的社…

javaweb之会话技术

Cookie Cookie的基本使用 对于Cookie的使用&#xff0c;我们更关注的应该是后台代码如何操作Cookie&#xff0c;对于Cookie的操作主要分两大类&#xff0c;本别是发送Cookie和获取Cookie,对于上面这两块内容。 1、发送Cookie 创建Cookie对象&#xff0c;并设置数据 Cookie c…

6-1 邻接矩阵存储图的深度优先遍历

6-1 邻接矩阵存储图的深度优先遍历 分数 20 作者 DS课程组 单位 浙江大学 试实现邻接矩阵存储图的深度优先遍历。 函数接口定义&#xff1a; void DFS( MGraph Graph, Vertex V, void (*Visit)(Vertex) );其中MGraph是邻接矩阵存储的图&#xff0c;定义如下&#xff1a; t…

35岁互联网人只会被清退,是我听过最大的谎言

作为一个在测试行业摸爬滚打11年的老鸟&#xff0c;距离35岁还有两个月&#xff0c;目前在一家互联网公司担任 测试总监 的岗位。回看这些年的进阶之路&#xff0c;能做到今天的职位&#xff0c;关键的就是那几步。 而我认识的目前已失业和依然在做基层测试的同行&#xff0c;…

谷歌插件使用开发

谷歌插件 谷歌浏览器扩展程序&#xff1a;扩展是 Web 平台中使用的HTML、CSS、JavaScript、图像和其他文件的压缩包。可以修改用户浏览并与之交互中的web内容&#xff0c;它们还可以扩展和更改浏览器本身的行为。 开发核心 api 文档&#xff1a;link 插件主要是根据包内的mani…

mysql数据库主从同步

数据库版本 主&#xff1a;5.7.34 从&#xff1a;8.0.21 主数据库 修改mysql配置文件 my.ini&#xff08;windows&#xff09; 查看配置文件存在位置 -- 查看配置文件存在位置 show variables like %data%;修改内容 boo_db为同步的数据库名 server-id1log-binmysql-bin#目标…