什么是分布式系统

A distributed system is de ned as a software system that is composed of independent computing entities linked together by a computer network whose components communicate and coordinate with each other to achieve a common goal.
分布式系统是由独立的计算机通过网络连接在一起,并且通过一些组件来相互交流和协作来完成一个共同的目标。

分布式系统背景

要想彻底了解分布式系统,就要晓得为什么要有分布式系统,它出现的意义是什么?它带来了什么好处或者它帮我们解决了什么问题?

说分布式系统必须要说集中式系统,集中式系统中整个项目就是一个独立的应用,整个应用也就是整个项目,所有的东西都在一个应用里面。

如下图所示
集中式服务
如一个网站就是一个应用,最后是多个增加多台服务器或者多个容器来达到负载均衡的避免单点故障的目的,当然,数据库是可以分开部署的。

集中式很明显的优点就是开发测试运维会比较方便,不用为考虑复杂的分布式环境。

集中式很明显的弊端就是不易扩展,每次更新都必须更新所有的应用。而且,一个有问题意味着所有的应用都有问题。当系统越来越大,集中式将是系统最大的瓶颈。

什么是分布式系统

分布式系统是若干独立计算机的集合,这计算机对用户来说就像单个相关系统。

也就是说分布式系统背后是由一系列的计算机组成的,但用户感知不到背后的逻辑,就像访问单个计算机一样。

分布式应用可以在给定时间(同时)在网络中的多个系统上运行,通过协调它们以快速有效的方式完成特定的任务。

通常来说,对于复杂而耗时的任务,非分布式应用(运行在单个系统中)需要几个小时才能完成,而分布式应用通过使用所有系统涉及的计算能力可以在几分钟内完成。

通过将分布式应用配置为在更多系统上运行,可以进一步减少完成任务的时间。分布式应用正在运行的一组系统称为集群,而在集群中运行的每台机器被称为节点

我们可以来简单看下分布式系统图。

分布式系统图

分布式系统利弊

在分布式系统中:

  1. 应用可以按业务类型拆分成多个应用,再按结构分成接口层,服务层;我们也可以按访问入口分,如移动端,PC端等定义不同的接口应用;
  2. 数据库可以按业务类型拆分成多个实例,还可以对单表进行分库分表;
  3. 增加分布式缓存,搜索,文件,消息队列,非关系型数据库等中间件;

很明显,分布式系统可以解决集中式不便扩展的弊端,我们可以很方便的在任何一个环节扩展应用,就算一个应用出现问题也不会影响到别的应用。

随着微服务Spring Cloud & Docker的大热,及国内开源分布式Dubbo框架的重生,分布式技术发展非常迅速。

分布式系统虽好,也带来了系统的复杂性,如分布式事务、分布式锁、分布式session、数据一致性等都是现在分布式系统中需要解决的难题,虽然已经有很多成熟的方案,但都不完美。分布式系统也增加了开发测试运维成本,工作量增加,分布式系统管理不好反而会变成一种负担。

分布式应用的优点

  • 可靠性 - 单个或几个系统的故障不会使整个系统出现故障。
  • 可扩展性 - 可以在需要时增加性能,通过添加更多机器,在应用程序配置中进行微小的更改,而不会有停机时间
  • 透明性 - 隐藏系统的复杂性,并将其显示为单个实体/应用程序。

分布式应用的挑战

  • 竞争条件 - 两个或多个机器尝试执行特定任务,实际上只需要在任意给定时间由单个机器完成。例如,共享资源只能在任意给定时间由单个机器修改。
  • 死锁 - 两个或多个操作等待彼此无限期完成。
  • 不一致 - 数据的部分失败。

想要更好的判断是否为好的分布式系统,可以看这些特性:

  • 资源共享 - 例如存储空间,计算能力,数据,和服务等等
  • 扩展性 - 从软件和硬件上增加系统的规模
  • 并发性 - 多个用户同时访问
  • 性能 - 确保当负载增加的时候,系统想要时间不会有影响
  • 容错性 - 尽管一些组件暂时不可用了,整个系统仍然是可用的
  • API抽象 - 系统的独立组件对用户隐藏,仅仅暴露服务

分布式系统的难点

可以想象,假如一台计算机的出错概率为0.1%,那么1000台服务器的出错率呢?一旦计算机数量增多,出错的概率就大大的增加。

1.多个相互独立的计算机,假设集群的配置信息在某个Master节点上,其余的节点从Master节点下载配置信息。假如Master节点挂了呢?假设Master节点是故障冗余的,但是配置信息是动态的传递给所有的其余节点的,而不是直接传过去。所有节点之间的信息如何保证一致。

2.服务发现的问题,为了增加系统的可靠性,我们一般会在系统中增加更多的服务器。让其它机器知道新加入的节点在集群中的关系和服务,这个设计也需要非常周到的考虑。

3.机器数目众多,更容易出现机器故障,软件奔溃,网络延迟,拓扑改变等等,而这些类型的错误没有规律可循,因此在分布式系统,想实现高容错性是很难的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值