《大型网站技术架构:核心原理与案例分析》阅读闲记

本文探讨了网站性能优化的策略,包括减少HTTP请求、使用浏览器缓存、启用压缩、合理安排CSS与JS加载顺序、减少Cookie传输及利用CDN。深入讨论了高可用架构的设计,涵盖应用、服务和数据层的考量,以及负载均衡、session管理、服务降级和数据备份策略。同时,文章介绍了分布式缓存、数据库伸缩设计和网站伸缩性的最佳实践。
  1. 用异步拉取代替同步推送

  2. 高可用的主要手段是冗余

  3. 任何可以晚做的事都要晚做

  4. web访问优化:

    • 减少http请求,多个静态文件合并
    • 使用浏览器缓存css等
    • 启用压缩
    • 先加载css再加载js
    • 减少cookie传输
  5. CDN 内容分发网络,在客户一端,反向代理也可以缓存,在机房一端

  6. 网站性能优化第一定律:优先考虑使用缓存

    • 缓存预热:刚启动就把常用数据加载好
    • 缓存穿透:连null的数据也缓存以减少数据库恶意查询
    • 分布式缓存:使用一致性hash进行缓存,容易实现扩容(互不通信是保证线性伸缩的关键)
    • memcached:
      • 简单通信协议
        • 通信协议:TCP
        • 序列化协议:命令关键字+命令操作数
      • 高效内存管理
        • 固定空间分配:内存分一组slab,每个slab时含一组chunk,以chunk为分配单位,LRU 释放
  7. 线程安全的手段:

    • 将对象设计为无状态对象
    • 使用局部对象,在方法内创建对象,其不会被其它线程访问
    • 并发访问资源时使用锁
  8. 资源复用:

    • 主要有单例模式和对象池
  9. LSM树:牺牲读性能提高写性能,读写都在内存,当满时刷盘,定期合并,适合于近期读写

  10. hadoop的块默认64m,无需RAID支持

高可用架构

应用层,服务层,数据层

高可用应用

负载均衡(无状态服务)

session管理:复制、绑定(不高可用)、cookie记录(session信息一般短小)、session服务器(每次读写均要访问)

高可用服务
  • 分级管理

  • 超时设置

  • 异步调用

  • 服务降级(非重要服务在特殊时期先停掉)

  • 在服务层保证幂等性(有效性检验)

高可用数据
  • 数据备份:保证多个副本,实现数据完全持久化

  • 失效转移:一个副本不可访问可以快速切换其他副本

  • 缓存的高可用比较有争议

CAP原理(持久、可用、分区扩展)

大型网站追求可用与伸缩性,放弃一致性

一致性分类:
  • 数据强一致
  • 数据用户一致:可通过纠错达到正确
  • 数据最终一致:(最弱)一段时间调整后可达到一致
数据热备
  • 异步:分主从服务器,主服务器负责写,异步同步

  • 同步:多服务器同时写并通知操作成功,等待全部成功才返回成功

关系数据库一般用读写分离

网站发布

预发布与测试环境情况不同的可能原因:可能依赖第三方服务(银行接口),依赖其它服务(数据库,缓存)

网站应用的一个理念:快速失败(失败后工程师介入排查后才可以再启动)

火车发布模型:提交,确认,合并,预发布,正式分布

灰度发布:服务器分若干部分,每天只发布一部分服务器,观察有无故障

**AB测试:**同时存在两个版本让用户选择

代码控制:以分枝开发、主干发布为主,使各部分独立开发

网站监控

用户行为:基于storm实时计算框架

服务器性能:Ganglia 图形显示实时性能

监控管理:系统报警、失效转移(通知应用程序),自动降级(高峰时)

网站伸缩性设计

不同功能物理分离(横向业务分离,纵向流程分离)

负载均衡手段

  • http 重定向

  • DNS域名解析(大型网站的会部分使用其作为第一级负载均衡)

  • 反向代理(需要内外两套网卡,是应用层的负载均衡,在应用程序实现)

  • IP(网络层由网关服务器处理内外ip,在内核实现)

  • 数据链路层(又叫直接路由,不改ip,只修改mac地址,使目的机器直接回复客户端而不经过负载均衡服务器)最好的是LVS(linux virtual server)

分布式缓存

在这里插入图片描述

分布式缓存要用一致性hash来保证(普通余数hash在扩容时会大概率不命中),使用二叉查找树来实现,树的最右与最左连接成环。

为了使每台机器的hash值均匀,加入新机不导致负载不平衡,可加入虚拟层,每个hash环上的虚拟节点对应下面实际节点

数据库伸缩设计

关系型

一个表分片存在多个数据库Amoeba,Cobar(一个分布式关系数据库访问代理)

以schema为单位进行一致hash

不能实现跨库的join,需要在业务上回避

非关系数据

在这里插入图片描述

HBase架构:应用程序先

可扩展性

利用分布式消息队列降低系统耦合性

事件驱动架构(生产者消费者模式)

分布式服务框架dubbo
在这里插入图片描述

服务提供者向服务注册中心注册自己可用的接口,客户端请求列表查找接口,根据配置的负载均衡算法把请求发送到服务提供者。

网站安全架构

XSS攻击,跨站点脚本攻击:

  • 反射型:点击跳转
  • 持久型:保存在服务端数据库
防范方法
  1. XSS攻击

    • 消毒(对关键字转义)
    • httpOnly 使cookie只能用于http
  2. Sql 注入攻击

    • sql预编译
  3. CSRF 攻击(伪造用户请求)

    • 使用表单token,每次椎token值
    • 验证码
    • referer check 检查请求来源(是不是自己网站的页面在请求)
  4. web应用防火墙

案例故障分析

日志输出过多:提高日志输出级别

高并发访问数据库引发故障:首页最好用静态的,不要访问数据库

高并发锁故障:单例对象在远程调用中加锁导致大量超时

缓存全部关闭导致重大瘫痪

应用启动不同步引发大量请求积压崩溃:先准备好后台再开启前台服务

图片上传下载变慢:大文件与小文件应该分开存储

滥用生产环境引发故障:生产环境的访问要规范

代码提交前使用diff命令进行代码比较,确认没有提交不该提交的代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值