SpringCloud笔记一:扫盲
目录
前言
这篇文章作为我学习SpringCloud的第一课,先来扫盲,再来讲解技术
| 注意:本扫盲贴的内容,我写的都要背熟,要很熟悉的说出来,不要看了就忘。 |
什么是微服务?
微服务提倡将单一应用拆分成一组小服务,每个服务在自己独立的进程中运行。
这就是微服务,例如淘宝,商品,订单,付款等等,如果都做在一起,那么一个模块有问题,势必会影响其他的模块,而且耦合度也高,现在使用微服务技术,把淘宝拆分成商品系统,订单系统,付款系统等等,这样一个偌大的淘宝就拆分成了一组小服务,耦合度大大降低。
微服务的优缺点是什么?
微服务的优点:
- 每个服务足够小,聚焦于一个业务功能或需求
- 代码开发简单,效率高,一个服务只专注于一个功能模块
- 微服务可以小团队开发,2~5人的小团队
- 松耦合,每个小服务都有意义,无论是开发阶段还是部署阶段
- 微服务可以使用不同的语言开发
- 易于和第三方服务集成,比如Jenkins,Hudson,Bambook
- 微服务易于被一个开发人员理解,修改,维护,小团队只需要专注于自己的工作
- 微服务允许你使用融合最新技术
- 微服务只是业务逻辑的代码,不会和HTML,CSS或其他界面组件混合
- 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库
微服务的缺点:
- 开发人员要处理分布式系统的复杂性
- 微服务数量多,运维难度增加
- 系统部署依赖
- 各个微服务之间通信的成本增加
- 数据的一致性问题
- 系统集成测试
- 性能监控
微服务之间是如何通讯的?
同步:RPC,REST等
异步:消息队列。要考虑消息可靠传输、高性能,以及编程模型的变化等。
SpringCloud和Dubbo有哪些区别?
这个区别只有自己使用过两种服务之后才能真正明白。
我目前所知,SpringCloud很强,而且更新的很快。Dubbo是阿里的,断更了5年,现在虽然重启了更新,但还是更新的慢,所以我打算先学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和SpringBoot的关系?
- SpringBoot是微观的,只关注于一个服务的实现。而SpringCloud不同,SpringCloud是分布式微服务的一站式解决方案,它关注的是宏观的。
- SpringBoot不依赖于SpringCloud,而SpringCloud依赖于SpringBoot。我举个栗子,SpringBoot就是医院的科室,可以是耳喉鼻科,可以是心脏科,可以是骨科。而SpringCloud就是医院。科室可以不依赖医院,就是小诊所。而医院不能没有科室。这就是二者的关系。
什么是服务熔断?什么是服务降级?
所谓的服务熔断,就是为了保证服务的可用性,对于某个出现故障的服务进行停用。就是把故障服务关闭。
服务降级呢就是你熔断的服务已经不可用了,外部想访问也访问不了,这个时候可以使用fallback回调,返回一个缺省值,意思就是我这个服务熔断了,现在已经关闭,暂时无法访问。
微服务的技术栈有哪些?
| 微服务条目 | 技术 |
|---|---|
| 服务开发 | SpringBoot,Spring,SpringMVC |
| 服务配置与管理 | Archaius,Diamond |
| 服务注册与发现 | Eureka,Consul,Zookeeper |
| 服务调用 | Rest,RPC,gRPC |
| 服务熔断器 | Hystrix,Envoy |
| 负载均衡 | Ribbon,Nginx |
| 服务接口调用 | Feign |
| 消息队列 | Kafka,RabbitMQ,ActiveMQ |
| 服务配置中心管理 | SpringCloudConfig,Chef |
| 服务路由(API网关) | Zuul |
| 服务监控 | Zabbix,Nagios,Metrice,Spectator |
| 全链路追踪 | Zipkin,Brave,Dapper |
| 服务部署 | Docker,OpenStack,Kubernetes |
| 数据流操作开发包 | SpringCloud Stream |
| 时间消息总线 | SpringCloud Bus |
eureka和zookeeper都可以提供服务注册和发现的功能,区别是什么?
讲区别之前,我先讲讲分布式领域的著名定理CAP,所谓的CAP就是
C数据一致性,A服务可用性,P分区容错
这三个指标不可能同时做到,目前的技术,最多只能同时解决两个。
关于CAP,可以看看阮一峰的文章CAP介绍
eureka是AP,Zookeeper是CP
这是第一大区别,eureka保证的是可用性,Zookeeper保证的是一致性。但就这方面来说,访问量很大很频繁的网站,例如淘宝,在双十一期间肯定使用AP,不同的人可能看到的信息不同,不一致,但是必须可用,你不能说我上淘宝结果访问不了信息。
eureka节点平等,Zookeeper需要选举
这是第二大区别,eureka的每个节点都是平等的,例如我有三个eureka服务中心,挂了一个没事,挂了两个也没事,只要有一个eureka服务中心在就可以用,直接切换。
Zookeeper需要选举,leader节点挂了之后,Zookeeper会对剩下的节点进行选举,重新选一个leader节点,这个过程耗时30s~120s,在选举的期间,整个Zookeeper集群都是不可用的,这是灾难。
我举个例子,一栋住宅楼建好了,人们去买房。eureka是这样的,售楼人员帮助你买房,就算这个售楼人员请假了,没事,其他售楼人员也可以接待你。
Zookeeper就牛逼了,售楼人员的leader请假了,他们需要重新选举一个leader售楼人员,你去买房,他告诉你,等我们几个小时,我们正在选举......
所以,很多人都说,eureka比Zookeeper更适合做服务注册。
SpringCloud笔记一:扫盲的更多相关文章
- SpringCloud笔记六:Hystrix
目录 Hystrix是什么? Hystrix服务熔断 新建Hystrix项目 修改yml Maven的pom.xml添加hystrix引用 修改Controller Hystrix服务降级 修改api ...
- SpringCloud笔记五:Feign
目录 什么是Feign? 有了Ribbon我还要Feign干嘛? 新建consumer-feign 修改api项目 引入Maven文件 新建feign的接口 启动项目 报错 发泄发泄心情,一个段落 什 ...
- SpringCloud笔记四:Ribbon
目录 什么是Ribbon? Ribbon的配置 Maven引入 开启注解 Ribbon负载均衡 新建provider8002和8003 Ribbon核心组件IRule Ribbon自定义 什么是Rib ...
- SpringCloud笔记三:Eureka服务注册与发现
目录 什么是Eureka? Eureka注册的三大步 第一步,引用Maven 第二步,配置yml 第三步,开启Eureka注解 新建Eureka子项目 把provider子项目变成服务端 Eureka ...
- SpringCloud笔记二:搭建项目基础框架
目录 搭建框架 新建父工程 新建子工程api 新建子工程提供者provider 新建消费者consumer 总结 搭建框架 我们的SpringCloud微服务框架是父子工程,有一个父工程,剩下的都是子 ...
- springCloud笔记
分布式和集群的理解:比如在一个厨房有两个厨师,一个炒菜,一个洗菜,各自做不同的事情,但是却在合作,这种叫做分布式,两个都在炒菜或者都在做菜,就叫做集群. eureka的是springCloud的注册中 ...
- springcloud 笔记
官方教程 http://projects.spring.io/spring-cloud/ guide https://github.com/spring-guides 伪官方教程 https://sp ...
- springcloud 笔记-服务注册中心
1.搭建springcloud服务注册中心需要添加eureka的依赖: <?xml version="1.0" encoding="UTF-8"?> ...
- SpringBoot+SpringCloud 笔记
SpringBoot总结 使用Typora打开https://pan.baidu.com/s/1tXS45j6ooXpnzhy1Zp78Gw 提取码: c8fi SpringCloud总结 使用XMi ...
随机推荐
- c/c++ 多线程 层级锁
多线程 层级锁 当要同时操作2个对象时,就需要同时锁定这2个对象,而不是先锁定一个,然后再锁定另一个.同时锁定多个对象的方法:std::lock(对象1.锁,对象2.锁...) 但是,有的时候,并不能 ...
- FPGA配置OV5640摄像头及RGB图像数据采集
本文设计思想采用明德扬至简设计法.在做摄像头数据采集处理之前,需要配置OV5640传感器内部寄存器使其按要求正常工作,详细内容请参见<OV5640自动对焦照相模组应用指南>.首先要关注OV ...
- RHEL/Centos7 安装图形化桌面(转)
RHEL/Centos7 安装图形化桌面 Linux是一个多任务的多用户的操作系统,好多linux爱好者在安装完linux后经常遇到一个问题——没有图形化桌面.今天小编在安装RHEL7的时候,一步 ...
- 安装ESXi部署OVF详细步骤
整个安装部署过程均在个人环境进行.欧克,我们现在开始. 一.安装ESXi 1.Enter回车 2.Enter回车继续 3.F11,接受继续 4.Enter,回车继续(选择安装ESXi的设备) 5.默认 ...
- Docker之进入容器(三)
1.简介 经过前面两篇博客的扫盲,大家多多少少对docker有了一个基本的了解,也接触了docker的常用命令.在这篇博客中,我将介绍进入docker容器的几种方式. 2.进入docker中的几种方式 ...
- Saltstack_使用指南03_配置管理
1. 主机规划 注意事项 修改了master或者minion的配置文件,那么必须重启对应的服务. 2. 了解YAML 具体地址 https://docs.saltstack.com/en/latest ...
- LeetCode算法题-Longest Harmonious Subsequence(Java实现)
这是悦乐书的第270次更新,第284篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第136题(顺位题号是594).我们定义一个和谐数组是一个数组,其最大值和最小值之间的差 ...
- 运行ConnectionDemo时遇到的问题及解决方案
20175227张雪莹 2018-2019-2 <Java程序设计> 运行ConnectionDemo时遇到的问题及解决方案 老师博客上提供确认数据库连接的代码 import static ...
- SpringBoot中使用Servlet,Filter,Listener
项目最近在替换之前陈旧的框架,改用SpringBoot进行重构,初接触,暂时还没有用到Servlet,Filter,Listener的地方,但在之前回顾Servlet的生命周期时,https://ww ...
- Linux进程管理专题
Linux进程管理 (1)进程的诞生介绍了如何表示进程?进程的生命周期.进程的创建等等? Linux支持多种调度器(deadline/realtime/cfs/idle),其中CFS调度器最常见.Li ...