微服务架构介绍 - SpringCloud Alibaba

news2024/11/28 12:35:25

1. 单体架构vs微服务架构
1.1 单机架构
1.1.1 什么是单体架构
一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构。(就是一个war包打天下)
1.1.2 单体架构示意图

1.1.3 单体架构的优缺点
优点:
①: 架构简单明了,没有”花里胡哨“的问题需要解决。
②:开发,测试,部署简单(尤其是运维人员 睡着都会笑醒)
缺点:
①:随着业务扩展,代码越来越复杂,代码质量参差不齐(开发人员的水平不一),会让你每次提交代码 ,修改每一个小bug都是心惊胆战的。
②: 部署慢(由于单体架构,功能复杂) 能想像下一个来自200W+代码部署的速度(15分钟)
③: 扩展成本高,根据单体架构图 假设用户模块是一个CPU密集型的模块(涉及到大量的运算),那么我们需要替换更加牛逼的CPU,而我们的订单模块是一个IO密集模块(涉及大量的读写磁盘),那我们需要替换更加牛逼的内存以及高效的磁盘。但是我们的单体架构上 无法针对单个功能模块进行扩展,那么就需要替换更牛逼的CPU,更牛逼的内存,更牛逼的磁盘,价格蹭蹭的往上涨。
④: 阻碍了新技术的发展。。。。。。比如我们的web架构模块 从struts2迁移到springboot,那么就会成为灾难

1.2 微服务以及微服务架构

1.2.1 微服务的定义
①:英文:https://martinfowler.com/articles/microservices.html
②: 中文:http://blog.cuicc.com/blog/2015/07/22/microservices
微服务核心就是把传统的单机应用,根据业务将单机应用拆分为一个一个的服务,彻底的解耦,每一个服务都是提供特定的功能,一个服务只做一件事,类似进程,每个服务都能够单独部署,甚至可以拥有自己的数据库。这样的一个一个的小服务就是微服务。
①: 比如传统的单机电商应用,有 订单/支付/库存/物流/积分等模块(理解为service)
②: 我们根据 业务模型来拆分,可以拆分为 订单服务,支付服务,库存服务,物流服务,积分服务
③: 若不拆分的时候,我的非核心业务积分模块 出现了重大bug 导致系统内存溢出,导致整个服务宕机,若拆分之后,只是说我的积分微服务不可用,我的整个系统核心功能还是能使用
1.2.2 微服务的特点
1)独立部署,灵活扩展
传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(例如用户服务,商品服务)为单位进行部署。


2)资源的有效隔离
微服务设计的原则之一,就是每一个微服务拥有独立的数据源,假如微服务A想要读写微服务B的数据库,只能调用微服务B对外暴露的接口来完成。这样有效避免了服务之间争用数据库和缓存资源所带来的问题。

3)团队组织架构的调整
微服务设计的思想也改变了原有的企业研发团队组织架构。传统的研发组织架构是水平架构,前端有前端的团队,后端有后端的团队,DBA有DBA的团队,测试有测试的团队。而微服务的设计思想对团队的划分有着一定的影响,使得团队组织架构的划分更倾向于垂直架构,比如用户业务是一个团队来负责,支付业务是一个团队来负责。

1.2.3 微服务架构是什么?
微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。
SOA架构强调的是异构系统之间的通信和解耦合,而微服务架构强调的是系统按业务边界做细粒度的拆分和部署
微服务架构是一个架构风格, 提倡:
①:将一个单一应用程序开发为一组小型服务.
②:每个服务运行在自己的进程中
③:服务之间通过轻量级的通信机制(http rest api)
④:每个服务都能够独立的部署
⑤:每个服务甚至可以拥有自己的数据库
微服务以及微服务架构的是二个完全不同的概念。微服务强调的是服务的大小和对外提供的单一功能,而微服务架构是指把 一个一个的微服务组合管理起来,对外提供一套完整的服务。
1.2.3 微服务的优缺点
优点:
①:每个服务足够小,足够内聚,代码更加容易理解,专注一个业务功能点(对比传统应用,可能改几行代码 需要了解整个系统)
②: 开发简单,一个服务只干一个事情。(加入你做支付服务,你只要了解支付相关代码就可以了)
③: 微服务能够被2-5个人的小团队开发,提高效率
④: 按需伸缩,服务松耦合,每个服务都能够开发部署
⑤: 前后端分离, 作为java开发人员,我们只要关系后端接口的安全性以及性能,不要去关注页面的人机交互(H5工程师)根据前后端接口协议,根据入参,返回json的回参。
⑥:一个服务可用拥有自己的数据库,也可以多个服务连接同一个数据库。
缺点:
①:增加了运维人员的工作量,以前只要部署一个war包,现在可能需要部署成百上千个war包 (k8s+docker+jenkins )
②: 服务之间相互调用,增加通信成本
③:数据一致性问题(分布式事务问题)
④:性能监控等,问题定位…
1.2.4)微服务的适用场景
合适
①:大型复杂的项目…(来自单体架构200W行代码的恐惧)
②:快速迭代的项目…(来自一天一版的恐惧)
③:并发高的项目…(考虑弹性伸缩扩容的恐惧)
不合适
①:业务稳定,就是修修bug ,改改数据
②:迭代周期长 发版频率 一二个月一次.

