springcloud学习及复习笔记(持续更新)
回顾SpringCloud:
SpringBoot的核心理念是:
学习SpringCloud需要哪些准备:
了解SpringBoot:SpringBoot是SpringCloud的基础
[SpringBoot教学连接:](https://mp.csdn.net/postedit/100104700)
微服务:目前理解是分模块,就是分,模块之间相互调用。
开始学习(前期)
SpringCloud课程介绍:
- 微服务架构与项目设计:微服务,Git,Sonar
- SpringCloud初体验:Eureka,Hystrix,Fegin
- 虚拟化技术Docker+Jenkins
- 分布式日志处理:Elk+Kafka
- 分布式业务实现:RabbitMQ。Redis
- 分布式部署实现:Ribbon,Zuul,Config
- 分布式数据存储:Elasticsearch,Mycat
- 分布式第三方接入:微信支付,微信登录,支付宝支付
- 集成测试:JMeter
项目类型:基于微服务分布式的票务类电商网站
大觅网业务:用户,商品,订单,排期,支付
项目框架:Vue,SpringCloud,SpringBoot,Mybatis,Mysql
项目关键技术:SpringCloud体系,日志处理:Elk+Kafka,消息队列中间件:RabbitMQ,缓存:Redis,分布式搜索引擎:Elasticsearch,分布式数据库中间件:Mycat
笔记
先来认识各大组件SpringCloud:
- Eurka注册中心,
- Zuul网关验证,
- Config分布式配置管理
- Ribbon负载均衡
- Feign接口调用
- Hystrix容错处理
- Sleuth微服务追踪
- Elk+Kafka日志收集
RabbitMq中间件:解决高并发
发布采用:Jenkins+docker(CI/CD)发布
Mycat:数据库中间件
sonarQube代码检测
解决思路及图
- 模块之间拆分后怎么找到,发现其他模块?
通过Eurka注册中心,有了各个服务的地址清单。 - 接下里就是调用的问题了,之前单体时只需要浏览器发一个http请求自己内部去处理,但是现在把自己拆成各个模块,并且不再一个服务器上,假如浏览器发了一个请求给了一个模块,这个模块处理时需要借助其他模块的方法,这时该怎么调用,也不能让客户自己去调用,,
通过Feign组件来实现互相调用。 - 互相调用难免会出错,出错了怎么办?
通过Hystrix、
组件讲解
Eurka(中文:我发现了)
Eurka可细分为Eurka Server和Eurka Client
Eurka Server 可认为是通讯录,注册中心,
Eurka Client 客户端,即各个业务模块,各个provider者和consumer者。
代码部分:开发工具是idea
微服务架构相关概念和设计理念
将单体的项目拆分成多个模块项目,模块之间通过接口来调用。
单体式架构:项目迭代不灵活,并发配置不灵活,面对的是用户内部
微服务:就是拆,项目复杂度降低,团队界限明确,部署灵活,但同时运维复杂度提高。面对的是大用户哦,高并发。
微服务架构种类:
- Dubbo:基于RPC
- SpringCloud:基于Restful
微服务架构-服务类型:
- Provider:提供者,提供服务的一方
- Consumer:消费者,调用服务的一方
假如把单体项目拆成三个模块,分别为用户,节目,订单模块,每个模块又拆成消费者和提供者
微服务架构-通信方式
- RPC:(Remote Procedure Call)基于TCP,平台有关 ,效率高,以方法为中心
远程过程调用协议,暂时理解:想要调用别人的服务,需要用人家的技术如(注解,方法)等东西
就像调用自己本地的方法一样调用远程的方法 - RESTful:(Representational State Transfer)基于HTTP,平台无关,效率低,以资源为中心
通过url,访问所需资源,(无状态),
微服务架构-设计原则
- 单一职责
- 围绕业务
- 谁创建,谁负责(开发加运维)运维统一管理会很麻烦。
分布式和集群
- 分布式:关注项目拆分,项目ABC拆成A,B,C,三个项目
- 集群:关注项目部署,项目ABC复制三个ABC,分别部署到三个服务器
大觅网架构设计
业务架构
谁要使用这个系统,可以为用户提供什么样的功能
应用架构
以业务架构为基础,系统中有多少应用,每个应用是干什么,
如:前端应用,网关应用,后端应用,环境应用
技术架构
前端:vue
反向代理:Nginx
网关Zuul
消费者:fegin:接口管理,hystric:容错处理,Rabbin:负载均衡
注册中心:Eurka
提供者:fegin:接口管理,hystric:容错处理,Rabbin:负载均衡
缓存器:redis
搜索器:Elasticsearach
数据库管理:Mycat
整体:docker和Jenkins
数据库架构
大觅网项目管理
版本管理-Git
分布式版本控制系统(DVCS)
代码规范管理-SonarQube(SonarLint)
项目敏捷管理-Scrum
敏捷开发(Agile Development)
以人为核心,遵循迭代,循环渐进的开发方法
敏捷的框架
XP,Scrum
Scrum
将整个开发周期划分为若干个小的迭代周期的一种项目管理框架2
SpringCloud 杂记知识点(待整合)
- bootstrap.yml文件和application.yml文件的区别:bootstrap文件会比application文件先加载。
- SpringCloud的版本命名称是根据伦敦地铁站名按字母顺序来命名的。
- Eureka 是我发现了的意思,阿基米德发现浮力时大喊的就是eureka。
关于其由来,有一则有趣的传说。古代叙拉古( Syracuse,古时为希腊城市)国王海叶罗(Hiero)请金匠做一顶金冠,怀疑其中掺加了别的金属,要数学家、物理学家阿基米德测出王冠含金的纯度,但又不能损伤王冠。阿基米德冥思苦想,一直没想出来。在淋浴时,他突然从浴盆溢出的水得到了启发,发现了浮力定理,并据此测定了金子的纯度。据说当时他从澡盆中跳了出来,连衣服都忘了穿,边跑边喊“Eureka!"。该词相当于英语“I have found it.“(我发现了)。从16世纪以来,eureka在英语及其他一些语言里一直被用作因重大发现而发的惊叹语。eureka是希腊语,严格地说应作heureka,源自heuriskein‘find’。始用于19世纪的heuristic 一词亦源于此,它之所以被赋予“启发(式)的”一义与eureka的来历恐怕是不无联系的。 - Feign 假的