系统设计和架构之基础

性能

性能指标

响应时间

指某个请求从发出到收到响应消耗的时间。

在对响应时间进行测试时,通常采用重复请求的方式,然后计算平均响应时间。

吞吐量

指单位时间内系统处理的请求数量。

  • TPS:每秒事务数
  • QPS:每秒查询数
  • HPS:每秒HTTP请求数

并发用户数

指系统能同时处理的并发用户请求数量。

性能优化

Web 前端性能优化

浏览器访问优化

  • 减少 http 请求
  • 使用浏览器缓存
  • 启用压缩
  • CSS 放在页面最上面、JavaScript 放在页面最下面
  • 减少 Cookie 传输

CDN 加速

CDN(内容分发网络)的本质仍然是一个缓存,而且将数据缓存在离用户最近的地方,使用户以最快速度获取数据,即所谓网络第一跳。

CDN 能够缓存的一般是静态资源,如图片、文件、CSS、Script脚本、静态网页等,但是这些文件访问频率很高,将其缓存在CDN可极大改善网页的打开速度。

反向代理

反向代理除了安全功能,也可以通过配置缓存功能加速Web请求。

应用服务器性能优化

缓存

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

缓存能够提高性能的原因:

  • 缓存数据通常位于内存等介质中,访问速度特别快;
  • 缓存数据通常是通过计算处理得到的,可以起到减少计算时间的作用;
  • 缓存数据可以位于靠近用户的地理位置上(CDN);

异步

某些流程可以将操作转换为消息,将消息发送到消息队列之后立即返回,之后这个操作会被异步处理。

集群

在网站高并发场景下,使用负载均衡技术为一个应用构建一个由多台服务器组成的服务器集群,将并发访问请求分发到多台服务器上处理,避免单一服务器因负载压力过大而响应缓慢,使用户请求具有更好的响应延迟特性。

代码优化

存储性能优化

  1. 机械硬盘 vs 固态硬盘
  2. B+ 树 vs LSM 树
  3. RAID vs HDFS

可用性

冗余

保证高可用的主要手段是使用冗余,当某个服务器故障时就请求其它服务器。

应用服务器的冗余比较容易实现,只要保证应用服务器不具有状态,那么某个应用服务器故障时,负载均衡器将该应用服务器原先的用户请求转发到另一个应用服务器上,不会对用户有任何影响。

存储服务器的冗余需要使用主从复制来实现,当主服务器故障时,需要提升从服务器为主服务器,这个过程称为切换。

监控

对 CPU、内存、磁盘、网络等系统负载信息进行监控,当某个信息达到一定阈值时通知运维人员,从而在系统发生故障之前及时发现问题。

伸缩性

指不断向集群中添加服务器来缓解不断上升的用户并发访问压力和不断增长的数据存储需求。

伸缩性与性能

如果系统存在性能问题,那么单个用户的请求总是很慢的;

如果系统存在伸缩性问题,那么单个用户的请求可能会很快,但是在并发数很高的情况下系统会很慢。

实现伸缩性

应用服务器只要不具有状态,那么就可以很容易地通过负载均衡器向集群中添加新的服务器。

关系型数据库的伸缩性通过 Sharding 来实现,将数据按一定的规则分布到不同的节点上,从而解决单台存储服务器的存储空间限制。

对于非关系型数据库,它们天生就是为海量数据而诞生,对伸缩性的支持特别好。

扩展性

指的是添加新功能时对现有系统的其它应用无影响,这就要求不同应用具备低耦合的特点。

实现可扩展主要有两种方式:

  • 使用消息队列进行解耦,应用之间通过消息传递进行通信;
  • 使用分布式服务将业务和可复用的服务分离开来,业务使用分布式服务框架调用可复用的服务。新增的产品可以通过调用可复用的服务来实现业务逻辑,对其它产品没有影响。

安全性

要求系统在应对各种攻击手段时能够有可靠的应对措施。

参考资料

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

欢迎关注我的公众号:荒古传说