大型主机优点:

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

大型主机缺陷:

jspmysql打包成war炸裂万字长文拿下散布式体系我在字节跳动等你 GraphQL

非常贵,一样平常的小企业用不起。

比较繁芜,培养人才的本钱比较高。

单点一旦故障,全体系统停转,丢失非常大。

个人PC电脑的性能越来越高,本钱也越来越低。

Web时期c/s时期:

富客户端方案。
卖软件可赢利。
qq、影音、游戏。
早期盛行。

Web 1. 0

特色

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

一样平常的雏型如下图,用户通过浏览器输入网址进行域名解析,然后从CDN上得到静态资源,从后台做事器得到HTML文件,这些信息拼装组成显示的网页。

Web 2.0

特色

看重用户的交互。
每个人都是内容的供稿者。
RSS订阅扮演一个很主要的浸染。
代表:博客、播客、维基、P2P下载、社区、分享做事

集群跟分布式

横向复制的集群跟纵向切分的分布式环境。

架构演进史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接口,对外部开放。
微做事按照 业务拆分。

后端问题

后真个不断演进就会导致涌现做事管理需求的涌现。

跨系统的RPC: RMI、webservice、Http要求,

dubbo的引入, SpringCloud

做事器集群的负载路由,做事的注册跟创造 ZooKeeper

数据量超级大时引发的

分库/分表,须要修正业务sql语句,有侵入型,MyCat的引入。

分区,对sql语句是没有侵入性的,但是对库是没办法减轻压力的。

单库的MySQL承载容量一样平常在700W旁边。

前端发展史1. 整页提交

特色:

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

2. 页面+ ajax

特色:

浏览器要求紧张为页面级要求,有局部刷新利用ajax刷新,页面体验更好。

3. mvvm模式

MVVM是Model-View-ViewModel的简写。
它实质上便是MVC 的改进版 特色:

首次要求返回页面html,后续要求皆为restful返回json。

前端职员将js/css/img 资源开拓完毕后 打包到apache或者nginx上,供浏览器访问 3 浏览器 访问静态资源做事器,得到HTML资源。

HTML页面JS发起·ajax·要求后台做事器,得到业务数据 然后进行渲染全体页面。
跨域问题可用nginx办理。

架构思路及常见地决方案

1、缓存(list/redis/memached) 2、横向拓展(集群负载) 3、拆分高负载做事,独立为一模块 4、大表数据切片( mysql分库分区分表) 5、利用搜索中间件: solr/elasticsearch 6、全局性网站搜索跟mysql指定型搜索不一样,只能用上面的中间件搞定 like 搜索。
7、tomcat一样平常在500以下为好。
8、mysql单表一样平常700万以内。

session跨域共享

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

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

常见地决方案1. 缓冲方案

Redis 的引入。
一样平常缓存方案

1、先到缓存中查,有值直接返回 2、无值(缓存穿透、击穿)则调用接口或者查库,并将值补入缓存区 3、缓存区数据与db中可能不一致,利用过期韶光调节 4、若缓存区数据集中在某一短时候失落效,将导致大量的缓存击穿(雪崩)

永不过期方案

1、不设置过期韶光,数据永久有效,避免雪崩 2、须要额外机制来实现数据的同步更新(参照数据同步)

2. 中间件

Kafka,RocketMQ,RabbitMQ,ActiveMQ

1、每个运用启动时,主动注册行列步队 2、后续收/发信息,只管收/发行列步队中数据 3、行列步队中数据的路由策略, 由mq管理者来配置,跟运用程序无关。
类似传发话器

3. 同步异步

同步调度:

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

异步调度:

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

4. 同步转异步

同步转异步:空间换韶光,JDK Future Task模式

5. 数据切片

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

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

作者:SoWhat1412链接:https://juejin.im/post/5edcef77f265da76e5674217