如果站在单机的角度看代应用程序,无论是单击游戏或者是单机办公用程序,他们的运行速度受限于本地计算机本身的性能和软件本身的编写水平,如果想要获得更好的使用体验,只能升级更好的CPU,更大的内存,内牛逼的显卡,或者依赖开发商做更好的优化;此时软件的运行速度归根揭底会被总结到两个问题上:

    1. IO
    2. 计算速度

    但是如果站在网络的角度上去思考这个问题;恐怕限制就多了一条:网络传输速度;这也是5g技术当前被推崇的原因,因为它能从根本上提高传输的速度和数据量;

    构建网络服务,要提速,要保证稳定,就要承认以下几点:

    1. 一台计算机的能力是有限的,只要是符合冯诺依曼体系的计算机,总是存在着IO瓶颈,只要是计算机,就会被CPU限制;这两个内容产生了一个短板效应;他们中的短板决定了一台计算机的性能;
    2. 在一个处理链中,性能最差的那部分服务是整个系统的短板,如果从输入内容到获取处理结果要经过A-B-C三个服务,即使A和B能以ms级别的时间处理完成,C要花几分钟,那么最后获取内容的总耗时就会是几分钟而不是几毫秒;
    3. 在一个处理链中,如果A-B-C均以几毫秒的速度完成任务,但是传输过程消耗了好几分钟,那么最后用户获取数据耗时也是好几分钟而不是几个毫秒;
    4. 一台计算机中的应用,不可能接受无限制数量的请求;它能接受的请求数量总是有一个上限的,例如mysql默认的连接数量是150个;tomcat默认的连接数量是150个;

    基于这几个限制,我们,不可能奢求把天河二号超级计算机租来当服务器,也不可能奢求给每一个用户搭建直连专线;因此,分布式应用应运而生,一个计算机是有极限的,那么我就打群架,让多个计算机一起来处理;既然传输速度会影响最终的结果,那么我就花心思在能降低传输消耗的地方降低消耗;

    基于这个想法,各种缓存,服务器,中间件应运而生;