SpringCloud-狂神(1. 概述)学习笔记

下一篇 : 2. REST服务环境搭建

文章目录

  • 1. 常见面试题
  • 2. 微服务
  • 3. 微服务框架的核心问题
    • 3.1. 核心问题
    • 3.2. 解决上述问题
  • 4. 微服务优缺点
    • 4.1. 优点
    • 4.2. 缺点
  • 5. 微服务技术栈
  • 6. 常见微服务框架对比
  • 7. SpringCloud
    • 7.1. 概述
    • 7.2. SpringCloud 和 SpringBoot 的关系
    • 7.3. SpringCloud 和 Dubbo 对比
    • 7.4. 参考资料

1. 常见面试题

  1. 什么是微服务?
  2. 微服务之间是如何独立通信的?
  3. SpringCloud 和 Dubbo 有哪些区别?
  4. SpringBoot 和 SpringCloud ,请谈谈对它们的理解。
  5. 什么是服务熔断?什么是服务降级?
  6. 微服务的优缺点分别是什么?说说你在项目中遇到的坑。
  7. 你所知道的微服务技术栈有哪些?请列举。
  8. Eureka 和 Zookeeper 都可以提供服务注册与发现,请说说两者区别。
  9. ……
  • 下面学习,带着思考

2. 微服务

最开始开发使用的是 MVC 三层架构

后来为了简化代码就升级为了 Spring —— 轻量级的 Java 的开发框架

因为 Spring 的配置过多,就升级为了 SpringBoot —— 新一代的 JavaEE 开发标准

再往后用户量越来越多,服务越来越多,单纯的 SpringBoot 就支撑不住了,就需要使用微服务来解决

微服务就是把原来 所以功能集成再一个项目 转变成 一台服务器放一种服务,也即把原来的一整个系统模块化

  • 新概念:服务网格(Service Mesh),新一代的微服务标准

具体内容 : Martin Flower关于微服务的论文

3. 微服务框架的核心问题

3.1. 核心问题

  1. 服务很多,客户端怎么访问?
  2. 这么多服务,服务之间如何通信?
  3. 这么多服务,如何治理?
  4. 服务挂了怎么办?

3.2. 解决上述问题

  • SpringCloud 就是一个解决上述问题的生态
  • 三套常见的方案
  1. SpringCloud + Netflix (一站式解决方案,解决上述四个问题)

    -访问 : API 网关,zuu1 组件

    -通信 :Feign —— 基于 HTTP 的通信方式(同步,阻塞)

    -治理 :服务注册发现,Eureka

    -服务挂了 :熔断机制 , Hystrix

  2. Dubbo + Zookeeper(半自动,需要整合别人的)

    -访问 :本身没有,需要找第三方组件,或者自己实现

    -通信 :Dubbo —— 基于 Java 开发的 RPC 框架

    -治理 :Zookeeper

    -服务挂了 :没有熔断机制

  3. SpringCloud + Alibaba (新的一站式解决方案)

    和方案1 类似,不过方案一已经停止维护了
    而这个是很新的才出的方案

4. 微服务优缺点

4.1. 优点

  • 单一职责原则
  • 每个服务足够内聚、足够小,代码容易理解,这样能聚焦一个指定的业务功能或业务需求
  • 开发简单,提高开发效率,一个服务可能就是专一的只干一件事
  • 微服务能够被小团队独立开发,这个小团队是 2~5 人的开发人员组成
  • 微服务是松耦合的,有功能意义的服务,无论是在开发阶段或是部署阶段都是独立的
  • 微服务能使用不同的语言开发
  • 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如 Jenkins、Hudson、Bamboo
  • 微服务易于被一个开发人员理解、修改和维护,这样小团队能够跟关注自己的工作成果,无需通过合作才能体现价值
  • 微服务允许利用融合新技术
  • 微服务只是业务逻辑的代码,不会和HTML、CSS或其他界面混合
  • 每个人微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库

4.2. 缺点

  • 开发人员要处理分布式系统的复杂性
  • 多服务运维的难度,随着服务的增加而增加
  • 系统部署依赖
  • 服务间通信成本
  • 数据一致性
  • 系统集成测试
  • 性能监控
  • ……

5. 微服务技术栈

微服务条目 落地技术
服务开发 SpringBoot 、Spring、SpringMVC
服务配置与管理 Netflix 公司的 Archaius、阿里的 Diamond……
服务注册与发现 Eureka、Consul、Zookeeper……
服务调用 Rest、RPC、gRPC
服务熔断器 Ribbon、Nginx……
服务接口调用(客户端调用服务的简化工具) Feign……
消息队列 Kafka、RabbitMQ、ActiveMQ……
服务配置中心管理 SpringCloudConfig、Chef……
服务路由(API网关) Zuul……
服务监控 Zabbix、Nagios、Metrics、Specatator……
全链路追踪 Zipkin、Brave、Dapper……
服务部署 Docker、OpenStack、Kubernetes……
数据流操作开发包 SpringCloud Stream(封装与Redis、Rabbit、Kafka等收发消息)
事件消息总线 SpringCloud Bus
…… ……

