博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
看透SpringMVC源码-网站架构演变1-3
阅读量:4127 次
发布时间:2019-05-25

本文共 2155 字,大约阅读时间需要 7 分钟。

第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出现错误。浏览器访问需要使用域名。

转载地址:http://kqepi.baihongyu.com/

你可能感兴趣的文章
java基础—java制作证书的工具keytool
查看>>
Remove Old Kernels in Ubuntu 11.10 (Oneiric ocelot)
查看>>
POJ2480 Longge's problem
查看>>
HDU2516 取石子游戏
查看>>
网站上点击自定义按钮发起QQ聊天的解决方案
查看>>
编程语言的基元类型
查看>>
JNI内存泄露JNI ERROR (app bug): local reference table overflow (max=512)
查看>>
爪哇国新游记之二十七----数组的二分查找
查看>>
一些Perl例程(全部手打并执行过)
查看>>
OC常用属性
查看>>
NOI2010 超级钢琴
查看>>
个人最终总结
查看>>
POJ 2110 二分+暴搜
查看>>
BZOJ 3727 DP?推式子..
查看>>
UNIX命令
查看>>
从壹开始前后端分离[.NetCore ] 38 ║自动初始化数据库(不定期更新)
查看>>
shell运算符
查看>>
关于页面加载后执行使用afterrender
查看>>
JavaScript一看就懂(1)作用域
查看>>
参数类型 (@Test层)常用参数
查看>>