基础概念

概述

本书主要讲解的是关于 Java 在分布式系统中的应用。本书的读者假设都具备了 Java 的基础知识。
如果你需要了解有关 Java 基础知识,可以参阅笔者的另外一本开源书《Java 编程要点》

分布式系统的概念

《分布式系统原理与范型》一书中是这样定义分布式系统的:

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。

这里面包含了2个含义:

  • 硬件独立:计算机机器本身是独立的
  • 软件统一:对于用户来说,他们就像是跟单个系统打交道

分布式系统的扩展和升级都比较容易。分布式系统某些节点故障,不影响整理可用。用户和应用程序交互时,不会察觉哪些部分正在替换或者维修,也不会感知到新部分的加入。

万维网就是一个分布式文档模型的简单例子。要查看某个文档,用户只需要电机相关的链接即可,文档就会呈现在屏幕上。用户无需关心文档是位于哪个位置,是由什么服务器处理。概念上讲 Web 看起来就是一个单独的服务器。而实际上,Web 在物理上是分布到非常多的服务器上的。

如何设计分布式系统

设计分布式系统的本质就是

“如何合理将一个系统拆分成多个子系统部署到不同机器上”

分布式系统的设计应考虑以下几个问题:

  • 系统如何拆分为子系统?
  • 如何规划子系统间的通信?
  • 如何让子系统可以扩展?
  • 通信过程中的安全如何考虑?
  • 子系统的可靠性如何保证?
  • 数据的一致性是如何实现的?

本书就是针对分布式系统中常见的问题进行探讨。

Java 分布式系统

上面讲到的都是分布式系统的通用的概念,那么采用 Java 来实现分布式系统有什么好处呢?

  • Java 编程语言是一种通用的、并行的、基于类的、面向对象的语言。它被设计得非常简单,这样程序员可以在该语言上流畅的交流。Java 编程语言与 C 和 C++ 有关联,但组织却截然不同,其中也省略了其他语言的一些用法,比如指针。它的目的是作为一个生产性语言,而不是一个研究性语言,因此,在设计上避免了包括新的和未经考验的功能。更多可以参考《Java 编程要点》
  • Java 天然支持分布式应用。
  • Java 分布式系统应用广泛,且久经考验,很多大公司比如 Amazon,Linkedin,阿里巴巴等都提供了很多 Java 分布式系统技术方案。
  • Java 拥有丰富的中间件框架,避免了很多底层编码的复杂性,帮助你站在巨人的肩膀上。

本书所讲的示例、代码也是基于 Java 语言或者 Java 框架。