在分布式系统中,有哪些设计或实现上的难点?

低调的牛肉


分布式系统是将系统功能进行模块化,并且部署到不同的服务器上,每台服务器实现不同的功能,处理不同的数据。分布式主要是用于减轻服务器的压力,提升效率,以及降低系统维护的难度。但由于每台服务器处理的业务不同,如果一台服务器出现问题,必然会导致系统故障,所以一般分布式系统会和集群结合使用。

解耦:解耦是分布式系统的重点,在系统设计之初就要确定如何进行解耦、模块划分,由于不同的模块可能会由不同的团队进行开发和维护,如果模块间出现业务重叠或者交集过多,就会加大开发以及后期维护的难度。

分布事务:由于分布式系统将业务进行了拆分,而对于整个系统而言,事务是面向整个业务的,这就要求不同模块如果存在事务,则必须采用分布事务的机制来保证业务的完整性。

数据处理:分布式系统虽然将业务功能进行了模块化,但是整个系统的数据必然是完整的,那么在系统设计时要确定好数据的存储方式,是统一管理还是分开管理,从而保证数据准确性的同时提升系统的运行效率。

数通畅联 专注于企业IT架构、SOA综合集成、数据治理分析领域,感谢您的阅读与关注!

数通畅联


分布式系统在增大系统容量、提高系统复用性、使系统扩展性更高的同时,同时也有不少难点和缺点。

网络开销

传统架构,所有的业务逻辑都被打成一个代码包进行部署,所有模块运行都是在同一个JVM中,不会存在网络的开销(应用到数据库的网络开销不讨论,这里和主要指代码和代码之间的调用);而分布式架构中,模块和模块可能会被部署到不同的机器上,它们之间的访问需要通过远程调用的方式来实现,网络IO就成为不可忽视的性能瓶颈了。

特别是在微服务的阶段,服务被拆分的比较小,一次完整的业务流程可能需要几个微服务,这时候网络问题更会凸显出来。

通常我们会增加带宽、使用专线等方式,降低网络开销;代码方面,会采用失败重试或者异步化的方式,来解决网络延迟问题,后者也无疑增加了代码实现难度。

服务依赖性问题

一个完整的应用,被拆分成了多个服务,服务和服务之间肯定是有依赖性的;如果有一个关键性的服务挂掉了,那么整个服务链路上的所有服务,都会产生问题。

这时候就需要进行服务治理,梳理出来关键业务和非关键业务,以及服务的调用路径;数据库要做响应的隔离;避免非关键性业务把数据库搞死,从而导致关键性业务也变成不可用;所以,理论上每个服务都要有独立的数据库,数据不做共享,但是现实中经常无法做到。

数据一致性问题

  • Consistency:强一致性,事务保障,ACID模型;

  • Availiablity:高可用性,避免单点;

  • Partition tolerance:高可扩展性。

我们经常会说的CAP原理,也就是CAP这三个因素不可能兼顾,最多只能满足两个;分布式系统来说更为强调A和P,所以会选择适当放弃一致性,或者说分布式系统通常会选择保证最终一致性;为解决这个问题,架构中需要引入消息表、MQ(事务消息)或其他的补偿手段,这无疑也加大了项目实现的难度。


另外,分布式系统也会让测试变得更加的复杂,多层的架构也让运维变得复杂;分布式架构在提高系统可用性的同时,也带来了更多的挑战。

我将持续分享Java开发、架构设计、程序员职业发展等方面的见解,希望能得到你的关注。


会点代码的大叔


任何一个新的技术引入的时候必然会带来新的问题,在了解分布式系统之前,首先要了解的是为什么要使用分布式系统架构?分布式系统系统的好处?是只有弄清楚了这些问题,我们才能真正弄清楚分布式系统带来的问题是什么

1. 为什么要使用分布式系统?

这个问题要从软件工程学的角度上面出发,在软件开发的初期,由于开发的人数较少,所有的模块代码都是在一个项目工程里面,随着业务的不断扩展以及人员的规模越来越大,这个就会带来一些问题,任何一个小的逻辑改动影响都是所有模块的,而讲项目中的模块逐步的拆分开来,可以降低项目的复杂性,这个是为什么要用分布式系统的起源

2.分布式系统的好处?

1)项目模块之间关系明确

2)每一个模块可以交给不同的团队来维护,便于团队管理

3)由于采用分布式服务了,那么在部署的时候的成本会变低

4)提高了可拓展性,当某一个结点在线上压力比较大的时候,可以动态拓展压力大的结点即可

3.分布式系统所带来的问题?

1.如何保证高可用,当某个服务部署多个结点的时候,当请求到达某个宕机的结点后,如何保证服务可用

2.如何保证数据一致性,服务都是部署在不同的结点之上的,如何保证各个中间件的数据一致性

3.如何解决多结点链路问题

以上就是我的一点思考吧,望采纳



ROSAN


看了下下面的回答都是“照本宣科”,“复制粘贴”的回答,晦涩难懂,毫无新意。

站在我个人的角度:

分布式系统就是将一个业务项目部署到多台服务器上,能够达到分担成千上万用户访问请求的压力。比如一个今日头条项目,可以部署到很多服务器上。

设计难点:

  1. 如何保证每台服务器能均衡的分担用户的请求?

  2. 如何保证某一台服务器宕机,而正在该服务器访问的用户们在毫无感觉中后台切换到其他服务器中继续访问?

  3. 如何保证用户写内容/改内容/删内容到某台服务器,而其他服务器能够同步更新?

  4. 解决上述问题用到哪些开源工具(比如消息中间件、搜索引擎……)?如何使用这些工具?

希望真正的大牛能够给出一些见解解决方案,而不是照本宣科,打着IT开发工程师的幌子沽名钓誉来滥竽充数。

MR杜wy


分布式系统,指的是一个相同的服务功能或数据运算功能,分别部署到各个地区的服务器上运行,技术难点数据处理的并发能力,数据分发均衡能力,任务节点邻近服务器相应算法,空闲服务器任务动态分担,多虚拟机命中后结果汇总,以及任务终止功能。以上是分布式的难点和系统必备的特色。


分享到:


相關文章: