微服务之基本介绍

一、微服务架构介绍

1、微服务架构演变过程

单体应用架构->垂直应用架构一>分布式架构一>SOA架构-->微服务架构

① 单体应用架构

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

传统的单体架构,也就是单点应用,也就是早期的SSM或者SSH整合项目。

采用分层架构模式、数据库访问层、业务逻辑层、控制层,从前端到后端所有的代码都是一个人写的。

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

优点

·项目架构简单,小型项目的话,开发成本低

·项目部署在一个节点上,维护方便

缺点

·全部功能集成在一个工程中,对于大型项目来讲不易开发和维护

·项目模块之间紧密耦合,单点容错率低

·无法针对不同模块进行针对性优化和水平扩展

应用场景:政府项目、管理系统、crm、oa 适合于个人小团队开发。

② 垂直应用架构

随着访问量的逐渐增大,单一应用只能依靠增加节点来应对,但是这时候会发现并不是所有的模块都会 有比较大的访问量。

还是以上面的电商为例子,用户访问量的增加可能影响的只是用户和订单模块,但是对消息模块的影响就比较小.那么此时我们希望只多增加几个订单模块,而不增加消息模块.此时单体应用就做不 到了,垂直应用就应运而生了。

所谓的垂直应用架构,就是将原来的一个应用拆成互不相干的几个应用,以提升效率。比如我们可 以将上面电商的单体应用拆分成:

·电商系统(用户管理商品管理订单管理)

·后台系统(用户管理订单管理客户管理)

·CMS  系统(广告管理营销管理)

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

③ 分布式架构

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

优点

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

缺点

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

④ SOA架构

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

SOA面向服务架构就是基于分布式架构模式演变过来,俗称服务化,也就是面向于接口开发(服务开发)。将共同存在业务逻辑抽取成一个公共的服务,提供给其他接口实现调用,服务与服务之间采用rpc远程调用技术。

能够解决什么问题:代码冗余性问题。

SOA架构模式特点

SOA架构模式传输协议采用SOAP协议(Http/Https+XML)实现传输,在高并发情况下实现通讯该协议存在大量的冗余性传输,而且非常占用带宽,所以在后来微服务架构中使用json替代了xml。

SOA架构模式实现方案:WebService或者ESB企业服务总线,底层采用SOAP协议传输。

传统政府、银行项目还是保留的在使用WebSercice,互联网公司肯定采用http+json形式实现传输。

优点

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

缺点

-服务间会有依赖关系, 一旦某个环节出错会影响较大(服务雪崩)

·服务关心复杂,运维、测试部署困难

  1. 采用SOAP协议实现通讯,xml传输非常重,效率比较低;
  2. 服务化管理和治理设施不够完善;
  3. 依赖于中心服务发现机制;
  4. 不适合于前后分离架构模式;

⑤ 微服务架构

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

微服务架构模式就是从soa架构模式演变过来的,比SOA架构模式对服务拆分粒度会更加精细,采用前后端分离的架构模式,让专业的人去做专业的事情,可以实现高效率开发。

微服务架构中,每个服务之间都是互不影响,每个服务必须要独立部署、运维、互不影响,微服务架构模式非常轻巧、轻量级,适合于互联网公司开发模式。

服务与服务之间通讯的协议采用restful形式,数据交换格式采用Http+Json格式实现传输。整个传输过程中采用二进制,所以Http协议可以实现跨语言的传输,并且和其他语言实现通讯,所以开放平台一般都是采用Http+Json格式传输。

优点

·服务原子化拆分,独立打包、部署和升级,保证每个微服务清晰的任务划分,利于扩展

·微服务之间采用Restful等轻量级http协议相互调用

缺点

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

2、SOA架构和微服务架构的区别

1通讯协议

微服务架构基于SOA架构模式演变过来,继承SOA架构优点,在微服务架构中去除了SOA架构中SOAP协议和ESB企业服务总线,改为Http+JSON形式传输接口。

ESB企业服务总线:解决多系统之间跨语言无法实现通讯的问题,对数据协议实现转换,可以提供可靠的消息传输,通过第三方框架实现。

一般情况下都是采用Http+JSON格式传输,所以没有必要使用ESB企业服务总线。

2服务拆分粒度

