-
用异步拉取代替同步推送
-
高可用的主要手段是冗余
-
任何可以晚做的事都要晚做
-
web访问优化:
- 减少http请求,多个静态文件合并
- 使用浏览器缓存css等
- 启用压缩
- 先加载css再加载js
- 减少cookie传输
-
CDN 内容分发网络,在客户一端,反向代理也可以缓存,在机房一端
-
网站性能优化第一定律:优先考虑使用缓存
- 缓存预热:刚启动就把常用数据加载好
- 缓存穿透:连null的数据也缓存以减少数据库恶意查询
- 分布式缓存:使用一致性hash进行缓存,容易实现扩容(互不通信是保证线性伸缩的关键)
- memcached:
- 简单通信协议
- 通信协议:TCP
- 序列化协议:命令关键字+命令操作数
- 高效内存管理
- 固定空间分配:内存分一组slab,每个slab时含一组chunk,以chunk为分配单位,LRU 释放
- 简单通信协议
-
线程安全的手段:
- 将对象设计为无状态对象
- 使用局部对象,在方法内创建对象,其不会被其它线程访问
- 并发访问资源时使用锁
-
资源复用:
- 主要有单例模式和对象池
-
LSM树:牺牲读性能提高写性能,读写都在内存,当满时刷盘,定期合并,适合于近期读写
-
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攻击,跨站点脚本攻击:
- 反射型:点击跳转
- 持久型:保存在服务端数据库
防范方法
-
XSS攻击
- 消毒(对关键字转义)
- httpOnly 使cookie只能用于http
-
Sql 注入攻击
- sql预编译
-
CSRF 攻击(伪造用户请求)
- 使用表单token,每次椎token值
- 验证码
- referer check 检查请求来源(是不是自己网站的页面在请求)
-
web应用防火墙
案例故障分析
日志输出过多:提高日志输出级别
高并发访问数据库引发故障:首页最好用静态的,不要访问数据库
高并发锁故障:单例对象在远程调用中加锁导致大量超时
缓存全部关闭导致重大瘫痪
应用启动不同步引发大量请求积压崩溃:先准备好后台再开启前台服务
图片上传下载变慢:大文件与小文件应该分开存储
滥用生产环境引发故障:生产环境的访问要规范
代码提交前使用diff命令进行代码比较,确认没有提交不该提交的代码
本文探讨了网站性能优化的策略,包括减少HTTP请求、使用浏览器缓存、启用压缩、合理安排CSS与JS加载顺序、减少Cookie传输及利用CDN。深入讨论了高可用架构的设计,涵盖应用、服务和数据层的考量,以及负载均衡、session管理、服务降级和数据备份策略。同时,文章介绍了分布式缓存、数据库伸缩设计和网站伸缩性的最佳实践。
4382

被折叠的 条评论
为什么被折叠?



