SpringCloud系列教程:微服务的未来(九)认识微服务、微服务拆分

embedded/2025/1/12 2:11:25/

在这篇博客中,我们将深入探讨微服务的基本概念、其核心优势、实现微服务架构时的关键技术与挑战,以及如何在实际项目中应用微服务。通过了解微服务的原理与应用场景,你将能够更好地理解它如何帮助企业解决系统复杂性,提升开发效率和系统的稳定性。

目录

前言

导入项目 

安装数据库Mysql

后端

前端

认识微服务

单体架构 

微服务

 SpringCloud

 微服务拆分

熟悉项目

 服务拆分原则

拆分服务

总结


前言

在当今快速发展的技术环境中,微服务架构已成为构建现代化分布式应用的重要方法。随着单体架构的局限性逐渐显现,越来越多的企业开始转向微服务架构,以便更灵活地应对变化、提高系统的可扩展性与可维护性。微服务将传统的单一应用拆分为多个小型、独立的服务,每个服务专注于单一功能,能够独立开发、测试和部署。

在这篇博客中,我们将深入探讨微服务的基本概念、其核心优势、实现微服务架构时的关键技术与挑战,以及如何在实际项目中应用微服务。通过了解微服务的原理与应用场景,你将能够更好地理解它如何帮助企业解决系统复杂性,提升开发效率和系统的稳定性。


导入项目 

此次微服务拆分主要对黑马商城的项目进行拆分。主要通过CentOS7系统上的docker来进行部署。

安装数据库Mysql

其中有MySQL的配置文件和初始化脚本:

创建一个通用网络

docker network create hgq

 

 创建mysql容器

docker run -d \--name mysql \-p 3306:3306 \-e TZ=Asia/Shanghai \-e MYSQL_ROOT_PASSWORD=1234 \-v /root/mysql/data:/var/lib/mysql \-v /root/mysql/conf:/etc/mysql/conf.d \-v /root/mysql/init:/docker-entrypoint-initdb.d \--network hgq\mysql

后端

 

打开service窗口,新增启动项 

配置文件选择application-local.yml文件成功,接下来直接运行即可。

前端

直接在windows下将其复制到一个非中文、不包含特殊字符的目录下。然后进入hmall-nginx后,利用cmd启动即可:

# 启动nginx
start nginx.exe
# 停止
nginx.exe -s stop
# 重新加载配置
nginx.exe -s reload
# 重启
nginx.exe -s restart

认识微服务

单体架构 

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

优点:

  • 架构简单
  • 部署成本低

缺点:

  • 团队协作成本高
  • 系统发布效率低
  • 系统可用性差

 如果想使用高并发测试我们需要下载一个工具Jmeter工具,下载教程如下:

https://blog.csdn.net/Shi_MM/article/details/126280735

总结:
单体架构适合开发功能相对简单,规模较小的项目。

微服务

微服务架构,是服务化思想指导下的一套最佳实践架构方案。服务化,就是把单体架构中的功能模块拆分为多个独立项目。

  • 粒度小
  • 团队自治
  • 服务自治

 SpringCloud

SpringCloud是目前国内使用最广泛的微服务框架。官网地址:https://spring.io/projects/spring-cloud

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

SpringCloud版本

SpringBoot版本

2022.0.x aka Kilburn

3.0.x

2021.0.x aka Jubilee

2.6.x, 2.7.x (Starting with 2021.0.3)

2020.0.x aka Ilford

2.4.x, 2.5.x (Starting with 2020.0.3)

Hoxton

2.2.x, 2.3.x (Starting with SR5)

Greenwich

2.1.x

Finchley

2.0.x

Edgware

1.5.x

Dalston

1.5.x

 微服务拆分

熟悉项目

登录 

 

 

 

搜索商品

 

 

 购物车会实时的获取商品的最新信息,当商品价格被修改该后,购物车商品内对应的价格也会改变。购物车表内的物品的价格还是刚加入购物车时的价格。

下单

 服务拆分原则

什么时候拆分?

  • 创业型项目:先采用单体架构,快速开发,快速试错。随着规模扩大,逐渐拆分。
  • 确定的大型项目:资金充足,目标明确,可以直接选择微服务架构,避免后续拆分的麻烦。

怎么拆?

从拆分目标来说,要做到:

  • 高内聚:每个微服务的职责要尽量单一,包含的业务相互关联度高、完整度高。
  • 低耦合:每个微服务的功能要相对独立,尽量减少对其它微服务的依赖,

从拆分方式来说,一般包含两种方式:

  • 纵向拆分:按照业务模块来拆分
  • 横向拆分:抽取公共服务,提高复用性

拆分服务

工程结构主要分为两种:

  • 独立Project
  • Maven聚合

  • 完全解耦:每一个微服务都创建为一个独立的工程,甚至可以使用不同的开发语言来开发,项目完全解耦。

    • 优点:服务之间耦合度低

    • 缺点:每个项目都有自己的独立仓库,管理起来比较麻烦

 

  • Maven聚合:整个项目为一个Project,然后每个微服务是其中的一个Module

    • 优点:项目代码集中,管理和运维方便(授课也方便)

    • 缺点:服务之间耦合,编译时间较长

需求:

  • 将hm-service中与商品管理相关功能拆分到一个微服务module中,命名为item-service
  • 将hm-service中与购物车有关的功能拆分到一个微服务module中,命名为cart-service

新建一个moudle