微服务架构模式比SOA架构模式粒度更加精细,提倡让专业的人去做专业的事情,目的是实现高效率的开发,每个服务与服务之间都互不影响,每个服务都是独立数据库、Redis连接、MQ等,并且都是实现独立部署,整个服务架构更加轻巧、轻量级。

在SOA架构中,有可能存在多个服务共享同一个数据库,微服务架构更加强调每个服务都是独立数据库部署,互不影响。

3迭代

微服务的架构模式比SOA架构模式更适合于互联网公司敏捷、高效、快速迭代版本开发,因为粒度非常精细。

3、微服务架构产生的原因

  1. 微服务架构基于SOA架构演变过来的,在传统的WebService架构中有如下问题: 1)依赖中心化服务发现机制;2) 使用Soap通讯协议,通常使用XML格式来序列化通讯数据,xml格式非常喜欢重,比较占宽带传输;3)服务化管理和治理设施不完善
  2. 高并发和高访问量的需求:随着数据时代的发展,高访问量和高并发量越来越常见。传统的单体应用架构在处理海量数据访问时显得力不从心,难以满足新时代的需求。为了更好地应对高并发和海量数据的问题,微服务架构应运而生,通过将复杂的单体应用拆分成多个小服务单元,提高了系统的可扩展性和可用性。
  3. 技术发展的推动:随着技术的发展,各种新技术和新工具不断涌现,为微服务架构的实现提供了可能。例如,容器技术(如Docker)和自动化部署工具(如Kubernetes)使得服务的独立部署和管理变得更加容易;轻量级通信机制(如HTTP RESTful API)使得服务之间的通信更加灵活和高效。
  4. 业务快速变化的需求:在快速变化的业务环境下,企业需要能够快速响应市场变化和客户需求。微服务架构允许团队根据需要对单个服务进行快速开发和部署,从而快速适应变化的市场需求。这种灵活性使得微服务架构成为现代软件开发的重要趋势之一。

4、为什么我们要使用SpringCloud

SpringCloud并不是rpc远程调用框架,而是一套全家桶的微服务解决框架,理念就是解决我们在微服务架构中遇到的任何问题。

例如:服务注册中心、分布式配置、服务保护等。

SpringCloud 微服务架构思想

SpringCloud 属于微服务全家桶框架 解决我们在微服务架构中遇到难题。

5、微服务架构中常见问题

1.分布式服务注册中心(服务治理) Eureka、Zookeeper、Consule、Nacos、Redis、数据库等;

2.分布式配置中心 SpringCloud Config、携程阿波罗、Nacos Config;

3.  分布式事务解决方案(MQ最终一致性/LCN(已经淘汰)/ Seata(阿里背书))

4.  分布式任务调度平台(xxl-job、elastic job、阿里巴巴Scheduler)

5.分布式日志采集系统ELK+Kafka

6.分布式服务追踪与调用链Zipkin、skywalking等。

7.分布式锁(Redis(Redisson)/Zookeeper(Curator)实现分布式锁)

8.服务的接口保护(hystrix/sentinel)

这么多小服务,如何管理他们?(服务治理注册中心[服务注册发现剔除])

·这么多小服务,他们之间如何通讯?(restful rpc)

·这么多小服务,客户端怎么访问他们?(网关)

·这么多小服务, 一旦出现问题了,应该如何自处理?(容错)

·这么多小服务, 一旦出现问题了,应该如何排错?(链路追踪)

6、SpringCloud第一代与第二代的区别

SpringCloud第一代:

SpringCloud Config 分布式配置中心

SpringCloud Netflix 核心组件

Eureka:服务治理

Hystrix:服务保护框架

Ribbon:客户端负载均衡器

Feign:基于ribbon和hystrix的声明式服务调用组件

Zuul: 网关组件,提供智能路由、访问过滤等功能。

SpringCloud第二代(自己研发)和优秀的组件组合:

Spring Cloud Gateway 网关

Spring Cloud Loadbalancer 客户端负载均衡器

Spring Cloud r4j(Resilience4J) 服务保护

Spring Cloud Alibaba Nacos 服务注册

Spring Cloud Alibaba Nacos 分布式配置中心

Spring Cloud Alibaba Sentinel服务保护

SpringCloud Alibaba Seata分布式事务解决框架

Alibaba Cloud OSS 阿里云存储

Alibaba Cloud SchedulerX 分布式任务调度平台

