• 大型网站技术架构读书笔记


    大型网站架构发展历程

    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算法
  • 相关阅读:
    查看占用内存cpu top10
    free 详解
    find
    服务器硬件查看
    firewalld命令使用
    firewalld-zone概念介绍
    Jenkins rpm包安装
    攻击防御案例
    filebeat收集系统登陆日志
    nginx转换json格式
  • 原文地址:https://www.cnblogs.com/canmeng-cn/p/10427058.html
Copyright © 2020-2023  润新知