单体应用:所谓单体应用一般是基于idea/eclipse,maven等建一个工程,然后基于Springboot,spring,mybatis框架进行整合,然后写一堆dao,mapper,service,controller,再加上一些配置文件,有可能还引入redis...mp等其他项目的依赖
开发好后将项目进行打包(jar包),然后再将包放到tomcat这样的web服务中,最后部署到公司提供的linux服务器上,,然后争对服务提供的访问端口(例如8080端口)发起http请求,请求会由tomcat直接转交给springweb组件,进行一层一层的代码调用 这样的设计一般适合企业的内部使用,访问量不大,体积比较小
对于大型的互联网项目中大量的创建代码分支,编写业务功能,然后合并分支,会出现很多代码冲突 于是诞生了微服务
什么是微服务:微服务架构的基础是将单个应用程序开发为一组小型独立服务,这些独立服务在自己的进程中运行,独立开发和部署,微服务架构主要解决的是如何快速的开发和部署我们的服务
SpringCloudAlibaba微服务解决方案
SpringCloudAlibaba是SpringCloud的一个子项目,致力于提供微服务开发的一站式解决方案此项目包含开发分布式微服务的必须组件,方便开发者通过Spring Cloud使用这些组件来开发分布式应用服务,依托SpringCloudAlibaba加入少量的注解和少量配置,就可以将springCloud应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统
核心组件分析
Spring Cloud Alibaba 默认提供了如下核心功能(先了解):
服务限流降级:
默认支持 WebServlet、OpenFeign、RestTemplate、Spring Cloud Gateway, RocketMQ 限流降级功能的接入,可以在运行时通过控制台实时修改限流降级规则,还支持查看限流降级 Metrics 监控。
服务注册与发现:
基于Spring Cloud 服务注册与发现标准,借助Nacos进行实现,默认还集成了 Ribbon 的支持。
分布式配置管理:
基于Nacos支持分布式系统中的外部化配置,配置更改时自动刷新。
消息驱动能力:
基于Spring Cloud Stream 为微服务应用构建消息驱动能力。
分布式事务:
使用 @GlobalTransactional 注解, 高效并且对业务零侵入地解决分布式事务问题。。
分布式任务调度:
提供秒级、精准、高可靠、高可用的定时(基于 Cron 表达式)任务调度服务。同时提供分布式的任务执行模型,如网格任务。网格任务支持海量子任务均匀分配到所有 Worker上执行。
解决方案架构设计
构建SpringCloud 聚合项目并进行环境初始化
创建空项目
打开Idea,创建一个空项目(Empty Project),项目名为GitCGB2105IVProjects,例如:
项目初始化配置
第一步:配置maven环境(只要是新的工作区,都要重新配置),注意本地库选择新的位置不要与其它项目共用本地库.
第二步:配置JDK编译环境
创建聚合父工程
我们后续在创建微服务工程进行学习时,相关服务的依赖及版本的管理可以放在此工程下.
第一步:创建父工程模块,例如:
第二步:删除工程中的src目录(父工程不需要这个目录),例如
第三步:添加核心依赖及版本管理,例如:
在pom文件,添加如下元素:
<dependencyManagement>
<dependencies>
<!--Spring boot 依赖(定义了微服务规范)-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.2.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!--Spring Cloud 依赖(定义了微服务规范)-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Hoxton.SR9</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<!--Spring Cloud Alibaba依赖(基于spring微服务规范做了具体落地实现)-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2.2.6.RELEASE</version>
<scope>import</scope>
<type>pom</type>
</dependency>
</dependencies>
</dependencyManagement>
其中,服务核心依赖版本可参考如下网址(涉及到一个兼容性问题,不能随意指定其版本):
https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
总结:
微服务是一个架构设计方式,此架构中的每个服务(service)都是针对一组功能而设计的,并专注于解决特定的问题,如果开发人员将更多的代码写到一项服务中并且这项服务变的复杂,那么可以拆分成多项更小的服务,进行独立的开发,测试,部署,运行,维护,,可以更好更灵活的处理客户端的请求并提高系统的可靠性,可扩展性