微服务架构与Spring Cloud

news2024/11/17 0:07:04

1 微服务架构

1.1 微服务架构概述

        微服务架构(Microservice Architecture, MSA)是一种新型的服务端架构设计方案,通过将应用程序拆分成多个小型、自治的服务,实现了服务的松耦合和快速迭代。

        微服务架构特征主要包括以下几个方面:

        1、基于服务的分布式架构:微服务架构将应用程序拆分成多个服务,每个服务负责一个小部分功能,服务之间通过轻量级的通信机制进行交互。

        2、可独立部署:每个微服务都是一个独立的部署单元,可以独立构建、测试和部署,避免了整个应用程序的重构和重新部署。

        3、强调自治性:微服务应该是自治的,也就是说,每个服务应该可以独立运行、管理和维护,不需要依赖其他服务或中央控制器。

        4、强调容错性:微服务架构通过重试、容错和回滚等机制来应对故障和异常,提高服务的稳定性和健壮性。

1.2 微服务架构的历史

        2014年,Martin Fowler和James Lewis在一篇名为《Microservices: a definition of this new architectural term》的博客中,正式提出了微服务架构的概念,阐述了微服务架构的定义、特点和优劣。

        在2014年至今的这一段时间里,微服务架构的发展经历了以下几个阶段:

        1、探索阶段(2014年-2015年):微服务架构在最初的阶段是一种新的概念,许多企业和组织都在尝试采用该架构。在这个阶段,微服务架构并没有成为主流的软件开发风格。

        2、推广阶段(2015年-2017年):随着对微服务架构的认识和经验的积累,越来越多的企业和组织开始采用微服务架构。在这个阶段,开源项目、云计算平台和微服务工具的出现为微服务架构的推广提供了有力的技术支持。

        3、普及阶段(2017年-至今):微服务架构在最近几年成为了软件开发的主流,越来越多的企业和组织开始探索和使用微服务架构。同时,微服务管理平台、API网关、服务网格等工具的发展也为微服务架构提供了更多的技术支持。

        另外,近年来,微服务架构有以下发展趋势:

        1、微前端:微前端是一种将前端应用程序拆分成多个小型服务来开发和维护的方式,类似于微服务架构中的服务拆分。微前端与微服务架构相结合,可以实现更加灵活的应用程序开发和部署。

        2、服务网格:服务网格是一种新兴的服务架构,它可以解决微服务架构中的服务通信和治理问题,为微服务架构提供了更加健全的技术支持。

        3、云原生:云原生是一种新的应用程序架构,它将微服务架构、容器化和DevOps文化相结合,实现了快速交付、高度可扩展以及基础设施自动化的目标,是未来软件开发的重要趋势。

        总的来说,微服务架构从探索到现在已经发展成为现代化企业软件架构的主流之一,未来对技术的创新、落地以及普及,都是微服务发展的重点。

1.3 微服务架构入门

        通过一个简单的案例来演示微服务架构的基本思想:将应用程序拆分为小的、独立的服务,每个服务负责特定的功能,并通过网络通信来协同工作。

        本案例中将开发2个微服务。用户微服务对外提供一个用户注册的接口,积分微服务提供对外提供一个为用户添加积分的接口。当用户注册时,先实现用户注册,再实现为用户赠送积分。

        本案例仅关注服务间的通信,完善的业务功能将在后续逐步实现。

        注意:为了兼容其他框架的版本,本阶段开始使用的JDK版本为1.8,Spring Boot版本为2.3.12.RELEASE。

        本案例实现步骤如下:

        1、创建管理项目。

        2、创建积分微服务项目,并开发增加积分接口。

        3、创建用户微服务项目,并开发注册接口。

        4、实现用户微服务对积分微服务的访问。

        5、综合测试。

        以下是具体实现。

        1、创建管理项目

        为便于项目代码的管理,首先新建一个父项目,项目类型为Maven项目,命名为PointSystemParent,项目的打包方式为pom。

        2、创建积分微服务项目,并开发增加积分接口

        首先,在PointSystemParent项目下新建一个Module,类型为Spring Boot项目,命名为PointService。然后,在application.yml中配置项目的基本信息。

spring:
  application:
    name: point-service
server:
  servlet:
    context-path: /point-service
  port: 8091

        接下来,新建controller包,并在controller包下新建PointController类,模拟为用户增加积分的接口。

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/points")
public class PointController {

    @Value("${server.port}")
    private String port;

