基础概念
概述
本书主要讲解的是关于 Java 在分布式系统中的应用。本书的读者假设都具备了 Java 的基础知识。
如果你需要了解有关 Java 基础知识,可以参阅笔者的另外一本开源书《Java 编程要点》。
分布式系统的概念
《分布式系统原理与范型》一书中是这样定义分布式系统的:
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像是单个相关系统。
这里面包含了2个含义:
- 硬件独立:计算机机器本身是独立的
- 软件统一:对于用户来说,他们就像是跟单个系统打交道
分布式系统的扩展和升级都比较容易。分布式系统某些节点故障,不影响整理可用。用户和应用程序交互时,不会察觉哪些部分正在替换或者维修,也不会感知到新部分的加入。
万维网就是一个分布式文档模型的简单例子。要查看某个文档,用户只需要电机相关的链接即可,文档就会呈现在屏幕上。用户无需关心文档是位于哪个位置,是由什么服务器处理。概念上讲 Web 看起来就是一个单独的服务器。而实际上,Web 在物理上是分布到非常多的服务器上的。
如何设计分布式系统
设计分布式系统的本质就是
“如何合理将一个系统拆分成多个子系统部署到不同机器上”
分布式系统的设计应考虑以下几个问题:
- 系统如何拆分为子系统?
- 如何规划子系统间的通信?
- 如何让子系统可以扩展?
- 通信过程中的安全如何考虑?
- 子系统的可靠性如何保证?
- 数据的一致性是如何实现的?
本书就是针对分布式系统中常见的问题进行探讨。
Java 分布式系统
上面讲到的都是分布式系统的通用的概念,那么采用 Java 来实现分布式系统有什么好处呢?
- Java 编程语言是一种通用的、并行的、基于类的、面向对象的语言。它被设计得非常简单,这样程序员可以在该语言上流畅的交流。Java 编程语言与 C 和 C++ 有关联,但组织却截然不同,其中也省略了其他语言的一些用法,比如指针。它的目的是作为一个生产性语言,而不是一个研究性语言,因此,在设计上避免了包括新的和未经考验的功能。更多可以参考《Java 编程要点》。
- Java 天然支持分布式应用。
- Java 分布式系统应用广泛,且久经考验,很多大公司比如 Amazon,Linkedin,阿里巴巴等都提供了很多 Java 分布式系统技术方案。
- Java 拥有丰富的中间件框架,避免了很多底层编码的复杂性,帮助你站在巨人的肩膀上。
本书所讲的示例、代码也是基于 Java 语言或者 Java 框架。