分布式思惟概述

软件-互联网的发展史

大型主机优势:css

集中式的计算机系统,高的稳定性和安全性。html

大型主机缺点:前端

  1. 很是贵,通常的小企业用不起。
  2. 比较复杂,培养人才的成本比较高。
  3. 单点一旦故障,整个系统停转,损失很是大。
  4. 我的PC电脑的性能愈来愈高,成本也愈来愈低。
在这里插入图片描述
在这里插入图片描述

Web时代

c/s时代:

富客户端方案。卖软件可赚钱。qq、影音、游戏。早期流行。mysql

Web 1. 0

特点nginx

主要是单向信息的发布,即信息门户---> 广大浏览器客户端互联网内容是由少数编辑人员(或站长)定制的。 表明:三大门户,新浪/网易/搜狐。新浪以新闻+广告为主,网易拓展游戏为主,搜狐延伸门户矩阵。web

通常的雏型以下图,用户经过浏览器输入网址进行域名解析,而后从CDN上得到静态资源,从后台服务器得到HTML文件,这些信息拼装组成显示的网页。 在这里插入图片描述ajax

Web 2.0

特点redis

注重用户的交互。每一个人都是内容的供稿者。 RSS订阅扮演一个很重要的做用。 表明:博客、播客、维基、P2P下载、社区、分享服务spring

集群跟分布式

横向复制的集群跟纵向切分的分布式环境。 在这里插入图片描述 在这里插入图片描述sql

架构演进史

1. 早期雏形

特征:

应用程序主要作静态文件读取,返回内容给浏览器。 浏览器加载本地的若干资源 跟 浏览器解析从服务器获取到的资源是同样的! 在这里插入图片描述

2. 数据库开发(LAMP特长)

Linux + Apache + MySQL + PHP 特征:

应用程序主要主要读取数据表值,填充html模块。业务逻辑简单,写sql处理。 在这里插入图片描述

3. JavaWeb雏型

特征:

tomcat + servlet + jsp + mysql。一个war包打天下 项目结构:ssh/ssm三层结构。 在这里插入图片描述

4. JavaWeb的集群发展

特征:

在3的基础上进行多个war包的复制启动 。 硬件机器的横向复制,对整个项目结构无影响。

在这里插入图片描述
在这里插入图片描述

5. JavaWeb分布式

特征:

将Service层单独分离出去,成为一个单独的项目jar。单独运行。 Web服务器经过rpc框架,对分离出去的service进行调用。分布式是按照组件拆分

在这里插入图片描述
在这里插入图片描述

6. JavaWeb微服务

特征:

从业务角度,细分业务为微服务,每个微服务是一个完整的服务(从http请求到返回)。在微服务内部,将须要对外提供的接口,包装成rpc接口,对外部开放。微服务按照 业务拆分

在这里插入图片描述
在这里插入图片描述

后端问题

后端的不断演进就会致使出现服务治理需求的出现。

  1. 跨系统的RPC: RMI、webservice、Http请求,
  2. dubbo的引入, SpringCloud
  3. 服务器集群的负载路由,服务的注册跟发现 ZooKeeper
  4. 数据量超级大时引起的
  1. 分库/分表,须要修改业务sql语句,有侵入型,MyCat的引入。
  2. 分区,对sql语句是没有侵入性的,可是对库是没办法减轻压力的。
  3. 单库的MySQL承载容量通常在 700W左右。
在这里插入图片描述
在这里插入图片描述

前端发展史

1. 整页提交

特征:

浏览器请求皆为页面级请求,每次请求都是一次页面跳转/刷新。

在这里插入图片描述
在这里插入图片描述

2. 页面+ ajax

特征:

浏览器请求主要为页面级请求,有局部刷新使用ajax刷新,页面体验更好。

在这里插入图片描述
在这里插入图片描述

3. mvvm模式

MVVM是Model-View-ViewModel的简写。它本质上就是MVC 的改进版 特征:

  1. 首次请求返回页面html,后续请求皆为restful返回 json
  2. 前端人员将js/css/img 资源开发完毕后 打包到apache或者nginx上,供浏览器访问 3 浏览器 访问静态资源服务器,得到HTML资源。
  3. HTML页面JS发起·ajax·请求后台服务器,获得业务数据 而后进行渲染整个页面。跨域问题可用nginx解决。
在这里插入图片描述
在这里插入图片描述

架构思路及常看法决方案

一、缓存(list/redis/memached) 二、横向拓展(集群负载) 三、拆分高负载服务,独立为一模块 四、大表数据切片( mysql分库分区分表) 五、使用搜索中间件: solr/elasticsearch 六、全局性网站搜索跟mysql指定型搜索不同,只能用上面的中间件搞定 like 搜索。 七、tomcat通常在500如下为好。 八、mysql单表通常700万之内。

在这里插入图片描述
在这里插入图片描述

session跨域共享

cookie、session、token 形象说, 跨域问题:

方案1:负载使用 hash(ip) 方案2:使用redis共享session 方案3 : tomcat 插件实现共享 方案4 : spring session 实现共享

在这里插入图片描述
在这里插入图片描述

常看法决方案

1. 缓冲方案

Redis 的引入。 通常缓存方案

一、先到缓存中查,有值直接返回 二、无值(缓存穿透击穿)则调用接口或者查库,并将值补入缓存区 三、缓存区数据与db中可能不一致,使用过时时间调节 四、若缓存区数据集中在某一短时刻失效,将致使大量的缓存击穿(雪崩

永不过时方案

一、不设置过时时间,数据永久有效,避免雪崩 二、须要额外机制来实现数据的同步更新(参照数据同步)

在这里插入图片描述
在这里插入图片描述

2. 消息中间件

Kafka,RocketMQ,RabbitMQ,ActiveMQ

一、每一个应用启动时,主动注册队列 二、后续收/发信息,只管收/发队列中数据 三、队列中数据的路由策略, 由mq管理者来配置,跟应用程序无关。相似传话筒

在这里插入图片描述
在这里插入图片描述

3. 同步异步

同步调度:

一、调度期间,主调和被调线程被同时占用。 二、被调执行完成前,主调等待。 三、程序内部的调度,则为一单线程。

异步调度:

一、主调与被调只是一次消息发送,信息到达即返回。 二、被调执行完成后,回调一次主调方,发送结果回来。 三、程序内部的调度,则回调函数是由被调线程执行。

在这里插入图片描述
在这里插入图片描述

4. 同步转异步

同步转异步:空间换时间,JDK Future Task模式 在这里插入图片描述

5. 数据切片

实现集群的动态扩容,Redis/es/fastdfs,将数据按片切分:

一、切成6个片,每一个片存储总量1/6数据 二、则两个库每一个库分担三个片 三、若三个库,则每一个库只须要承担两个片 四、路由管理,只记录数据与片柱的关系

在这里插入图片描述
在这里插入图片描述

本文使用 mdnice 排版

相关文章
相关标签/搜索