从单体应用转向分布式应用,会带来哪些优劣势?如何做?

回答·14
最热
最新
  • 优势:存储从单机转向分布式提高了容灾能力。读写分离提高了数据吞吐能力。计算从单机转向分布式提高了业务数据处理能力。 劣势:系统复杂程度提高,开发难度提高,运维成本增加,同时需要处理分布式带来的一致性问题与可用性之间的取舍。 如何做:这个话题就很广了,视业务而定,分布式存储一般搭建 mysql 集群或者 mongo 集群,分布式缓存可以用 redis 分片集群,分布式协同或者分布式锁可以用 zk 或者一些 raft 的开源组件如 hashicorp/raft,如果业务要求数据大吞吐还可以搭建 kafka 集群,还有引入各种监控组件之类的
  • 优势:高性能,高可用,可伸缩,可扩展,安全性,敏捷性。 劣势:需要在测试,部署,监控在做很多事情,在服务的可靠性上做很多工作。需要处理分布式事物,cap 相关的问题。 处理方案:mysql mha 高可用,ES 集群,rabbitmq 集群,kafka 集群,redis 集群,openResty(nginx+lua+redis),kafka+elk 分布式日志监控,cdn 加速,api 网关(熔断,限流,降级),docker k8s,自动化部署 jenkins,分布式网关 nginx+lua,分布式工作流等,微服务 rpc,mq 通性等等。
  • 你好,我觉得就这个问题首先应当就单体和分布式原理来探讨,就字面意思上来理解的话,单体肯定代表单独个体,也就是数字“1”,而对于分布式的话,所谓“分布”就代表遍布在各个角落,所以就数字而言可用“n”来表达。根据古老的谚语来说,"人多力量大",“1+1>2”等这些代表集体力量大的谚语来理解的话,单体应用就是单打独斗,而分布式应用就是"打群架",所以分布式应用能够解决单体应用自身条件限制下的瓶颈,提高整体系统的性能,与吞吐量。而再想想,n 这个往往代表着不确定因素,所以,虽然分布式应用能够突破性能瓶颈,但是相对于单体来说难于管理与维护,因此我们也需要投入更多的成本和精力去维护它,单体应用更易于维护。我们知道,单体内部的沟通与通信是快速且简单明了的,而分布式应用之间的联系需要依赖于网络的稳定畅通,如果网络发生故障或者不稳定,没有采用有效的措施和提前准备,往往将导致由于一部分应用崩溃而导致整体不可使用,以及数据丢失等问题。而此时在发生故障时,如何保障数据的一致性以及系统的可用性需要我们针对具体的业务去相应取舍。数据的一致性我们可能就会想到"事务",在单体应用中,我们很简单的能实现,而在分布式中由于机器的分散与结构的分离,我们只能依靠一些解决方案,1、我们遇到这种涉及多个相关业务时,可以将多个服务合并,来避免分布式事务。2、我们可以实现数据最终一致性,将需要通过分布式处理的任务用消息队列异步来执行,如果事务失败,则可以发起人工重试来纠正。在系统可用性上,分布式往往采用集群来应对,而在集群情况下,我们怎么保证在一个节点挂了的情况下,另外的节点能够顶上也是重要的一个环节,例如 mysql 主从模式,redis 的哨兵机制,自带的集群方案等等。另外一点,当我们为了实现新功能时,在单体应用上,我们只能反复添加新的文件,增加业务之间的耦合,从而增大了整个系统的耦合度,这种情况下,我们的代码变得晦涩难懂,当有新人加入项目组时,往往为了理解这些业务代码需要花费更多的时间。在分布式系统结构下,我们将大应用进行拆分,以实现各个子业务之间单独管理,这样我们将整个系统耦合度降低,实现我们高内聚,低耦合的目标,这样即便是在有新功能或者业务的增加的情况下,我们也能快速进行扩展,新人加入时也能迅速对应到相应的业务中熟悉流程以及代码。在单体应用向分布式应用转变过程中,我觉得应当结合业务来考虑具体架构,哪些地方是我们系统的瓶颈,哪些业务需要拆分,如何保障系统的可用性以及数据一致性,虽然分布式是时下热点,但不应当为了分布式而分布式,否则可能我们增加了成本,而并没有达到事半功倍的效果。如有错误或者不到位的地方,烦请指正!
  • 我觉得会带来的优势是容错率强,如果出现一个服务挂了,还有多个在运转。第二就是业务多服务分布处理,那么处理能力强。第三个扩容更容易,如果某个服务模块需求有大增长,可以零时增加服务能力,比如订单模块特定时间会剧增,那么就特定时间零时增加订单服务器的数量。第四个,从钱来说,如果灵活支配部分服务器,可以让一些服务器在不同模块间流转。 劣势就是事务等等问题处理变得复杂,对于电商平台来说,分布式优势大于劣势
  • 具体情况,具体分析,有些业务符合单体就没有必要分布。如果有些业务需要的话就要考虑业务的拆分,分布的原则,抽象相关组件等等相关工作,从人员配比,能力等等进行评估。充分理解,再制定方案动手处理。
  • 优势 并发,扩容,熔宰,扩展 劣势 维护,数据一致性,现在的解决方案都是 cap 只能满足两个,对团队技术要求
  • 业务数据大到单体搞不定了有优势,劣势就是花钱
  • 发现 bug,调试比较麻烦;调用链复杂;事务也是个问题
  • 优势:单模块崩溃不影响其它模块执行,一崩全崩的机会降低,出现问题也能能快速定位问题。 劣势:增加机器带来运维的维护成本增加,经营成本增加。
  • 分布式优势:系统具备扩展性,可支持高并发和大吞吐量。同时,因为分布式通常是集群参与计算和存储,系统的处理能力和故障恢复能力都比较好。 分布式关注点: 系统复杂度,系统的运维,系统的后续演变升级等。