    @RequestMapping("/add")
    public String addPoint(Long userId) {
        System.out.println("为用户" + userId + "增加积分成功");
        return "add point success: " + port;
    }
}

        启动PointService项目,使用浏览器测试该接口是否正常生效。

        3、创建用户微服务项目,并开发注册接口

        首先,在PointSystemParent项目下新建一个Module,类型为Spring Boot项目,命名为UserService。然后,在application.yml中配置项目的基本信息。

spring:
  application:
    name: user-service
server:
  servlet:
    context-path: /user-service
  port: 9001

        接下来,新建controller包,并在controller包下新建UserController类,模拟用户注册的接口。

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/users")
public class UserController {
    @RequestMapping("/register")
    public String register(String username) {
        System.out.println("用户" + username + "注册成功");
        return "register success";
    }
}

        启动UserService项目,使用浏览器测试该接口是否正常生效。

        4、实现用户微服务对积分微服务的访问

        本案例中使用Spring Boot提供的RestTemplate实现用户微服务对积分微服务的访问。

        首先,在UserService中新增config包,并在config包下新增RestTemplateConfig类。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

        然后,修改UserController中的代码。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    RestTemplate restTemplate;

   @RequestMapping("/register")
    public String register(String username) {
        System.out.println("用户" + username + "注册成功");
        String url = "http://localhost:8091/point-service/points/add?userId=1";
        String result = restTemplate.getForObject(url, String.class);
        return "register success and "+result;
    }
}

        5、综合测试

        首先,启动PointService项目。

        然后,启动UserService项目。

        通过浏览器访问用户注册接口,查看运行效果。

        6、案例总结

        本案例将传统的单体应用中的两个模块(用户和积分)拆分成了两个独立的项目,并通过HTTP访问实现了协作。本案例存在以下问题:

        1、直接使用硬编码的URL调用服务,这种方式显得不够优雅和灵活。

        2、使用硬编码的地址调用服务,这样无法实现服务调用的动态调整和负载均衡。

        微服务架构为上述问题提供了标准的解决方案。这套解决方案的基础是服务的注册与发现。

1.4 服务注册与发现

        服务注册与发现是一种在分布式系统和微服务架构中广泛使用的关键概念,它有助于管理和维护大规模的服务群体。这个机制的核心思想是允许服务在启动时自动注册并在需要与其他服务通信时发现它们。

        1、服务注册:

  • 当一个服务启动时,它会将自己的关键信息(例如服务名称、IP地址、端口号、健康状态等)注册到服务注册中心
  • 服务注册中心通常是一个专门的服务器或服务,它负责存储和管理所有已注册的服务信息

        2、服务发现:

  • 当一个服务需要与其他服务通信时,它会向服务发现组件发送请求,请求包含目标服务的名称或标识
  • 服务发现组件会根据请求中的信息,在服务注册中心中查找并返回目标服务的详细信息

        采用注册和发现机制是一种智能而优雅的方式,可以消除硬编码 URL 带来的问题。但是,开发这一套解决方案对普通开发者来说难度较大。好在主流的微服务框架(如Spring Cloud),均提供了开箱即用的解决方案。

2 Spring Cloud

2.1 Spring Cloud概述

        Spring Cloud是基于Spring Boot开发的一组开源框架和工具,提供了微服务架构中开发分布式系统所需的各种组件和工具。该框架的出现使得在微服务架构中开发分布式系统变得更加简单和高效。

        Spring Cloud的主要特点包括:

        1、简化开发:Spring Cloud提供了一系列开箱即用的组件和工具,可以帮助开发者快速实现服务注册、发现、配置、熔断、负载均衡、分布式消息等功能,大大简化了微服务架构系统的开发和部署工作。

        2、易于集成:Spring Cloud完全兼容Spring Boot,可以方便地与其他Spring组件一起使用,同时也可以与多种第三方工具和服务集成。

        3、可扩展性:Spring Cloud支持多种云计算平台,如AWS、Azure、Oracle、Google Cloud等,可以轻松在云上部署、扩展和维护微服务。

        4、易于维护:Spring Cloud内置了多个组件和工具,可以帮助企业监控和管理微服务系统,诊断和调试系统故障。

        5、社区支持:Spring Cloud拥有活跃的社区,提供了丰富的文档资料、教程和周边工具,可以帮助开发者更快地上手和使用。

