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

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

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

7. SpringCloud

7.1. 概述

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

SpringCloud 架构图
在这里插入图片描述
在这里插入图片描述

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

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

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

7.2. SpringCloud 和 SpringBoot 的关系

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

7.3. SpringCloud 和 Dubbo 对比

DubboSpringCloud
服务注册中心ZookeeperSpringCloud Netflix Eureka
服务调用方式RPCREST API
服务监控Dubbo-monitorSpringBoot 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/

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yuan_404

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值