高性能web架构概念与应用分享

  随着互联网的不断发展,越来越多的程序员都在学习不同的架构开发方式,而本文我们就通过案例分析来简单了解一下,高性能web架构概念与应用分享。

  1、什么是高性能Web架构

  在互联网业务中,我们经常会面临流量巨大的复杂的分布式场景。这就要求我们在设计系统的时候保证系统具有承载高并发(HighConcurrency)的能力,同时能够保证系统的高可用性(HighAvailability)。

  所以,具备高性能Web架构通常是指,通过稳健的系统设计能力,来保证系统能够同时处理复杂的业务场景,并保证性能、稳定性、可用性的架构体系。。

  高性能Web常用的一些衡量指标有响应时间(ResponseTime),吞吐量(Throughput),每秒请求数QPS(QueryPerSecond),并发用户数等。

  响应时间(RT)响应时间是指系统对请求作出响应的时间,如一个请求从发送request到response的时间是ms,这就是请求的响应时间。

  吞吐量(Throughput)吞吐量是指系统在单位时间内处理请求的数量。

  并发用户数并发数是指系统同时能处理的请求数量,这个也是反映了系统的负载能力。

  与吞吐量相比,并发用户数是一个更直观但也更笼统的性能指标。实际上,并发用户数是一个非常不准确的指标,因为用户不同的使用模式会导致不同用户在单位时间发出不同数量的请求。

  QPS每秒查询率(QueryPerSecond)每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准

  TPS每秒事务数(TransactionsPerSecond)是吞吐量的常用量化指标

  2、如何提升系统的性能指标

  在互联网分布式架构设计,我们常常用两种方式来提高系统的性能,一种是横向扩展(ScaleOut),一种是纵向扩展(ScaleUp)。对于横向纵向扩张我们在微服务系列、MySQL系列、Redis系列中已经多次讨论过了。

  纵向扩展主要提高单机的性能,让其算力不断提升。横向扩展就是分治思维,单机的内存、CPU、连接数、吞吐量始终是有限的,多实例化的集群支撑才是解决大型分布式场景的保障。

  纵向扩展(ScaleUp):提升单机算力

  单机硬件水平提升,如CPU(多线程计算服务消耗大)、内存(缓存等)、GPU(音视频、直播类)、SSD磁盘(数据存储等),升级到更高的配置;

  提升单机架构性能,很多时候不是服务器硬件水平低,而是架构的不合理。如:

  服务模块化分层不合理,导致调用互相影响,请求链路过长。

  未合理地使用缓存,导致系统计算时间过长,IO操作频率过高。

  存储服务,如数据库可优化空间大,如索引使用不当,单表容量过大,单表字段过多,查询未优化等。

  这些都是在架构设计的时候需要谨慎对待的。

  但是正如上面说的,不论是单机硬件性能,还是单机架构性能,优化都有一个极限,互联网分布式架构设计高并发终极解决方案还是横向扩展。

  横向扩展(ScaleOut):

  分治思维,单机的内存、SSD、CPU、GPU、连接、吞吐量始终是有限的,总不能无限制的扩展。所以我们需要追求横向扩展,在架构的各个层面做水平扩容,增加实例数量,比如ServicesCluster、RedisCluster、MySQLCluster,并在长期的业务实践中不断优化。

  相对于ScaleUp,他有哪些优势:

  理论上的性能无限扩充,单机的扩容总是有限制的,但是集群是可以持续扩张。bat大厂核心服务的成千上万的服务集群就是很好的业内范例。

  提高可用性,水平扩容终会把计算能力和数据能力分摊在不同的实例、甚至不同的服务、甚至不同机房。某个分区出问题不会导致整个系统崩塌,这个单体系统是不能保障的,哪怕他硬件再牛。




转载请注明:http://www.aierlanlan.com/rzdk/10059.html