2.Spring Cloud 微服务技术栈
2.1)介绍
Spring Cloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。
Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)。

官网: https://spring.io/projects/spring-cloud
中文文档: https://www.springcloud.cc/
Spring Cloud中国社区:http://springcloud.cn/

2.2) SpringCloud微服务架构生态圈

2.3) Spring Cloud Netflix包含的组件:
Eureka,服务注册和发现,它提供了一个服务注册中心、服务发现的客户端,还有一个方便的查看所有注册的服务的界面。 所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。
Zuul,网关,所有的客户端请求通过这个网关访问后台的服务。他可以使用一定的路由配置来判断某一个URL由哪个服务来处理。并从Eureka获取注册的服务来转发请求。
Ribbon,即负载均衡,Zuul网关将一个请求发送给某一个服务的应用的时候,如果一个服务启动了多个实例,就会通过Ribbon来通过一定的负载均衡策略来发送给某一个服务实例。
Feign,服务客户端,服务之间如果需要相互访问,可以使用RestTemplate,也可以使用Feign客户端访问。它默认会使用Ribbon来实现负载均衡。
Hystrix,监控和断路器。我们只需要在服务接口上添加Hystrix标签,就可以实现对这个接口的监控和断路器功能。
Hystrix Dashboard,监控面板,他提供了一个界面,可以监控各个服务上的服务调用所消耗的时间等。
Turbine,监控聚合,使用Hystrix监控,我们需要打开每一个服务实例的监控信息来查看。而Turbine可以帮助我们把所有的服务实例的监控信息聚合到一个地方统一查看。这样就不需要挨个打开一个个的页面一个个查看。

3. Spring Cloud Alibaba技术栈
同 Spring Cloud 一样,Spring Cloud Alibaba 也是一套微服务解决方案,包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。
依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。
作为 Spring Cloud 体系下的新实现,Spring Cloud Alibaba 跟官方的组件或其它的第三方实现如 Netflix, Consul,Zookeeper 等对比,具备了更多的功能:


3.1) Spring Cloud Alibaba 包含组件
阿里开源组件
Nacos:一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Sentinel:把流量作为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。
RocketMQ:开源的分布式消息系统,基于高可用分布式集群技术,提供低延时的、高可靠的消息发布与订阅服务。
Dubbo:在国内应用非常广泛的一款高性能 Java RPC 框架。
Seata:阿里巴巴开源产品,一个易于使用的高性能微服务分布式事务解决方案。
Arthas:开源的Java动态追踪工具,基于字节码增强技术,功能非常强大。

阿里商业化组件
作为一家商业公司,阿里巴巴推出 Spring Cloud Alibaba,很大程度上市希望通过抢占开发者生态,来帮助推广自家的云产品。
Alibaba Cloud ACM:一款在分布式架构环境中对应用配置进行集中管理和推送的应用配置中心产品。
Alibaba Cloud OSS:阿里云对象存储服务(Object Storage Service,简称 OSS),是阿里云提供的云存储服务。
Alibaba Cloud SchedulerX:阿里中间件团队开发的一款分布式任务调度产品,提供秒级、精准的定时(基于 Cron 表达式)任务调度服务。

3.2)Spring Cloud Alibaba版本选择
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E

