微服务01_微服务到底都涉及哪些技术呢?

微服务01_到底什么是微服务?

    • 什么是单体架构:
    • 什么是分布式架构:
  • 一、什么是微服务?
    • 1、微服务技术是Spring Cloud技术吗?
    • 2、微服务技术对比:
      • 1.dubbo技术
      • 2.SpringCloud技术
      • 3.SpringCloudAlibaba
  • 二、微服务都有哪些技术?
    • 介绍微服务拆分 问题
    • 服务集群
    • 注册中心:拉取和注册服务信息
    • 配置中心
    • 服务网关
    • 分布式缓存
    • 分布式搜索
    • 消息队列
    • 分布式日志服务、
    • 系统监控,链路追踪
    • 持续集成
    • 微服务治理+持续集成(DevOps)=完整的微服务技术栈
  • 三、SpringCloud把微服务推广开的原因
    • 四、SpringCloud和SpringBoot版本兼容关系
    • 如何在官网选择最适合的版本呢?
    • 本次项目技术版本是:

什么是单体架构:

微服务01_微服务到底都涉及哪些技术呢?_第1张图片

什么是分布式架构:

特点: 松耦合、扩展性好,但架构复杂,难度大。
微服务01_微服务到底都涉及哪些技术呢?_第2张图片

一、什么是微服务?

微服务是分布式架构的一种,所以说分布式架构是将服务进行拆分,而拆分的过程当中会产生各种各样的问题。
微服务是一种经过良好架构设计的分布式架构方案,目的是:实现高内聚,低耦合,降低服务之间影响。

特征:

  • 单一职责:微服务拆分力度更小,每一个服务都对应唯一的业务能力,做到单一职责,避免重复业务开发。
  • 面向服务:微服务对外暴露业务接口。
  • 自治:团队独立、技术独立、数据独立、部署独立
  • 隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题。

优点: 拆分力度更小、服务更独立、耦合度更低
缺点: 架构复杂、运维、监控、部署难度高。

1、微服务技术是Spring Cloud技术吗?

而SpringCloud仅仅是解决了拆分的服务治理问题,至于分布式其他的问题并没有解决方案。

微服务01_微服务到底都涉及哪些技术呢?_第3张图片

2、微服务技术对比:

微服务01_微服务到底都涉及哪些技术呢?_第4张图片

1.dubbo技术

Dubbo技术:在2012年阿里巴巴将Dubbo技术就已经开源了。但它并不是严格意义上的微服务技术。注册中心是用的zookeeper,其实zookeeper主要是做集群管理。
dubbo核心是:用Dubbo协议进行服务远程调用。
配置中心和服务网关都没有实现。
服务监控和服务保护是用的:dubbo-admin,它的功能比较单一,只是来统计一下调用时的相应时间。

2.SpringCloud技术

SpringCloud并不是发明了什么东西,而是把各个公司的开源技术进行了一个整合。从而形成了一套完整的技术体系。所以说SpringCloud技术比较完善。
注册中心:有专业的Eureka。
服务远程调用:用的是基于http协议标准的Feign技术。比如说Controller中遵循Restful接口。
配置中心:SpringCloudConfig
服务网关:SpringCloudGateway遵循了响应式编程,吞吐能力比较强。
服务保护:Hystrix是一个比较强大的服务保护技术。可以实现服务隔离、熔断等。

3.SpringCloudAlibaba

SpringCloudAlibaba形成一套完整的技术栈。实现了自己的注册中心、自己的配置中心、自己的服务监控等等组件。
它是以SpringCloud开头,是SpringCloud的一部分。它是实现了springCloud标准接口,统一的接口规范,所以用起来跟SpringCloud没有什么学习成本。
注册中心: Nacos强大之处在于,既支持Dubbo调用,又支持Feign调用。也就是说在一个微服务中既支持支持Dubbo接口,也支持Feign接口。
也就是说SpringCloudAlibaba兼容Dubbo和SpringCloud两种架构。

