分布式是一种思想,旨在将原本的单节点应用分布到不同的服务器节点,以求获得更大的运算能力和更高的性能代备案分布式操作系统。分布式操作系统,Java大型互联网架构-如何正常掌握分布式系统的大部分技术(技术先进的java分布式)分布式技术太广了,涉及到将多个服务器的CPU,内存硬盘等组成一个统一的整体,而服务,计算分布在不同的服务器上,服务之间的通信,分布式之后的全局唯一性,数据一致性,分布式事务等等,每一项可以说在实际工作中都会有大量的坑,不经历过很难明白,下面是我的粗浅理解:分布式存储:数据库:数据库的主从复制,读写分离,分库分表这些东西,都是通过数据分布在不同的节点,以实现数据查询与修改的更高的效率,同时防止数据在单一节点上因为某些原因的丢失,推荐自己搭建mysql主从,使用spring aop代码开发或者组件搭建读写分离,使用mycat等组件实现分库分表!文件:分布式文件存储系统,有HDFS和Gluster等大型的系统,提供更好的容错性和扩展能力!分布式服务:对外提供高度内聚,透明,内部灵活,分散的服务集群!前后端分离:将前后端的服务拆分在不同的集群中,以保证前后端技术架构上的分离,使用node.js部署前端服务,与用户进行交互,后台通过某种通信协议,提供动态数据给前端调用!后端微服务:以单独业务为导向,建立起细粒度的服务,同时服务之间通过服务发现组件进行通信,在用的springcloud还不错,集成了网关,熔断器,负载均衡等,可以进行快速的搭建!服务之间的通信通常有服务暴露直接调用(zk.eureka等服务注册与发现),异步消息传输(kafka等消息队列)!分布式缓存:缓存通常是内存型缓存,可以用来快速的存取数据,减少数据库的压力!分布式缓存通常使用主从复制,高可用方式搭建起集群,提高整个缓存系统的容纳能力,也避免单一缓存节点宕机对整个服务的影响,用的较多的是redis集群(基于redis的集群搭建,请参考:///question/6493663252021510414/) redis缓存还因为单线程模型,可以用来做分布式锁实现!分布式计算:将一些大型的计算,使用策略分布到不同的机器上,然后汇总得到计算结果,一般使用map-reduce模型,hadoop,spark等都是成熟而且大规模使用的框架!分布式技术并没有严格分类,技术也五花八门,作为一个程序员只能是每天不断的学习才能得以入门,每个人的学习能力,领悟到的东西也有不同,今天就写这么多,更多的技术分享,敬请关注。。。高可用性确实是分布式系统一项重要的指标,跟数据一致性,分区容错性组成了分布式系统的CAP原则,本文只针对高可用性分析如下:高可用性:High Availability,保证分布式系统在较长的时间内能正常响应,持续可用,业界常用几个9的说法来说明高可用性,比如说5个9,就是99.999%,全年只能停机几十分钟而已!毫无疑问,单点的系统是无论如何也不可能实现高可用的,因为受到单点故障,服务发布,网络延迟等原因,客户端总会接收不到响应,即服务不可用!比如数据库常用的集群手段有:1,主从复制,读写分离:不能做到高可用,如果主机挂了,整个系统的写功能就不能用了!2,分库分表:不能做到高可用,分库分表是把所有的数据分布到了很多的分库中,其中一个分库挂了,这部分数据就没了!3,双主互备:可以做到高可用,双主机数据一致,能动态切换主库,其中一台坏了,另一台可提供使用!双主互备得到的集群虽然实现了高可用,由于双机数据一致,限制了整个集群的容量!分布式服务的高可用更加的复杂,因为分布式系统对外是一个整体,换句话说分布式的高可用需要保证分布式系统中包括应用系统,数据库,缓存系统,消息组件等所有服务的高可用性!高可用性的解决方法一般来说比较单一,包括数据冗余,故障熔断,服务转移!数据冗余保证在任何时候最新的数据都不丢失,多份数据冗余也为后期的数据还原提供基础!故障熔断,服务转移保证单个服务不可用时,使用熔断防止服务不可用影响别的服务,并使用最新的健康服务以替换!针对应用系统的单点,一定要压测出最大的容纳能力,同时可以使用负载均衡的方式搭建集群,服务还应该设计为幂等的,防止数据一致性问题!高可用性解决方案貌似除了堆机器,没有更好的办法,不知道大家有什么手段,写出来让大家学习学习!