视频链接:https://www.bilibili.com/video/BV1f94y1U7AB/?vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P1— P15
文章目录
- 1.微服务简介
- 1.1 单体架构不足
- 1.2 微服务
- 1.3 微服务的特点
- 1.4 微服务的自动部署(CI/CD)(持续集成,持续交付)
- 1.5 微服务的不足
- 2.springCloud简介
- 2.1 介绍
- 2.2 版本对应
- 2.3 常用组件表
- 2.4 总结
- 3.微服务架构风格图
- 4. eureka
- 4.1 简介
- 4.2 eureka快速入门
- 4.3 eureka-server端配置文件讲解
- 4.3.1 主动下线和被动下线
- 4.3.2 配置
- 4.4 eureka-server客户端配置文件讲解
- 5.构建高可用的Eureka-Server集群
- 6. 集群的深入理解
- 7. eureka概念的理解
- 7.1 服务注册
- 7.2 服务注册源码分析
- 7.2.1 eureka运作原理的特点
- 7.2.2 服务注册的源码分析【重点】
- 7.3 服务的续约
- 7.4 服务的下线(主动下线)
- 7.5 服务的剔除(被动下线,主动剔除)
- 8.服务发现
- 9.构建docker镜像部署
- 10.restTemplate使用
1.微服务简介
微服务(不是一个框架而是一种架构思想),是著名的 oo(面向对象,ObjectOriented )专家Martin Fowler提出来的,它是用来描述将软件应用程序设计为独立部署的服务的种特殊方式。最近两年,微服务在各大技术会议、文章、书籍上出现的频率已经让人意识到它对于软件领域所带来的影响力。微服务架构的系统是个分布式系统,按业务领域划分为独立的服务单元,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。
1.1 单体架构不足
在应用的初始阶段,单体架构无论是在开发速度、运维难度上,还是服务器的成本上都有着显著的优势。在一个产品的前景不明确的初始阶段,用单体架构是非常明智的选择。随着应用业务的发展和业务复杂度的提高,这种架构明显存在很多的不足,主要体现在以下3个方面:
- 业务越来越复杂,单体应用的代码量越来越大,代码的可读性、可维护性和可扩展性下降,新人接手代码所需的时间成倍增加,业务扩展带来的代价越来越大。
- 随着用户越来越多,程序承受的并发越来越高,单体应用的并发能力有限。
- 测试的难度越来越大,单体应用的业务都在同个程序中,随着业务的扩张、复杂度的增加,单体应用修改业务或者增加业务或许会给其他业务带来定的影响,导致测试难度增加。
1.2 微服务
问题:什么是微服务呢?
答:就是将一个大的应用,拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以进行交互,这就是微服务。
对于微服务,业界没有严格统一的定义,但是作为“微服务”这名词的发明人,Martin Fowler对微服务的定义似乎更具有权威性和指导意义,他的理解如下:
简而言之,微服务架构的风格,就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级通信机制,通常是HTTP RESTFUL API。这些服务围绕业务能力来划分构建的,并通过完全自动化部署机制来独立部署这些服务可以使用不同的编程语言,以及不同数据存储技术,以保证最低限度的集中式管理。
1.3 微服务的特点
- 按业务(功能)划分为一个独立运行的程序,即服务单元。
- 服务之间通过HTTP协议相互通信。http是一个万能的协议(web应用都支持的模式)
- 自动化部署。
- 可以用不同的编程语言。
- 可以用不同的存储技术。
- 服务集中化管理。
- 微服务是一个分布式系统。
1.4 微服务的自动部署(CI/CD)(持续集成,持续交付)
在微服务架构中,系统会被拆分为若干个微服务,每个微服务又是一个独立的应用程序。单体架构的应用程序只需要部署一次,而微服务架构有多少个服务就需要部署多少次。随着服务数量的增加,如果微服务按照单体架构的部署方式,部署的难度会呈指数增加。业务的粒度划分得越细,微服务的数量就越多,这时需要更稳定的部署机制。随着技术的发展,尤其是 Docker容器技术的推进,以及自动化部署工具(例如开源组件Jenkins)的出现,自动化部署变得越来越简单。
1.5 微服务的不足
凡事都有两面性,微服务也不例外,微服务相对于单体应用来说具有很多的优势,当然也有它的不足,主要体现在如下方面:
- 微服务的复杂度
- 分布式事务问题
- 服务的划分(按照功能划分还是按照组件来划分呢)分工
- 服务的部署(不用自动化部署自动化部署)
2.springCloud简介
2.1 介绍
Spring cloud作为Java语言的微服务框架,它依赖于Spring Boot,有快速开发、持续交付和容易部署等特点。Spring cloud的组件非常多,涉及微服务的方方面面,并在开源社区Spring和Netflix、Pivotal两大公司的推动下越来越完善,如今alibaba,也加入到其中。spring 官方netflix alibaba
Spring cloud在开发部署上继承了Spring Boot的一些优点,提高其在开发和部署上的效率。Spring cloud的首要目标就是通过提供一系列开发组件和框架,帮助开发者迅速搭建一个分布式的微服务系统。Spring cloud是通过包装其他技术框架来实现的,例如包装开源的 Netflix oss.组件,实现了一套通过基于注解、Java配置和基于模版开发的微服务框架。Spring cloud提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、远程调用,智能路由、微代理、控制总线、全局锁、分布式会话等。
2.2 版本对应
这个网上去查,下面的版本不一定可用!
2.3 常用组件表
服务的注册和发现。(eureka, nacos,consul)
服务的负载均衡。(ribbon)
服务的相互调用。(openFeign)
服务的容错。(hystrix,sentinel)
服务网关。(gateway,zuul)
服务配置的统一管理。(config-server,nacos,apollo)
服务消息总线。(bus)
服务安全组件。(security,Oauth2.0)
服务监控。(admin)(jvm)
链路追踪。(sleuth+zipkin)
2.4 总结
SpringCloud就是微服务理念的一种具体落地实现方式,帮助微服务架构提供了必备的功能目前开发中常用的落地实现有三种:
Dubbo+Zookeeper半自动化的微服务实现架构(别的管理没有)
SpringCloud Netflix一站式微服务架构
SpringCloud Alibaba 新的一站式微服务架构
三大公司
Spring Netflix Alibaba
3.微服务架构风格图
- 要访问项目,首先从手机和电脑通过互联网,通过HTTP请求,到nginx
- nginx进行请求转发到网关(管理网络请求的)中
- 网关再进行二次转发,如果是登录转发到AuthServe(数学中心),如果不是登录,是请求服务,那直接转到服务中
- 服务与服务之间有箭头,可以互相交互(互相请求和数据传输)
- docker容器帮忙部署,JWT帮忙做服务之间的token的传递
- 服务产生的数据传入到数据库中
注册中心:完成一个服务的注册
配置中心:统一进行配置管理
4. eureka
4.1 简介
注册发现中心
Eureka来源于古希腊词汇,意为"发现了”。在软件领域,Eureka是Netflix在线影片公司开源的一个服务注册与发现的组件,和其他Netflix公司的服务组件(例如负载均衡、熔断器、网关等) 一起,被Spring Cloud社区整合为Spring Cloud Netflix 模块。Eureka是Netflix贡献给Spring Cloud的一-个框架! Netflix 给Spring Cloud 贡献了很多框架,后面我们会学习到!
面试题:Spring Cloud Eureka 和Zookeeper的区别
在分布式微服务里面CAP 定理
问:为什么zookeeper不适合做注册中心?
CAP原则又称CAP定理,指的是在一个分布式系统中,
一致性 (Consistency),可用性(Availability),分区容错性(Partition tolerance)
(这个特性是不可避免的)CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。
Spring Cloud还有别的注册中心Consul ,阿里巴巴提供Nacos都能作为注册中心
4.2 eureka快速入门
①搭建一个注册中心,并且让他可以提供注册中心
在IDEA中创建项目:
pom.xml:
写配置文件:
application:
直接运行启动:
出现上面的界面说明eureka成功了
上面界面中:
注:第三个红框是服务列表
②搭建客户端
重新注册项目模块
修改版本号:和上面的一样
修改application:
启动:
按照上面方法再注册一个客户端:
如果现在想把上面的A弄两台,弄一个集群:【只有端口变,其它都不变】
4.3 eureka-server端配置文件讲解
4.3.1 主动下线和被动下线
提问:应用A和应用B之间多次访问,怎么办?
回答:缓存服务列表到本地
提问:如果在一个时间段内大量的应用都不和注册中心联系了该怎么办
回答:eureka-server不会剔除任何一个服务,宁可放过一万都不能错杀一个 【AP】
4.3.2 配置
直接运行:
左下角:
4.4 eureka-server客户端配置文件讲解
测试:
5.构建高可用的Eureka-Server集群
定义三台server:
eureka-server:
eureka-server-b:
eureka-server-c:
将上面三个全部进行启动:
上面构建的三台服务器还不是集群:
发现并没有出现集群信息,只是同一个服务server启动了多台没有数据交互不是真正意义上的集群。
修改过程:
修改host
再修改配置文件:
再次重新启动后:
客户端进行注册:
运行后:在三台service中都有
集群的终极方案:
测试效果:
此时客户端的注册:
6. 集群的深入理解
主从模式中主机该如何选择,数据是如何进行同步的:
了解一下一个分布式数据一致性协议:Paxos,raft
- zk是Paxos
- eureka没有分布式数据一致性的机制节点都是相同的
- nacos是raft
- 在有主从模式的集群中一般都要遵循这样的协议才可以稳定对外提供服务【zookeeper Paxos,Nacos raft】
7. eureka概念的理解
7.1 服务注册
当项目启动时(eureka的客户端),就会向eureka-server发送自己的元数据(原始数据)(运行的ip,端口port,健康的状态监控等,因为使用的是http/ResuFul,请求风格),eureka-server会在自己内部保留这些元数据(内存中)。(有一个服务列表)(restful风格,以http.动词的请求方式,完成对url资源的操作)
7.2 服务注册源码分析
了解他的原理出了问题排查bug,优化你的代码
7.2.1 eureka运作原理的特点
- Eureka-server对外提供的是restful风格的服务
以http动词的形式对url资源进行操作get post putdelete - http服务+特定的请求方式+特定的url地址
只要利用这些restful我们就能对项目实现注册和发现
只不过,eureka已经帮我们使用java语言写了client,让我们的项目只要依赖client 就能实现注册和发现!
只要你会发起Http请求,那你就有可能自己实现服务的注册和发现。不管你是什么语言!
7.2.2 服务注册的源码分析【重点】
服务器使用单机模式:
启动客户端:
具体的代码看视频!!!!
7.3 服务的续约
项目启动成功了,除了向eureka-server注册自己成功,还会定时的向eureka-server汇报自己,心跳,表示自己还活着。(修改一个时间)
7.4 服务的下线(主动下线)
当项目关闭时,会给eureka-server报告,说明自己要下机了。
7.5 服务的剔除(被动下线,主动剔除)
当项目超过了指定时间没有向eureka-server汇报自己,那么eureka-server就会认为此节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。
8.服务发现
运行测试:
9.构建docker镜像部署
将项目打包:
定义docker:
10.restTemplate使用