1、微服务的基本概念、拆分和设计原则

1、什么是微服务

  • 一种架构分格
  • 开发单个应用作为一系列小型服务的套件。其中每个服务都运行在自己的进程中,并且通过轻量级的机制实现彼此间的通信,这通常是HTTP资源API
  • 这些服务是围绕着业务功能构建的,并且可以通过完全自动化的部署机制进行独立部署。
  • 这些服务的集中式管理做到了最小化(例如docker相关技术),每一种服务都可以通过不同的编程语言进行编写,并且可以使用不同的数据存储技术

    什么是服务化
  • 把传统的单机应用中的本地方法调用,改造成RPC、HTTP产生的远程方法调用

  • 把模块从单体应用中拆分出来吗,独立成一个服务部署
  • 用户模块就可以独立开发、测试、上线和运维,可以交由专门的团队来做,与主模块不耦合

    2、微服务的特点

  • 组件以服务的形式来提供。

  • 产品不是项目,单体项目容易做外包,微服务不容易做外包。
  • 轻量级通信,独立进程。
  • 分散治理、去中心化治理。每个人都要为自己的模块去负责
  • 容错性设计
  • 会带来团队组织架构的调整

    3、微服务的优缺点

    优点
  • 服务简单、便于学习和上手,相对易于维护

  • 独立部署、灵活扩展
  • 技术栈丰富

    缺点
  • 运维成本过高

  • 接口可能不匹配
  • 代理可能重复
  • 架构复杂度提高

    4、微服务的两大门派

  • Spring Cloud:众多子项目。

  • Dubbo:高性能、轻量级的开源JavaRPC框架,它提供了三大核心能力:面向接口的远程方法调用,只能容错和负载均衡,以及服务自动注册和发现。dubbo提供的能力只是Spring Cloud的一个子集 | 核心组件 | Dubbo | SpringCloud | | —- | —- | —- | | 服务注册中心 | Zookeeper | Spring Cloud Netflix Eureka | | 服务调用方式 | RPC | REST API | | 服务网关 | 无 | Spring Cloud Netflix Zuul | | 断路器 | 不完善 | Spring Cloud Netflix Hystrix | | 分布式配置 | 无 | SPringle Cloud Config | | 服务跟踪 | 无 | Spring Cloud Sleuth | | 消息总线 | 无 | Spring Cloud Bus | | 数据流 | 无 | Spring Cloud Stream | | 批量任务 | 无 | Spring Cloud Task |

  • RPC vs REST:RPC服务提供与调用方接口依赖方式太强。RPC不是一种通用的通信协议

    5、微服务的拆分

  • 什么时候进行服务化拆分

    • 第一阶段的主要目标是快速开发和验证想法
    • 进一步增加更多的新特性来吸引更多的目标用户
    • 同时进行开发的人员超过10人,这个时候就应该考虑服务化的拆分了
  • 不适合拆分的情况
    • 小团队,技术基础较薄弱
    • 流量不高,压力小,业务变化也不大
    • 对延迟很敏感的低延迟高并发系统
  • 服务化拆分的两种姿势

    • 纵向拆分
    • 横向拆分
    • 结合业务综合分析

      6、微服务的扩展

  • x轴-水平复制

  • y轴-功能解耦
  • z轴-数据分区

    自动按需扩展
  • 根据CPU的负载程度、特定时间(比如周末)、消息中间件的队列长度、业务具体规则、预测是否决定扩展

  • 自动分配一个新的服务实例
  • 提供了可伸缩性(双11之后,自动减少服务器)

    7、微服务的重要模块

  • 服务描述

  • 注册中心
  • 服务框架
  • 负载均衡
  • 熔断和降低
  • 网关

    2、微服务和Spring Cloud的关系

    3、微服务常见的组件和功能

    4、课程查询案例基本介绍、系统架构设计和接口设计

    5、 分模块构建Spring Cloud项目

    6、完成课程列表、课程价格服务开发

    7、课程服务整合,服务注册与发现

    8、整合Feign实现服务间调用

    9、网关的集成与开发,并接入服务

    10、引入服务的熔断与降级,并进行实操演练