更多技术栈:Spring 官网

6. 常见微服务框架对比

功能点/服务框架 Netflix/SpringCloud Motan gRPC Thrift Dubbo/DubboX
功能定位 完整的微服务框架 RPC框架,但整合了ZK或Consul实现集群环境的基本服务注册、发现 RPC框架 RPC框架 服务框架
支持Rest Y,Ribbon支持多种可插拔的序列化选择 N N N N
支持RPC N Y,Hession2 Y Y Y
支持多语言 Y,Rest形式 N Y Y N
负载均衡 Y,服务端Zuul(动态路由,云端负载均衡) + 客户端Ribbon Y,客户端 N N Y,客户端
配置服务 Y,Netflix Archaius,SpringCloudConfig Service集中配置 Y,ZK N N N
服务调用链监控 Y,Zuul N N N N
高可用/容错 Y,服务端 Hystrix + 客户端 Ribbon Y,客户端 N N Y,客户端
社区活跃度 一般 一般 -
学习难度 一般
文档丰富程度 一般 一般 一般
其他 SpringCloud Bus 为我们的应用程序带来了更多管理端点 支持降级 Netflix 在开发集成 gRPC IDL定义 实践的公司较多

7. SpringCloud

7.1. 概述

官网地址:https://spring.io/cloud

SpringCloud 架构图
SpringCloud-狂神(1. 概述)学习笔记_第1张图片
SpringCloud-狂神(1. 概述)学习笔记_第2张图片

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

SpringCloud 利用 SpringBoot 的开发便利性,简化了分布式系统的基础设施开发,为开发人员提供了快捷构建分布式系统的一些工具,可以用SpringBoot的开发风格做到一键启动和部署。

SpringBoot将目前各家公司开发的比较成熟的服务框架组合起来,通过SpringBoot风格再封装,屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署、易维护的分布式系统开发包

7.2. SpringCloud 和 SpringBoot 的关系

  • SpringBoot 专注于快速便捷的开发单个个体微服务
  • SpringCloud关注全局的微服务协调整理治理的框架,它将SpringBoot 开发的一个个单体微服务整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等集成服务
  • SpringBoot 可以离开 SpringCloud 独立使用,开发项目,单数 SpringCloud 离不开 SpringBoot,属于依赖关系

7.3. SpringCloud 和 Dubbo 对比

Dubbo SpringCloud
服务注册中心 Zookeeper SpringCloud Netflix Eureka
服务调用方式 RPC REST API
服务监控 Dubbo-monitor SpringBoot Admin
断路器 不完善 SpringCloud Netflix Hystrix
服务网关 SpringCloud Netflix Zuul
分布式配置 SpringCloud Config
服务跟踪 SpringCloud Sleuth
消息总线 SpringCloud Bus
数据流 SpringCloud Stream
批量任务 SpringCloud Task
  • 最大区别:SpringCloud 抛弃了 Dubbo 的 RPC 通信,采用了基于 HTTP 的 REST 方式
    两种方式各有优劣。从一定程度上来说,后者牺牲了服务调用的性能,但是避免了原生 RPC 的问题,且 REST 比 RPC 更加灵活,不存在代码级别是强依赖,更加适合当下强调微服务的环境。

  • 类似品牌机和组装机的区别
    SpringCloud 就像品牌机,它的功能比 Dubbo 更强大,涵盖面更广,而且作为 Spring 的拳头项目,能够与 SpringFramework、SpringBoot、SpringData 等其他项目完美融合。在 SpringSource 的整合下,做了大量的测试,保证了及其有更高的稳定性,但是如果需要使用组件外的东西,就要对其基础有足够的了解。

    Dubbo 就像组装机,各个环节的选择的自由度很高,但是最终结果可能因为其中一个小件的质量不过关而出问题,让人不放心。除非是一名高手。

  • 解决的问题域不一样
    Dubbo 定位是一个 RPC 框架。

    Spring Cloud 定位是微服务架构下的一站式解决方案。

7.4. 参考资料

Netflix : https://www.springcloud.cc/spring-cloud-netflix.html

中文 API 文档 :https://www.springcloud.cc/spring-cloud-dalston.html

SpringCloud 中国社区 : http://springcloud.cn/

SpringCloud 中文网 : https://www.springcloud.cc/

你可能感兴趣的:(SpringCloud,springcloud)