纵观计算机发展几十年历史,我们会发现计算机的发展,不外乎计算,传输,存储这三个方向。计算是核心,主要是cpu的计算速度和算法。传输包括网络,数据传输方式(USB). 存储当然也就是软盘,硬盘,ssd等。
我们喜欢把复杂的东西拆分成各种各样的部分分开来研究。计算机也不例外。高校里面也是把计算机分成计算机原理,计算机网络,计算机系统等好多部分。不少公司也是聚焦于计算机的某一方面来开发新技术。
这种做法当然是历史发展的规律。但是计算机发展到今天,尤其服务器端技术发展到今天,仍然没有彻底解决资源使用率的问题。怎样榨干计算机的每一点功能仍然是研究的方向。
我觉得这个和当前的软件环境是分不开的。比如我们要开发一套服务器系统来解决某一个业务问题,我们往往会使用若干的开源软件来搭建。比如使用kafka作为消息队列,使用mysql作为存储。使用java SSH来进行业务的开发。这种搭积木的做法固然能快速的解决业务问题, 并且降低了开发人员的开发门槛。 但是这种方式真的能够最大化发挥计算机硬件资源的使用率吗?我看未必。比如kafka做消息队列,我们就需要序列化反序列化消息。 在mysql或者其他数据库里面,我们需要进行sql的解析。这些工作真的是必须的码?这些只是为了加快开发效率而做的事情。我们使用消息队列,目的是进行消息的传递。我们使用数据库,目的是将信息存储起来。为了设计一套处理能力超强的系统,有时候我们必须舍弃原有的一些开发模式,专而去开发适合业务需求,抛弃不必要步骤的专用软件。这些专用软件和业务模式有一定的相关性,但并不应该和业务耦合到一块。 这些专有软件提供一定的封装但是不是无限制的为了取悦开发人员为了降低开发人员的开发门槛而去做高层封装。 开发人员有义务和责任去了解底层软件的工作特点,并根据底层软件的特点去设计业务流程并编写代码。
如果把kafka, mysql比作建造楼房的砖块。可能kafka, mysql就是一块一块硕大无比的大砖,甚至是一面预制墙。用这些砖去盖居民楼也许是很棒的,但是如果用这些砖去盖泰姬陵,巴黎圣母院可能就不是那么合适了。有时候为了达到美得追求,我们必须舍弃那些简单粗暴的方案,转而去精雕细琢。
一些感想,随便写写。