大型网站架构发展历程
1、应用服务和数据服务分离。
2、使用缓存改善网站的性能
3、使用集群改善网站的并发处理能力。
4、数据库读写分离
5、使用反向代理和CDN加速网站的访问速度
6、使用分布式文件系统和分布式数据库
7、使用NoSql数据库和搜索引擎
8、业务拆分
9、分布式服务
大型网站的架构模式
1、分层。分层是业务系统中最常见的一种架构模式,将系统在横向维度上切分成几个部分,每个部分负责相对比较单一的职责,然后通过上层对下层的依赖和调用组成一个完整的系统
2、分割。分层是对软件的横向切分,而分割是在纵向方面对软件进行切分
3、分布式。对大型网站而言,分层和分割的最终目的是为了方便切分后个模块的分布式部署。
分布式面临的问题:
1)分布式意味着服务调用必须通过网络,这可能会对性能造成严重的影响
2)服务器越多,服务宕机的概率越大
3)数据一致性难以保证
4)开发管理维护困难
常用的分布式方案:
1)分布式运用和服务。
2)分布式静态资源
3)分布式数据存储
4)分布式计算
4、集群。集群部署,通过负载均衡实现故障转移,提高服务的可用性
5、缓存。通过缓存加速数据的访问和处理速度
常用的缓存方式有:
1)CDN。内容分发网络,部署在距离用户终端最近的网络服务商,可以用来缓存一些静态资源,快速返回给用户
2)反向代理。前端框架的一部分,部署在网站前端,当用户请求到达数据中心时,最先访问的就是反向代理服务器,
3)本地缓存。入redis,将热点数据缓存到本地缓存中,加速访问响应速度
4)分布式缓存
6、异步。异步是系统之间解耦的重要手段,将一个业务分成多个阶段,各阶段之间通过共享数据的方式异步执行
异步执行的优点:
1)提高系统的可用性。如果后端消费者服务宕机,消息会堆积在消息服务中,不会影响系统的可用性
2)加速网站响应速度。生产服务器将业务请求处理完成后写入到消息服务器,然后直接返回,不需要等待消费者服务处理完成,减少响应延迟
3)消除并发访问高峰。
7、数据冗余。
web前端优化策略
1、减少http请求。主要手段:合并css、合并javascript、合并图片
2、使用浏览器缓存
3、启用压缩。在服务端对文件进行压缩,在浏览器短进行解压,从而较少同学传输的数据量
4、css放在最上层,javascript放在最下层
5、较少cookie传输太大的cookie会严重影响数据传输
6、cdn加速。cdn能够缓存一般的静态资源,如图片、文件、css、javascript等
7、反向代理。
应用服务器优化策略
1、分布式缓存。缓存高频访问的热点数据
一下情况不适合使用缓存
1)频繁修改的数据。如果数据被频繁修改,会出现数据写入到缓存中还未来得及读取就已经失效的情况,此时使用缓存会增加系统负担
2)没有热点的访问。如果访问不遵循二八定律,那么缓存没有意义
3)数据不一致与脏读。一般缓存会设置一定的有效时间,一旦超过有效时间,就要重新从数据库中加载,因此运用要容忍一定时间的数据不一致性。如果运用要求数据的强一致性,可能不适合使用缓存
2、异步操作。使用异步可改善响应延迟,同时可以减小高峰期数据库压力
3、使用集群。将并发访问的请求分发到多台服务器上,避免一服务器因为负载压力过大而相应缓慢。
4、代码优化。
1)多线程。在多线程编程时需要注意几点:将对象设计为无状态的;使用局部变量;并发访问资源时使用锁
2)资源复用。资源复用有两种模式:单例和对象池
单例:spring构造对象默认使用单例模式
对象池:数据库连接池
3)数据结构。
4)垃圾回收
RAID(廉价磁盘冗余阵列)
RAID技术主要是为了磁盘的访问延迟,增强磁盘的可用性和容错能力
1、raid0,数据写入缓冲区时,更具磁盘数量将数据分成N份,这些数据同时并发写入磁盘,使得整体写入速度是一块磁盘的N倍。读取时也一样,因此RAID0具有极快的读取和写入速度,但是由于 不做数据备份,一块磁盘损坏,数据完整性即遭到破坏
2、RAID1。数据写入时,将数据写入两块磁盘,这样任意一块磁盘损坏都不会破坏数据的完整性
3、RAID10。结合RAID0和RAID1,将所有磁盘平均分成两份,数据同时写入两份磁盘。磁盘利用率低
4、RAID3。在数据写入时,将数据分成n-1份,并发的写入n-1份磁盘,并在第n块磁盘记录校验数据,任何一块磁盘损坏都可以利用其他n-1块磁盘的数据修复。缺点是第n块磁盘更容易损坏
5、RAID5。和RAID3类似,但是校验数据不在固定写入第n块磁盘,而是螺旋的写入到每块磁盘中
6、RAID6。和RAID5类似,但是数据写入n-2块磁盘,并螺旋式的在两块磁盘写入校验信息
数据的一致性
强一致性:各个副本的数据在物理储存中总是一致的
用户一致性:数据在各物理副本上可能不一致,但是在用户访问的时候通过纠错和校验机制,保证用户得到的是一个一致且正群的数据
最终一致性:即物理机上的数据可能是不一致的,终端用户访问的数据也可能是不一致的,但系统经过一段时间的自我恢复和修正,数据最终会达到一致性
应用服务器集群的伸缩性设计
1、http重定向负载均衡。利用http重定向协议实现负载均衡。即客户端统一访问一台重定向负载均衡器,由负载均衡器计算得到后端服务器具体的ip地址返回给客户端,客户端自动重新通过ip请求具体的服务器
优点是简单,缺点是客户端需要请求2次才能完成一次访问,重定向服务器自身的处理能力可能成为性能瓶颈
2、DNS域名解析负载均衡。客户端通过域名访问DNS服务器,DNS服务解析域名获取具体后端ip返回给客户端,客户端自动根据ip重新请求具体的后端服务
3、反向代理负载均衡。客户端请求到反向代理服务器,反向代理服务器路由到具体的后端服务然后转发请求,后端服务处理完请求之后将结果返回给反向代理服务器,然后反向代理服务器再将结果返回给客户端
4、ip负载均衡。用户请求落在负载均衡服务器,负载均衡服务器根据负载均衡算法得到后端服务ip,然后服务均衡服务器将请求转发到后端,类似于反响代理负载均衡
5、数据链路层负载均衡。客户端请求到负载均衡服务器,负载均衡服务器路由到后端服务,后端服务处理完请求后直接将结果返回到客户端,也称作直接路由
常用的负载均衡算法:
轮询:所有请求一次被分发到各个服务器上
加权轮询:在轮询的基础上根据权重将请求路由到各个服务器上,使得高性能的服务器有机会处理更多请求
随机:请求随机分配到不同的服务器上
最少连接:请求分发到最少处理连接的服务器上
源地址散列:通过散列算法,将相同地址的请求落到同一个服务器上
网站的安全
1、XSS攻击
XSS即跨站点脚本攻击,指黑客通过篡改网页,注入恶意的html脚本,在用户浏览网页时,控制用户浏览器进行恶意操作的一种攻击方式
防御方式:对用户输入的危险字符进行转意、对用户请求添加httpOnly属性,避免被攻击脚本窃取cookie
2、sql注入
攻击者在http请求中构造恶意sql命令,从而使数据库sql执行时,恶意sql被一起执行
防御:参数绑定或者字符转意
3、CSRF攻击
CSRF跨站请求伪造:攻击者铜鼓跨站请求,以合法用户的身份进行非法操作
防御:表单token、验证码、来源检查
常用的加密手段:
1、单向散列:如MD5、SHA加密
2、对称加密:指加密和解密使用的是同一个秘钥。如DES算法、RC算法等
3、非对称加密:指加密和解密用的不是同一个秘钥,其中对外界公开的称为公钥,另一个只有用户自己知道,被称为私钥。如RSA算法