微服务和Spring Cloud Alibaba介绍

1、微服务介绍
1.1 系统架构演变
        随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。从互联网早起到现在,系统架构大体经历了下面几个过程: 单体应用架构 —> 垂直应用架构 —> 分布 式架构—>SOA 架构 —> 微服务架构,当然还有悄然兴起的 Service Mesh( 服务网格化 ) 。 接下来我们就来了解一下每种系统架构是什么样子的, 以及各有什么优缺点。
1.1.1 单体应用架构
        互联网早期,一般的网站应用流量较小,只需一个应用,将所有功能代码都部署在一起就可以,这 样可以减少开发、部署和维护的成本。
比如说一个电商系统,里面会包含很多用户管理,商品管理,订单管理,物流管理等等很多模块, 我们会把它们做成一个web 项目,然后部署到一台 tomcat 服务器上。
优点:
        项目架构简单,小型项目的话, 开发成本低
        项目部署在一个节点上, 维护方便
缺点:
        全部功能集成在一个工程中,对于大型项目来讲不易开发和维护
        项目模块之间紧密耦合,单点容错率低
        无法针对不同模块进行针对性优化和水平扩展

1.1.2 垂直应用架构
        随着访问量的逐渐增大,单一应用只能依靠增加节点来应对,但是这时候会发现并不是所有的模块都会有比较大的访问 量.
        还是以上面的电商为例子, 用户访问量的增加可能影响的只是用户和订单模块, 但是对消息模块的影响就比较小 . 那么此时我们希望只多增加几个订单模块, 而不增加消息模块 . 此时单体应用就做不到了, 垂直应用就 应运而生了.
        所谓的垂直应用架构,就是将原来的一个应用拆成互不相干的几个应用,以提升效率。比如我们可以将上面电商的单体 应用拆分成:
电商系统 ( 用户管理 商品管理 订单管理 )
后台系统 ( 用户管理 订单管理 客户管理 )
CMS 系统 ( 广告管理 营销管理 )
这样拆分完毕之后,一旦用户访问量变大,只需要增加电商系统的节点就可以了,而无需增加后台 和CMS 的节点。
优点:
        系统拆分实现了流量分担,解决了并发问题,而且可以针对不同模块进行优化和水扩展
        一个系统的问题不会影响到其他系统,提高容错率
缺点:
        系统之间相互独立, 无法进行相互调用
        系统之间相互独立, 会有重复的开发任务
1.1.3 分布式架构
        当垂直应用越来越多,重复的业务代码就会越来越多。这时候,我们就思考可不可以将重复的代码抽取出来,做成统一 的业务层作为独立的服务,然后由前端控制层调用不同的业务层服务呢? 这就产生了新的分布式系统架构。它将把工程拆分成表现层和服务层两个部分,服务层中包含业务 逻辑。表现层只需要处理和页面的交互,业务逻辑都是调用服务层的服务来实现。
优点:
        抽取公共的功能为服务层,提高代码复用性
缺点:
        系统间耦合度变高,调用关系错综复杂,难以维护
1.1.4 SOA 架构
        在分布式架构下,当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加 一个调度中心对集群进行实时管理。此时,用于资源调度和治理中心(SOA Service Oriented Architecture)是关键。
优点 :
        使用治理中心(ESB\dubbo )解决了服务间调用关系的自动调节
缺点 :
        服务间会有依赖关系,一旦某个环节出错会影响较大( 服务雪崩 )
        服务关系复杂,运维、测试部署困难
1.1.5 微服务架构
        微服务架构在某种程度上是面向服务的架构SOA 继续发展的下一步,它更加强调服务的 " 彻底拆分 "
微服务架构与 SOA 架构的不同
        微服务架构比 SOA架构粒度会更加精细,让专业的人去做专业的事情(专注),目的提高效率,每个服务于服务之间互不影响,微服务架 构中,每个服务必须独立部署,微服务架构更加轻巧,轻量级。 SOA 架构中可能数据库存储会发生共享,微服务强调独每个服务都是单独数据库,保证每个服务于服务之间互不影响。 项目体现特征微服务架构比 SOA 架构更加适合与互联网公司敏捷开发、快速迭代版本,因为粒度非常精细。
优点:
        服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展
微服务之间采用 Restful 等轻量级 http 协议相互调用
缺点:
        分布式系统开发的技术成本高(容错、分布式事务等)
