# HmallProject **Repository Path**: zxlmin-code/hmall-project ## Basic Information - **Project Name**: HmallProject - **Description**: 黑马商城前后端以及拆分之后的所有代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-05-09 - **Last Updated**: 2024-05-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 黑马商城项目 之前学习的项目基本都是**单体项目**,可以满足小型项目或传统项目的开发。如今,越来越多的厂商都在使用**微服务**技术。本项目的目的就是将原本的**单体项目拆分成微服务项目**。 学习资料:[day03-微服务01 - 飞书云文档 (feishu.cn)](https://b11et3un53m.feishu.cn/wiki/R4Sdwvo8Si4kilkSKfscgQX0niB) **学习目的:** - 知道单体架构的特点 - 知道微服务架构的特点 - 学会拆分微服务 - 会使用Nacos实现服务治理 - 会使用OpenFeign实现远程调用 ## 单体架构 单体架构(monolithic structure):顾名思义,整个项目中所有功能模块都在一个工程中开发;项目部署时需要对所有模块一起编译、打包;项目的架构设计、开发模式都非常简单。 ![img](assets/img) 当项目规模较小时,这种模式上手快,部署、运维也都很方便,因此早期很多小型项目都采用这种模式。 但随着项目的业务规模越来越大,团队开发人员也不断增加,单体架构就呈现出越来越多的问题: - **团队协作成本高**:试想一下,你们团队数十个人同时协作开发同一个项目,由于所有模块都在一个项目中,不同模块的代码之间物理边界越来越模糊。最终要把功能合并到一个分支,你绝对会陷入到解决冲突的泥潭之中。 - **系统发布效率低**:任何模块变更都需要发布整个系统,而系统发布过程中需要多个模块之间制约较多,需要对比各种文件,任何一处出现问题都会导致发布失败,往往一次发布需要数十分钟甚至数小时。 - **系统可用性差**:单体架构各个功能模块是作为一个服务部署,相互之间会互相影响,一些热点功能会耗尽系统资源,导致其它服务低可用。 ## 微服务 微服务架构,首先是服务化,就是将单体架构中的功能模块从单体应用中拆分出来,独立部署为多个服务。同时要满足下面的一些特点: - **单一职责**:一个微服务负责一部分业务功能,并且其核心数据不依赖于其它模块。 - **团队自治**:每个微服务都有自己独立的开发、测试、发布、运维人员,团队人员规模不超过10人(2张披萨能喂饱) - **服务自治**:每个微服务都独立打包部署,访问自己独立的数据库。并且要做好服务隔离,避免对其它服务产生影响 在黑马商城项目中,我们就可以把商品、用户、购物车、交易等模块拆分,交给不同的团队去开发,并独立部署: ![img](assets/img2) 那么,单体架构存在的问题有没有解决呢? - 团队协作成本高? - 由于服务拆分,每个服务代码量大大减少,参与开发的后台人员在1~3名,协作成本大大降低 - 系统发布效率低? - 每个服务都是独立部署,当有某个服务有代码变更时,只需要打包部署该服务即可 - 系统可用性差? - 每个服务独立部署,并且做好服务隔离,使用自己的服务器资源,不会影响到其它服务。 综上所述,微服务架构解决了单体架构存在的问题,特别适合大型互联网项目的开发,因此被各大互联网公司普遍采用。大家以前可能听说过分布式架构,分布式就是服务拆分的过程,其实微服务架构正式分布式架构的一种最佳实践的方案。 当然,微服务架构虽然能解决单体架构的各种问题,但在拆分的过程中,还会面临很多其它问题。比如: - 如果出现跨服务的业务该如何处理? - 页面请求到底该访问哪个服务? - 如何实现各个服务之间的服务隔离? ## SpringCloud 微服务拆分以后碰到的各种问题都有对应的解决方案和微服务组件,而SpringCloud框架是目前Java领域最全面的微服务组件的集合。 ![img](assets/img3) 而且SpringCloud依托于SpringBoot的自动装配能力,大大降低了其项目搭建、组件使用的成本。对于没有自研微服务组件能力的中小型企业,使用SpringCloud全家桶来实现微服务开发可以说是最合适的选择了! https://spring.io/projects/spring-cloud#overview ## 拆分微服务 本项目将黑马商城拆分为5个微服务: - 用户服务 - 商品服务 - 购物车服务 - 交易服务 - 支付服务