分布式系统与一致性问题

43 篇文章 0 订阅

                                      分布式理解

 分布式这个概念这几年越来越火热,今天也来谈谈项目改造过程中对于分布式系统的理解,传统的应用是将所有的模块放在单体tomcat上运行,所以方法间的调用范围都是在同一个jvm内。这在业务初期时很有效的,毕竟业务初期开发资源、业务量都比较稀少,才用单体应用开发简单、部署快速,出现问题可以快速定位,而且因为运行在一个jvm内部,所以也不存在分布式系统所存在的一些问题,比如数据的一致性,session的共享等。单体应用虽好,但是随着业务的发展,单个tomcat所支撑的容量有效,这时候可能就需要多个tomcat来部署应用实例,这时候的应用架构可能需要一个同一个的入口来处理分发请求,软件方面可以考虑nginx,硬件方面可以考虑F5硬件,这里就不说用法了,有兴趣的可以自己搜索下。

随着业务越来越大,系统随之臃肿,可能一个业务逻辑的调用链很长,业务变更时,修改了某一个模块的代码,就需要将整个应用重新测试、部署。这时候就需要考虑将不同的业务模块拆分成不同的应用,随之而来也需要将原先的库拆分开来,业务的拆分粒度决定了单体服务粒度。这方面不细说。

当把原先的单体应用拆分成多个微小的服务模块,每个服务模块单独部署在一个容器内,这就构成了分布式。各个服务模块只负责自己的功能,单一职责。那么这时候就会遇到一系列问题,不同的服务模块之间怎么通信,通信格式是怎样的,一个业务逻辑的完成可能需要借助多个服务模块来完成,这多个服务模块之间的数据怎样保持一致性。涉及的问题很多,包含的技术也很多。

总结下

 1.什么是分布式?
      在一个操作中,需要多个系统之间配合才能完成的整个业务逻辑,叫做分布式系统。(个人理解)

 2.分布式拆分三步骤

  1.将你的整个整个应用视为一个系统(不管它有多复杂)。

  2.将整个系统分割为一系列的服务模块, 每个服务模块完成一定的功能(单一职责)。

  3.将这些服务模块 分散部署到不同的机器上。分散后,选择若干种(没错一种可能不够)通信协议把他们连接起来,当执行某项操作的时候按照拆分的系统有序的执行。

 

拆分+连接是分布式系统的本质

  所谓分布式,无非就是”将一个系统拆分成多个子系统并散布到不同设备“的过程而已。

  本质上而言,实现一个分布式系统,最核心的部分无非有两点:

   1.如何拆分——可以有很多方式,核心依据一是业务需求,二是成本限制。这是实践中构建分布式系统时最主要的设计依据。

   2.如何连接——光把系统拆开成 单个服务模块还不够,关键是拆开后的 服务模块之间还要能通信,因此涉及通信协议设计的问题,需要考虑的因素很多,好消息是这部分其实成熟,方案很多。

为什么你要使用分布式?

  分布式系统并非灵丹妙药,解决问题的关键还是看你对问题本身的了解。通常我们需要使用分布式的常见理由是:

  1.为了性能扩展 ——系统负载高,单台机器无法承载,希望通过使用多台机器来提高系统的负载能力。

    例:对一个B2C(京东、淘宝)商城进行拆分,首页部分我们要考虑到高并发、高可用、搜索、缓存等等一系列的情况,需要把这个功能单独拆分出来来扩展性能

 

  2.为了增强可靠性 ——软件不是完美的,网络不是完美的,甚至机器本身也不可能是完美的,随时可能会出错,为了避免故障,需要将业务分散开保留一定的冗余度

    在以提供 Service 为主的服务端软件开发过程中常常遇到这些问题。

 

一些分布式方案能解决你的问题,另一些却不能,要学会的其实是选择

  笼统的讨论分布式没有太大的意义,就如我刚才所谈的,实际上分布式很容易实现。真正难的地方在于如何选择正确的分布方案。

  例如,当你想要建立一个分布式的数据管理系统的时候,你就必须得面对“一致性”问题。如果你对数据一致性要求很高,你就不得不容忍一些缺陷例如规模伸缩困难;而如果你放弃它,你可以轻松伸缩规模,但你必须解决好由此带来的一系列数据不一致导致的问题。(CAP 问题)

  于是你会意识到,有许多种分布方案,为了正确解决你的问题,你需要对每一个方案都进行了解,并评估,选择不同的方案有时候区别不大,有时候却会深刻的影响整个系统中其他部分的工作方式,甚至影响用户界面中用户操作时的流程。这是我们学习分布式系统的重点所在。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值