复杂性更高。各个微服务进行分布式独立部署,当进行模块调用的时候,分布式将会变得更加麻烦。
1.2 微服务架构介绍
①:英文: https://martinfowler.com/articles/microservices.html
②: 中文: http://blog.cuicc.com/blog/2015/07/22/microservices
他说微服务其实是一种架构风格 ,我们在开发一个应用的时候这个应用应该是由一组小型服务组成,每个小型服务都运行在自己的进 程内;小服务之间通过HTTP的方式进行互联互通。
1.2.1 微服务架构的常见问题
一旦采用微服务系统架构,就势必会遇到这样几个问题:
        这么多小服务,如何管理他们?( 服务治理 注册中心 [ 服务注册 发现 剔除 ]) nacos
        这么多小服务,他们之间如何通讯?(restful rpc dubbo feign) httpclient("url", 参数 ) springBoot     restTemplate("url",参数 ) ,, feign
        这么多小服务,客户端怎么访问他们?( 网关 ) gateway
        这么多小服务,一旦出现问题了,应该如何自处理?( 容错 ) sentinel
        这么多小服务,一旦出现问题了,应该如何排错? ( 链路追踪 ) skywalking
对于上面的 问题 ,是任何一个微服务设计者都不能绕过去的,因此大部分的 微服务 产品都针对每一
问题 提供了相应的组件来 解决 它们。
1.2.2 常见微服务架构
1. dubbo: zookeeper +dubbo + SpringMVC/SpringBoot
        配套 通信方式:rpc
        注册中心:zookeeper / redis
        配置中心:diamond
2.SpringCloud:全家桶+轻松嵌入第三方组件(Netflix)
        配套 通信方式:http restful
        注册中心:eruka / consul
        配置中心:config
        断 路 器:hystrix
        网关:zuul
        分布式追踪系统:sleuth + zipkin
3.SpringCloud Alibaba
Spring Cloud 以微服务为核心的分布式系统构建标准
        “分布式系统中的常见模式”给了 Spring Cloud 一个清晰的定位,即“模式”。也就是说 Spring Cloud 是针对分布式系统开发所做的通用抽象, 是标准模式的实现。这个定义非常抽象,看完之后并不能知道 Spring Cloud 具体包含什么内容。再来看一下 Spring 官方给出的一个 High Light 的 架构图,就可以对这套模式有更清晰的认识:
        可以看到这个图中间就是各个 Microservice,也就是我们的这个微服务的实现,周边周围的话就是去围绕这个微服务来去做各种辅助的信息事情。
例如分布式追踪、服务注册、配置服务等,都绕微服务运行时所依赖的必不可少的的支持性功能。我们可以得出这样一个结论:Spring Cloud 是以 微服务为核心的分布式系统的一个构建标准。
2、Spring Cloud Alibaba 介绍
        Spring Cloud Alibaba 致力于提供 微服务开发的一站式解决方案 。此项目包含开发微服务架构的必需组件,方便开发者 通过 Spring Cloud 编程模型轻松使用这些组件来开发微服务架构。 依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里分布式应用解 决方案,通过阿里中间件来迅速搭建分布式应用系统。
        根据 Jakarta 2019 年的调研报告,Spring Boot 拥有非常高的占比。熟悉 Java 语言的同学,应该对 Spring 框架都不会陌生。其倡导的依赖倒置、 面向切面编程等特性已经形成了 Java 语言的事实标准,几乎所有三方框架都会提供对 Spring 框架的支持。
3. Spring Cloud Alibaba 的定位
        既然说 Spring Cloud 是标准,那么自然少不了针对标准的实现。这里,为大家介绍下 Spring Cloud Alibaba 这套实现。先给出下面这张图帮助大 家理解 Spring Cloud Alibaba 的定位:
这里给大家这么一个公式,这个叫做:“3 加 2”。
3 指的就是图中深色的部分,其实它就是 Spring Cloud 标准,一共有 3 层。中间颜色最深的部分就是及整个微服务最核心的内容,包括了“ RPC 调用”以及“服务注册与发现”。第二层,也就是围绕着核心的这一圈,是一些辅助微服务更好的工作功能,包括了负载均衡、路由、网关、断路
器,还有就是追踪等等这些内容。再外层的话,主要是一些分布式云环境里通用能力。 “3 加 2”中的“2”,指的就是上图中最外面这一圈。这一部分就是这个我们 Spring Cloud Alibaba 的一个定义,它其实包含两个部分的内容:
右上部分 是对于 Spring Cloud 标准的实现。例如,我们通过 Dubbo 实现了 RPC 调用功能,通过 Nacos 实现了“服务注册与发现”、“分布式配 置”,通过 Sentinel 实现了断路器等等,这里就不一一列举了。
左下部分 是我们 Spring Cloud Alibaba 对阿里云各种服务的集成。可能很多同学会有这样的一个问题:为什么要加上这一部分呢?此时回头审视一 下 Spring Cloud ,它仅仅是一个微服务的一个框架。但是在实际生产过程中,单独使用微服务框架其实并不足以支撑我们去构建一个完整的系统。
所以这部分是用阿里帮助开发者完成微服务以外的云产品集成的功能。
这里可能会很多同学会有这么一个担心:是不是使用了 Spring Cloud Alibaba,就会被阿里云平台绑定呢?在此,我们明确的告诉大家,这是不会 的。为什么这么说呢?如上面说的,“3 加 2”中的 2 是被分为两个部分的。其中对 Spring Cloud 的实现是完全独立的,开发者可以只是用这部分
实现运行在任何云平台中。当然,另一部分,由于天然是对阿里云服务的集成,这部分是和平台相关的。这里给开发者充分的自由,选择只是用其中 的部分还是全部产品。当然,我们也非常欢迎开发者选择使用阿里云的全套服务,我们也会尽量保证使用整套产品时的连贯性与开发的便利性。
4. Spring Cloud 各套实现对比
Spring Cloud 作为一套标准,它的实现肯定不止一套,那么各套实现都有什么区别呢?我们来一起看一下下面这张图:
        可以发现 Spring Cloud Alibaba 是所有的实现方案中功能最齐全的。尤其是在 Netflix 停止更新了以后,Spring Cloud Alibaba 依然在持续更新和 迭代。
5. Spring Cloud Alibaba 生态
可以看到除了围绕着 Spring Cloud 的标准实现以外,还有包括的数据、资源、消息、缓存等各种类型的服务。在不同类型的服务下,也有很多具体 的产品可供用户选择。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2022年6月 电子学会青少年软件编程 中小学生Python编程 等级考试一级真题答案解析(判断题)

2022年6月Python编程等级考试三级真题解析 判断题(共10题,每题2分,共20分) 26、运行下列python代码后可绘制出下面的半径为50的圆形 import turtle turtle.color(red) turtle.penup() turtle.circle(50) turtle.pendown() 答案:错 考点分析:考查turtle模块的使用,程…

为什么阿里不推荐使用 keySet() 遍历HashMap?

为什么阿里不推荐使用 keySet() 遍历HashMap? HashMap相信所有学Java的都一定不会感到陌生,作为一个非常重用且非常实用的Java提供的容器,它在我们的代码里面随处可见。因此遍历操作也是我们经常会使用到的。HashMap的遍历方式现如今有非常多…

Java爬取哔哩哔哩视频(可视化)

链接:我的讲解视频https://www.bilibili.com/video/BV14e411Q7oG/ 本文仅供学术用途 先上图 代码 爬虫核心 import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSONObject; import com.gargoylesoftware.htmlunit.*; import org.apache.commons.…

系列二十六、idea安装javap -c

一、概述 javap -c是一个能够将.java文件反编译为.class文件的指令,例如我在idea中编写了一个Car.java文件,我想看看这个类被编译后长什么样的,就可以使用该指令进行查看。 二、配置 2.1、 Java Bytecode Decompiler File>Settings>Pl…

大数据分析与应用实验任务八

大数据分析与应用实验任务八 实验目的 进一步熟悉pyspark程序运行方式;熟练掌握pysaprk RDD基本操作相关的方法、函数。 实验任务 进入pyspark实验环境,在图形界面的pyspark命令行窗口中完成下列任务: 在实验环境中自行选择路径新建以自…

非对口专业测试人,婉拒猎头、放弃6份高薪offer,你敢信?

从非对口的国贸专业,步入测试之路;从红色旅游小城湘潭,迈入国际化都市上海。“明确方向-及时实践-谨慎选择-踏实扎根-计划未来”。她的每一步,都走得格外坚定有力......话不多说,让我们一起来看看这位小姐姐的成长故事…

PyTorch:张量与矩阵