导入依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.heima</groupId><artifactId>hmall</artifactId><version>1.0.0</version></parent><artifactId>item-service</artifactId><properties><maven.compiler.source>11</maven.compiler.source><maven.compiler.target>11</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--common--><dependency><groupId>com.heima</groupId><artifactId>hm-common</artifactId><version>1.0.0</version></dependency><!--web--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--数据库--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId></dependency><!--mybatis--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId></dependency><!--redis--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency></dependencies><build><finalName>${project.artifactId}</finalName><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

 编写启动类ItemApplication类

java">package com.hmall.item;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@MapperScan("com.hmall.item.mapper")
@SpringBootApplication
public class ItemApplication {public static void main(String[] args) {SpringApplication.run(ItemApplication.class, args);}
}

application.ymal文件

java">server:port: 8081
spring:application:name: item-service #微服务名称profiles:active: devdatasource:url: jdbc:mysql://${hm.db.host}:3306/hm-item?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghaidriver-class-name: com.mysql.cj.jdbc.Driverusername: rootpassword: ${hm.db.pw}
mybatis-plus:configuration:default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandlerglobal-config:db-config:update-strategy: not_nullid-type: auto
logging:level:com.hmall: debugpattern:dateformat: HH:mm:ss:SSSfile:path: "logs/${spring.application.name}"
knife4j:enable: trueopenapi:title: 黑马商城商品管理接口文档description: "黑马商城商品管理接口文档"email: zhanghuyi@itcast.cnconcat: 虎哥url: https://www.itcast.cnversion: v1.0.0group:default:group-name: defaultapi-rule: packageapi-rule-resources:- com.hmall.item.controller

将hm-service中与商品管理有关的代码到item-service

 

将对应的代码copy到item-service模块

 


总结

微服务架构的引入,无疑为企业带来了更加灵活、高效的系统架构方案。它通过将大而复杂的应用拆解为若干小而独立的服务,能够极大地提升应用的可扩展性、容错性以及开发效率。在现代化的云原生应用、DevOps和持续交付的背景下,微服务正成为企业数字化转型的核心支撑。

总之,微服务架构为现代软件开发带来了前所未有的灵活性,但在实现过程中仍需谨慎思考,合理规划和实施。通过合理的拆分、有效的治理、以及配套的技术栈支持,微服务能够为企业带来更高的业务价值和技术优势。

在未来,随着云计算、容器化、服务网格等技术的发展,微服务将变得更加成熟和易于实施,成为支撑企业业务创新和扩展的坚实基础。


http://www.ppmy.cn/embedded/153179.html

相关文章

获得PostgreSQL中级认证后,可以从事哪些工作岗位?

获得 PostgreSQL 中级认证后&#xff0c;可以获得的岗位 数据库管理类 数据库管理员&#xff08;DBA&#xff09;&#xff1a;负责 PostgreSQL 数据库的日常维护、监控、备份与恢复、性能优化、安全管理等工作。确保数据库的稳定运行和数据的安全性、完整性&#xff0c;及时处理…

怎么管理电脑usb接口,分享四种USB端口管理方法

怎么管理电脑usb接口&#xff0c;分享四种USB端口管理方法 USB接口作为电脑重要的外部接口&#xff0c;方便了数据传输和设备连接。 然而&#xff0c;不加管理的USB接口也可能带来安全隐患&#xff0c;例如数据泄露、病毒传播等。 因此&#xff0c;有效管理电脑USB接口至关重…

Linux下常用的IO模型

Linux下常用的IO模型&#xff1a; 1. 阻塞IO fgets read getchar fread fgetc recv recvfrom 1. 让多个IO事件以同步方式处理&#xff0c; 2. 多个IO事件之间互相影响 3. CPU占有率低 2. 非阻塞IO 将IO对应的文件描述符设置成…

计算机网络期末复习(知识点)

概念题 在实际复习之前&#xff0c;可以看一下这个视频将网络知识串一下&#xff0c;以便更好地复习&#xff1a;【你管这破玩意叫网络&#xff1f;】 网络规模的分类 PAN&#xff08;个人区域网络&#xff09;&#xff1a;用于个人设备间的连接&#xff0c;如手机与蓝牙耳机…

有机物谱图信息的速查技巧有哪些?

谱图信息是化学家解读分子世界的“语言”&#xff0c;它们在化学研究的各个领域都发挥着不可或缺的作用。它们是理解和确定分子结构的关键&#xff0c;对化学家来说极为重要&#xff0c;每一种谱学技术都提供了不同的视角来观察分子&#xff0c;从而揭示其独特的化学和物理特性…

前端拿到zip中所有文件并下载为新的zip文件

问题原因&#xff1a;后端返回了一个zip格式文件供前端下载&#xff0c;然后下载后&#xff0c;形成了zip套zip的形式&#xff0c;当后端不愿处理时&#xff0c;前端不能坐以待毙 PS&#xff1a;当压缩包文件量过大&#xff0c;前端可能会出问题&#xff08;脑测&#xff0c;未…

深入Android架构(从线程到AIDL)_19 IPC的Proxy-Stub设计模式01

1、 复习&#xff1a; IBinder 接口 onTransact()就是EIT造形里的<I>这是标准的EIT造形&#xff0c;其<I>是支持<基类/子类>之间IoC调用的接口。运用曹操(Stub)类&#xff0c;形成两层EIT(两层框架)。

JVM 触发类加载的条件有哪些?

目录 一、类加载生命周期 二、主动引用 2.1、创建类的实例 2.2、访问类的静态字段或静态方法 2.3、反射 2.4、初始化类的子类时&#xff0c;先初始化父类 2.5、虚拟机启动时&#xff0c;初始化 main 方法所在的类 2.6、动态语言支持 三、被动引用 3.1、通过子类引用父…