本书介绍分布式 Java应用涉及的知识点,分为基于 Java实现网络通信、 RPC;基于 SOA实现大型分布式 Java应用;编写高性能 Java应用;构建高可用、可伸缩的系统 4个部分,共 7章内容。作者结合自己在淘宝网的实际工作经验展开论述,既可作供初学者学习,也可供同行参考。
这本书填补了国内技术图书在构建分布式Java应用领域的空白,林昊在书中总结了在自学和工作实践中积累的实践经验,分享给广大Java程序员。台湾架构大师高焕堂、《程序员》总编孟岩、Ajaxcn.org网站站长李锟看过本书目录后,都极力推荐我们出版。
软件系统得到用户认可后,访问量通常会产生爆发性的增长,互联网网站,例如淘宝、豆瓣等更是如此。在不断完善功能和多元化发展的同时,如何应对不断上涨的访问量、数据量是互联网应用面临的最大挑战。
对于用户而言,除了功能以外,网站访问够不够快,网站能否持续提供服务,也是影响用户访问量的重要因素,因此如何保证网站的高性能,及高可用也是我们要关注的重点。
为了支撑巨大的访问量和数据量,通常需要海量的机器,例如现在的google 已经拥有了百万台以上的机器,这些机器耗费了巨大的成本(硬件采购成本、机器的电力成本、网络带宽成本等)。网站规模越大,运维成本就越高,这意味着商业公司所能获得的利润越低,而通常这会导致商业公司必须从多种角度关注如何降低网站运维成本。
本书的目的是从以上几个问题出发,介绍搭建高性能、高可用以及可伸缩的分布式Java 应用所需的关键技术。
目标读者
本书涵盖了编写高性能、高可用以及可伸缩的分布式Java 应用所需的知识点,适合希望掌握这些知识点的读者。
在介绍各个知识点时,作者尽量结合自己的工作,分享经验与心得,希望能够对那些有相关工作经验的读者有所帮助。
内容导读
本书按照介绍的知识点分为五个部分:第一部分介绍基于Java 实现系统间交互的相关知识,这些知识在第1 章中进行介绍;第二部分为基于SOA 构建大型分布式Java 应用的知识点,这些在第2 章中介绍;第三部分为高性能Java 应用的相关知识,这些在第3、4、5 章中介绍;第四部分介绍高可用Java应用的相关知识,这些在第6 章中介绍;第五部分介绍可伸缩Java 应用,这些在第7 章介绍,读者也可根据自己的兴趣选择相应的章节进行阅读。
网站业务多元化的发展会带来多个系统之间的通信问题,因此如何基于Java 实现系统间的通信是首先要掌握的知识点,在本书的第1 章中介绍了如何基于Java 实现TCP/IP(BIO、NIO)、UDP/IP(BIO、NIO)的系统间通信、以及如何基于RMI、Webservice 实现系统间的调用,在基于这些技术实现系统间通信和系统间调用时,性能也是要考虑的重点因素,本章也讲解了如何实现高性能的网络通信。
在解决了系统之间的通信问题后,多元化的发展带来的另外一个问题是多个系统间出现了一些重复的业务逻辑,这就要将重复的业务逻辑抽象为一个系统。这样演变后,会出现多个系统,这些系统如何保持统一、标准的交互方式是要解决的问题,SOA 无疑是首选的方式,在本书的第2 章中介绍了如何基于SOA 来实现统一、标准的交互方式。
高性能是本书关注的重点,Java 程序均运行在JVM 之上,因此理解JVM 是理解高性能Java 程序所必须的。本书的第3 章以Sun Hotspot JVM 为例讲述了JVM 执行Java 代码的机制、内存管理的机制,以及多线程支持的机制。执行代码的机制包含了Sun hotspot 将Java 代码编译为class 文件,加载class文件到JVM 中,以解释方式执行class,以及client 模式和server 模式编译为机器码方式执行class 的实现方式;内存管理的机制包含了Sun hotspot 内存分配以及回收的机制,内存分配涉及的主要为堆上分配、TLAB 分配以及栈上分配。内存回收涉及的有常见的垃圾回收算法、Sun Hotspot JVM 中新生代可用的GC、旧生代可用的GC 及G1;多线程支持的机制包含了多线程时资源的同步机制,以及线程之
间交互的机制。
除 JVM 外,在编写分布式Java 应用时,通常要使用到一些Sun JDK 的类库。如何合理地根据需求来选择使用哪些类,以及这些类是如何实现的,是编写高性能、高可用的Java 应用必须掌握的。在本书的第4 章中介绍了Sun JDK中常用的集合包的集合类、并发包中的常用类(例如ConcurrentHashMap、ThreadPoolExecutor)、序列化/反序列化的实现方式,同时对这些类进行了基准的性能测试和对比。
掌握 JVM 和使用到的类库是编写高性能Java 应用的必备知识,但除了编写之外,通常还会面临对已有系统进行调优。调优是个非常复杂的过程,在本书的第5 章中介绍了寻找系统性能瓶颈的一些方法以及针对这些瓶颈常用的一些调优方法。寻找性能瓶颈的方法主要是根据系统资源的消耗寻找对应问题代码的方法,常用的一些调优方法主要是降低锁竞争、降低内存消耗等。
除了高性能外,高可用也是大型Java 应用要关注的重点,在本书的第6 章中介绍了一些构建高可用系统常用的方法,例如负载均衡技术、构建可容错的系统、对资源使用有限制的系统等。
在面对不断访问的访问量和数据量时,最希望能做到的是仅升级硬件或增加机器就可支撑,但要达到这个效果,在软件上必须付出巨大的努力。本书的第7 章介绍了构建可伸缩系统的一些常用方法,主要包括支持垂直伸缩时常用的降低锁竞争等方法;以及支持水平伸缩时常用的分布式缓存、分布式文件系统等方法。
可伸缩的系统 4个部分,福彩3D 共 7章内容。作者结合自己在淘宝网的幸运飞艇 实际工作经验展开论述,既可作供初学者学习,也可供同行参考。
纟