大型网站核心要素和高性能架构

来源:互联网 发布:起个好的淘宝店铺名字 编辑:程序博客网 时间:2024/05/22 02:24

大型网站核心要素:性能  可用性  伸缩性扩展性 安全性

性能

  1. 在浏览器可以通过浏览器缓存,使用业面压缩合理布局页面减少 cookie传输等手段 改善性能 
  2. 还可以使用cdn将网站静态内容分发至离用户最近的网络服务商机房使用户通过最短访问路径获取数据 
  3. 可以在网站机房部署反向代理服务器缓存热点文件,加快请求响应速度 减少应用服务器负载压力
  4. 应用服务器端可以使用服务器本地缓存和分布式缓存通过缓存在内存中的热点数据处理用户请求  加快请求数处理过程  减少数据库负载压力
  5. 也可以通过异步操作将用户请求,发送至消息队列等待后续任务处理 而当前请求直接返回响应给用户,
  6. 在代码层面也可以使用多线程改善内存管理等手段优化性能  
  7. 在服务器端索引 缓存 缓存 性能优化手段都已经比较成熟,而方兴未艾的NOSQL数据库通过优化数据模型存储结构伸缩特性等手段在性能方面的优势也日邹明显
  8. 在网站有很多用户高并发请求的情况下,可以将多台服务器组成一个群集共同对外服务提高整体处理能力改善性能

网站的高性能架构要求

性能测试指标:主要指标有 响应时间 并发数 吞吐量 性能计数器等

  1. 并发数:指系统能够同时处理请求的数目 这个数字也反映了系统的负载特性
  2. 吞吐量:指单位时间内系统处理的请求数量 体现系统的整体处理能力
性能的测试方法:性能测试 负载测试 压力测试 稳定性测试
性能优化:根据网站的分层架构 可分为web前端性能优化 应用服务器性能优化  存储服务器性能优化
web前端优化:
  1. 减少http请求 减少http的主要手段是,合并CSS合并javascript 合并图片,将浏览器一次性访问需要的javascript CSS合并成一个文件,这样浏览器只需要一次请求,图片可以合并多张 图片合并成一张,如果每张图片都有不同的超链接  可通过CSS偏移响应鼠标点击操作  构造不同的URL
  2. 使用浏览器缓存  网站在更新静态资源时 应该采用逐量更新的方法 比如更新10个文件 不能把10个文件一次性的更新完 而是一个文件一个文件的逐步更新 并有一定的间隔时间 
  3. 启用压缩 
  4. css放在页面最上面 javascript放在最下面 
  5.  减少cookie的传输
  6. cdn加速:将图片 文件 CSS JavaScript 脚本 静态网页等  将其缓存在CDN可及大的改善网页的打开速度
  7. 反向代理:当用户第一次访问静态内容的时候 静态内容就被缓存在反向代理上 当其他的用户访问静态内容的时候 直接从反向代理服务器返回 加速web的响应

应用服务器性能优化:方式有缓存 集群 异步

缓存预热:

缓存预热中存放的是热点数据 热点数据又是缓存系统利用lru(最近最久未用算法对不断访问的数据筛选淘汰出来的,这个过程需要花费较长的时间,新启动的缓存系统如果没有任何数据,在重建缓存系统数据的过程中,系统的性能和数据库负载都不太好,那么最好在缓存系统时就把热点数据加载好,这个缓存预加载手段叫做缓存预热
缓存穿透:

缓存穿透,如果因为不恰当的业务,或者恶意攻击持续高并发的请求某个不存在的数据,由于缓存没有保存该数据,所有的请求都会落到数据库上会对数据库造成很大的压力,甚至崩溃,一个简单的对策,是将不存在的数据也缓存起来(value null)


分布式缓存架构
分布式缓存部署在多个服务器组成的集群中 以群集方式提供缓存服务的架构方式,架构方式有两种,一种是JBOSS Cache为代表的需要更新同步的分布式缓存
一种是Memcached代表的通信的分布式缓存为代表的不互相通信的分布式缓存
JBOSS Cache:通常将应用程序和缓存部署在同一台服务器上 应用程序可从本地快速获取缓存数据,但是这种方式带来的问题是缓存数据的数量受限于单一服务器的内存空间,而且当集群规模较大的时候缓存更新信息需要同步到集群所有机器 其代价惊人
 Memcached:采用一种集中式的缓存集群管理也被称作互不通信的分布式架构方式,缓存与应用分离部署 缓存部署在一组专门的服务器上应用程序通过一致性Hash等路由算法选择缓存服务器远程访问缓存数据,缓存服务器之间不通信  缓存集群的规模可以很容易的实现扩容,具有良好的可伸缩性
代码优化:多线程 将对象设计成无状态对象  使用局部对象 并发访问资源时使用锁 
资源复用:系统运行时尽量减少那些开销很大的系统资源和创建 比如数据库的连接 网络通信连接 线程 复杂对象等 有两种模式  单列和对象池 
数据结构:程序是数据结构+算法 灵活组织各种数据结构改善数据结构读写计算特性可极大优化程序的性能

垃圾回收:垃圾回收对系统的性能产生很大的影响  以jvm为例 其内存主要划分为堆 堆栈   堆是存储对象的内存空间 对象的创建和释放 垃圾回收就是在这里进行 堆栈是存储线程上下文信息 如方法参数 局部变量等 


存储性能优化
海量的数据的读写对磁盘访问造成巨大的压力 虽然可以通过Cache解决一部分数据读写的压力 很多时候磁盘仍然是系统最严重的颈瓶
机械硬盘VS固态硬盘 
机械硬盘通过马达驱动磁头臂 带动磁头臂到指定的磁盘位置访问数据 由于每次的访问都要移动磁头臂 由于磁头臂的次数相差巨大 性能表现差别巨大 
固态硬盘又称作为SSD这种硬盘没有机械装置 数据存储在可持久记忆的硅晶体上 因此可以像内存一样快速访问 SSD具有更小的功耗和更少的磁盘震动与噪声
B+树 VS LSM树
为了改善数据访问特性 文件系统或数据系统通常会对数据排序后存储 加快数据检索 这就需要保证数据在不断 插入 删除后依然有序 传统的关系数据库的做法是使用B+树
LSM树上进行一次数据更新不需要磁盘访问 在内存即可完成 速度远快于B+树 当数据访问是以写操作为主 而读操作则集中在最近写入数据上时使用LSM树可以极大程度的减少磁盘访问次数 加快访问速度
原创粉丝点击