性能工程高手课
庄振运
Facebook性能优化和容量管理高级专家
立即订阅
2132 人已学习
课程目录
已更新 13 讲 / 共 36 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 代码不要眼前的苟且,而要效率的提升和性能的优化
免费
开篇:认识代码性能和系统容量效率 (3讲)
01 | 程序员为什么要关心代码性能?
02 | 程序员也要关心整个系统和公司成本吗?
03 | 导读:专栏是怎么设计的?需要哪些知识?
性能定律和数理基础 (5讲)
04 | 性能工程三定律:IT业和性能优化工作的“法律法规”
05 | 概率统计和排队论:做性能工作必须懂的数理基础
06 | 性能数据的分析:如何从大量数据中看出想要的信号?
07 | 性能数据的展示:一图胜千言,说出你的数据故事
08 | 经验总结:必须熟记的一组常用性能数字
性能测试 (4讲)
09 | 性能测试的种类:如何快准狠地抓住一个测试的本质?
10 | 性能测试的规划和步骤:为什么性能测试不容易一蹴而就呢?
11 | 性能测试的工具:七大测试场景如何选择高质量的测试工具?
12 | 九条性能测试的经验和教训:如何保证测试结果可靠且可重复?
性能工程高手课
登录|注册

02 | 程序员也要关心整个系统和公司成本吗?

庄振运 2019-12-02
你好,我是庄振运。
上一讲我们谈了,作为一个程序员,你所负责的软件模块的性能是很重要的。如果写的程序性能不好,轻则通不过开发过程中的性能测试这一关,严重的话,还会为以后的业务生产环境埋下很多地雷和炸弹,随时会踩响和爆炸,从而影响公司的业务和运营。
代码性能的重要性,不仅仅局限于程序员所直接负责的软件模块,它对其他相关软件模块、模块所在的应用程序、单机系统的设计、互联网服务的质量、公司的运营成本,甚至对我们共同生活的地球都很重要。
这一讲,我们就来说说这几个方面。为了方便说清这几方面的关系,我画了下面这张图。
我来简单解释一下这张图:
首先,红色模块是我们负责的模块(标示 0),它和其他模块一起构成了整个应用程序(标示 1);
这个应用程序运行在服务器和 OS 上面,构成了一个单机系统(标示 2);
几个单机系统一起组成一个互联网服务(标示 3),来面向客户;
这个服务和其他服务一起,需要公司的硬件容量支持,从而占用公司的商业成本(标示 4);
最后,别忘了,我们共同生活在这个可爱的绿色星球上。

应用程序的性能(标示 1)

