分布式系统的由来
软件系统的架构一直以来随着技术的发展和市场的需求进行着不断的演进。最初,各行业业务相对比较简单,对系统的要求也不高,软件系统的架构均采用单一应用架构,此时单台服务器即可满足系统的要求。
之后,随着业务的发展,对系统的要求不断提升,单台服务器已经无法满足系统各方面的要求,最初只能使用横向扩展的方式进行处理,部署另外一台一样的服务器来均摊压力,即使用集群方式扩展。集群可保证两台或者更多服务器拥有同样的能力来分摊系统压力,但也造成了服务器资源的浪费,因为系统的压力可能只来自于某个模块,但集群部署时需要部署整个系统。
随着互联网的爆发,各个领域对于系统的依赖度和要求也水涨船高,集群虽然可以完成压力的分摊,但随着集群规模的扩大,资源浪费也越来越大,而且出现单台服务器无法支撑系统功能的情况,此时便需要多台服务器协作来完成此功能,也就是我们平时说的分布式系统。
与集群的区别
分布式与集群的目标是一致的,都是使用多台服务器来分摊系统压力,都有众人拾柴火焰高的意思。区别在于,集群是多台服务器一起干一件事,可以比作所有人都在拾柴点火;分布式是多台服务器协作完成一件事,可以比作有的人砍柴,有的人运柴火,有的人点火;关键点在于集群中所有服务器提供的服务一样,分摊压力,而分布式系统中每台服务器提供不一样的服务,多点协作。
集群演示如下:
集群演示图
分布式演示如下:
分布式演示图
优点
增加可靠性和可维护性
分布式系统各模块之间耦合程度较低,一台服务器出现问题不至于整个系统崩溃,进行故障处理时可只针对需要改变的模块,其他模块不受影响
提升扩展性
分布式系统可根据需求增加某个服务的服务节点,相较于单一应用架构的集群扩展,分布式系统的扩展更灵活、更便捷。
提升系统性能
分布式系统可利用多台服务器的资源处理同一问题,性能更好,而且相较于单一应用来说,分布式系统的各模块之间不会出现相互抢占硬件资源的问题
缺点
网络设施要求高
分布式系统各模块之间的交互是通过网络来进行的,意味着各模块的功能能否正常运行不仅仅取决于模块是否可运行,还需要看网络是否正常,所以分布式系统对网络设施要求比较高
调试难度大
分布式系统的功能使用多台服务器进行处理,相对于单一应用架构,如果出现问题,调试难度要增加不少
运维难度大
传统的单一应用架构服务器或容器使用较少,且对网络依赖程度低,而分布式架构服务器更多、对网络依赖程度更高,运维过程中问题相对于单一架构来讲更多且更复杂。
适用范围
如果系统包含一下某个情况则需要考虑使用分布式架构
根本性的一点,系统对硬件资源要求非常高,单台服务器无法满足某个模块的要求。
系统需要灵活的扩容,且不影响现有业务进行
系统要求较高的可维护性及可用性,更新某个服务时不能影响其他服务运行
使用集群进行扩展时规模较大,成本高于采用分布式
较多情况下,系统要求逼格高!!!国内挺多客户认这一套,不用分布式招标拿不到,这种情况还是可以考虑使用分布式