目录

  • 一、什么是微服务
  • 1. 微服务技术理解
  • 2. 微服务技术栈包括
  • 3. 微服务技术栈大分块
  • 4. 微服务的特征
  • 5. 微服务落地技术对比


一、什么是微服务

1. 微服务技术理解

微服务是分布式架构的一种,而分布式架构就是要把服务做拆分,其中,拆分的过程中会产生各种各样的问题需要解决,而Spring Cloud仅仅解决了服务拆分时的服务治理问题,至于其他的服务拆分所产生的问题Spring Cloud并没有给出解决方案,所以微服务技术 ≠ Spring Cloud。

  • 分布式架构:就是根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
    松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝
  • 分布式架构要考虑的问题:
  1. 服务拆分粒度如何
  2. 服务集群地址如何维护
  3. 服务之间如何实现远程调用
  4. 服务健康状态如何感知(挂没挂)

有众多的分布式架构实现技术,而微服务,就是一种经过良好架构设计的分布式架构方案

2. 微服务技术栈包括

  1. 首先,微服务要做的第一件事就是拆分,把传统的单体架构,根据业务功能模块,拆分成许多个独立的项目,每个项目完成一部分业务功能,将来独立开发和部署。把这种一个独立的项目称为服务,一个大型的互联网项目往往包含数百上千的服务,最终形成一个服务集群。而一个业务,往往需要多个服务来完成,各个服务之间互相调用,会比较乱。
  2. 所以,微服务中有个组件叫:注册中心,可以去记录微服务中每个服务的IP、端口以及能干什么事儿这些信息。当有一个服务中要调用另一个服务时,不需要自己记录另外的服务的IP,只需要去找注册中心即可,从注册中心拉取对方的服务信息。
  3. 同时,随着服务越来越多,每个服务都有自己的配置文件,将来如果要更改配置,去逐一更改每个服务的配置文件过于麻烦,则微服务中还有个组件叫:配置中心,它可以统一的管理整个服务群中成百上千的配置。如果以后有一些配置需要变更,只需要找到配置中心即可,它会通知相关的服务,实现配置的热更新。
  4. 当微服务运行起来之后,用户就可以来访问,由于有众多的服务群,为了管理用户访问服务的过程,微服务中有个组件叫:服务网关,一方面对用户身份做校验,另一方面可以把用户的请求路由到具体的服务。
  5. 由于超多个用户和服务高并发的访问数据库,因此,微服务技术栈中包括组件:分布式缓存,就是把数据库中的数据放入到内存当中。
  6. 当有海量数据复杂的搜索时,还需要组件:分布式搜索,加快搜索。
  7. 微服务技术栈中还需要组件:消息队列,用来实现异步通信。
  8. 如此庞大的微服务架构,当遇到问题时不好排查,所以为了解决服务的异常定位问题,又引入两个组件:分布式日志服务,可以统计整个集群当中成百上千的服务的运行日志,做存储、统计和分析等。系统监控链路追踪,可以实时监控整个集群中每个服务节点的运行状态、CPU的负载、内存的占用等情况
  9. 为了有效的部署成百上千的服务集群,光靠人工部署是不现实的,所以要做到自动化部署,需要Jenkins这样的工具,可以帮助你对微服务项目进行自动化编译,基于Docker进行打包,形成镜像,再基于kubernetes或者RANCHER这样的技术进行自动化部署,这一套称之为:持续集成

以上是完整的微服务技术栈。

iot微服务架构 微服务架构技术_iot微服务架构

3. 微服务技术栈大分块

  1. 微服务治理相关的的技术:也就是Spring Cloud框架所包含的一些技术。
    例如:注册发现、远程调用、负载均衡、配置管理、网关路由、系统保护、流量控制、熔断降级、服务授权、分布式事务、TCC模型、AT模型、Seata等
  2. 缓存技术:SpringDataRedis、Redis数据结构、Redis主从复制、Redis持久化、Redis分片集群、多级缓存分层、缓存穿透雪崩、OpenResty、缓存数据同步、Nginx本地缓存、Lua脚本、等
  3. 异步通信技术:MQ消息模型等
  4. 搜索技术:ES集群等
  5. 持续集成DevOps:Docker等

4. 微服务的特征

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

5. 微服务落地技术对比

微服务落地技术最知名的是:SpringCloud、阿里巴巴的Dubbo

Dubbo

SpringCloud

SpringCloudAlibaba

注册中心

zookeeper、Redis

Eureka、Consul

Nacos、Eureka

服务远程调用

Dubbo协议

Feign(http协议)

Dubbo、Feign

配置中心


SpringCloudConfig

SpringCloudConfig、Nacos

服务网关


SpringCloudGateway、Zuul

SpringCloudGateway、Zuul

服务监控和保护

dubbo-admin,功能弱

Hystrix

Sentinel

  • Dubbo:它的核心就是服务的远程调用,所以Dubbo的微服务技术体系并不完整
  • SpringCloud:整合了各种微服务技术,形成了完整的微服务技术体系。并基于SpringBoot实现了这些组件的自动装配,从而提供良好的开箱体验。(SpringCloud与SpringBoot有互相版本兼容关系)
  • SpringCloudAlibaba:兼容了SpringCloud的接口,同时又整合Dubbo进来,新增了一些技术栈

企业中常用的微服务技术栈组合:

1. SpringCloud+Feign(使用SpringCloud技术栈,服务接口采用Restful风格,服务调用采用Feign方式)
2. SpringCloudAlibaba+Feign(使用SpringCloudAlibaba技术栈,服务接口采用Restful风格,服务调用采用Feign方式)
3. SpringCloudAlibaba+Dubbo(使用SpringCloudAlibaba技术栈,服务接口采用Dubbo协议标准,服务调用采用Dubbo方式)
4. Dubbo原始模型(基于Dubbo老旧技术体系,服务接口采用Dubbo协议标准,服务调用采用Dubbo方式)