我们先从标示 0 和 1 开始,也就是模块和应用程序。
我们每个人负责的代码模块,一般都不是孤立存在的,都要和其他模块交互。模块之间是唇齿相依的。如果一个模块性能不好,一定会在某种情况下影响到其他模块,甚至是整个程序的性能和服务质量。唇亡齿寒的道理我们都懂,所以每个软件模块的性能都需要严格把关。
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《性能工程高手课》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(12)

  • 西西弗与卡夫卡
    上游系统不做避让设计,异常情况下就是自己对自己发起了DDoS攻击。下游系统也要做熔断设计,以保护自己。

    作者回复: 没错;双重保护最好。

    2019-12-04
    7
  • Middleware
    为了国家,为了地球,优化优化代码吧

    作者回复: 哈哈,说得没错哦. :)

    2019-12-03
    5
  • glutton
    老师好,刚刚看到上新的这个课,就出手啦,目前正在做这方面的工作,特别缺少这种系统的讲解
    1,我负责的系统,是整个公司服务链路中重要一环,目前全链路延时在200ms左右,允许给我们系统的最大时延是50ms(极端情况跨异地数据中心)
    2,刚刚看到机械硬盘、SSD等对比,希望后续的课程,能详细列出成本、性能数据,以供参考
    3,希望能多讲一些实例,比如某系统架构演化过程,全面的展现设计思考方式、限制条件等
    最后,这是我下定决心要学完的一门课,也是我第一次发了留言的课,盼更新!祝顺利!

    作者回复: 谢谢留言和建议。我会尽量满足要求。学完后欢迎和我交流感想。SSD和硬盘的价格和性能其实一直在变(技术演化很快),所以只能给出大体对比,你可以Google搜索一下最新的价格以及每个厂商/型号的性能。如果有具体的问题(比如性能指标),我也可以看看帮你找找。

    2019-12-03
    2
    3
  • Liang Xu
    想到了Bufferbloat 显现. 如果很多人同时应用下游服务, 一遇到堵塞就开始减少请求, 这样就是所有人都减少. 一段时间之后是不是就产生周期性的算力需求? 学网络的时候学的

    作者回复: 很好的思考。好的退避机制会引入随机数来决定行为,可以避免和极大地降低周期性的可能。

    2019-12-05
    2
  • han
    大家工作中接触最多的应该是跟数据库的交互😀,不确定在不在课程讨论的范畴中,后面会不会讲到?

    作者回复: 后面会有和数据库相关的一些内容;不过数据库这个领域也好宽(比如各种各样的数据库)。

    2019-12-16
  • Q
    作为运维工程师,请问老师该怎么在性能工程领域帮助开发同事? 实现自我的成长。希望老师能在接下来的一些课能具体谈谈这方面的东西。

    作者回复: 你是问开发和运维的有效配合吗?这方面有好几处:
    -程序设计阶段,他们最好征询你们的意见,因为你们知道硬件,系统和容量;一般来收开发人员不太关心这些。
    -程序测试阶段。你们要和他们密切交互,将“问题”扼杀在摇篮里。
    -部署阶段。你们主导,但是需要经常让他们改进发现的问题。
    -运行阶段。比如修Bug就是。

    2019-12-04
  • 行下一首歌
    我看完就一句话深深地映入我脑海——多快好省。

    作者回复: 你历史一定学得很好。哈哈

    2019-12-03
  • Linuxer
    回顾你最近接触过的软件模块或者正在写的代码,有没有和其他的系统模块有交互关系,它们之间是如何交互的?
    RPC、接口(其实RPC也算接口) 这两种方式

    如果你的模块性能不好(不管是响应时间很慢,还是发出过多请求),有没有可能对其他系统模块造成影响?这个影响会不会造成整个系统和服务的严重后果甚至瘫痪?
    错误一直重试,结果导致整个系统瘫痪,最后采用了文章中提到的指数退避机制
    2019-12-03
  • Jxin
    1.我负责的系统模块是一个老项目的子系统。各服务间rpc调用超时均为6s。这会导致只要系统中任意一个子系统出现问题,由于这个6s等待的存在,就会导致所有关系方线程资源都被占用着。于是我调小了超时时间。然后快速失败却更加剧了故障系统的故障。最终我在入口处用mq销峰控制消费速率或则说任务并行度,借此保障系统稳定。然而,这依旧是有问题的,存在很大的浪费。因为如果瓶颈系统能支撑,单机能并行200的任务,而不能支撑就只能限流在50,这之间的资源浪费实属可惜。瓶颈系统优化又管不到,我倒是愿意研究,但职责有界,连代码都看不到。这种情况就比较无力了。

    2.对老师提到的“指数退避机制”很感兴趣,有具体落地的技术方案吗?

    作者回复: 恩,具体的系统真的事很复杂,要考虑各种因素。指数退让其实道理很直白易懂;实践起来也容易。基本道理就是如果不能及时获得下游回答,就假设下游很忙,那就降低请求速度(用指数方式降低,比如每次降低一半)。比如超时等待可以持续增加。

    2019-12-03
    1
  • 董飞
    老师,您好。我是做测试的,怎样往性能测试工程师发展?具体都要学什么?编程要学到什么程度?谢谢老师解答。

    作者回复: 这个专栏里面应该会有些答案帮助。

    2019-12-03
  • abctao
    期待后续讲解,谢谢!
    2019-12-02
  • 夜空中最亮的星(华仔)
    作为运维工程师 终于找到了下一个方向 性能工程师

    作者回复: :) 终于找到组织了!

    2019-12-02
收起评论
12
返回
顶部