第1章、网站架构及其演变过程

1.1. 软件三大类型

  • 单机版(不需要联网)
  • CS版(客户端-服务器)
  • BS版(浏览器-服务器)

1.2. 网络结构

OIS参考模型一共分为7层,这个主要用于教学。实际使用为4层:
* 网络接入层-将节点接入目标
* 网络互联层-寻找连接目标
* 传输层-实际传输数据
* 应用层-使用接收到的数据

1.3. 原始网站架构

  • 浏览器 –> 服务器 –》数据库服务器

1.4. 海量数据处理方案

1.4.1 缓存和页面静态化

缓存即将数据库中的数据临时保存起来,不用每次都从数据库中读取,加快访问速度。
缓存的方式:

  • 直接将数据保存在内存中:使用ConcurrentHashMap
  • 使用缓存框架(常用框架有Ehcache、Memcache和Redis)
    注意:缓存技术主要是用在数据不频繁变化的情况

    页面静态化:将页面的大部分不变的资源直接保存下来,不需要再次生成。其中的动态资源可以使用Ajax来处理

    1.4.2 数据库优化

  • 优化表结构:设计合理的表格

  • SQL语句优化:良好的sql语句会加快执行效率;不同的数据类型适用于不用的查找方式
  • 分区:将同一张表的不同数据按照一定的规则分到不同的区来保存,比如经常访问的用户放在一起(如A区),每次优先在A区查找
  • 分表:将同一张表分为三张表,每一张表都有特定的使用场景。比如保存员工信息的表,分为3个表来保存:表1保存正常的员工,表2保存离职的员工,表3保存新来员工(包含在正常员工中)分表和分区的区别:未发现严格的区别–
  • 索引优化:
  • 使用存储过程代替直接操作:即直接存储而不使用sql语句调用

    1.4.3 分离活跃的数据
    将用户进行分离,活跃的用户为一组,每次优先在活跃组中查找。定期转移用户到对应的组

    1.4.4 批量读取和延迟修改
    批量读取:都是为了减少操作次数,对于具有相同属性的用户设置一个共同属性列,每次只需查找此列属性相同的即可,而不需要对每一个用户都进行年龄、性别等的多次判断
    延迟修改:主要针对高并发导致的频繁的数据修改。当并发量较高时,我们对修改的数据只保存在缓存中,不立即刷新到数据库,只是定期刷新到数据库。这样,就减少了数据库的操作。但是而有一个问题,即数据库中的数据没有同步,当保存缓存的机器出现故障,数据就丢失了,所以对于重要的数据需要进行特殊的处理,延迟修改只对一般的数据使用

    1.4.5 读写分离
    读写分离的本质是对数据库进行集群,即将(不同的)操作分配到不同的数据库。使用主服务器和从服务器。写数据时:首先发送给主服务器,然后由主服务器分发给对应的从服务器。读数据时:将读数据分配给所有的从服务器处理。

1.5 高并发的解决方案

1.5.1 应用与静态资源分离
将静态网页资源与应用逻辑处理进行分离,保存在不同的服务器。静态资源如:js、css、图片、文件等。减轻应用服务器的负担。

1.5.2 页面缓存
将已经生成的页面先缓存起来,不需要每次都重新生成。(如Nginx服务器自带缓存、还有专门的Squid服务器)

1.5.3 集群和分布式
集群:主要为了解决分流问题。每台服务器的作用相同,但是为了防止一个服务器访问过多,添加其他的服务器。比如QQ服务器有四川的、山西的等。
分布式:将不同的业务分发给不同的服务器。比如网页的静态服务器和应用服务器就相当于分布式关系。这样多台机器可以加快执行效率

1.5.4 反向代理和代理
反向代理:服务器调用别的资源,我们并不知道资源地址。比如主服务器调用静态资源服务器
代理服务器:我们知道资源地址,但是无法访问,然后找了个第三方帮我们找。比如访问谷歌

1.5.5 CDN
Content Delivery Network-内容分发网络-一种特殊的集群页面缓存服务器。根据地理位置和业务不同将请求分配到对应的服务器。比如手机用户,北京上海对应不同的人群,联通电信对不同的人群。

1.5.6 网络底层优化
目前网络主要使用的是http协议和tcp/ip协议,这些传输效率都有一定的慢。谷歌目前制定了新的传输协议如Quic和Spdy(2015年写)。quic介于tcp和udp之间,http/2已经取代spdy。

1.7 小结
网络架构主要围绕高并发和大数据进行,解决方式主要是使用缓存和多资源处理。多资源即多cpu,多服务器、多网络,多存储。多资源又可以分为单个资源处理一个完整请求和多个资源处理一个。多存储和多CPU的集群和分布式,多网络的CDN和静态资源分离


第2章、常见协议和标准

2.1、DNS
域名解析协议:ip和网址的对应关系,从dns服务器获取,在本机保存DNS缓存

2.2 tcp/ip协议和Socket
ip为网际互连层,用于查找地址
tcp为传输层,用于传输数据
tcp的三次握手和四次挥手–
socket是tcp/ip协议的一个具体实现