2.2 Spring Cloud的分支

        Spring Cloud的分支是指在Spring Cloud基础上进行了特定功能深度开发或集成其他技术栈(如阿里巴巴、Kubernetes、AWS等)的变种。目前比较主流的Spring Cloud分支有:

        1、Spring Cloud Netflix:Netflix是Spring Cloud最早的支持者之一,提供了一系列的分布式微服务组件,包括服务注册和发现、客户端负载均衡、断路器、智能路由、API网关等。

        2、Spring Cloud Alibaba:阿里巴巴是Spring Cloud的另一个重要贡献者,提供了一系列的分布式微服务组件,包括服务注册和发现、配置中心、消息总线、链路追踪等,能够与阿里云上的云服务集成。

        3、Spring Cloud AWS:AWS是Amazon云计算平台,Spring Cloud AWS提供了一系列的分布式微服务组件,包括服务注册和发现、配置中心、消息队列等,能够与Amazon Web Services集成。

        4、Spring Cloud GCP:GCP是Google的云计算平台,Spring Cloud GCP提供了一系列的分布式微服务组件,包括服务注册和发现、配置中心、消息总线等,能够与Google云服务集成。

        5、Spring Cloud Azure:Azure是微软的云计算平台,Spring Cloud Azure提供了一系列的分布式微服务组件,能够与Azure上的众多云原生服务(如CosmosDB、Storage、Service Bus等)无缝集成,以实现更方便的部署、管理和扩展微服务。

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

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

相关文章

✯ ✯ ✯ 绍兴ISO27001认证:信息安全新征程✯ ✯ ✯

🌈🌈绍兴ISO27001认证:🍓信息安全新征程💯 😄大家好!今天,😁我无比激动地想要和大家分享🍒一个关于我们⭐绍兴的大新闻!🎉&#x1f38…

Oracle-一次TX行锁堵塞事件

问题背景: 接用户问题报障,应用服务出现大量会话堆积现象,数据库锁堵塞严重,需要协助进行问题定位和排除。 问题分析: 登录到数据库服务器上,首先查看一下数据库当前的等待事件情况,通过gv$ses…

AI一键换装超强电商生产力工具下载

支持win版本,对电脑硬件有一定的要求。建议固态硬盘留足至少30 G的空间,显卡n卡显存至少4G。一些低端独立显卡可能还不如高配cpu集成。 程序文件比较大,因为涉及到大型模型。 下载链接在后面 下载链接: https://pan.baidu.com…

应聘项目经理,软考证书会是一个加分项吗?

加分项是必需的,特别是IT行业的项目经理职位。您可以在各大招聘网站上搜索项目经理职位,前景好、薪资高、待遇好的项目经理岗位,基本上都有证书的要求。非IT行业项目经理,可以考虑PMP证书或者其他与专业相关的证书,比如…

elementUI表格table文字不换行

在对应不需要换行的列加上属性::show-overflow-tooltip"true" 即可

uniapp——列表分享当前话题(一个页面多个分享)

案例 分享的时候弹出对应的标题和默认第一张图片 代码 <view v-for"(item,index) in list" :key"index"><button open-type"share" :id"index" click.stop"()>{}"><image src"/static/images/cir…

马化腾用“不负众望”,来评价视为“全村希望”的视频号

我是王路飞。 2023年的视频号&#xff0c;给了腾讯足够的惊喜。 去年一年&#xff0c;视频号电商GMV实现近3倍增长&#xff08;约为1200亿&#xff5e;1500亿&#xff09;。2023年三季度&#xff0c;视频号总播放量同比增长超50%&#xff1b; 2023年视频号供给数量同比增长超…

上班不想用脑子写代码了怎么办?那就试试Baidu Comate啊宝贝

本文目录 前言1、视频编程实战1.1、熟悉代码库中的代码1.2、参考现有代码编写新代码 2、下载使用教程3、使用体验3.1、AutoWork 产品测评3.2、解决有关ajax请求后重定向问题3.3、询问编程相关知识3.3.1、cookie和session的区别与联系3.3.2、数据库中主键外键的相关知识 4、问题…

卡牌——蓝桥杯十三届2022国赛大学B组真题

样例输入 4 5 1 2 3 4 5 5 5 5样例输出 3样例说明 这 5 张空白牌中,拿2张写1,拿1张写2,这样每种牌的牌数就变为了3,3,3,4, 可以凑出 3套牌,剩下2张空白牌不能再帮助小明凑出一套。 评测用例规模与约定 对于30%的数据&#xff0c;保证n ⩽ \leqslant ⩽ 2000; 对于100%的数据…

区块链中的加密算法及其作用

