性能工程高手课
庄振运
Facebook 性能优化和容量管理高级专家
24631 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 40 讲
性能工程高手课
15
15
1.0x
00:00/00:00
登录|注册

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

日常工作对能源消耗的影响
降低能源消耗
容量规划和效率管理
高性能服务的成本
指数退避机制
上游模块对下游资源进行重试请求的时间间隔
上下游模块的影响
模块交互
设计出性能优越的模块和应用程序
对下层软硬件构件的了解
构件对上层程序性能的影响
软硬件构件
延展性
可靠性
服务延迟
吞吐量
根因分析定位性能问题
影响其他模块和整个程序的性能和服务质量
模块之间的交互关系
模块性能对其他系统模块的影响
软件模块的交互关系
忧国忧民的态度
依赖于每个人的责任和贡献
责任和贡献
降低能源消耗的责任
数据中心的能源消耗
责任
服务性能对公司成本的影响
教训
互联网服务的复杂性
设计层面考虑
单机系统构成
性能指标
模块和应用程序
思考题
总结
我们共同的绿色地球
公司的成本(标示4)
互联网服务的性能(标示3)
单机系统的性能(标示2)
应用程序的性能(标示1)
程序员为什么也要关心整个系统和公司成本?

该思维导图由 AI 生成,仅供参考

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

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

我们先从标示 0 和 1 开始,也就是模块和应用程序。
我们每个人负责的代码模块,一般都不是孤立存在的,都要和其他模块交互。模块之间是唇齿相依的。如果一个模块性能不好,一定会在某种情况下影响到其他模块,甚至是整个程序的性能和服务质量。唇亡齿寒的道理我们都懂,所以每个软件模块的性能都需要严格把关。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文强调了程序员不仅需要关注代码性能,还需关心整个系统和公司成本。模块性能对应用程序、单机系统、互联网服务和公司成本都有重要影响。文章指出,了解单机系统的软硬件构件对设计高效率的软件至关重要。在互联网服务中,每个程序员需要从整个大局出发,设计模块和交互机制,以避免对上下游模块造成不良影响。同时,文章还强调了对系统容量的效率提升和对共同的地球的责任。通过案例强调了上游模块在处理下游模块性能问题时的重要性。总之,程序员需要关注整个系统和公司成本,以确保代码性能和系统性能的协调发展。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《性能工程高手课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(19)

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

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

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

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

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

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

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

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

    2019-12-03
    3
    5
  • 大名府卢员外
    老师 文中四种存储介质一图ssd的应该比hdd的读写速度要快 而且我感觉图中两者应该调换一下

    作者回复: 不太明白,你是说那张有5个指标的图吗?

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

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

    2019-12-04
    2
  • 梅子黄时雨
    我看完就一句话深深地映入我脑海——多快好省。

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

    2019-12-03
    2
  • Jxin
    1.我负责的系统模块是一个老项目的子系统。各服务间rpc调用超时均为6s。这会导致只要系统中任意一个子系统出现问题,由于这个6s等待的存在,就会导致所有关系方线程资源都被占用着。于是我调小了超时时间。然后快速失败却更加剧了故障系统的故障。最终我在入口处用mq销峰控制消费速率或则说任务并行度,借此保障系统稳定。然而,这依旧是有问题的,存在很大的浪费。因为如果瓶颈系统能支撑,单机能并行200的任务,而不能支撑就只能限流在50,这之间的资源浪费实属可惜。瓶颈系统优化又管不到,我倒是愿意研究,但职责有界,连代码都看不到。这种情况就比较无力了。 2.对老师提到的“指数退避机制”很感兴趣,有具体落地的技术方案吗?

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

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

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

    2019-12-03
    2
  • 夜空中最亮的星
    作为运维工程师 终于找到了下一个方向 性能工程师

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

    2019-12-02
    2
收起评论
显示
设置
留言
19
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部