SpringCloud学习笔记(微服务入门)
一、文章大纲:
SpringCloud Netflix五大组件
-
服务注册与发现—— Netflix Eureka
-
负载均衡:
客户端负载均衡——Netflix Ribbon
服务端负载均衡:——Feign(其也是依赖于Ribbon,只是将调用方式RestTemplete 更改成Service 接口)
-
断路器——Netflix Hystrix
-
服务网关——NetFlix Zuul
-
分布式配置——Spring Cloud Config
二、常见面试题
大家可以带着这些问题去看看
1 什么是微服务?
2 微服务之间是如何独立通讯的?
3 SpringCloud 和 Dubbo有那些区别?
4 SpringBoot 和 SpringCloud,请谈谈你对他们的理解
5 什么是服务熔断?什么是服务降级?
6 微服务的优缺点分别是什么?说下你在项目开发中遇到的坑
7 你所知道的微服务技术栈有哪些?列举一二
8 Eureka和Zookeeper都可以提供服务注册与发现的功能,请说说两者的区别
…
三、微服务
1、微服务概述
什么是微服务?
微服务(Microservice Architecture) 是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。
究竟什么是微服务呢?我们在此引用ThoughtWorks 公司的首席科学家 Martin Fowler 于2014年提出的一段话:
就目前而言,对于微服务,业界并没有一个统一的,标准的定义。
但通常而言,微服务架构是一种架构模式,或者说是一种架构风格,它将单一的应用程序划分成一组小的服务,每个服务运行在其独立的自己的进程内,服务之间互相协调,互相配置,为用户提供最终价值,服务之间采用轻量级的通信机制(HTTP)互相沟通,每个服务都围绕着具体的业务进行构建,并且能狗被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应该根据业务上下文,选择合适的语言,工具(Maven)对其进行构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也可以使用不同的数据存储。
再从技术维度角度理解下:
- 微服务就是将一个传统的一站式的应用,根据业务去拆分成一个个的服务,彻底地去解耦,一个微服务提供单个业务功能的服务,一个服务做一件事情,从技术角度看就是一种小而独立的处理过程,类似进程的概念,能够自行单独启动或销毁,拥有自己独立的数据库。
1.2、微服务与微服务架构
微服务
狭义的看,可以看作是IDEA中的一个个微服务工程,或者Moudel。IDEA 工具里面使用Maven开发的一个个独立的小Moudel,它具体是使用SpringBoot开发的一个小模块,专业的事情交给专业的模块来做,一个模块就做着一件事情。强调的是一个个的个体,每个个体完成一个具体的任务或者功能。
微服务架构
微服务架构是一种架构模式,它体长将单一应用程序划分成一组小的服务,服务之间相互协调,互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务之间采用轻量级的通信机制**(如HTTP)互相协作,每个服务都围绕着具体的业务进行构建,并且能够被独立的部署到生产环境中,另外,应尽量避免统一的,集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具(如Maven)**对其进行构建。
1.3、微服务带来的问题
把之前的单体程序架构变成一个个微服务之后,会面临些什么问题呢?
首先,就是模块之间的通信,由于整个工程进行了拆分,所以各个模块之间不像单体架构那样,导个包,直接调用就可以,而且各个模块拆分过后是可以部署在不同计算机上的,部署后的模块是一个独立的进程。(HTTP、RPC通信)
其次,就是那么多微服务,怎么访问呢,大的项目有几十几百个微服务,学过Dubbo的小伙伴就知道,消费者(调用者)可以通过服务名进行调用,可用户是不知道这些服务名的呀,而且也不能让用户知道。那么就需要一个外部访问统一入口。(API网关)
再者,万一某个微服务崩掉了怎么办,有些小伙伴可能想到了集群,确实,集群可以给服务提供一定的保障性,可当调用到崩掉的那个服务时,流程还是得走,这就会浪费很多时间,造成用户不好的体验。(熔断机制)
最后,这么多微服务,怎么进行管理呢?(服务注册与发现)
解决方案
Spring Cloud生态
1.SpringCloud NetFlix :一站式解决方案
api网关,zuul组件
通信: Feign ----HttpClinet ----Http通信方式,同步,阻塞
服务注册与发现:Eureka
熔断机制:Hysstrix
2.Apache Dubbo Zookeeper:半自动,需要整合别人的
API网关:没有,需要找第三方组件,或者自己实现
通信:Dubbo,异步非阻塞
服务注册与发现:Zookeeper
Dubbo这个方案并不完善
3.Spring Cloud Alibaba 一站式解决方案,更简单
归其原因,网络不可靠
1.3、微服务技术栈有那些?
四、SpringCloud入门概述
1、SpringCloud是什么?
Spring官网:https://spring.io/
Spring Cloud为开发人员快速构建分布式系统中的一些常见模式提供了工具(例如,配置管理、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导层选举、分布式会话、集群状态)。分布式系统的协调导致了锅炉板模式,使用Spring Cloud开发人员可以快速建立实现这些模式的服务和应用程序。它们将在任何分布式环境中很好地工作,包括开发人员自己的笔记本电脑、裸机数据中心和托管平台,如Cloud Foundry。
学习一样东西还是得多去官网!(狂老师说的哈),虽然我经常一看就会,一写就废,但会看官网,或者官网的的很多帮助文档,真的很重要。
2、SpringCloud和SpringBoot的关系
SpringBoot专注于开苏方便的开发单个个体微服务;
SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务,整合并管理起来,为各个微服务之间提供:配置管理、服务发现、断路器、路由、为代理、事件总栈、全局锁、决策竞选、分布式会话等等集成服务;
SpringBoot可以离开SpringCloud独立使用,开发项目,但SpringCloud离不开SpringBoot,属于依赖关系;
SpringBoot专注于快速、方便的开发单个个体微服务,SpringCloud关注全局的服务治理框架;
使用微服务架构很简单,代码很简单,因为SpringBoot的自动装配,加上善良的注解开发,用起来还是挺简单,无非就是第一步导入依赖,第二步添加yml配置,最后加注解。但关键在于这些微服务组件的实现原理与机制,所以理论知识非常重要,今天就不上代码了,慢慢更吧,争取一个星期内把代码更完…