从性能优化到架构演化

如何写出高效的程序,这个是始终存在的命题,但是他的意义却在不断演化。

一开始,我们专注于设计更好的数据结构算法。每有一个新的领域和问题,我们就会去探索“最优”的解决方式(这里指的是数学上的最优)。但是我们知道,算法上的提升是有数学上的理论上限,对于每个特定的问题,很快我们就达到了理论上的极限。

这时我们发现,对于不同类型的应用和不同的运行环境,我们需要的是不同的资源(性能热点不同)。这是我们可以巧妙的利用一些相对富余、便宜的资源去换取一些相对短缺、昂贵的资源(一般是CPU),这也就是我们经常说的时间换空间或者空间换时间。这时候,程序员开始从数学家变成管理学家,优化从解题变成了权衡的艺术,需要你对业务的理解、对硬件资源的理解,最终做出一个符合当下(最好能够一定程度符合未来)需求和场景的“最优”方案。

最常见的就是各种缓存技术

但是,这时硬件开始吊链子了,说好的摩尔定律逐渐开始失效,cpu的主频不再提升、cpu制成工艺越来越接近物理极限…而业务膨胀的速度比摩尔定律还摩尔定律。这时聪明的工程师门开始用数量解决问题,一块cpu不行就两块,一个核不行就双核。但这对我们传统的程序架构提出了新的挑战,我们的问题从怎么有效的利用cpu变为了如何有效的利用和协调多块cpu。从此,协程、多线程、超线程、SIMD各种并行计算开始走上历史舞台(多线程早就有,当时是为了支持单cpu上的多任务并行和解决IO阻塞,而现在还需要拆分计算任务分到多核之上,以提高性能)。

类似的,硬盘也有硬盘阵列技术RAID。

但是业务发展的还是太快了,单个机器的性能也很快达到瓶颈,这时互联网和互联网基础设施的发展又把人们带入了新的世纪(刚好是新的世纪,2000年互联网泡沫)。聪明的工程师发现,那为什么我们不通过累加机器的数量,通过网络把机器连接、协调在一起共同提供算力?(著名的google的三篇分布式计算论文)。终于各种分布式计算分布式存储微服务架构开始登上历史的舞台。一个“机器”不再是一个物理的结构,而是一个网络拓扑结构。

cpu 变成了MapReduceSpark,内存 变成了redis,硬盘 变成了mysql,总线 变成了kaffaMQ,操作系统 变成了zookeeperk8s

遵循这个足迹,我们把越来越多的多的机器连接在了一起,IDC机房、数据中心开始蓬勃发展。然而我们的初衷是通过连接更多数量的机器来拓展我们的算力和容量,但是这个世界上绝大多数的算力和容量都躺在我们的家中(大部分时间都是极低的使用率),虽然他们都是联网的,但是我们并没有很好的利用他们,可真是浪费啊。
如果我们能够统筹管理这个世界上所有的机器,按需分时分配到不同的使用者手中,那对于每个使用者来说,都不再需要投入大量的成本去购买超出自己需求(为了满足之后可能的需求)并且可能因为很多时间闲置而没有充分利用的机器。于是,云主机云服务出现了。用户按需弹性的去租借算力,节省成本。

其实早年的p2p(电驴)、现在的区块链也是这样的应用,只不过资源管理的方式不同,一种是中心化的,一种是去中心化的。

然而,目前这种方式还没有完全替代个人pc电脑,原因是如果我们真的想管理数量庞大的机器,那管理成、协调的成本会大大超过它所能带来的收益,至少目前的网络带宽是还没法承载的。而5G技术的到来,可能能够大大降低这样的成本,实现所谓的万物互联。

这也是为什么西方世界都在玩命的打压华为的原因

最终落地到我们的工作日常中,其实大部分时间,我们都是在做第二种方式的性能优化,像做买卖一样,用便宜的东西换取昂贵的东西。但是我们发现好像不太对啊,程序员的时间也是很贵的,如果本来能用换一块cpu解决的问题,而让一个程序员花大量时间去优化,岂不是在用便宜的东西换贵的东西?当然情怀还是要有的,我们都会设想我们的程序是要在几万台机器上跑好几年的,那带来的累加的效益还是很大的。
玩笑归玩笑,其实这说明了,在做性能优化之前要评估优化所带来的的收益,而不要盲目的、过早的优化,尤其是牺牲了可读性、可维护性、开发效率而换来的性能的提升,往往是得不偿失的。

以上发展的时间线并不是严格的先后顺序,而是相互之间有交叉。