Alibaba Cloud SMS 分布式短信系统

7、为什么Alibaba要推出SpringCloud组件

目的就是为了对阿里云的产品实现扩展。

SpringCloud与alibaba相结合,技术上有人负责更新新的组件,也还可以继续使用Spring社区的技术,阿里另外一方面也可以推广一波阿里云和各种商业软件,双赢局面。于是SpringCloud Alibaba诞生了

二、微服务概念名词

1、服务治理概念

在RPC远程调用过程中,服务与服务之间依赖关系非常大,服务Url地址管理非常复杂,所以这时候需要对我们服务的url实现治理,通过服务治理可以实现服务注册与发现、负载均衡、容错等。

2、服务注册中心概念

每次调用该服务如果地址直接写死的话,一旦接口发生变化的情况下,这时候需要重新发布版本才可以该接口调用地址,所以需要一个注册中心统一管理我们的服务注册与发现。

注册中心:我们的服务注册到我们注册中心,key为服务名称、value为该服务调用地址,该类型为集合类型。Eureka、consul、zookeeper、nacos等。

服务注册:我们生产者项目启动的时候,会将当前服务自己的信息地址注册到注册中心。

服务发现: 消费者从我们的注册中心上获取生产者调用的地址(集合),在使用负载均衡的策略获取集群中某个地址实现本地rpc远程调用。

3、服务接口调用

生产者:提供接口被其他服务调用

消费者:调用生产者接口实现消费

服务注册:将当前服务地址注册到nacos注册中心

服务发现:

三、版本对应表

在引入微服务相关依赖时,需要注意其版本问题,防止版本冲突

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

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

相关文章

从哲学层面谈稳定性建设

背景 我(姓名:黄凯,花名:兮之)在阿里工作了五年,一直在一个小团队从事电商的稳定性工作。看了很多稳定性相关的文档,很少有能把稳定性说明白的文档。也有一些文档也能把涉及的方方面面说清楚&a…

【代码随想录】【算法训练营】【第32天】 [122]买卖股票的最佳时机II [376]摆动序列 [53]最大子序和

前言 思路及算法思维,指路 代码随想录。 题目来自 LeetCode。 day 32,一个不上班的周六,坚持一了一点~ 题目详情 [122] 买卖股票的最佳时机II 题目描述 122 买卖股票的最佳时机II 解题思路 前提:单链表 删除元素 思路&a…

Linux基础I/O

一&#xff0c;系统文件I/O 写文件: #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <string.h> int main() {umask(0);int fd open("myfile", O_WRO…

doris FE 在Windows环境下编译调试开发环境

前言&#xff1a; doris fe 在win下调试运行&#xff0c;和正常java项目有一些差异&#xff0c;主要是有与be&#xff08;c&#xff09;通信代码的生成 在win环境下不能直接生成&#xff0c;因此需要现在linux下生成之后&#xff0c;再拷贝到本地来&#xff0c;然后进行编译&a…

C++笔试强训day42

目录 1.最大差值 2.兑换零钱 3.小红的子串 1.最大差值 链接https://www.nowcoder.com/practice/a01abbdc52ba4d5f8777fb5dae91b204?tpId182&tqId34396&rp1&ru/exam/company&qru/exam/company&sourceUrl%2Fexam%2Fcompany&difficulty2&judgeSta…

每日5题Day19 - LeetCode 91 - 95

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;91. 解码方法 - 力扣&#xff08;LeetCode&#xff09; class Solution {public int numDecodings(String s) {int n s.length();//注意我们dp的范围是n1int[] d…

面试官:前端实现图片懒加载怎么做?这不是撞我怀里了嘛!

前端懒加载&#xff08;也称为延迟加载或按需加载&#xff09;是一种网页性能优化的技术&#xff0c;主要用于在网页中延迟加载某些资源&#xff0c;如图片、视频或其他媒体文件&#xff0c;直到它们实际需要被用户查看或交互时才进行加载。这种技术特别适用于长页面或包含大量…

【JavaEE】Spring IoCDI详解

一.基本概念 1.Ioc基本概念 Ioc: Inversion of Control (控制反转), 也就是说 Spring 是⼀个"控制反转"的容器. 什么是控制反转呢? 也就是控制权反转. 什么的控制权发发了反转? 获得依赖对象的过程被反转了也就是说, 当需要某个对象时, 传统开发模式中需要自己通…

