Spring Cloud 个人心得 理论
1.分布式项目为什么会崛起 有那些优势 什么是分布式项目
在没有分布式项目之前,一个系统所有的功能可能都是在一个项目中创建的,拿商城项目来说明
商城项目组成部分(基础数据,用户,商品,订单,支付,一些辅助的排程/脚本服务)
在没有分布式项目之前,这些可能都是写在同一个项目中,然后把项目放到不同的服务器 A/B/C服务器。最前端有一个NGINX服务器,负责做负载均衡,客户端请求的是Nginx服务器,由Nginx把请求转发到A/B/C服务器,来减轻 在高并发的情况下,单服务器的压力。
1.1什么是分布式项目,我们先来看下 传统项目和分布式项目的结构图
传统项目
分布式项目
从项目结构图中可以看出,传统项目所有模块都创建在一个项目中的,而分布式项目是按照不同的模块创建不同的项目,模块和模块之间的耦合度得到了解耦,
1.DB风险
项目发布也不需要整个项目发布,只需要发布对应的模块项目即可,分了模块数据库也得到了划分,假设那一天 某个程序员不小心把数据库给删除了,在传统项目中所有模块都是放在同一个数据库的,这样就会导致整个系统的DB都没了,而分布式项目项目划分了模块,数据库也得到了切割,即使删除也是删除一个模块的数据库,虽然这样也是灾难性的操作,不过这样也降低了风险。
2.发布风险
项目发布如果设计到修改文件过多,是需要真个项目发布,假设需要发布用户模块的一个bug,而小A在修复订单模块bug的时候,没测试就提交了代码,这个时候发布就会把bug发布到正式环境,从而影响到客户使用,可能你会说不是有人会check代码吗?发布前都要做文件检测的,是人都会有犯错和疏漏,我们要在源头把风险降低到最低。
说道这里就想起来最近阿里的一件事情,一个实习生把阿里云的一个xx删了,导致阿里云系统出现故障。
3.项目解耦&降低访问并发量
传统项目,当访问订单接口的时候,还是会访问整个系统所在的tomcat服务。用数据来说 比如有一万个用户访问订单模块,这时候并发是一万,对于tomcat来说是很有压力,即使前端有Nginx做了负载,不过有的时候还是会存在丢失数据的情况。如果这个时候还有其他模块的访问量,那么对于tomcat的压力就更大了。
https://blog.csdn.net/hll814/article/details/50935765
大禹治水分而治之,分布式项目也是这样道理。
不同的模块放放在不同的tomcat里面,即使订单模块服务挂了,也不会影响到登录和用户模块的访问。
Spring Cloud 流程图
个人理解的 spring cloud 流程,如有不对 欢迎留言...
// 注册中心管理器private java.util.List<String> service = new ArrayList<String>();public static void main(String[] args) {// 客户端请求zuul("/user/userInfo/getInfoById");}/*** zuul 路由/网关 接受客户端请求 转发到对应的服务**/public static void zuul(String url) {// 1.匹配url 定位serviceId 【equals只是一个象征性的假设 匹配规则是xxx开头的url 转发到xxx服务】if (url.equals("/user/**")) {// 转发到【用户服务】 serviceId 【serviceId对应一个项目 每个项目都有一个serviceId】 }if (url.equals("/order/**")) {// 转发到【订单服务】 serviceId 【serviceId对应一个项目 每个项目都有一个serviceId】 }if (url.equals("/basedata/**")) {// 转发到【基础数据服务】 serviceId 【serviceId对应一个项目 每个项目都有一个serviceId】 }// ...很多个if判断 }/*** serviceId 服务ID/名称 当项目启动的时候 会把服务注册到注册中心【eureka】 注册中心统一管理服务**/public void setService(String serviceId) {service.add(serviceId);}//zuul 等同于nginx的 根据URL匹配不同的服务/*http {server {server_name example.com;location /mail/ {proxy_pass http://example.com:protmail/;}location /com/ {proxy_pass http://example.com:portcom/main/;}location / {proxy_pass http://example.com:portdefault;}}}*/
2.介绍
spring cloud核心组成部分
1.路由 Zuul
简介
Zuul是Netflix基于JVM的路由器和服务器端负载均衡器。最常用的场景是替换Nginx反向代理后台微服务供前端UI访问。
Zuul使用Ribbon来定位一个通过发现转发的实例,所有请求都以hystrix命令执行,所以故障将显示在Hystrix指标中。
注:Zuul不包括发现客户端,因此对于基于服务ID的路由,需要在类路径中提供其中一个路由
Zuul的能力:
智能路由:通过与Eureka整合,将自身注册到服务中心,可以获到所有其他微服务实例信息。Zuul默认通过以服务名作为ContextPath来创建路由映射,可以满足大多数情况需要,特殊路由可以通过配置来实现,在Zuul默认路由规则小节有详细描述。
2.注册中心
收集袋,所有的服务进行统一收集,相当于放到同一个代码块,代码块里面的变量是可以直接拿到的。
3.配置中心
所有配置不配置在本地,而是配置在GIT里面,从GIT获取配置信息。
也可以把配置中心搞错一个集群,在并发获取配置文件的时候,可以减轻单服务的压力。
配置文件放本地和放到git上,除了方便管理还有一点是 在使用@value注解获取配置信息的时候,如果配置文件中信息发生变化,需要重启服务,这个一般是不可取的。
简单的来说 spring cloud 配置中心 解耦了@value注解对配置文件读取的操作。
4.断路器监控(Hystrix)
当程序访问接口,接口所依赖的服务出现故障,会导致访问时间过长,线程消耗,堵塞 系统宕机。
用Hystrix可以很好的避开这一点。
转载于:https://www.cnblogs.com/sz-jack/p/9373270.html
Spring Cloud 个人心得 理论相关推荐
- spring cloud 学习心得
学习记录 近一个月,因水利厅短信平台改造的需要,我开始学习Spring Boot和如何构建Spring Cloud分布式项目,但是因为我学力有限,未能完成此项目的改造,但从中学习到了很多新的知识,在此 ...
- Spring Cloud之初入篇
本篇博客讲解Spring Cloud的简单理论知识. 什么是Spring Cloud SpringCloud是一系列框架的有序集合.它利用Spring Boot的开发便利性很巧妙地简化了分布式系统基础 ...
- 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?
在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...
- Spring Cloud 基本理论概述
前言 万丈高楼平地起,但还有种说法叫:"万事开头难",不管使用什么技术,就算是行业老司机,也得乖乖的从基本理论概述开始.通过本篇文章,您将理解什么是 Spring Cloud ?S ...
- 【系统架构理论】一篇文章精通:Spring Cloud Netflix Eureka
是官方文档的总结 http://spring.io/projects/spring-cloud-netflix#overview 讲解基于2.0.2版本官方文档 https://cloud.sprin ...
- 【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战
一.写在前面 相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这是非常火的一门技术. 如果只是用户量很少的传统IT系统,使用Spring Cloud可能还暴露不出 ...
- 2018年Spring Cloud中国社区技术沙龙-成都站
Spring Cloud中国社区(http://springcloud.cn) 是国内基于Spring Cloud微服务体系创建的非盈利技术社区,发展至今刚好两周岁.自2016年10月份创建以来,在北 ...
- Spring Cloud架构的各个组件的原理分析
我们先认识一下SpringCloud的各个组件,然后知其所以然. 原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订 ...
- 如何使用Spring Cloud实现高并发微服务设计
来自:DBAplus社群 本文根据dbaplus社群第161期线上分享整理而成 讲师介绍 陈韶健 加推科技 技术中心首席架构师 博文视点作者,著有<Spring Cloud与Docker高并发微 ...
最新文章
- mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决
- python代码图片-python实现图片上添加图片
- java entryset_Java HashMap entrySet()方法与示例
- 为什么选用NACOS
- react native开发的新闻客户端
- c语言程序设计自学网进阶,谭浩强老师C语言教程程序设计
- java se 通用能力-判断推理专项练习(选择题)
- 最佳Bilibili下载工具及下载Bilibili视频方法
- 图像拼接算法总结(一)
- 可视化建站cms_帝国CMS教程 | 01.系统运行环境及简介
- 小学语文思维导图免费模板合集!家长必收藏
- python元类 orm_Python3 元类与ORM
- 简单粗暴日文键盘布局改为其他语言键盘布局
- 用html制作奥运五环图案,用 canvas 制作奥运五环
- 虚拟环境位置查找与配置可使用cuda编译器
- .Net Core快速开发平台源码 敏捷开发框架OA系统 CRM快速开发框架
- 用html给一张图片做多个热区链接,html 锚点链接 图像热区链接
- 分析-Bitlocker固定磁盘随系统自动解锁
- Android菜鸟如何学习Android系统开发?(
- 从SIEMAI到SIEM@AI | AI构建下一代企业安全大脑
热门文章
- python接口自动化测试六:时间戳,防重复处理
- Python学习 Day4-1 Python3 条件控制、循环语句
- 20171108 模拟题 T1
- linux 下各个工具使用(screen、tmux,pyenv、virtualenv,pip国内源,tree)
- 修改CentOS系统的默认启动级别
- c# 数据结构 ---双链表
- word公式插件_全套office零基础视频教程|200集视频+插件+模板,免费送!
- suricata架构——数据结构和代码流程图解
- (7)ISE14.7无用引脚设置上下拉或高阻态(FPGA不积跬步101)
- (49)FPGA面试技能提升篇(仿真加速平台Palladium、Zebu、Veloce)