区块链技术以其去中心化、不可篡改、透明公开的特性&#xff0c;在全球范围内引发了广泛的关注和讨论。其中&#xff0c;加密算法作为区块链技术的核心组成部分&#xff0c;对于维护区块链网络的安全、确保数据的完整性和真实性起到了至关重要的作用。本文将详细介绍区块链中常…

手写SpringBoot核心功能流程

本文通过手写模拟实现一个简易版的Spring Boot 程序&#xff0c;让大家能以非常简单的方式知道Spring Boot大概的工作流程。 工程依赖 创建maven工程&#xff0c;并创建两个module springboot模块&#xff1a;手写模拟springboot框架的源码实现 test模块&#xff1a;业务系统…

【刷题篇】双指针(二)

文章目录 1、有效三角形的个数2、查找总价格为目标值的两个商品3、三数之和4、四数之和 1、有效三角形的个数 给定一个包含非负整数的数组 nums &#xff0c;返回其中可以组成三角形三条边的三元组个数。 class Solution { public:int triangleNumber(vector<int>& n…

《MySQL对数据库中表的结构的操作》

文章目录 一、建表二、查看表结构所有能查看到数据库&#xff0c;表的操作痕迹的本质都是服务器保存下来了这些操作记录。 三、修改表1.改表名字2.添加表记录3.添加表的更多字段4.修改表的字段5. 删除表的字段 四、修改表的数据1.删除表的数据2.修改表的数据3.向表中添加数据 总…

【go项目01_学习记录02】

学习记录 1 新建项目2 自动重载安装air安装完成&#xff0c;查看版本&#xff1a;air -v使用air: air 3 设置标头4 如何知道 http 包有哪些接口呢&#xff1f;5 Web 数据响应6 小结 1 新建项目 windows系统&#xff0c;cmd&#xff1a; cd %GOPATH%/src //%GOPATH%表示取环境变…

【模型的量化 神经网络量化】对称量化与非对称量化 无符号数量化 有符号数量化

文章目录 量化方法1.非对称量化1.1 无符号量化&#xff08;uint8)1.2 有符号量化&#xff08;int8)1.3 代码1.4总结 2 对称量化2.1 无符号量化&#xff08;uint8)2.2 有符号量化&#xff08;uint8)2.3总结2.4 程序代码 减少模型大小&#xff1a;通过将模型的权重和激活值从浮点…

从抖音阳哥的经验看,选品师项目是否值得你投入?

在抖音这个短视频平台上&#xff0c;无数的创作者分享着他们的知识和经验&#xff0c;其中阳哥作为一个备受关注的博主&#xff0c;他的每一次分享都能引起广大网友的热烈讨论。最近&#xff0c;阳哥分享了一个名为“选品师”的项目&#xff0c;让许多对电商和抖音运营感兴趣的…

SpringCloud2024最新版链路追踪教程micrometer+zipkin

本文基于B站尚硅谷2024版springcloud教学视频&#xff0c;主要用于自己学习记录以及分享技术&#xff0c;侵权私删 自己本机环境信息&#xff1a; jdk&#xff1a;17.0.10springboot&#xff1a;3.2.0springcloud&#xff1a;2023.0.0 micrometer 之前行业内使用的分布式链路…

【yolov8 项目打包】pyinstaller 打包pyQt5 界面为exe

创建一篇博客文章&#xff0c;介绍如何使用PyInstaller将PyQt5界面打包为exe文件&#xff0c;并且处理与YOLOv8模型相关的文件&#xff0c;可以按照以下结构进行&#xff1a; 标题&#xff1a;使用PyInstaller将PyQt5界面与YOLOv8模型打包为Windows可执行文件 引言 在机器学习…

自建WSUS更新服务器完成内网的安全补丁更新

一、适用场景 1、企业内部网络无法访问外网&#xff0c;所以搭建WSUS服务器&#xff0c;可以让内网环境进行更新补丁。 2、校园内部的电脑实训室一般不用外网资源&#xff0c;偶尔开启外网使用时&#xff0c;电脑实训室集体自动更新占用外网资源量大&#xff0c;所以搭建WSUS服…

Mendix创客访谈录|助力工业领域,Mendix与IIOT相融合

本期创客 汤登揆 太平洋电信股份有限公司 AI 技术支持工程师 大家好&#xff0c;我是汤登揆&#xff0c;帝国理工大学&#xff0c;生态算法专业&#xff0c;主要关注于产品结构分析和产品应用落地。 目前任职于太平洋电信股份有限公司&#xff0c;主要专注于AI大模型的应用落地…