二、微服务都有哪些技术?

介绍微服务拆分 问题

微服务第一件事就是:拆分。
传统的单体架构,所有的业务逻辑写在一起,随着业务越来越复杂,代码也变得耦合严重,升级维护就很困难。
微服务01_微服务到底都涉及哪些技术呢?_第5张图片

服务集群

拆分会根据业务逻辑模块,将单体的项目,拆分成多个独立的项目。每个项目完成一部分业务功能。将每一个独立的项目称之为“服务”。一个大型的互联网项目,往往有数百上千的服务。从而成为服务集群
微服务01_微服务到底都涉及哪些技术呢?_第6张图片

而一个业务往往需要多个服务共同完成。当业务越来越多,越来越复杂,服务之间的调用关系就会越来越复杂。–》从而有了注册中心

注册中心:拉取和注册服务信息

注册中心就可以记录微服务中的,每个服务的ip、端口。当服务A想调用服务B的时候,它不需要自己去记录服务B的IP。只需要去找服务中心即可。从注册中心去拉取服务信息。从而每个服务越来越多,每个服务都有自己的配置文件,如果更改配置就得逐一去更改吗? -》从而有了配置中心
微服务01_微服务到底都涉及哪些技术呢?_第7张图片

配置中心

统一的管理整个服务群里整千上百的配置,如果有配置需要变更,只需要去配置中心进行更改即可。更改后,配置中心会通知相关的微服务,实现配置的热更新。当微服务跑起来以后,用户就可以访问了。-》从而有了服务网关
微服务01_微服务到底都涉及哪些技术呢?_第8张图片

服务网关

因为微服务中有很多服务,用户不知道该访问哪一个服务,并且也不是随意访问某一个服务。

所以功能是:【校验身份、请求路由、负载均衡】

  • 一方面对用户身份进行校验
  • 另一方面可以将用户的请求路由到具体的服务
  • 路由中可以做一些负载均衡。

当用户访问微服务时,就会对数据库进行操作,并且将数据库的信息返回给用户。由于用户超级多,那么数据库很少,从而有了高并发,从而加入了缓存
微服务01_微服务到底都涉及哪些技术呢?_第9张图片

分布式缓存

缓存:数据库数据放到内存当中。内存的查询效率会比磁盘(数据库)查询效率高很多。那么也会将缓存作为集群。 用户简单请求先到缓存,缓存未命中,再去数据库。那么还会有复杂的搜索功能,而海量的复杂搜索必须交给分布式搜索

而数据库的功能:数据的写操作、事务类型对安全要求较高的操作。

分布式搜索

复杂的搜索功能,而海量的复杂搜索必须交给分布式搜索。是因为缓存中的空间有限,不适合海量的数据存储。
微服务01_微服务到底都涉及哪些技术呢?_第10张图片

消息队列

异步通信的消息队列组件,对于分布式的服务,业务往往跨越多个服务。例如一个请求来了,先调用A,在调用B…。从而整个业务的链路就很长,调用时长就等于 调用每个服务的时长之和。从而会导致性能的下降。
异步通信的意思是:当请求来了,调用了服务A,A并不是去调用服务B和C,而是发一条消息,通知B和C去工作。然后服务A结束工作。从而业务链路变短了。从而相应时间变短了。从而异步通信可以提高服务的并发,例如在一些秒杀高并发的场景下,就可以去利用了。
微服务01_微服务到底都涉及哪些技术呢?_第11张图片

分布式日志服务、

那么如此庞大的服务,运行的过程当中,如果出现了问题非常不好排查,从而就有了两个组件:分布式日志组件、
分布式日志组件:整个集群当中的服务日志,进行统计、存储、分析。将来出现了问题容易定位。

系统监控,链路追踪

实时监控整个集群当中,每一个服务节点的运营状态,CPU的负载,占用情况。一旦出现任何问题,直接可以定位到具体的方法。从而快速定位信息。
微服务01_微服务到底都涉及哪些技术呢?_第12张图片

