一、什么是微服务
1、概念
微服务就是由一系列围绕自己也为开发的微小服务构成,他们独立部署运行在自己的进程里,基于分布式的管理。
(通俗定义:微服务是一种架构,这种架构是将单个的整体应用程序分割成更小的项目关联的独立的服务。一个服务通常实现一组独立的特性或功能包含自己的业务逻辑和适配器。各个微服务之间的关联通过暴露api来实现。这些独立的微服务不需要部署在同一个虚拟机、同一个系统或同一个应用服务器中。)
2、为什么是微服务
1)单体应用
(1)优点 单一架构模式在项目初期很小的时候开发方便,测试方便,部署方便,运行良好。 (2)缺点 应用随着时间的推进,加入的功能越来越多,最终会变得巨大,一个项目中很有可能数百万行代码,互相之间繁琐的jar包; 久而久之,开发效率低,代码维护困难; 还有一个如果想整体应用采用新的技术,新的框架或者语言,那是不可能的; 任意模块的漏洞或者错误都会影响整个应用,降低系统的可靠性。 |
2)微服务架构应用
(1)优点: 将服务拆分成多个单一职责的小的服务,进行单独部署,服务之间通过网络进行通信; 每个服务应该有自己单独的管理团队,高度自治; 服务各自有自己单独的职责,服务之间松耦合,避免因一个模块的问题导致服务崩溃 (2)缺点 开发人员要处理分布式系统的复杂性; 多服务运维 难度随着服务的增加,运维的压力也在增大; 服务治理和服务监控关键; |
3、微服务的解决方案(Dubbo和Springcloud)
1)Dubbo(阿里系)
即:dubbo+zookeeper+spring/springboot
基于java的分布式服务治理框架Dubbo,它致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案,使得应用可以通过高性能RPC实现服务的输出、输入功能和spring框架无缝集成。Dubbo包含远程通讯、集群容错和自动发现三个核心部分。
当前由于RPC协议、注册中心元数据不匹配问题,在面临微服务基础框架选型时Dubbo与Spring Cloud是只能二选一,Dubbo之后会积极寻求适配到Spring Cloud生态,比如作为Spring Cloud的二进制通信方案来发挥Dubbo的性能优势,或者Dubbo通过模块化以及对http的支持适配到Spring Cloud。
2)SpringCloud
(1)SpringCloud NetFlix
基于美国Netflix公司开源的组件进行封装,提供了微服务一站式的解决方案。
(2)SpringCloud alibaba
在Spring Cloud netflix基础上封装了阿里巴巴的微服务解决方案。
(3)SpringCloud
目前spring官方趋势正在逐渐吸收Netflix组件的精华,并在此基础上进行二次封装优化,打造spring专有的解决方案。
二、springcloud & springcloud alibaba整合架构
1、说明
后端:服务网关(gateway)+流量卫兵(sentinel)+服务注册中心&统一配置中心(nacos)+负载均衡(ribbon)+服务
2、整合步骤
1)使用组件说明
服务注册中心(nacos)、统一配置中心组件(nacos)、服务流控和服务降级(sentinel)
服务网关组件(gateway)、服务间通信负载均衡{HttpRest[restTemplate+Ribbon(netflix)、openfeign(spring)]}
2)环境搭建(非自创父项目)
(1)版本说明
springboot 2.2.x.RELEASE、springcloud alibaba 2.2.1、springcloud Hoxton SR6、java8+、maven3.3.6+、idea2020+
(2)创建springboot模块,指定版本为2.2.5版本
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.5.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent>
(3)引入springcloud alibaba和springcloud的版本管理
<properties> <!--springcloud alibaba具体版本号--> <spring-cloud-alibaba.version>2.2.1.RELEASE</spring-cloud-alibaba.version> <!--springcloud具体版本号--> <spring-cloud.version>Hoxton.SR6</spring-cloud.version> </properties> <!--全局引入springcloudalibaba下载依赖地址,并不会引入依赖--> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>