分布式、高并发、多线程的理解

229 阅读2分钟

当提起到这三个名词的时候,很多人认为分布式=高并发=多线程。

当面试官问到高并发系统采取哪些手段来解决,或者被问到分布式系统数据一致性的问题?

这三者相伴而生的,但侧重点不一样。

什么是分布式?

分布式更多的是一个概念,是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段。

在不同的层面上,包括了分布式文件系统、分布式缓存、分布式数据库、分布式计算等等,名词:Hadoop、Zookeeper、MQ等都跟分布式有关。

从理念上讲,分布式的实现有两种:

  • 水平扩展:当一台机器扛不住流量时,就通过添加机器的方式,将流量平分到所有的服务器上,所有的服务器都可以提供相当的服务。
  • 垂直拆分:前端有多种查询需求时,一台机器扛不住,可以将不同的需求分发到不同的机器上,比如A机器处理查询余票请求,B机器处理支付的请求。

什么是高并发?

相对于分布式来讲,高并发在解决的问题上会集中一些,其反应的同时有多少量:比如在线直播服务,同时有上万人观看。

高并发可以通过分布式技术去解决,将并发流量分布到不同的物理机器上。

但除此之外还有很多其他优化手段:比如使用缓存系统,将所有的,静态内容放到CDN等;还可以使用使用多线程技术将一台服务器的服务能力最大化。

什么是多线程?

多线程是指从软件或者硬件上实现多个线程并发执行的技术,更多的是解决CPU调度多个进程的问题,从而看上去是同时执行(实际是交替运行的)。

多线程解决的问题是最明确的,手段也比较单一,基本上遇到的问题就是线程安全。

在基于理解JVM内存模型、指令重排等,才能写出一份高质量的多线程代码。

总结:

  • 分布式是从物理资源的角度去将不同的机器组成一个整体对外服务的系统,技术范围非常广且技术难度大,有了这个基础,高并发、高吞吐等系统非常容易构建;
  • 高并发是从业务角度去描述系统的能力,实现高并发的手段采用分布式,也可以采用诸如缓存、CDN等,当然也包括多线程。
  • 多线程则聚焦于如何使用编程语言将cpu调度能力最大化。