提到这三个词,很多人是不是觉得分布式=高并发=多线程?当面试官问到高并发系统可以用什么方法解决,或者被问到分布式系统怎么解决一致性问题时,你会不会感到迷茫?确实,在刚开始接触的时候,很多人都会把三者搞混,误以为所谓的分布式高并发系统是可以被大量用户同时访问的,而multi-线程意味着它可以提供系统的并发能力?其实他们三个一直都是互相陪伴的,只是侧重点不同罢了。什么是分布式?分布式更多的是一个概念,是为了解决单个物理服务器的容量和性能瓶颈而采用的一种优化方法。这个领域有很多问题需要解决。在不同的技术层次上,还包括:分布式文件系统、分布式缓存、分布式数据库、分布式计算等。一些术语如Hadoop、zookeeper、MQ等都与分布式相关。从概念上讲,分布式实现有两种形式:水平扩展:当一台机器无法处理流量时,通过增加机器将流量平均分配给所有服务器,所有机器都可以提供同等的服务;垂直拆分:当前端有多个查询需求,一台机器处理不了,可以把不同的需求分发到不同的机器上。例如,机器A处理剩余票的查询请求,机器B处理支付请求。什么是高并发?与分布式相比,高并发会专注于解决问题,同时体现的是量:比如在线直播服务,几万人同时观看。高并发可以通过分布式技术解决,让并发流量不分流到不同的物理服务器。但除此之外,还有很多其他的优化方式:比如使用缓存系统,将所有静态内容放到CDN上等等;您还可以使用多线程技术来最大化服务器的服务能力。什么是多线程?多线程是指从软件或硬件上并发执行多个线程的技术。更多的是解决CPU调度多个进程的问题,让这些进程看起来是同时执行的(实际上是交替进行中)。在这些概念中,多线程解决的问题最为明确,手段也比较简单。基本上,遇到的最大问题就是线程安全。在JAVA语言中,需要对JVM内存模型、指令重排等有深刻的理解,才能写出高质量的多线程代码。总结一下:分布式就是从物理资源的角度,把不同的机器组成一个整体对外的服务。技术范围很容易掌握,难度也很大。有了这个基础,就很容易构建出高并发、高吞吐量的系统;高并发是从业务角度描述系统的能力,实现高并发的手段可以有分布式、缓存、CDN等,当然也包括多线程;多线程着重于如何利用编程语言最大限度地改变CPU的调度能力。分布式和高并发系统涉及到大量的概念和知识点。如果没有系统的学习,很容易概念混淆不清,在面试和实际工作中遇到困难。
