Netflix:微服务与搭建
图
一种软件开发技术,面向服务的体系结构(SOA)架构样式的一种变体,提倡将单一应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值,每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相沟通

什么是微服务

微服务是一种用于构建应用的架构方案

微服务架构有别于更为传统的单体式方案,可将应用拆分成多个核心功能,每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作(和出现故障)时不会相互影响

可以理解为模块化

微服务与微服务结构

微服务强调的是服务的大小,是具体解决某一个问题对应的服务应用

微服务架构是一种架构模式,提倡将单一应用程序划分成一组小的服务,服务之间互相协调,相互配合,为用户提供最终价值,每个服务运行在其独立的进程中

微服务优缺点

优点

  • 每个服务足够内聚、足够小(职责单一),代码容易理解
  • 开发简单,效率高
  • 微服务能够没小团队单独开发
  • 开发和部署都是独立的
  • 可以使用不同的语言开发
  • 易于和第三方集成

缺点

  • 开发人员要处理分布式的复杂性
  • 运维难度和成本增大
  • 服务间通信成本增加
  • 出现数据一致性问题

SpringCloud

SpringCloud是基于SpringBoot提供的一套微服务解决方案,包括服务注册与发现、配置中心、全链路监控、服务网关、负载均衡、熔断器等组件

SpringBoot没有重复造轮子,而是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过SpringBoot风格进行再封装,屏蔽了复杂的配置和实现原理,最终给开发者留下一套简单易用的开发工具包

SpringCloud是分布式微服务架构下的一站式解决方案,是各个微服务结构落地技术的集合体,俗称微服务全家桶

SpringCloud和SpringBoot的关系

SpringBoot专注于快速方便的开发单个个体微服务(也就是一个个Jar包)

SpringCloud关注于全局微服务协调治理框架,将SpringBoot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等集成服务

SpringBoot可以离开SpringCloud单独开发项目,但是SpringCloud离不开SpringBoot

版本的选择问题

需要注意的是,并不是所有工具的选择上都是最新的最好

对于SpringCloud的使用来说,与SpringBoot的版本对应最好根据官方网站的推荐搭配

项目搭建

SpringCloud项目的创建方式,基础架构,要清楚SpringCloud是基于SpringBoot的。

创建父工程

图

删除src文件,保留pom.xml

配置pom.xml

<!-- 打包方式 -->
<packaging>pom</packaging>

<!-- 版本统一控制 -->
<properties>
    <lombok.version>1.18.20</lombok.version>
</properties>

<!-- 依赖管理 -->
<dependencyManagement>
    <dependencies>
        <!-- springcloud -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Hoxton.SR10</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- springboot -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-dependencies</artifactId>
            <version>2.3.8.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

创建实体类子工程

在父工程下创建一个Module,同样选择Maven项目,此时该工程的pom.xml中会出现父工程信息

图

而父工程pom.xml中就会出现子工程的module

图

正常业务模块创建

同样在父工程下创建Module,Maven项目

导入实体类模块

<dependency>
    <groupId>org.fan</groupId>
    <artifactId>springcloud-api</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

如果导入的依赖在父工程中有定义,就不用指定版本号,使用父工程的即可,其余操作跟普通Maven项目一样。