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

目录

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.hqwc.cn/news/504348.html

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

相关文章

c++之旅——第二弹

大家好啊,这里是c之旅第二弹,跟随我的步伐来开始这一篇的学习吧! 如果有知识性错误,欢迎各位指正!!一起加油!! 创作不易,希望大家多多支持哦! 一、内存四区…

浅析TSN网络之车载以太网协议测试

TSN是一项从视频音频数据领域延伸至工业领域、汽车领域的技术。TSN最初来源于音视频领域的应用需求,当时该技术被称为AVB,由于针对音视频网络需要较高的带宽和最大限度的实时,借助AVB能较好的传输高质量音视频。 2012年,AVB任务组…

基于YOLOv8/YOLOv7/YOLOv6/YOLOv5的交通信号标志识别软件(Python+PySide6界面+训练代码)

摘要:开发高效的交通信号标志识别软件对于提升道路安全和自动驾驶技术发展具有重要意义。本篇博客详细阐述了如何利用深度学习构建一个交通信号标志识别软件,并提供了完整的实现代码。该软件基于先进的YOLOv8算法,并对比了YOLOv7、YOLOv6、YO…

自动化测试的10大误区!

自动化测试因提高效率,减少重复工作的特性而被广泛采用。然而,随着自动化测试的普及,自动化测试也面临一系列挑战和误解。 这些误区不仅影响了测试的有效性,还会导致一定的项目风险,为了确保自动化测试能够真正提升测…

MySQL误truncate截断后数据恢复2024.3.1

近期很多MySQL数据丢失情况,很多是人为误操作导致。MySQL数据库丢失可能由truncate截断表、delete删除表中数据行、delete删除表、delete删除库、操作系统rm删除数据库文件、硬盘坏道等情况导致。本案例是一个误截断表导致的丢失。 不管哪种情况,第一时…

pytest教程-13-conftest.py文件

上一小节我们学习了fixture的作用域,本小节我们学习一下pytest conftest.py文件的使用方法。 conftest.py文件的作用 conftest.py文件是pytest框架中的一个特殊文件,用于定义共享的设置、夹具(fixture)和钩子函数(hook)。 在py…

Cloud+Consul

Cloud整合Zookeeper代替Eureka-CSDN博客 Consul简介 Consul是一套开源的分布式服务发现和配置管理系统 What is Consul? | Consul | HashiCorp DeveloperConsul is a service networking solution that delivers service discovery, service mesh, and network security ca…

SQL面试题(2)

第一题 创建trade_orders表: create table `trade_orders`( `trade_id` varchar(255) NULL DEFAULT NULL, `uers_id` varchar(255), `trade_fee` int(20), `product_id` varchar(255), `time` varchar(255) )ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_…

力扣-H指数

问题 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数。计算并返回该研究者的 h 指数。 根据维基百科上 h 指数的定义:h 代表“高引用次数” ,一名科研人员的 h 指数 是指他(她&#xff09…

点燃技能火花:探索PyTorch学习网站,开启AI编程之旅!

介绍:PyTorch是一个开源的Python机器学习库,它基于Torch,专为深度学习和科学计算而设计,特别适合于自然语言处理等应用程序。以下是对PyTorch的详细介绍: 历史背景:PyTorch起源于Torch,一个用于…

YOLOv9:使用可编程梯度信息学习您想学习的内容

摘要 arxiv.org/pdf/2402.13616.pdf 当今的深度学习方法侧重于如何设计最合适的目标函数,以便模型的预测结果能最接近于实际结果。同时,还必须设计一个适当的架构,以便于获取足够的预测信息。现有的方法忽略了一个事实,即当输入数据经历层层特征提取和空间变换时,会损失…

Java基于springboot的厨艺交流平台的设计与实现代码

摘 要 使用旧方法对厨艺交流信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在厨艺交流信息的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。 这次开发的厨艺交流平台功…