版本选择: Spring Cloud Alibaba 2.2.8.RELEASE
父pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 [https://maven.apache.org/xsd/maven-4.0.0.xsd">](https://maven.apache.org/xsd/maven-4.0.0.xsd%22%3E)
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.tuling.mall</groupId>
    <artifactId>vip-spring-cloud-alibaba</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>vip-spring-cloud-alibaba</name>
    <packaging>pom</packaging>
    <description>Demo project for Spring Cloud Alibaba</description>

    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
        <spring-cloud-alibaba.version>2.2.8.RELEASE</spring-cloud-alibaba.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

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

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

相关文章

Service:微服务架构的应对之道

Service 的工作原理和 LVS、Nginx 差不多&#xff0c;Kubernetes 会给它分配一个静态 IP 地址&#xff0c;然后它再去自动管理、维护后面动态变化的 Pod 集合&#xff0c;当客户端访问 Service&#xff0c;它就根据某种策略&#xff0c;把流量转发给后面的某个 Pod。 Service 使…

小程序form表单验证,validate 在更新数据以后不能验证?还是提示同样的错误

报错&#xff1a; 一直报手机号码必须填写&#xff0c;但是我已经填写了。 解决&#xff1a; 花了2个小时&#xff0c;最后发布是模式models写错了。 改完之后&#xff0c;终于提示别的错误了&#xff1a; 源码&#xff1a; //wxml <view class"welcome">欢…

一款挖掘xss漏洞的工具

xsshelp 闲着没事随便写的一个辅助挖掘xss漏洞的工具&#xff08;主要手懒为了省事&#xff0c;就把每回挖xss的一个比较好用的思路简单给用工具实现了下&#xff09; xsshelp version: 1.0.0Usage: [-ut] [-u url] [-t thread] [-h help]Options: -h this help -t intth…

一文搞清楚专利申请全部流程

专利检索网站&#xff1a;https://pss-system.cponline.cnipa.gov.cn/conventionalSearch 一、专利的相关概念 专利包含三种含义&#xff1a;1.专利权2.受到专利保护的发明创造3.专利文献 专利的类别&#xff1a;1.发明2.实用新型3.外观设计&#xff08;具体含义自行上网查询…

电脑提示缺少msvcp120.dll怎么办?分享几个靠谱的解决方法

msvcp120.dll是Microsoft的一个动态链接库文件。它是许多应用程序和游戏所依赖的一个重要文件&#xff0c;它包含了一些用于C程序开发的函数和组件。当你在运行某个程序时&#xff0c;如果系统找不到msvcp120.dll文件&#xff0c;就会出现错误提示&#xff0c;例如“找不到msvc…

ceph安装部署

Ceph 简介 存储基础 单机存储设备 单机存储的问题 分布式存储的类型 分布式存储&#xff08;软件定义的存储 SDS&#xff09; Ceph 架构 Ceph 核心组件 ​编辑 Pool中数据保存方式支持两种类型 OSD 存储后端 Ceph 数据的存储过程 Ceph 集群部署 基于 ceph-deploy …

whisper报错:UserWarning: FP16 is not supported on CPU; using FP32 instead

报错&#xff1a; PS D:\> whisper.exe .\dz.wav --language en --model medium C:\xxPython310\lib\site-packages\whisper\transcribe.py:114: UserWarning: FP16 is not supported on CPU; using FP32 insteadwarnings.warn("FP16 is not supported on CPU; using …

fl studio20怎么设置中文?flstudio21怎么没有language选项?

fl studio20怎么设置中文&#xff1f; fl studio 20&#xff08;Fruity Loops Studio&#xff09;是一款专业的音频处理、音乐编曲和制作软件&#xff0c;也被网友称为水果音乐制作软件。它的新功能包括对DirectWave 的一些改进&#xff0c;FruityReverb 支持64 位&#xff0c;…

手把手教你配置Jenkins自动化邮件通知

完成基于Jenkins的持续集成部署后&#xff0c;自动化测试执行后&#xff0c;测试结果需要通知到相关人员&#xff0c;除了钉钉通知外我们还可以通过Email通知到对应负责人&#xff0c;这里记录一下测试结果通过Jenkins邮件通知的配置与部署 01、安装插件 方法1&#xff1a; 进…

基于Java+Swing+Mysql学生成绩管理系统

基于JavaSwingMysql学生成绩管理系统 一、系统介绍二、功能展示1.登陆2.学生成绩查询3.学生成绩添加4.学生成绩修改5.学生成绩删除 三、数据库四、其他系统实现五、获取源码 一、系统介绍 该系统实现了学生成绩的增加、修改、查询、删除 运行环境&#xff1a;eclipse、idea、…

ORB-SLAM2学习笔记3之EuRoc开源数据集运行ORB-SLAM2生成轨迹并用evo工具评估轨迹

文章目录 0 引言1 EuRoc数据集1.1 下载数据1.2 真值轨迹格式转换 2 单目ORB-SLAM22.1 运行ORB-SLAM22.2 evo评估轨迹2.2.1 载入和对比轨迹2.2.2 计算绝对轨迹误差 3 双目ORB-SLAM23.1 运行ORB-SLAM23.2 evo评估轨迹3.2.1 载入和对比轨迹3.2.2 计算绝对轨迹误差 ORB-SLAM2学习笔…

Spark(28):Spark Shuffle解析

目录 0. 相关文章链接 1. ShuffleMapStage与ResultStage 2. HashShuffle解析 2.1. 未优化的HashShuffle 2.2. 优化后的 HashShuffle 3. SortShuffle解析 3.1. 普通SortShuffle 3.2. bypass SortShuffle 0. 相关文章链接 Spark文章汇总 1. ShuffleMapStage与ResultSta…

C语言实现通讯录【文件版】——存档联系人信息

我真的无法对一个追逐梦想的少年生恨 目录 一、源码阅读注意事项 二、文件读取函数及文件读写规则 1.打开文件 2.读写文件 3.关闭文件 大家好&#xff0c;我是纪宁。 上篇文章向大家如何用C语言实现动态版的通讯录&#xff0c;这篇文章将介绍如何用C语言将通讯录的信息写…

2快速入门Spring基于XML的方式注册第一个组件

基于XML的方式注册第一个组件 开发步骤 第一步&#xff1a;创建Maven工程配置生成的pom.xml文件, 添加spring context基础依赖和junit依赖(注意根据Spring官方文档描述,Spring6需要JDK版本17) 当添加Spring的基础依赖spring context之后&#xff0c;Maven会自动关联并引入其…

【嵌入式项目】南海无线通信系统的射频子系统

前言 射频子系统是无线通行系统的重要组成部分之一。 射频子系统主要由天线、射频前端和调制解调器组成。其工作原理如下&#xff1a; 1. 发送端将数字信号转换成高频模拟信号&#xff1a;无线通行系统的控制中心或读卡器产生的一组数字信号需要通过数模转换器将其转换为模拟…

图纸加密软件哪些可以用?哪个好?

图纸加密软件是一种用于保护和加密图纸文件的工具。它们可以对图纸文件进行加密&#xff0c;以确保只有授权的人可以访问和查看这些文件。 图纸加密软件通常提供了多种加密算法和安全性措施&#xff0c;以确保图纸的保密性和安全性。此外&#xff0c;一些图纸加密软件还提供了…

Postman:postman多接口顺序执行

Runner的使用 postman不仅可以单独运行某个接口&#xff0c;postman的 Runner模块可以运行多个接口&#xff0c;可以实现真正意义上的自动化接口测试 Runner的主要功能如下 按顺序调用接口&#xff0c;执行用例&#xff1b; 批量发送请求&#xff1b; 对接口数据进行参数化…

程序员最常用的6大技术博客排行榜

自互联网发展以来&#xff0c;程序员越来越多&#xff0c;相对应的博客、论坛、社区也五花八门&#xff0c;难以抉择。这么多年用过不少博客平台&#xff0c;以下是我总结的一些程序员常用的技术博客网站。 1、CSDN CSDN博客是专业的IT技术发表平台&#xff0c;流量大、资源多…

欧美暖通现状大解析!涂鸦智慧暖通方案,强大的数据管理能力为你打造爆品

作为现代建筑领域中不可或缺的一部分&#xff0c;暖通行业近两年的增长远超行业人士的预期。主要原因在于全球高温频发、能源问题越发突出&#xff0c;各国政府、科技巨头对新能源产业、节能减排等绿色环保产业给予了极大关注和资金投入。 IMARC Group 数据显示&#xff0c;202…

FL Studio是什么软件?FL Studio2023最新更新内容

FL Studio是什么软件 FL Studio是由比利时软件公司Image-Line开发的音乐制作软件&#xff0c;它拥有丰富的音效、合成器、采样器、鼓机等工具。FL Studio支持多种音频文件格式&#xff0c;包括MIDI、MP3、WAV、OGG等&#xff0c;可以帮助用户自由地进行音乐创作。 FL Studio界…