如何评估线上系统的容量? (三)

5 环境准备

我们的系统,分层架构如下,

接入层(lvs, nginx等load balancer)
业务层(tomcat, apache, jetty等)
核心层(核心逻辑层,为上层提供数据)
数据层(数据库、缓存、分布式存储等)

一般情况下,我们会选择在接入层进行压测,压测的覆盖面会更全面一些。不过可根据具体的业务场景进行调整。

考虑到单独搭建一套专供压测的环境比较复杂,实际场景中经常会使用预上线的环境作为压测的环境。
需要注意:为避免压测对线上系统造成影响,所有压测环境以及相关联的服务全部都不能是线上的。在准备压测环境的时候,尤其需要重点排查下。比如,数据库、缓存、其他基础组件、第三方服务等。

对于需要登陆的系统,需要考虑到权限校验的逻辑是否影响对复制流量的处理。比如,登陆时把session相关信息存在redis集群中(本质上是有一些状态数据),后续请求中有根据sessionId验权,那么在压测环境中要想正确处理,有两个方案解决,

  1. 压测环境代码中,去除校验请求中验权的逻辑,以及可能要根据session去获取userId等id信息,都需要在代码中进行修改。(改动量大,分散)
  2. redis做数据同步,将线上redis数据同步至预上线环境,去除登陆时写redis的逻辑,相当于读到了“线上”的数据。

同样,对于数据库或其他有状态的数据,我们也希望尽量保持一致,可以在压测之前做一份数据,以保证大部分的拷贝流量都是“真实”的。

你可能感兴趣的:(如何评估线上系统的容量? (三))