微服务简介及其相关技术栈

目录

1、简介

2、技术栈

3、单体架构

4、分布式架构

5、微服务

6、总结


🍃作者介绍:双非本科大三网络工程专业在读,阿里云专家博主,专注于Java领域学习,擅长web应用开发、数据结构和算法,初步涉猎Python人工智能开发和前端开发。
🦅主页:@逐梦苍穹

🥡所属专栏:微服务

📕您的一键三连,是我创作的最大动力🌹

1、简介

微服务是一种软件架构风格,它将一个应用程序拆分成一组小型、独立的服务,每个服务都运行在自己的进程中,并使用轻量级的通信机制(通常是HTTP API)进行相互通信。这些小型服务被设计成可以独立部署、扩展和维护,从而提高系统的灵活性和可维护性。

以下是微服务架构的一些关键特点和优势:

  1. 模块化: 微服务将应用程序拆分成多个小型服务,每个服务负责特定的业务功能。这种模块化的设计使得开发、测试和维护变得更加简单。
  2. 独立部署: 由于每个微服务都是独立的,团队可以独立地开发、测试和部署每个服务,而不会影响整个应用程序。
  3. 弹性和可伸缩性: 微服务可以根据需求进行独立的扩展和缩减。这使得系统更容易应对变化的工作负载。
  4. 技术多样性: 不同的微服务可以使用不同的技术栈,这使得团队可以选择最适合其需求的技术和工具。
  5. 独立数据存储: 每个微服务通常有自己的数据库,这减少了数据耦合,提高了系统的可维护性。
  6. 容错性和韧性: 单个微服务的故障不会影响整个应用程序,系统可以更容易地从故障中恢复。
  7. 团队自治: 不同的团队可以负责不同的微服务,这促进了团队的自治和独立性。

尽管微服务架构提供了许多优势,但也需要考虑一些挑战,如服务发现、分布式事务、服务间通信等。引入微服务需要仔细权衡利弊,并确保团队具备适当的技能和工具来成功实施和管理微服务架构。

2、技术栈

技术栈组件

描述

Spring Boot

用于快速创建独立的、生产级别的基于Spring的应用程序

Spring MVC

一个构建Web应用程序的框架

Netflix Archaius

用于服务配置与管理的组件

阿里 Diamond

Eureka

用于服务注册与发现的组件

Consul

Zookeeper

REST

用于服务调用的方式

RPC

gRPC

Hystrix

用于实现服务熔断器的组件

Envoy

Ribbon

用于负载均衡的组件

Nginx

OpenFeign

用于服务接口调用的组件

Kafka

用于消息队列的组件

RabbitMQ

ActiveMQ

Spring Cloud Config

用于服务配置中心管理的组件

Docker

用于自动化应用程序的部署为轻量级容器

Kubernetes

用于自动部署、扩展和管理容器化应用程序

图解如下:

3、单体架构

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。

单体架构的优缺点如下:

优点:架构简单、部署成本低

缺点:耦合度高(维护困难、升级困难)

4、分布式架构

分布式架构:根据业务功能对系统做拆分,每个业务功能模块作为独立项目开发,称为一个服务。

分布式架构的优缺点:

优点:降低服务耦合、有利于服务升级和拓展

缺点:服务调用关系错综复杂

分布式架构虽然降低了服务耦合,但是服务拆分时也有很多问题需要思考:

①服务拆分的粒度如何界定?

②服务之间如何调用?

③服务的调用关系如何管理?

人们需要制定一套行之有效的标准来约束分布式架构。

5、微服务

微服务的架构特征:

单一职责:微服务拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责

自治:团队独立、技术独立、数据独立,独立部署和交付

面向服务:服务提供统一标准的接口,与语言和技术无关

隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性。做到高内聚,低耦合。

因此,可以认为微服务是一种经过良好架构设计的分布式架构方案

微服务这种方案需要技术框架来落地,全球的互联网公司都在积极尝试自己的微服务落地技术。在国内最知名的就是SpringCloud和阿里巴巴的Dubbo。

SpringCloud是目前国内使用最广泛的微服务框架。

官网地址:https://spring.io/projects/spring-cloud

SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验。

其中常见的组件包括:

另外,SpringCloud底层是依赖于SpringBoot的,并且有版本的兼容关系,如下:

企业需求:

微服务技术对比:

6、总结

  • 单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统
  • 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
  • 微服务:一种良好的分布式架构方案
    ①优点:拆分粒度更小、服务更独立、耦合度更低
    ②缺点:架构非常复杂,运维、监控、部署难度提高
  • SpringCloud是微服务架构的一站式解决方案,集成了各种优秀微服务功能组件

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

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

相关文章

wpa_supplicant交叉编译

文章目录 源码编译openssl编译libnl交叉编译WPA 开发板测试使用 源码 wpa_supplicant官网:http://w1.fi/wpa_supplicant/ GIT源:git://w1.fi/hostap.git openssl 源码: https://www.openssl.org/ libnl 源码: https://github.c…

map和set例题应用

个人主页:Lei宝啊 愿所有美好如期而遇 目录 第一题 第二题 第三题 第一题 随机链表的复制https://leetcode.cn/problems/copy-list-with-random-pointer/description/ 思路 首先遍历旧链表,并创建新节点,同时用map将旧节点与新节点…

python模型训练

目录 1、新建模型 train_model.py 2、运行模型 (1)首先会下载data文件库 (2)完成之后会开始训练模型(10次) 3、 训练好之后,进入命令集 4、输入命令:python -m tensorboard.ma…

