微服务架构介绍及SpringCloudAlibaba组件介绍

news2024/9/24 23:21:13

单体架构vs微服务架构

单机架构

什么是单体架构

一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用。架构单体应用的方法论,我们称之为单体应用架构。(就是一个war包打天下)

单体架构示意图

在这里插入图片描述

单体架构的优缺点

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

微服务以及微服务架构

微服务的定义

  1. 英文:https://martinfowler.com/articles/microservices.html
  2. 中文:http://blog.cuicc.com/blog/2015/07/22/microservices
    微服务核心就是把传统的单机应用,根据业务将单机应用拆分为一个一个的服务,彻底的解耦,每一个服务都是提供特定的功能,一个服务只做一件事,类似进程,每个服务都能够单独部署,甚至可以拥有自己的数据库。这样的一个一个的小服务就是微服务。

此外

  1. 比如传统的单机电商应用,有 订单/支付/库存/物流/积分等模块(理解为service)
  2. 我们根据 业务模型来拆分,可以拆分为 订单服务,支付服务,库存服务,物流服务,积分服务
  3. 若不拆分的时候,我的非核心业务积分模块 出现了重大bug 导致系统内存溢出,导致整个服务宕机,若拆分之后,只是说我的积分微服务不可用,我的整个系统核心功能还是能使用

微服务的特点

  1. 独立部署,灵活扩展
    传统的单体架构是以整个系统为单位进行部署,而微服务则是以每一个独立组件(例如用户服务,商品服务)为单位进行部署。
    在这里插入图片描述
    在这里插入图片描述

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

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

微服务架构是什么?

微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。 这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。 这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。
SOA架构强调的是异构系统之间的通信和解耦合,而微服务架构强调的是系统按业务边界做细粒度的拆分和部署
微服务架构是一个架构风格, 提倡:

  1. 将一个单一应用程序开发为一组小型服务.
  2. 每个服务运行在自己的进程中
  3. 服务之间通过轻量级的通信机制(http rest api)
  4. 每个服务都能够独立的部署
  5. 每个服务甚至可以拥有自己的数据库

微服务以及微服务架构的是二个完全不同的概念。微服务强调的是服务的大小和对外提供的单一功能,而微服务架构是指把 一个一个的微服务组合管理起来,对外提供一套完整的服务。

微服务的优缺点

  • 优点:
    1. 每个服务足够小,足够内聚,代码更加容易理解,专注一个业务功能点(对比传统应用,可能改几行代码 需要了解整个系统)
    2. 开发简单,一个服务只干一个事情。(加入你做支付服务,你只要了解支付相关代码就可以了)
    3. 微服务能够被2-5个人的小团队开发,提高效率
    4. 按需伸缩,服务松耦合,每个服务都能够开发部署
    5. 前后端分离, 作为java开发人员,我们只要关系后端接口的安全性以及性能,不要去关注页面的人机交互(H5工程师)根据前后端接口协议,根据入参,返回json的回参。
    6. 一个服务可用拥有自己的数据库,也可以多个服务连接同一个数据库。
  • 缺点:
  1. 增加了运维人员的工作量,以前只要部署一个war包,现在可能需要部署成百上千个war包 (k8s+docker+jenkins )
  2. 服务之间相互调用,增加通信成本
  3. 数据一致性问题(分布式事务问题)
  4. 性能监控等,问题定位…

微服务的适用场景

  • 合适
    1. 大型复杂的项目…(来自单体架构200W行代码的恐惧)
    2. 快速迭代的项目…(来自一天一版的恐惧)
    3. 并发高的项目…(考虑弹性伸缩扩容的恐惧)
  • 不合适
    1. 业务稳定,就是修修bug ,改改数据
    2. 迭代周期长 发版频率 一二个月一次.

Spring Cloud 微服务技术栈

介绍

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

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

SpringCloud微服务架构生态圈

在这里插入图片描述

Spring Cloud Netflix包含的组件:

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