持续集成

成千上万的微服务,那么还需要人工去一点点部署吗?微服务集群还需要进行自动化部署,JenKiins工具
可以对微服务项目进行自动化编译,基于doker进行打包,形成镜像
在基于KBS、RANCHER,去实现自动化部署。

自动化部署,JenKiins工具,doker进行打包,形成镜像,KBS、RANCHER,去实现自动化部署

微服务01_微服务到底都涉及哪些技术呢?_第13张图片

微服务治理+持续集成(DevOps)=完整的微服务技术栈

微服务01_微服务到底都涉及哪些技术呢?_第14张图片

三、SpringCloud把微服务推广开的原因

  • SpringCloud是目前国内使用最广泛的服务器框架。
  • SpringCloud集成了各种服务器功能组件,并基于SpringBoot实现了这些组件的自动装配,不需要复杂的配置,从而提升了良好的开箱即用体验。
    这也就是说为什么SpringCloud把微服务推广开的原因,原生的一个个技术用起来比较麻烦。SpringCloud整合一起后,用起来非常简单。

四、SpringCloud和SpringBoot版本兼容关系

SpringCloud底层基于SpringBoot做了自动装配功能。所以说版本有一个兼容性问题。每一个SpringCloud版本都对应的SpringBoot版本。
微服务01_微服务到底都涉及哪些技术呢?_第15张图片

如何在官网选择最适合的版本呢?

  1. 打开SpringCloud官网https://spring.io/projects/spring-cloud#overview
  2. 在overview中就可以看到每一个SpringCloud对应SpringBoot的版本范围兼容关系。
  3. 如何看具体的SpringCloud对应的SpringBoot具体版本关系呢?。在LEARN中选择SpringCloud具体版本,点击 Reference Doc.查看对应spring Boot的具体版本。

本次项目技术版本是:

cloud:Hoxton.SR10
boot:2.3.9.RELEASE
Alibaba Cloud:2.2.6.RELEASE
mysql:5.1.47
mybatis:2.1.1

<parent>
   <groupId>org.springframework.bootgroupId>
   <artifactId>spring-boot-starter-parentartifactId>
   <version>2.3.9.RELEASEversion>
   <relativePath/>
parent>

<properties>
   <project.build.sourceEncoding>UTF-8project.build.sourceEncoding>
   <project.reporting.outputEncoding>UTF-8project.reporting.outputEncoding>
   <java.version>1.8java.version>
   <spring-cloud.version>Hoxton.SR10spring-cloud.version>
   <mysql.version>5.1.47mysql.version>
   <mybatis.version>2.1.1mybatis.version>
properties>
<dependencyManagement>
   <dependencies>
       
       <dependency>
           <groupId>org.springframework.cloudgroupId>
           <artifactId>spring-cloud-dependenciesartifactId>
           <version>${spring-cloud.version}version>
           <type>pomtype>
           <scope>importscope>
       dependency>
       
       <dependency>
           <groupId>com.alibaba.cloudgroupId>
           <artifactId>spring-cloud-alibaba-dependenciesartifactId>
           <version>2.2.6.RELEASEversion>
           <type>pomtype>
           <scope>importscope>
       dependency>
       
       <dependency>
           <groupId>mysqlgroupId>
           <artifactId>mysql-connector-javaartifactId>
           <version>${mysql.version}version>
       dependency>
       
       <dependency>
           <groupId>org.mybatis.spring.bootgroupId>
           <artifactId>mybatis-spring-boot-starterartifactId>
           <version>${mybatis.version}version>
       dependency>
   dependencies>
dependencyManagement>
<dependencies>
   <dependency>
       <groupId>org.projectlombokgroupId>
       <artifactId>lombokartifactId>
   dependency>
dependencies>

你可能感兴趣的:(微服务技术栈,java)