网络工程师笔记6

ICMP协议 Internet控制报文协议ICMP(InternetControlMessage Protocol)是网络层的一个重要协议。ICMP协议用来在网络设备间传递各种差错和控制信息,它对于收集各种网络信息、诊断和排除各种网络故障具有至关重要的作用。使用基于ICMP的应用时,需要对ICMP…

Vue.js+SpringBoot开发社区买菜系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、系统设计2.1 功能模块设计2.1.1 数据中心模块2.1.2 菜品分类模块2.1.3 菜品档案模块2.1.4 菜品订单模块2.1.5 菜品收藏模块2.1.6 收货地址模块 2.2 可行性分析2.3 用例分析2.4 实体类设计2.4.1 菜品分类模块2.4.2 菜品档案模块2.4.3…

多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测

多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测 目录 多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网络多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 多输入多输出 | Matlab实现RIME-BP霜冰算法优化BP神经网…

Springboot+vue的考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的考勤管理系统(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 采用M(model)V(view)C(controller)三层…

GitHub Copilot extension activation error: ‘No access to GitHub Copilot found‘

好不容易学生认证通过了,打开vscode用copilot结果一直报这个错误。我的原因是:还未给copilot授权, 通过了学生认证后要进入这里进行授权:

Vue Html中插入本地视频(Video 标签)

在 Vue 中插入本地视频可以通过使用标签来实现。你可以将视频文件放在你的项目中的合适位置(比如assets文件夹),然后在 Vue 组件中引用这个视频文件。html同理 首先,在你的 Vue 项目中的assets文件夹下放入你的视频文件&#xff…

k8s单机部署zookeeper

(作者:陈玓玏) 拉取镜像:docker pull zookeeper;编辑yaml: apiVersion: v1 kind: Service metadata:name: zookeeperlabels:app: zookeeper spec:ports:- name: clientport: 2181protocol: TCPtargetP…

QT TCP传输文件+ui

TCPFile tcp协议传输文件 TCPFile.pro QT core gui networkclientwidget.h #include <QWidget> #include <QTcpSocket> // 通信套接字 #include <QFile>private slots:void on_pushButton_clicked();private:QTcpSocket *tcpSocket;QFile file; /…

centos7 安装 docker-compose

1、直接参考官方&#xff1a; Install Compose standalone | Docker Docs 1、安装命令 curl -SL https://github.com/docker/compose/releases/download/v2.24.6/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose 2、修改 docker-compose 执行权限 不修改执行权…

升级pycharm之后,jupyter无法识别新安装的包

import sys print(sys.executable)在jupyter中运行&#xff0c;检测一下当前jupyter内核运行在哪个环境中-再pycharm的setting里面设置jupyter环境并没有什么用。需要重新在想要使用的环境中重新安装jupyter内核&#xff0c;并且重启。

c# cad2016系统变量解释说明

一、cad系统变量设置和获取 /// <summary> /// 设置CAD系统变量 /// </summary> /// <param name"name">变量名</param> /// <param name"value">变量值</param> public static void SetSystemVariable(string name,…

大数据权限认证 Kerberos 部署

文章目录 1、什么是 Kerberos2、Kerberos 术语和原理2.1、Kerberos 术语2.1、Kerberos 原理 3、Kerberos 服务部署3.1、前置条件3.2、安装依赖3.3、配置 krb5.conf3.4、配置 kdc.conf3.5、配置 kadm5.acl3.6、安装 KDC 数据库3.7、启动服务3.8、创建 Kerberos 管理员3.9、创建普…

idea 手动打 jar 包

1.在 File 中找到并点击 Project Structure 2.按图中高亮的部分依次点击 3.在 Main Class 处设置要打包的类&#xff0c;记得在 Directory for ... 处设置目录为根目录&#xff0c;设置好以后点击两次 OK 回到首页 4.在页面上方找到 Build &#xff0c;点击 Build Artifacts...…

在Windows系统上安装Docker和SteamCMD容器的详细指南有哪些?

在Windows系统上安装Docker和SteamCMD容器的详细指南有哪些&#xff1f; 安装Docker&#xff1a; 首先&#xff0c;需要在Windows操作系统上激活WSL2功能。这是因为Docker作为一个容器工具&#xff0c;依赖于已存在并运行的Linux内核环境。可以通过使用winget来安装Docker。具体…

排序(2)——希尔排序

希尔排序&#xff08;缩小增量排序&#xff09; 基本思想 希尔排序法又称缩小增量法。希尔排序法的基本思想是&#xff1a;先选定一个整数&#xff0c;把待排序文件中所有记录分成个组&#xff0c;所有距离为的记录分在同一组内&#xff0c;并对每一组内的记录进行排序。然后&…

[工具探索]-Gitlab的CI/CD操作

在 GitLab 中&#xff0c;CI&#xff08;持续集成&#xff09;是一项强大的功能&#xff0c;它允许你自动化构建、测试和部署你的代码。 在 GitLab CI/CD 中&#xff0c;.gitlab-ci.yml 文件是用于定义构建和部署流程的配置文件。它使用一种基于 YAML 的语法。 下面是一个简单…

AcWing 1229. 日期问题 解题思路及代码

先贴个题目&#xff1a; 以及原题链接&#xff1a;1229. 日期问题 - AcWing题库https://www.acwing.com/problem/content/1231/ 这题其实和之前的回文日期相似&#xff0c;可以直接暴力枚举&#xff0c;然后得解&#xff0c;放个小片段&#xff1a; for (int date 19600101; …