大型网站架构要素!

img

性能—响应时间决定用户

浏览器端:

  • 浏览器缓存

  • 使用页面压缩

合理布局页面

减少Cookie传输

CDN:

  • 内容分发网络(Content Delivery Network,简称CDN)将加速内容分发至离用户最近的节点
  • 缩短用户查看对象的延迟,提高用户访问网站的响应速度与网站的可用性
    • 解决网络带宽小、用户访问量大、网点分布不均等问题

应用服务器端:

  • 服务器本地缓存和分布式缓存

服务器集群技术:

  • Web服务器集群、数据库服务器集群、分布式缓存服务器集群等等
    • 通过部署多台服务器共同对外提供同类服务,提高整体处理能力

数据库服务器端:

  • 索引:索引(index)是对数据库表中一个或多个列
    • 例如,employee 表的姓氏 (name) 列)的值进行排序的结构

如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息

要注意的是:

  • 建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件

缓存:

  • 数据库缓存是介于应用程序和物理数据源之间,其作用是为了降低应用程序对数据库的物理数据源访问的频次,从而提高了应用的运行性能

SQL优化:

  • 当一个基于数据库的应用程序运行起来很慢时,90%的可能都是由于数据访问程序的问题,要么是没有优化,要么是没有按最佳方法编写代码
    • 因此你需要审查和优化你的数据访问/处理程序

NoSQL:

  • 方兴未艾的NoSQL数据库通过优化数据模型、存储结构、伸缩性等手段在性能方面的优势日趋明显

可用性—你能保证几个9

如何衡量可用性?

  • 全靠9来撑腰:几乎所有网站都承诺7*24小时可用,但事实上都不可能完全实现,总会有一些故障时间

去除这些故障时间就是网站的总可用时间

换算成网站的可用性指标,以此衡量网站的可用性,例如某些知名网站可用性达到99.99%

哪些手段提高可用性?

  • 核心:
    • 冗余-各服务器互相备份保证整体可用
  • 应用服务器端:
    • 通过负载均衡设备建立集群,其中一台宕机立即切换到其他服务器继续提供服务,这就保证了高可用性
  • 存储服务器端:
    • 需要对数据进行实时备份,当某台宕机立即将数据访问请求转换到其他服务器上,并进行数据恢复以保证数据高可用

伸缩性

衡量标准:

  • 是否可以多态服务器构建集群?

  • 是否容易向集群中添加新服务器?

  • 加入服务器后是否能提供无差别服务?

主要手段:

  • 应用服务器:使用合适的负载均衡设备(硬件还是软件?F5还是LVS+KeepAlived

  • 缓存服务器:改进缓存路由算法保证缓存数据的可访问性

  • 数据库服务器:通过路由区分等手段将多服务器组成一个集群

扩展性

衡量标准:增加新业务时是否可以实现对现有产品透明无影响(是否需要对现有业务进行修改匹配?)

主要手段:

  • 事件驱动架构:利用消息队列实现
  • 分布式服务:将业务和可复用服务分离

安全性

何为安全性?

  • 保护网站不受恶意访问和攻击,保护网站的重要数据不被窃取

衡量标准:

  • 针对现存和潜在的攻击窃密手段,是否有可靠的应对策略