视频链接:https://www.bilibili.com/video/BV1f94y1U7AB/?vd_source=9545770e4a2968c05878ffac8589ec6c
视频选集:P1— P15
微服务(不是一个框架而是一种架构思想),是著名的 oo(面向对象,ObjectOriented )专家Martin Fowler提出来的,它是用来描述将软件应用程序设计为独立部署的服务的种特殊方式。最近两年,微服务在各大技术会议、文章、书籍上出现的频率已经让人意识到它对于软件领域所带来的影响力。微服务架构的系统是个分布式系统,按业务领域划分为独立的服务单元,有自动化运维、容错、快速演进的特点,它能够解决传统单体架构系统的痛点,同时也能满足越来越复杂的业务需求。
在应用的初始阶段,单体架构无论是在开发速度、运维难度上,还是服务器的成本上都有着显著的优势。在一个产品的前景不明确的初始阶段,用单体架构是非常明智的选择。随着应用业务的发展和业务复杂度的提高,这种架构明显存在很多的不足,主要体现在以下3个方面:
问题:什么是微服务呢?
答:就是将一个大的应用,拆分成多个小的模块,每个模块都有自己的功能和职责,每个模块可以进行交互,这就是微服务。
对于微服务,业界没有严格统一的定义,但是作为“微服务”这名词的发明人,Martin Fowler对微服务的定义似乎更具有权威性和指导意义,他的理解如下:
简而言之,微服务架构的风格,就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级通信机制,通常是HTTP RESTFUL API。这些服务围绕业务能力来划分构建的,并通过完全自动化部署机制来独立部署这些服务可以使用不同的编程语言,以及不同数据存储技术,以保证最低限度的集中式管理。
在微服务架构中,系统会被拆分为若干个微服务,每个微服务又是一个独立的应用程序。单体架构的应用程序只需要部署一次,而微服务架构有多少个服务就需要部署多少次。随着服务数量的增加,如果微服务按照单体架构的部署方式,部署的难度会呈指数增加。业务的粒度划分得越细,微服务的数量就越多,这时需要更稳定的部署机制。随着技术的发展,尤其是 Docker容器技术的推进,以及自动化部署工具(例如开源组件Jenkins)的出现,自动化部署变得越来越简单。
凡事都有两面性,微服务也不例外,微服务相对于单体应用来说具有很多的优势,当然也有它的不足,主要体现在如下方面:
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提供了开发分布式微服务系统的一些常用组件,例如服务注册和发现、配置中心、熔断器、远程调用,智能路由、微代理、控制总线、全局锁、分布式会话等。
这个网上去查,下面的版本不一定可用!
服务的注册和发现。(eureka, nacos,consul)
服务的负载均衡。(ribbon)
服务的相互调用。(openFeign)
服务的容错。(hystrix,sentinel)
服务网关。(gateway,zuul)
服务配置的统一管理。(config-server,nacos,apollo)
服务消息总线。(bus)
服务安全组件。(security,Oauth2.0)
服务监控。(admin)(jvm)
链路追踪。(sleuth+zipkin)
SpringCloud就是微服务理念的一种具体落地实现方式,帮助微服务架构提供了必备的功能目前开发中常用的落地实现有三种:
Dubbo+Zookeeper半自动化的微服务实现架构(别的管理没有)
SpringCloud Netflix一站式微服务架构
SpringCloud Alibaba 新的一站式微服务架构
三大公司
Spring Netflix Alibaba
注册中心:完成一个服务的注册
配置中心:统一进行配置管理
注册发现中心
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都能作为注册中心
①搭建一个注册中心,并且让他可以提供注册中心
在IDEA中创建项目:
pom.xml:
写配置文件:
application:
直接运行启动:
出现上面的界面说明eureka成功了
上面界面中:
注:第三个红框是服务列表
②搭建客户端
重新注册项目模块
修改版本号:和上面的一样
修改application:
启动:
按照上面方法再注册一个客户端:
如果现在想把上面的A弄两台,弄一个集群:【只有端口变,其它都不变】
提问:应用A和应用B之间多次访问,怎么办?
回答:缓存服务列表到本地
提问:如果在一个时间段内大量的应用都不和注册中心联系了该怎么办
回答:eureka-server不会剔除任何一个服务,宁可放过一万都不能错杀一个 【AP】
直接运行:
左下角:
测试:
定义三台server:
eureka-server:
eureka-server-b:
eureka-server-c:
将上面三个全部进行启动:
上面构建的三台服务器还不是集群:
发现并没有出现集群信息,只是同一个服务server启动了多台没有数据交互不是真正意义上的集群。
修改过程:
修改host
再修改配置文件:
再次重新启动后:
客户端进行注册:
运行后:在三台service中都有
集群的终极方案:
测试效果:
此时客户端的注册:
主从模式中主机该如何选择,数据是如何进行同步的:
了解一下一个分布式数据一致性协议:Paxos,raft
当项目启动时(eureka的客户端),就会向eureka-server发送自己的元数据(原始数据)(运行的ip,端口port,健康的状态监控等,因为使用的是http/ResuFul,请求风格),eureka-server会在自己内部保留这些元数据(内存中)。(有一个服务列表)(restful风格,以http.动词的请求方式,完成对url资源的操作)
了解他的原理出了问题排查bug,优化你的代码
服务器使用单机模式:
启动客户端:
具体的代码看视频!!!!
项目启动成功了,除了向eureka-server注册自己成功,还会定时的向eureka-server汇报自己,心跳,表示自己还活着。(修改一个时间)
当项目关闭时,会给eureka-server报告,说明自己要下机了。
当项目超过了指定时间没有向eureka-server汇报自己,那么eureka-server就会认为此节点死掉了,会把它剔除掉,也不会放流量和请求到此节点了。
运行测试:
将项目打包:
定义docker: