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 个人心得 理论相关推荐

  1. spring cloud 学习心得

    学习记录 近一个月,因水利厅短信平台改造的需要,我开始学习Spring Boot和如何构建Spring Cloud分布式项目,但是因为我学力有限,未能完成此项目的改造,但从中学习到了很多新的知识,在此 ...

  2. Spring Cloud之初入篇

    本篇博客讲解Spring Cloud的简单理论知识. 什么是Spring Cloud SpringCloud是一系列框架的有序集合.它利用Spring Boot的开发便利性很巧妙地简化了分布式系统基础 ...

  3. 微服务(三) 【手摸手带你搭建Spring Cloud】 Ribbon 什么是负载均衡?spring cloud如何实现负载均衡?ribbon负载均衡有几种策略?Ribbon是什么?

    在上一章,我介绍了springcloud的eureka搭建.我们做了服务注册.最后我们还介绍了一些续约,失效剔除等参数配置.已经不需要再通过手动输入ip去访问服务,而是通过中心只需要通过服务名就可以获 ...

  4. Spring Cloud 基本理论概述

    前言 万丈高楼平地起,但还有种说法叫:"万事开头难",不管使用什么技术,就算是行业老司机,也得乖乖的从基本理论概述开始.通过本篇文章,您将理解什么是 Spring Cloud ?S ...

  5. 【系统架构理论】一篇文章精通:Spring Cloud Netflix Eureka

    是官方文档的总结 http://spring.io/projects/spring-cloud-netflix#overview 讲解基于2.0.2版本官方文档 https://cloud.sprin ...

  6. 【性能优化之道】每秒上万并发下的Spring Cloud参数优化实战

    一.写在前面   相信不少朋友都在自己公司使用Spring Cloud框架来构建微服务架构,毕竟现在这是非常火的一门技术. 如果只是用户量很少的传统IT系统,使用Spring Cloud可能还暴露不出 ...

  7. 2018年Spring Cloud中国社区技术沙龙-成都站

    Spring Cloud中国社区(http://springcloud.cn) 是国内基于Spring Cloud微服务体系创建的非盈利技术社区,发展至今刚好两周岁.自2016年10月份创建以来,在北 ...

  8. Spring Cloud架构的各个组件的原理分析

    我们先认识一下SpringCloud的各个组件,然后知其所以然. 原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下: 创建一个订单之后,如果用户立刻支付了这个订 ...

  9. 如何使用Spring Cloud实现高并发微服务设计

    来自:DBAplus社群 本文根据dbaplus社群第161期线上分享整理而成 讲师介绍 陈韶健 加推科技 技术中心首席架构师 博文视点作者,著有<Spring Cloud与Docker高并发微 ...

最新文章

  1. mysql 4.0.27 下载,CentOS编译Mysql 4.0.27数据库问题解决
  2. python代码图片-python实现图片上添加图片
  3. java entryset_Java HashMap entrySet()方法与示例
  4. 为什么选用NACOS
  5. react native开发的新闻客户端
  6. c语言程序设计自学网进阶,谭浩强老师C语言教程程序设计
  7. java se 通用能力-判断推理专项练习(选择题)
  8. 最佳Bilibili下载工具及下载Bilibili视频方法
  9. 图像拼接算法总结(一)
  10. 可视化建站cms_帝国CMS教程 | 01.系统运行环境及简介
  11. 小学语文思维导图免费模板合集!家长必收藏
  12. python元类 orm_Python3 元类与ORM
  13. 简单粗暴日文键盘布局改为其他语言键盘布局
  14. 用html制作奥运五环图案,用 canvas 制作奥运五环
  15. 虚拟环境位置查找与配置可使用cuda编译器
  16. .Net Core快速开发平台源码 敏捷开发框架OA系统 CRM快速开发框架
  17. 用html给一张图片做多个热区链接,html 锚点链接 图像热区链接
  18. 分析-Bitlocker固定磁盘随系统自动解锁
  19. Android菜鸟如何学习Android系统开发?(
  20. 从SIEMAI到SIEM@AI | AI构建下一代企业安全大脑

热门文章

  1. python接口自动化测试六:时间戳,防重复处理
  2. Python学习 Day4-1 Python3 条件控制、循环语句
  3. 20171108 模拟题 T1
  4. linux 下各个工具使用(screen、tmux,pyenv、virtualenv,pip国内源,tree)
  5. 修改CentOS系统的默认启动级别
  6. c# 数据结构 ---双链表
  7. word公式插件_全套office零基础视频教程|200集视频+插件+模板,免费送!
  8. suricata架构——数据结构和代码流程图解
  9. (7)ISE14.7无用引脚设置上下拉或高阻态(FPGA不积跬步101)
  10. (49)FPGA面试技能提升篇(仿真加速平台Palladium、Zebu、Veloce)