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