图片均来自于网络

从性能优化到架构演化相关推荐

  1. 速递!MongoDB最新书籍出版啦:MongoDB进阶与实战-微服务整合、性能优化、架构管理

    新书速递 近期,MongoDB中文社区核心成员之一唐卓章老师出了一本MongoDB最新书籍--<MongoDB进阶与实战:微服务整合.性能优化.架构管理>,全面涵盖了MongoDB的基本原 ...

  2. Java性能优化:架构设计-分布式架构设计

    分布式架构设计 一.前言 随着微服务的流行,"分布式架构"作为高频词时常出现在开发者面前,我们是否理解分布式架构?它和微服务有什么区别呢?这一小节我们将讲解微服务和分布式架构那些事 ...

  3. Web项目开发性能优化解决方案

    web开发性能优化---安全篇 1.ip验证 2.操作日志.安全日志.登录日志 3.SQL注入校验 4.权限管理 5.验证规范(前端.后端.数据库约束) 2014-10-29 08:04  2773 ...

  4. 面向程序员的数据库访问性能优化法则

    面向程序员的数据库访问性能优化法则 特别说明: 1.   本文只是面对数据库应用开发的程序员,不适合专业 DBA , DBA 在数据库性能优化方面需要了解更多的知识: 2.   本文许多示例及概念是基 ...

  5. oracle in 索引_Oracle 性能优化总结

    作者 | 帅性而为1号 出处 : https://blog.csdn.net/zhushuai1221/article/details/51740846 网上关于SQL优化的教程很多,但是比较杂乱.近 ...

  6. 数据库访问性能优化法则

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

  7. Oracle学习总结(8)—— 面向程序员的数据库访问性能优化法则

    特别说明: 1.  本文只是面对数据库应用开发的程序员,不适合专业DBA,DBA在数据库性能优化方面需要了解更多的知识: 2.  本文许多示例及概念是基于Oracle数据库描述,对于其它关系型数据库也 ...

  8. 【云和恩墨业务介绍】之数据库性能优化服务

    数据库性能优化的必要性 性能问题对于行业.企业用户的信息化处理能力.客户的直接体验.硬件资源的投入成本. 运维要求都有着直接的影响,一旦性能问题爆发,将导致业务系统不可正常使用,客户体验变差等一系列影 ...

  9. Oracle 性能优化总结

    作者 | 帅性而为1号 出处 : https://blog.csdn.net/zhushuai1221/article/details/51740846 网上关于SQL优化的教程很多,但是比较杂乱.近 ...

最新文章

  1. 20190216 vagrant up 失败问题
  2. javaScript事件(一)事件流
  3. P3226-[HNOI2012]集合选数【状压dp】
  4. 【渝粤教育】国家开放大学2018年秋季 2322T物流信息技术 参考试题
  5. 渗透测试入门21之Metasploit渗透测试常用流程
  6. flutter Radio 单选框
  7. AJAX POST跨域 解决方案 - CORS(转载)
  8. js - 预加载+监听图片资源加载制作进度条
  9. 只属于你我的共同记忆
  10. linux 查看cpu温度,安装lm_sensors工具
  11. 信号与系统第四章总结
  12. java resourcebundle properties_Java使用Properties类和ResourceBundle类读取properties文件
  13. C语言将txt文本文档数据重新排序并放至新txt文本文档中
  14. 使用 DISM 工具检查并修复 Windows 系统文件
  15. php系统不能输入中文,word无法输入汉字 如何解决Word不能输入中文的问题
  16. Flutter 基础UI功能,常用结构框架代码
  17. clion_gcc报错
  18. 满地鸡毛的一年 || 转行Android之路
  19. 计算机考试准考证没有照片
  20. 中国菜刀使用教程--ctf 文件上传

热门文章

  1. 整理 华为AP-3010DN_V2配置创建wifi
  2. 我的世界服务器显示离线,我的世界离线模式怎么玩服务器 | 手游网游页游攻略大全...
  3. 试论and连接并列主语时的主谓一致
  4. POJ 3691 AcWing 1053 修复DNA
  5. STM32驱动W5500连接腾讯云
  6. DOM深入学习 --- 聚焦:focus / blur ,foucs / blur 委托的实现,tabindex中任何元素都可聚焦(六)
  7. python直方图上加正态分布线_Python直方图绘制(与标准正态分布进行比较)
  8. 说说我在机场碰上的那些大家喜闻乐见的事
  9. [584]python给生僻字注拼音(pypinyin库)
  10. C语言第十二课:编写扫雷游戏(综合练习2)