• 3.20-上海-技术沙龙问题汇总答疑


    前言

    本周六受邀,参加了由数列科技主办的线下沙龙——高可用&性能质量保障分享会。

    分享过程中,参与沙龙的同学们提了很多问题,碍于手机打字确实不太方便,因此写了这篇文章,对这些同学提出的问题做一个解答。

    当然,回答仅限于我个人的角度,仅供参考。

    课程回放:高可用&性能质量保障分享会

     

    Question

    1、技术团队好与不好,怎么区分?@Jeffery

    2、压测工具和方案应该如何选择?@一二

    3、全链路压测为什么要在生产环境进行?脏数据如何处理?支付场景如何处理?@馒头大王-Manju

    4、全链路压测,如果没有产品性能的baseline,如何设置并发量?@梧桐

    5、生产全链路压测,如何保证生产环境可用,如何解决脏数据?@守正出奇

    6、性能需求的准入规则如何理解?@不沾

    7、流量模型建立的思路、前期准备、依赖的技术和工具如何了解?@不沾

    8、热点数据预热怎么做?@大美丽与小旺仔

    9、仿真环境如何搭建?相较于生产环境有哪些不足?生产压测如何保证不影响正常的业务?@泉眼无声

    10、性能测试结果如何分析?没有满足业务需求如何处理?@久留

    11、大促时候为什么不建议扩容?@暗夜

    12、小公司如何落地自己的全链路压测平台?@Mike.liu

    13、测试人员做全链路压测需要什么代码功底?@郑阳洋

    14、如果压测没有覆盖到安全水位,如何借助已经压测的模型预测剩余的容量?@James-东方

    15、证券交易所或者期货交易所这种金融行业是否适合全链路压测?@郑阳洋

    16、影子表压测结束后还会在生产保留么?对生产的数据库是否会有影响?@虎魄2

    17、如何根据自己公司的情况探索并建立适合自己公司的性能测试体系?@对方正在讲话...

     

    Answer

    PS:由于很多问题的point都很类似,因此我会针对这些点抽取共性来答疑,请各位知悉。

    1、技术团队好与不好,怎么区分?

    这是个因人而异的问题,每个人对工作的追求都有差异,对好团队的定义也有不同,我聊聊几个共性,供参考。

    1)是否有技术文化?

    所谓技术文化,在我看来就是对技术方案的选型&code review&编码风格&质量保障,有没有很好的落地实践。

    2)是否有相对透明的绩效考评机制?

    大部分人工作为了赚钱,职业规划其实比较虚。绩效考评机制能否做到相对透明和公平,是一个很重要的因素。

    3)是否有明确的职位晋升空间和通道?

    职级晋升、加薪永远是打工人最关心的一点。

    4)你的leader是否能帮你成长?

    这点其实很多人忽略了,但其实是最重要的。leader有一点很重要,向上顶住压力,向下争取利益。

    2、压测工具和方案应该如何选择?

    压测工具的选型,可以从三点来判断:

    1)是否能快速便捷的安装部署并且支持分布式;

    2)学习成本是否比较低,能让团队成员都能快速入门上手;

    3)是否有完善活跃的社区或者团队持续更新优化;

    压测方案,需要根据具体需求和实际情况制定,没有具有普适性的方案,基本只能靠经验和不断沟通来完善。

    3、全链路压测相关的问题......

    1)为什么要在生产环境进行?

    • 模拟真实的业务场景;
    • 节省环境的硬件成本;
    • 节省搭建新环境的人力和时间资源;
    • 长期来说,是一种生产巡检,类似于定期对生产环境的稳定性进行全面体检;

    2)脏数据如何处理?

    • 压测数据存储正式的业务表,通过特殊字段做区分,每次压测结束后进行清理;
    • 影子库表方式的话,是通过特殊的标记将压测数据路由到对应的带特殊标识的中间件和DB。
    • 影子库一般和生产的业务DB在同一个实例,这种情况下数据预埋是将生产数据同步到影子库,然后进行脱敏处理;

    3)支付场景如何处理?

    • 调用三方支付的话,采用mock或挡板的方式(mock-server或者本地jar包方式);
    • 如果是自己的支付服务,处理方式类似上述第二个问题,脏数据的处理;

    4)如果没有产品性能的baseline,如何设置并发量?

    • 业务需求一般都是模糊的,需要通过业务模型和流量模型来评估,然后和业务产品方不断沟通确认,需求都是不断沟通中聊出来的,没有一步到位的需求;
    • 并发量的设置,取决于压测场景和策略,刚开始我建议通过梯度递增的方式不断加压,直到性能拐点或者出现资源告警等情况;

    5)如何保证生产环境可用?

    • 最稳妥的方式,选择流量低峰期(凌晨时间段)进行压测;
    • 保证服务可用,需要有很多岗位的同学值班oncall,比如运维DBA研发测试等;

    6)热点数据预热怎么做?

    • 比如用户登录态的数据,比如用户的优惠券数据,都可以通过提前缓存到Redis,设置合理的过期时间来解决这个问题;

    7)仿真环境如何搭建?相较于生产环境有哪些不足?生产压测如何保证不影响正常的业务?

    • 仿真环境是全链路压测在生产落地的过渡环境,一般都是按照和生产环境1:1(比较贵)或者等比配置的方式来搭建;
    • 不足之处在于没有实际的流量请求,请求需要自己构建,硬件各方面的配置以及参数和生产无法确保一致性。在业务场景复杂度和真实性上,有一定差异;

    8)大促时候为什么不建议扩容?

    • 一般大促时候,服务的扩容都是已经完成的动作。而且服务保护措施比如限流降级熔断,都配置好了。
    • 大促流量峰值时候扩容,会引起一连串的连锁反应,某些服务扩容了,下游如何按照比例扩容,限流阈值、熔断阈值都需要跟着改,但如何改?改多少?都是需要决策且风险巨大的;

    9)小公司如何落地自己的全链路压测平台?

    • 全链路压测不是银弹,更不是万能。它只适合某些具有特定业务需求的公司,能否实施取决于是否具有合适的组织管理能力和对应的技术架构;
    • 一般来说小公司没有特别复杂的业务场景和高并发,全链路压测落地又是个比较复杂的技术工程,因此不是很建议小公司搞全链路压测,特别是自研,我更推荐找成熟的商业产品,比如数列;
    • 至于全链路压测平台实际上没有解决技术问题,只是更适合多人协同和规范流程的标准化自动化;

    10)测试人员做全链路压测需要什么代码功底?

    • 代码能力只是一部分,或者说不是必须项。分下面几项来说:
    • 如果机制完善,全链路压测比较成熟,自动化标准化做的比较好,不会代码也可以,只需要点启动按钮看监控即可;
    • 如果从零开始自研,性能测试需要的技术广度和深度又有一定要求。
    • 比如:要对系统的技术架构、上下游调用、涉及的中间件、缓存、DB有一定的了解。对业务一定是要很熟悉的。还需要较为丰富的性能测试经验,否则有很多坑需要踩;

    11)证券交易所或者期货交易所这种金融行业是否适合全链路压测?

    • 我对证券或者期货交易业务不太熟悉,我说几点适合做全链路压测的场景,供参考:
    • 具有高并发场景;
    • 具有较为复杂的业务逻辑;
    • 需要自上而下的支持(需要评估风险,是否允许犯错的空间);

    4、性能需求的准入规则如何理解?

    不是所有需求(接口、服务等)都需要压测,做功能测试都需要需求评审,性能也需要。一般来说,是否需要做性能测试,有如下几点参考:

    1)是否具有并发场景(比如限时抢购-怕超卖);

    2)是否需要写库(写数据一般都会加锁,行锁表锁悲观锁等等,不压测可能会出现锁等待超时);

    3)业务逻辑是否复杂,是否有太多的依赖(分布式微服务架构SOP等很多都有复杂的依赖调用);

    4)评估技术方案,是否有大量的循环、串行并行外部调用;

    5)领导是否强要求(这个很奇葩,但真的有);

    5、流量模型建立的思路、前期准备、依赖的技术和工具如何了解?

    1)流量模型的建立,一般都是通过链路追踪+监控得到不同调用链路上的QPS及转化率,以及强弱依赖;

    2)前期准备的话,完善的监控体系是必不可少的;

    3)依赖的技术和工具,现在有很多开源的监控工具,skywalking、cat、pinpoint、Prometheus;

    6、性能测试结果如何分析?没有满足业务需求如何处理?

    1)压测结果如何分析,这是个很深很大的话题。简单来说,结果是否满足预期指标,是否存在资源不足&资源竞争&耗时太长&服务异常等情况;

    2)没有满足业务需求,就想办法满足业务需求,通过扩容&升配&缓存&甚至优化代码的方式,去满足业务需求,并且留有一定冗余空间,做好线上灰度和服务保护(限流熔断降级——这个怎么了解,后面话题再聊);

    7、如果压测没有覆盖到安全水位,如何借助已经压测的模型预测剩余的容量?

    无法按照既有的压测结果评估实际的线上容量场景,所有的所谓预测方法论,都存在误差,敬畏生产环境的稳定性,敬畏故障。

    8、如何根据自己公司的情况探索并建立适合自己公司的性能测试体系?

    这个我其实分享过了,就下面这张图,照着做即可。有个小窍门:保护好自己,优先落地可行的方案。

    结语

    我只是按照问题回答问题,拆开来说,其中很多点都值得深入讨论,限于时间和篇幅,我们后续再见。

    答疑仅供参考,不要照搬,要通过大量实践形成适合自己的方法论。

     

    转载请注明出处,商用请征得作者本人同意,谢谢!!!
  • 相关阅读:
    使用静态工厂方法的好处和坏处
    xUtils3源码分析(一):view的绑定
    在laravel之外使用eloquent
    ruby里面的毒瘤
    ruby的代码风格
    ruby里面的属性访问器
    ruby里面module和class的区别
    unity里面查找所有物体
    android studio安装须知
    intellij系列ide配置
  • 原文地址:https://www.cnblogs.com/imyalost/p/14674356.html
Copyright © 2020-2023  润新知