这是一个架构概念爆发的时代,是架构本身的复杂度已经开始超越业务逻辑本身的时代,同时也是越来越接近 DevOps 工作方式的时代。
并发的复杂性
本文谈到的并发是指单程序、单节点并发,区别于并发系统,并发系统的一个更加流行的词是分布式系统,并发系统更有可能是并行的,因为其中的多个程序一般可以同时在不同的硬件环境上运行。分布式系统可以看我另一篇文章《微服务架构的复杂性》。 并发指的是多个任务几乎被同时发起运行,但是在同一时刻这些任务不一定都处于运行状态,这取决于 CPU 核心或者 CPU 数量。并行指的是在同一时刻可以有多个任务真正地同时运行。并行运行的必要条件是多 CPU 核心或者多 CPU 的计算环境。 在功能开发中,非并发程序往往未能充分利用服务器的性能,为用户提供服务基本都是排队处理。而并发程序有时可以代替集群,其性能提高对整个系统是至关重要的作用,如果我们将单个节点的性能提高 30%,或者甚至超过 100%,那么我们可以节省多少台机器呢?不过同时并发却带来了编程的复杂性。不同程序单元之间的远程过程调用可以参考另一篇文章《go 网络编程》。Go 语言的特点是通过内部调度可以最大限度地利用单机的计算能力。然而在分布式计算方面,它本身其实并没有提供什么现成的东西,还需要使用一些第三方的框架或工具,或者自己编写和搭建。