第1章 分布式Java应用
大型应用通常会拆分为多个子系统来实现,对于Java来说,这些子系统可能部署在同一台机器的多个不同的JVM中,也可能部署在不同的机器上,但这些子系统又不是完全独立的,要相互通信来共同实现业务功能,对于此类Java应用,我们称之为分布式Java应用。
Martin Fowler在《企业应用架构模式》一书中曾经说过:“能不用分布式的情况下就不要用分布式”,当应用变为分布式Java应用时,会很大程度地增加应用实现的技术复杂度,对于分布式Java应用,通常有两种典型的方法来实现。
1.基于消息方式实现系统间的通信
当系统之间要通信时,就向外发送消息,消息可以是字节流、字节数组,甚至是Java对象,其他系统接收到消息后则进行相应的业务处理。
消息方式的系统间通信,通常基于网络协议来实现,常用的实现系统间通信的协议有:TCP/IP和UDP/IP。
TCP/IP是一种可靠的网络数据传输的协议。TCP/IP要求通信双方首先建立连接,之后再进行数据的传输。TCP/IP负责保证数据传输的可靠性,包括数据的可到达、数据到达的顺序等,但由于TCP/IP需要保证连接及数据传输的可靠,因此可能会牺牲一些性能。
UDP/IP是一种不保证数据一定到达的网络数据传输协议。UDP/IP并不直接给通信的双方建立连接,而是发送到网络上进行传递。由于UDP/IP不建立连接,并且不能保证数据传输的可靠,因此性能上表现相对较好,但可能会出现数据丢失以及数据乱序的现象。
展开
——人间网创始人,CTO 曹晓钢
在概念满天飞的浮躁时代,林昊以朴实的文字和扎实的基础,由浅入深介绍分布式应用设计开发的架构和技术细节?在豆瓣正向SOA转型的节骨眼儿得到这样一本书,真是恰逢甘霖。
——豆瓣架构师 洪强宁
本书不仅深入分析了大规模Java系统间通讯、SOA架构、集群、可伸缩和高可用性系统,还有难得一见的JVM内幕分析和对CPU、IO、内存的性能调优实践,对开发高性能系统相当有帮助。
——搜狐工程师 邓正平
本书详述了构建大型分布式Java应用的相关知识与应用场景,使用大量代码进行实例分析,对构建高可用系统帮助很大,遗憾的是对系统架构集成等方面的影响未做更深入的讨论。
——网易杭州研究院工程师 尧飘海
在互联网领域,性能调优、分布式、高可用、可伸缩等总是困扰着大家,少有高手分享实战经验,一书难求。这本书系统分析了上述典型问题,并给出了多种解决方案和扩展阅读,着实让我过了一把瘾。期待着林昊今后还能在系统层面和原理层面做更深入的分享。
——中国移动数据业务运营中心门户技术部经理 朱岩
国内大部分Java工程师了解的知识面都偏向于SSH、MVVC框架等,精通高访问量托并发应用的Java技术人员奇缺。本书讲到的构建可伸缩系统章节非常实用,不少方法我们也正在使用。书中对性能调优的介绍也非常专业和深入,对于大型系统的调优具有极大的参考价值。
——新浪架构师 杨卫华
对于大型分布式应用和性能,很多书或陷入细节,或流于空谈,本书则把细节、架构、底层、应用平衡得很好,技术功底之外,更有写作的诚意、,若语言能更生动一些,可读性会更好。
——瑞友科技(原用友软件工程公司)IT应用研究院副院长 池建强
Java类图书,汗牛充栋,有关分布式高可用系统架的书却很稀少,本书填补了这方面的空白。即便是非Java类开发者,也能从中学到大型分布式高可用系统的设计方法和思路。
——上海盛大网络发展有限公司 技术保障中心总监资深研究员 陈桂新
对每一个新的知识点,作者都列出了很多链接,供读者进一步学习。期待这本书让更多人受益。
——上海赢思软件技术有限公司资深系统/网络安全架构师 陈成才