美银美林:看好铜价涨到12000美元,这类铜矿企业弹性更大

美银美林指出&#xff0c;考虑到能源转型以及AI投资热潮对铜的需求巨大&#xff0c;到2026年铜供需缺口有望扩大一倍。给予紫金矿业、江西铜业等多家巨头买入评级&#xff0c;并认为一旦铜价上行&#xff0c;KGHM等规模较小、成本较高的企业的利润增长可能更为显著。 高盛、花…

python中while循环实现九九乘法表

i 1while i < 9: # 控制行的循环j 1while j < i: # 控制每行的输出print(f"{j}*{i}{j * i}\t", end"")j 1print()i 1运行截图&#xff1a;

Cweek4+5

C语言学习 十.指针详解 6.有关函数指针的代码 代码1&#xff1a;(*(void (*)())0)(); void(*)()是函数指针类型&#xff0c;0是一个函数的地址 (void(*)())是强制转换 总的是调用0地址处的函数&#xff0c;传入参数为空 代码2&#xff1a;void (*signal(int, void(*)(int))…

ENSP校园网设计实验

前言 哈喽&#xff0c;我是ICT大龙。本次更新了使用ENSP仿真软件设计校园网实验。时间比较着急&#xff0c;可能会有错误&#xff0c;欢迎大家指出。 获取本次工程文件方式在文章结束部分。 拓扑设计 拓扑介绍---A校区 如图&#xff0c;XYZ大学校园网设计分为3部分&#xff0…

JDK下载安装Java SDK

Android中国开发者官网 Android官网 (VPN翻墙) 方案1&#xff1a;通过brew命令 下载OracleJDK(推荐) brew --version //是否已存在homebrew环境 brew install --cask oracle-jdk //通过brew命令直接下载并安装OracleJDK(VPN、登录密码) java -version //验证JDK是否下载并安装…

UI学习的案例——照片墙

照片墙案例 在实现照片墙案例之前先讲一下userInteractionEnable这个属性。 首先这个属性属于UIView&#xff0c;这个属性是bool类型&#xff0c;如果为YES的话&#xff0c;这个UIView会接受有关touch和keyboard的相关操作&#xff0c;然后UIView就可以通过相应的一些方法来处…

启动xv6遇坑记录

我是在VMware上的Ubuntu22.04.4搭建的&#xff0c;启动xv6遇到超多bug&#xff0c;搞了好几天&#xff0c;所以记录一下。 目录 git push的时候报错 make qemu缺少包 运行make qemu时卡住 可能有影响的主机设置 git push的时候报错 remote: Support for password authent…

TMS320F280049学习3:烧录

TMS320F280049学习3&#xff1a;烧录 文章目录 TMS320F280049学习3&#xff1a;烧录前言一、烧录RAM二、烧录FLASH总结 前言 DSP的烧录分为两种&#xff0c;一种是将程序烧录到RAM中&#xff0c;一种是烧录到FLASH中&#xff0c;烧录ARM中的程序&#xff0c;只要未掉电&#x…

黑马集成电路应用开发入门课程

"黑马集成电路应用开发入门课程"旨在引导学员了解集成电路应用开发的基础知识和技能。课程内容涵盖集成电路原理、设计流程、应用开发工具等&#xff0c;通过实践项目和案例分析&#xff0c;帮助学员掌握集成电路应用开发的核心概念和方法&#xff0c;为未来在该领域…

轻松上手MYSQL:SQL优化之Explain详解

​​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL应用》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 文章目录 一、Explain1.1 explain作用1.2 explain列说明idselect_typetableparti…

Leetcode:三数之和

题目链接&#xff1a;15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 普通版本&#xff08;排序 双指针法&#xff09; 分析&#xff1a; 1、我们可以通过三个循环嵌套找到符合题目要求的三元组组合 2、但由于题目要求中的三元组i、j、k并不要求连续&#xff0c;所以会…

彩虹易支付最新版源码

源码简介 彩虹易支付最新版源码&#xff0c;更新时间为5.1号 2024/05/01&#xff1a; 1.更换全新的手机版支付页面风格 2.聚合收款码支持填写备注 3.后台支付统计新增利润、代付统计 4.删除结算记录支持直接退回商户金额 安装环境 1.PHP版本>7.4 2.Mysql数据库 安装教…