单体架构vs微服务架构

单机架构

一个归档包(例如war格式)包含了应用所有功能的应用程序,我们通常称之为单体应用.架构单体应用的方法论,我们称之为单体应用架构(就是一个war包打天下)
Nacos注册中心实战 - 图1

微服务架构

Nacos注册中心实战 - 图2
微服务核心就是把传统的单机应用,根据业务将单机应用拆分为一个一个的服务,彻底的解耦,每一个服务都是提供特定的功能,一个服务只做一件事,类似进程,每个服务都能够单独部署,甚至可以拥有自己的数据库.这样的一个一个的小服务就是微服务。
①: 比如传统的单机电商应用,有订单/支付/库存/物流/积分等模块(理解为service)
②: 我们根据业务模型来拆分,可以拆分为订单服务、支付服务、库存服务、物流服务、积分服务
③: 若不拆分的时候,我的非核心业务积分模块 出现了重大bug 导致系统内存溢出,导致整个服务宕机,若拆分之后,只是说我的积分微服务不可用,我的整个系统核心功能还是能使用
微服务的特点

  • 独立部署,灵活扩展
  • 资源的有效隔离
  • 团队组织架构的调整

微服务适用的场景

  • 大型复杂的项目
  • 快速迭代的项目
  • 并发高的项目

    微服务技术栈

    Spring Cloud是分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶
    Spring Cloud为开发人员提供了快速构建分布式系统中的一些常见模式的工具(例如配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态)
    Spring、SpringBoot、Spring Cloud区别

  • Spring Cloud是基于服务的,Spring Cloud对于微服务架构对于共性的功能,也做了集成,比如微服务服务调用之间存在服务注册/发现的问题,因为服务之间需要RPC调用,所以Spring Cloud做了统一的管理并且实现了服务链路的排查以及微服务监控的功能

    • RPC调用: feign、dubbo
    • 服务注册和发现: eureka、nacos
    • 配置统一管理: zookeeper、nacos、redis
    • 服务链路的排查、服务监控: skywalking、zipkin+sleuth
    • 服务熔断降级: hystrix、sentinel
  • Spring Boot是基于应用的,对于第三方框架交给Spring进行管理会比较繁琐,所以Spring Boot可以通过自动装配进行可插拔
  • Spring是基于Bean的,将所有的Bean交给Spring进行管理

    注册中心

    image.png
    核心功能:

  • 服务注册:Nacos Client会通过发送REST请求的方式向Nacos Server注册自己的服务,提供自身的元数据,比如ip地址、端口等信息.Nacos Server接收到注册请求后,就会把这些元数据信息存储在一个双层的内存Map中

  • 服务心跳:在服务注册后,Nacos Client会维护一个定时心跳来持续通知Nacos Server,说明服务一直处于可用状态,防止被剔除.默认5s发送一次心跳(客户端会向服务端定时发心跳,服务端接收到心跳后修改服务续约的时间)
  • 服务同步:Nacos Server集群之间会互相同步服务实例,用来保证服务信息的一致性, leader、raft
  • 服务发现:服务消费者(Nacos Client)在调用服务提供者的服务时,会发送一个REST请求给Nacos Server,获取上面注册的服务清单,并且缓存在Nacos Client本地,同时会在Nacos Client本地开启一个定时任务定时拉取服务端最新的注册表信息更新到本地缓存
  • 服务健康检查:Nacos Server会开启一个定时任务用来检查注册服务实例的健康情况,对于超过15s没有收到客户端心跳的实例会将它的healthy属性置为false(客户端服务发现时不会发现),如果某个实例超过30秒没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)