`

《大规模分布式系统架构与设计实战》图书上市

阅读更多
感谢java图书出版权威机械工业出版社出版了《大规模分布式系统架构与设计实战》一书,该书相对于技术博客和指南更加详细完整的介绍了fourinone的设计思想和架构原理,收集了众多典型示例并附有大量图示步骤,手把手教你掌握分布式核心技术。
详细参见:http://product.china-pub.com/3769476#con_a_1

前言
在大数据、云计算如火如荼的今天,各类技术产品顺应潮流层出不穷。大家是不是有这种感觉:Hadoop还没学完,Storm就来了;Storm刚学会安装配置,Spark、Hama、Yarn等又一起出现了;同时国内外各大云平台厂商,如Google、亚马逊、阿里云等,还在推各自应用开发平台……要学习的东西太多了,就是这样疲于奔命地学,刚学会了某个产品的安装配置与开发步骤,没多久它又过时了。
  这么多千姿百态的分布式技术和产品背后有没有某些共性的东西呢?能让我们换了马甲还能认出它,让我们超越学习每个产品的“安装配置开发”而掌握背后的精髓呢?有没有可能学一反三,学一招应万招,牢牢掌握好技术的船舵,穿越一次次颠覆性的技术浪潮?本书的目的就是为你揭示分布式技术的核心内幕,透彻理解其精髓,站在浪潮之巅。
  因此,这不是一本讲如何使用Hadoop的书,而是一本讲实现Hadoop功能的书,是一本讲如何简化实现分布式技术核心功能的书。这不是一本空谈概念、四处摘抄的书,而是来源于作者十多年来在私企、港企、外包、创业、淘宝、华为等企业打拼,从底层程序员一路走到首席架构师的实战经验总结。绝技源于江湖,将军发于卒伍,这本书讲的是你在课本上学不到核心技术,无论你是在中国什么样的IT企业做什么样的分布式应用,这本书对你都具备参考性。
  本书面向千千万万战斗在一线攻城拔寨的程序员、工程师们,你可以有很多基础,也可以从头开始,只要你树立理想,并下决心改变自己。本书尽量做到深入浅出和通俗易懂,希望帮助你降低分布式技术的学习成本,帮助你更容易完成工作任务,更轻松地挣钱。
  本书根据分布式技术的主要应用,分别介绍分布式并行计算的基本概念、分布式协调、分布式缓存、消息队列、分布式文件系统、分布式作业调度平台等,详细阐述分布式各技术的架构原理和实现方式,并附带大量示例,便于读者实际操作运行。基于本书原理,作者用Java实现并开源了Fourinone框架,这是一个高效的分布式系统,归纳在150KB源码里,代码不到1万行,让你能够轻松掌握。学习开发核心技术的诀窍是多动手,建议读者运行本书附带的大量DEMO,在运行后细细体会分布式的理论,进行反思和总结。本书归纳的设计思想和算法不局限于某个框架,读者领会后可以用任何语言来实现自己的分布式系统。
  本书各章有一定的独立性,阅读本书的方式比较自由,可以从头开始,也可以随性翻阅。从第2章开始,每章都有理论部分与示例,读者可以先运行DEMO,不清楚的地方再回看原理;也可以先看原理,再运行DEMO加深理解。由于时间的限制,且本书写作的时期是在作者最为忙碌和事业的转折时期,匆忙中,难免出错,请朋友们海涵,并提出意见以便于今后纠正。最后感谢机械出版社华章公司所有幕后编辑的大量工作,感谢所给予我帮助与支持的领导和朋友。
  本书所有源码附带在光盘里。你也可以登录开源地址下载,开源地址:http://code.google.com/p/fourinone
  作者联系方式:邮箱:Fourinone@yeah.net
  Q群1:1313859
  Q群2:241116021
  Q群3:23321760
分享到:
评论
6 楼 fourinone 2014-10-30  
xurping 写道
对于书中的领导者谦让选举算法不是很明白,就3台机器初始运行,主服务器当掉,剩下两台A、B服务器如何选举出新的主服务器问题如下:
=========================完整疑问推理

既然形象比喻为谦让,A和B是要按资排辈的,不会抢着做头,而是会由资格老点的A询问是否有人做头,B谦让。局长不在了,并不是所有副局都是一样资格的,内部排名是有先后的。有人问,既然按资格轮做,那为什么A还要明知故问呢。这是因为政治的复杂性,和现实一样,高层有可能直接提拔第三把做领导,而弃用第二把。分布式环境一样复杂,特殊情况下,B已经是头了,A就算资格更老,也只能谦让。
可以结合程序试试,配置一主两备3个ParkServer,然后把主关掉,绝对不会产生两个领导。
5 楼 xurping 2014-10-30  
对于书中的领导者谦让选举算法不是很明白,就3台机器初始运行,主服务器当掉,剩下两台A、B服务器如何选举出新的主服务器问题如下:
=========================完整疑问推理===========================================
1)  A,B “同时”向对方询问“我做头?”,同时标记自己为“头”,
        1.1) A请求到达B,B告诉A,我已经是头,A谦让,好的,同意B是头;
        1.2) B请求到达A,A告诉B,我已经是头,B谦让,好的,同意A是头;
        1.3) 出现A、B都是头
2)  A,B “同时” 向对方询问“我做头?”,同时不标记自己为“头",
        1.1) A请求到达B,B发现自己不是头,谦让,同意A做头;
        1.2) B请求到达A,A发现自己不是头,谦让,同意B做头;
        1.3) 出现A、B都是头
3)  A,B “同时” 向对方询问“我做头?”,同时标记自己想做“头",
        1.1) A请求到达B,B发现自己也想做头,如何谦让?
        1.2) B请求到达A,A发现自己也想做头,如何谦让?
        1.3) 无论谦让对方做头还是确认自己做头,都会出现A、B都是头
这里的 “同时” 不一定是严格意义上的时间相等概念,在分布式系统中,只要A、B分别在收到对方的“我做头?”请求前,发出了自身的“我做头?”请求,就可以认为是“同时”发出了
==================================================================================
4 楼 fourinone 2014-03-26  
abirdman 写道
通过跟踪代码,第1个问题找到了,是工人服务器问题,有一个工人能注册但不能连上,过了很长时间报“拒绝连接”,导致整体上表现很慢,关掉这个工人机就没事了。
第2个问题也找到解决方案了,查了作者写的这本书,里面写到了心跳时间和抢救时间,默认的抢救时间为0(不抢救)。我们虾米没看书就不懂里面的奥秘,建议官方还是设个默认抢救时间。我现在设了抢救时间,后期看效果。


主要是你的计算太繁忙工人没空和职介所保持联系,最简单的办法把心跳时间调长点就可以了。
3 楼 abirdman 2014-03-26  
通过跟踪代码,第1个问题找到了,是工人服务器问题,有一个工人能注册但不能连上,过了很长时间报“拒绝连接”,导致整体上表现很慢,关掉这个工人机就没事了。
第2个问题也找到解决方案了,查了作者写的这本书,里面写到了心跳时间和抢救时间,默认的抢救时间为0(不抢救)。我们虾米没看书就不懂里面的奥秘,建议官方还是设个默认抢救时间。我现在设了抢救时间,后期看效果。
2 楼 abirdman 2014-03-25  
补充下上面说的第2点,那几个不能获取到的工人计算机,进程还在运行,我把进程杀掉,重运行工人程序,就可以被协同服务器获取了。
1 楼 abirdman 2014-03-25  
碰到两个诡异的问题,不知道有人碰到过没有
1. 我在工头类的giveTask里去得到工人,用的getWaitingWorkers方法,当工人不多时很快,当工人计算机开了10来个,这个方法要过很长时间才返回,代码如下:
    public WareHouse giveTask(WareHouse inhouse){
        long t1 = System.currentTimeMillis();
        /**
         * 工头在人才交流中心得到想要的工种的工人
         */
        WorkerLocal[] wks = getWaitingWorkers("daylaborer");
        System.out.println("得到临时工费时:"+(System.currentTimeMillis() - t1));
        System.out.println("得到临时工个数:"+wks.length);
        ... 
        ...
    }

服务器打印的结果:
2014-03-20 15:49:05,318 INFO  [STDOUT] (http-0.0.0.0-8180-8) 得到临时工费时:192542
2014-03-20 15:49:05,318 INFO  [STDOUT] (http-0.0.0.0-8180-8) 得到临时工个数:16
不知道getWaitingWorkers获取工人是不是一个个的去轮询的,因为我开一个工人会很快,开3个会慢一点,开的越多就越长时间才能返回,开16个时就难以忍受的超过3分钟。

2. 当第1天我开好协同服务器和16个工人计算机后,第2天发现只能获得13个工人,有3个工人无法获取。但是我登录到那3个不能获取的工人计算机,用ps命令发现工人的进程还在运行。再过一天又会少几个工人,但工人进程还在。

相关推荐

Global site tag (gtag.js) - Google Analytics