Spring Cloud Alibaba技术栈

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

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 表达式)任务调度服务。
在这里插入图片描述

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

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

相关文章

C++图形开发(3):静止的小球(fillcircle函数)

文章目录 1.如何实现?2.一个小球3.多个小球4.更多花样呢? 1.如何实现? 要实现在图形界面得到一个小球,我们的graphics库提供了一个函数: fillcircle();其格式为: fillcircle(x轴坐标,y轴坐标,半径);2.一个小球 现写…

MATLAB App Designer基础教程 Matlab GUI入门(四)

坐标轴控件 axis 函数绘图方法技巧 作用: 绘制函数图像显示图像(jpg png tiff) 学习内容 App designer中 plot 和命令行中的 plot函数的不同;如何在坐标轴空间中显示两个函数图像;智能缩进 (Ctrl I&am…

【洛谷】P3386 【模板】二分图最大匹配(匈牙利算法)

ACcode: #include<bits/stdc.h> using namespace std; #define int long long const int N5e210, M1e510; int n,m,k,ans; struct E{//链式向前星存储图 int v,next; }e[M]; int head[N],cnt;int match[N];//村女生i的男朋友 bool vis[N];//存女生i是否被访问过 void …

three.js应用cannon物理引擎设置物体的相互作用

一、cannon物理引擎介绍 cannon官网地址&#xff1a;https://pmndrs.github.io/cannon-es/ Cannon.js 是一个基于 JavaScript 的开源 3D 物理引擎&#xff0c;可以用于开发和模拟真实世界中的物理效果。它提供了一系列的物理模拟功能&#xff0c;包括刚体碰撞、重力、碰撞检测…

OpenAI Gym入门与实操(2)

本文内容参考&#xff1a; Getting Started With OpenAI Gym | Paperspace Blog&#xff0c; 【强化学习】 OpenAI Gym入门&#xff1a;基础组件&#xff08;Getting Started With OpenAI Gym: The Basic Building Blocks&#xff09;_iioSnail的博客-CSDN博客 3. 环境&#…

现代异步存储访问API探索:libaio、io_uring和SPDK

【摘要】 最近的高性能存储设备暴露了现有软件栈的低效&#xff0c;因而催生了对I/O栈的改进。Linux内核的最新API是io_uring。作者提供了第一个针对io_uring的深度研究&#xff0c;并且和libaio、SPDK比较&#xff0c;探讨它的下性能和优缺点。根据作者的发现&#xff0c;&am…

ChatGPT:对教育来说,究竟是机遇,还是风险?

ChatGPT&#xff08;Chat Generative Pre-trained Transformer&#xff09;是由美国人工智能研究实验室OpenAI推出的一款人工智能聊天机器人。作为一个大型语言模型&#xff0c;ChatGPT有效结合了大数据、大算力、强算法&#xff0c;拥有较强的语言理解和文本生成能力&#xff…

javaMail之巨坑

使用java实现邮件发送功能&#xff0c;环境&#xff1a;Foxmail 6.5&#xff0c;阿里EasyExcel生成的excel文件&#xff0c;maven依赖如下&#xff1a; <dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><ver…

MySQL - 第12节 - MySQL视图特性

目录 1.MySQL视图特性 2.基本使用 2.1.准备测试表 2.2.创建视图 2.3.修改视图影响基表 2.4.修改基表影响视图 2.5.删除视图 3.视图规则和限制 1.MySQL视图特性 视图的概念&#xff1a; • 视图是一个虚拟表&#xff0c;其内容由查询定义&#xff0c;同真实的表一样&…

一些零散的查询知识

一、all any some 表&#xff1a; all大于所有的值&#xff1a; any some:大于任意一个即可 例题&#xff1a; 大于50部门所有员工工资的人&#xff1a; 等价于&#xff1a; 二、exists关键字 1、exists查询 exists(子查询) 如果有满足条件的记录&#xff0c;那么exi…

nginx配置https加密

以下操作版本为Ubuntu2004&#xff0c;文件位置可能略有不同 https 功能 Web网站的登录页面通常都会使用https加密传输的&#xff0c;加密数据以保障数据的安全&#xff0c;HTTPS能够加密信息&#xff0c;以免敏感信息被第三方获取&#xff0c;所以很多银行网站或电子邮箱等等…

计算机网络 第二章(上)

2.1_1 物理层基本概念_哔哩哔哩_bilibili2.1_1 物理层基本概念是王道计算机考研 计算机网络的第12集视频&#xff0c;该合集共计76集&#xff0c;视频收藏或关注UP主&#xff0c;及时了解更多相关视频内容。https://www.bilibili.com/video/BV19E411D78Q/?p12&spm_id_from…

【近场社交项目】数据库系统期末设计——需求分析部分

【近场社交项目】数据库系统设计——需求分析&#x1f60e; 前言&#x1f64c;1.需求求分析(用户部分为例&#xff09;1.2用户数据字典1.2.1用户信息表&#xff08;数据结构&#xff09;&#xff1a;数据项间的关系和结构定义&#xff1a; 1.2.2.个人资料表&#xff08;数据结构…

10、SpringBoot集成Redis

总体概述 jedis-lettuce-RedisTemplate三者的联系 本地Java连接Redis常见问题 ● bind配置请注释掉 ● 保护模式设置为no ● Linux系统的防火墙设置 ● Redis服务器的IP地址和密码是否正确 ● 忘记写Redis的服务端口号和auth密码 1、集成Jedis 是什么 Jedis Client是Redis官…

【MATLAB笔记】基础函数及向量

一、基础函数绘制 版本&#xff1a;Matlab2021a 实例1&#xff1a;生成向量 >> x0:0.1:30; >> ysin(x).*cos(x); >> plot(x,y) 实例2&#xff1a;创建向量 >> xlinspace(0,2*pi); >> ysin(x) >> plot(x,y) 二、向量的点积 >> a…

ueditor富文本编辑器使用

下载百度富文本编辑器 链接&#xff1a;https://pan.baidu.com/s/1E4K8e0WCy9_L6z0-Dz3JkQ?pwdc2gf 提取码&#xff1a;c2gf <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" co…

pgrouting连通性分析

官方文档 1、安装pgrouting库 参考&#xff1a;pgrouting安装 主要涉及的两个函数&#xff1a; 1、 pgr_createTopology&#xff1a;创建空间拓扑&#xff0c;数据自动保存至新创建的表<edge_table>_vertices_pgr&#xff0c;将空间表的linestr的geometry数据拆分&…

云原生系列之管理docker容器中的数据管理实战

前言 在生产环境中使用docker,一方面需要对数据进行保存或者在多个容器之间进行数据共享; 另一方面在docker的容器被删除之后,并不会保留容器的状态信息。 想要实现docker容器的信息持久化,就涉及到docker的数据管理,今天我们就来聊聊docker数据管理那些事。 文章目录 …

Vue3:在 VSCode 中如何成功安装 Mockjs 及成功引入 Mock 的详细过程

Ⅰ、Mock 简介&#xff1a; 1、什么是 Mock&#xff1f; 其一、Mock 的解释一&#xff1a; Mock 服务是指在测试过程中对于某些复杂&#xff08;或者不太好构造&#xff09;的对象&#xff0c;用一个虚拟的对象替代它&#xff1b;对于前端来说&#xff0c;就是后台数据还没有…

Python编程入门:了解Python及其由来

在计算机编程的世界中&#xff0c;Python已经成为一门备受欢迎的高级编程语言。它的简洁、易读和功能强大使得它成为众多开发者的首选。但你是否了解Python的由来以及为什么它如此受欢迎呢&#xff1f;在本篇博客中&#xff0c;我们将一起探索Python编程语言的起源和一些相关知…