PyTorch 是一个基于 Python 的科学计算包,专门针对深度学习研究,提供了丰富的工具和库。在 PyTorch 中,张量(tensor)是深度学习的核心数据结构,它可以看作是可以进行自动微分的多维数组。张量不仅可以代表标…

DSVPN简介

定义 动态智能VPN(Dynamic Smart Virtual Private Network),简称DSVPN,是一种在Hub-Spoke组网方式下为公网地址动态变化的分支之间建立VPN隧道的解决方案。 目的 越来越多的企业希望建立Hub-Spoke方式的IPSec VPN网络将企业总部…

Linux学习第42天:Linux RS232/485/GPS 驱动实验:天外来客

Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 Linux的学习笔记今天更新到了第42天。鉴于国往笔记内容整理中出现的问题,我尽量按照平时学习时笔记的要求进行优化。尽量不再大段大段的贴代码。而是…

解决Tomcat中文乱码

cmd乱码如图: idea中运行Tomcat控制台出现乱码: 解决办法: 找到两个idea的vmoptions配置文件,在文件中追加-Dfile.encodingUTF-8 -Dfile.encodingUTF-8保存退出。 重启idea重新运行Tomcat: maven、tomcat 超级详…

什么是 SSL?SSL/TLS是如何工作的?HTTP和HTTPS有什么区别?

SSL 代表安全套接字层,是指用于加密、保护和验证互联网上之通信的协议。尽管 SSL 在一段时间前已被称为 TLS(传输层安全性)的更新协议代替,但“SSL”仍是该技术的常用术语。 SSL/TLS 的主要用例是保护客户端和服务器之间的通信安…

解决requests库中session.verify参数失效的问题

在使用requests库进行HTTP请求时,如果在环境变量中设置了’REQUESTS_CA_BUNDLE’,并且在session对象中设置了verify参数为False,那么API请求会使用环境变量中的值而不是session对象中的值。这是因为在requests库中,当session对象中…

Find My婴儿车|苹果Find My技术与婴儿车结合,智能防丢,全球定位

婴儿车是一种为婴儿户外活动提供便利而设计的工具车,是宝宝最喜爱的散步交通工具,更是妈妈带宝宝上街购物时的必须品。随着现在三胎的放开,婴儿车市场已经迎来上升的趋势。 在智能化加持下,防丢功能的加入使得人们日益关心物品的…

深度学习YOLO图像视频足球和人体检测 - python opencv 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 卷积神经网络4 Yolov5算法5 数据集6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 深度学习YOLO图像视频足球和人体检测 该项目较为新颖,适合作为竞赛课题方向,学长非…

TEMU要求提交RSL Report 铅镉RSL邻苯项目化学物质检测报告

TEMU要求提交RSL Report 铅镉RSL邻苯项目化学物质检测报告 如果您在亚马逊上销售商品,则必须遵守所有适用的欧盟和地方法律法规,以及适用于这些商品和商品信息的亚马逊政策。要在亚马逊上销售某些商品,( xxdu2016 )您需要向我们提供 REACH 符…

mybatis-plus3.5.3.1 支持不同数据源sql适配

mybatis-plus3.5.3.1 支持不同数据源sql适配 背景 最近公司要求支持国产数据库达梦,人大金仓,高斯等数据库,这些数据库与mysql的语法有一些差异,需要做一些兼容操作。 解决问题 1.不同数据库分页不同 2.支持通过参数控制执行…

Spi机制的必要性

SpringBoot 为啥单独加载类路径下spring.factories文件中的类? SpringBoot 应用运行过程中存在两种类型的类初始化:一部分为已经提前装载到IOC容器中的bean,另一部分则为实时new的bean。 IOC容器中的bean包含:启动类所在包路径下…

Docker的3主3从redis集群配置(扩容和缩容配置)

3主3从redis集群配置 1、关闭防火墙启动docker后台服务 systemctl start docker2、新建6个docker容器redis实例 docker run -d --name redis-node-1 --net host --privilegedtrue -v /data/redis/share/redis-node-1:/data redis:6.0.8 --cluster-enabled yes --appendonly …

基于Vue+SpringBoot的城市桥梁道路管理系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统,支持…

小型机房380V断电报警门磁开关状态检测远程控制RTU

在现代社会中,小型机房起到了至关重要的作用,为各种系统和设备提供稳定的电力供应。然而,由于各种原因,如供电故障、设备故障或非法侵入等,机房的正常运行可能会受到威胁。为了保障机房的安全和可靠性,我们…
最新文章