为什么学习分布式?答:自我技能提升、遇到具体的业务场景有更多的解决思路;
如何系统的学习分布式?答:从实际问题中学习、引伸出知识点、由点及面、学习一些经典的分布式系统案例、以输出倒逼输入(以写博客倒逼学习);
什么是分布式系统?
Web集群是不是?Redis集群是不是(通过Redis客户端做一致性Hash)?
实践当中是遇到了什么问题才引出分布式这个概念?什么情况适用于分布式?不用分布式行不行、有什么可替代方案?
单机的硬件配置是有上限的,当计算量大到一定程度时,通过提升单机硬件配置已经不能很好的提升处理效率时,就需要分而治之,将大计算量的任务切分成若干个小任务、这些小任务被分到多台机器上执行、最后将多台机器的执行结果进行合并;分布式的目标是为了提升效率吗?
分布式解决了效率问题后,又带来了哪些新的问题?如何拆分、拆分成几个执行单元比较合适、执行单元之间如何分配任务、如何将不同执行单元的结果合并起来、一个执行单元出故障如何保证整体结果的正确?
如何拆分?原来一个业务系统负责商品列表展示、商品详情展示、用户下单、支付、订单详情展示、退款一整套操作,但是当用户访问量大到一定程度时,我们需要将应用由单机变为集群,但是当访问量再大到一定程度时,增加集群机器量已经不能很好的解决问题,什么问题?比如,商品列表的请求量是其它接口请求量的几十倍,单机的大部分资源(线程、CPU等)都消耗在商品列表接口上,而后续下单等接口却在排队等待,这便降低了系统的吞吐量,这个时候我们需要将商品列表接口与下单流程拆分开来,一部分机器处理商品列表展示、一部分机器处理下单流程,将整个业务流程拆分的过程便是分布式,我们是以整个系统吞吐量的角度进行拆分,同样我们可以将整个系统拆分成商品相关、用户相关、促销相关、下单相关、支付相关等服务;
如何进行请求的路由?通过请求URL进行路由,比如list接口请求商品列表机器、order接口请求下单机器,通过nginx等一些反向代理便可以做到;如何避免单机请求量过大,可以设置路由策略,比如hash、均分;
如果下单服务的一台机器故障了(比如磁盘问题),如何保证整个系统的可用性?将下单服务单元部署成集群,一台机器故障通过路由策略将请求打到正常的机器上;那么如果每台机器都维护了订单的状态,我们如何保证不同机器状态的一致性呢?我们在写入某一机器的同时、同步更新集群中其它的机器;但是同步的过程是需要时间的,如何保证系统的快速响应?
这就引出了分布式系统中的一个经典理论:CAP;
学习分布式有什么用?在实际场景中如何使用?
从哪里来
是什么
到哪里去
https://www.zhihu.com/question/23645117 http://www.cnblogs.com/xybaby/tag/distributed%20system/ http://kabike.iteye.com/blog/2168852 https://www.cnblogs.com/captainlucky/p/4720986.html https://blog.csdn.net/lxf310/article/details/22398655 http://www.yunweipai.com/archives/17357.html