2.3 http是应用层的协议,主要用于对数据进行编码和解码,分为请求报文和响应报文

2.4 servlet和javaweb开发
servlet是对接收到的数据进行处理并生成返回给客户端的结果


第3章、DNS设置

一个问题:当浏览器上不了网而qq客户端可以联网,表明DNS出现错误。浏览器访问需要使用域名。

看透SpringMVC源码-网站架构演变1-3相关推荐

  1. 《看透springmvc源码分析与实践》读书笔记一

    解决速度问题的核心是解决海量数据操作问题和高并发问题. 网站复杂的架构就是从这两个问题演变出来的. 海量数据的解决方案: 1. 缓存和页面静态化 将从数据库获取的数据暂时保存起来,在下次使用的时候无需 ...

  2. 《看透springmvc源码分析与实践》读书笔记二

    域名服务器DNS 专门将域名解析为IP的服务器. TCP/IP协议 tcp在传输之前会进行三次沟通,一般称为"三次握手", 传完数据断开的时候要进行四次沟通,一般称为"四 ...

  3. 我们来了解下ModelAndViewContainer组件---------------【springmvc源码】

    接着上一篇的springmvc最简单配置的解析(4)-----------[springmvc源码],我们继续分析. 在上一篇中的render方法,其实它是最后处理请求的阶段,也就是把请求转换为视图的 ...

  4. SpringMVC源码探究软件六合网站制作(一)----初始化源码

    随着软件 , 开发技术的持续发展,框架技术层出不穷.还是那句话,任何框架技术都是对基础技术的封装.所以,真正要学好用好一个框架,研究其源码都是最直接最有效的途径. 随着Spring技术体系的强势发展, ...

  5. Web网站架构演变—高并发、大数据

    转 Web网站架构演变-高并发.大数据 2018年07月25日 17:27:22 gis_morningsun 阅读数:599 前言 我们以javaweb为例,来搭建一个简单的电商系统,看看这个系统可 ...

  6. SpringMVC源码阅读系列汇总

    1.前言 1.1 导入 SpringMVC是基于Servlet和Spring框架设计的Web框架,做JavaWeb的同学应该都知道 本文基于Spring4.3.7源码分析,(不要被图片欺骗了,手动滑稽 ...

  7. springMvc源码刨析笔记

    springMvc源码刨析笔记 MVC 全名是 Model View Controller,是 模型(model)-视图(view)-控制器(controller) 的缩写, 是⼀种⽤于设计创建 We ...

  8. 学习 sentry 源码整体架构,打造属于自己的前端异常监控SDK

    前言 这是学习源码整体架构第四篇.整体架构这词语好像有点大,姑且就算是源码整体结构吧,主要就是学习是代码整体结构,不深究其他不是主线的具体函数的实现.文章学习的是打包整合后的代码,不是实际仓库中的拆分 ...

  9. 大型网站架构演变和知识体系

    存爱好,作为收藏,原地址:http://www.blogjava.net/BlueDavy/archive/2008/09/03/226749.html ,同时向原创致敬 之前也有一些介绍大型网站架构 ...

最新文章

  1. python小游戏源码-导弹发射小游戏——Python源代码
  2. (六)可信计算知识点
  3. sql获取oracle数据库数据,通过sql语句获取数据库的基本信息
  4. 何必言精通——十年杂感
  5. 结合案件要素序列的罪名预测方法
  6. 面试官:给我说说你对Java GC机制的理解?
  7. 50 Most Frequently Used UNIX / Linux Commands (With Examples)
  8. 否认气候变暖的人都是睁眼说瞎话
  9. matlab画出n的阶乘,matlab计算n的阶乘函数程序
  10. android截屏方法是黑屏,Android截屏表面视图显示黑屏
  11. sklearn 1.0.1官方文档教程
  12. 区块链游戏企鹅大陆上线10000创始限时开放注册
  13. 宝塔 php守护 1.2,宝塔面板的Supervisor (进程管理利器) 使用说明 – 附Nginx守护教程...
  14. Linux gtk 路由,在linux下使用gtk的gdk
  15. Android6.0运行时权限处理
  16. java的round函数加点差_【JAVA】Math.Round()函数常见问题“四舍5入”
  17. 如何将macbook触摸板和外接鼠标的滚轮设置相反方向
  18. 是面试官放水,还是实在公司太缺人?这都没挂,阿里巴巴原来这么容易进...
  19. 中职计算机应用专业(云计算方向)建设实践
  20. 【大数据】服务器硬盘基础知识

热门文章

  1. 从春招到秋招,算法工程师养成记
  2. C# 扫描并读取图片中的文字
  3. 学计算机编程技校排名,学编程什么学校最好?
  4. 综合日语第一册第十一课
  5. 处理复旦大学中文文分类数据集
  6. 朗道十卷《力学》笔记(更新中)
  7. 三器六垢_本初行者劉暢友居士浅谈如何学佛(三)
  8. gabor 变换matlab,Gabor变换到底是什么鬼?
  9. WebAPIs-第01天笔记
  10. 前端实现简单的loding效果