首页 > 编程知识 正文

分布式开发是什么意思,分布式技术有哪些

时间:2023-05-04 12:31:49 阅读:171466 作者:2331

分布式闲谈分布式模型的理念自计算机诞生之日起就出现了。 但是,在计算机发展初期,除了设备少且昂贵外,还受到摩尔定律的影响,与实现复杂的分布式架构系统相比,直接提高各个机器的硬件性能更为简单可行。 结果,从20世纪40年代到80年代,计算机行业一直为大型机所主导。

经过多年的发展,计算机硬件的发展遇到了瓶颈,通过分布式体系结构水平提高计算能力已成为主流。 今天,利用现有的开源技术,可以轻松构建自己的分布式服务,大大降低了分布式APP开发的门槛,同时近年来微服务理念的兴起掀起了新的技术热潮。

虽然不同的平台和技术框架,分布式开发的具体实现也不同,但各自的体系结构理念和技术原理仍然相似,甚至集成度非常高的大型主机平台也在1990年提出了sysplex集群技术。

例如,在Web系统中,完整的分布式系统通常包括以下组件:

负载平衡服务器APP应用服务器组缓存群集消息队列数据库群集文件服务器群集

与独立APP应用开发相比,分布式系统的逻辑结构几乎没有变化,仍然分为APP应用服务、缓存、数据库、文件系统等各个模块。 不同的是,各逻辑模块内部由多节点形式构成,模块之间的相互作用仍然被认为是相互完整的个体,遵循高凝聚低结合的理念。

对于分布式开发人员来说,编写代码在大多数情况下不需要关注分布式体系结构的具体细节。 模块阻止基本细节并只保留接口,但接口通常与体系结构无关。 因此,将开发独立APP应用程序的逻辑应用于分布式开发流程时,编译器不会报告错误,独立调试也有很高的概率是正常的,但最后在分布式环境中部署和执行代码时,往往会出现意想不到的问题体系结构差异带来的影响,编译器还不能发现和排除,需要通过更多依赖的编程计划来解决。

分布式开发的常见问题主要包括:

锁定问题

在分布式环境中,除了线程同步、进程同步外,还添加了服务同步注意事项。 常见的临界区、信号量等技术手段只能限制本机的程序,当程序在不同的机器上运行时,彼此之间就没有了关联。 事务问题

写数据库时,为了确保完整性,可以打开并提交事务,以确保事务中的更改操作是完全执行还是完全回退。 但是,如果在A设备的事务执行过程中调用了B设备的服务,在A设备回滚事务时,B设备如何一起撤销修改? 全局序列问题

A机器在12:00:01时刻在本地写了日志。 假设同一时刻B机器也写了本地日志。 在日志合并阶段,如何确定a的日志顺序是先还是b的日志? 为了确保顺序性和唯一性,需要全局序列号发生器,同样也存在时钟同步的问题。 会话同步问题

系统将用户甲的请求分配给A机进行操作后,留下了一系列的会话信息。 偏偏A机器发生故障,用户甲要求变更对B机器的分配,B机器怎么知道用户操作了什么内容? 负载平衡问题

通常,一旦用户甲的请求被分配给机器a,则后续的用户甲的请求均希望由机器a处理。 但是,假设各用户的要求被顺利分配到现有的机器上,这时如果在集群上新追加1台机器的话,有时会没有对新节点的要求。 CAP取舍:

CAP理论不能同时兼顾一致性、可用性和区域容错性三者,但C、a、p三者孰优孰劣没有统一的标准,分布式开发过程必须取舍,如何权衡需要自己考虑对于分布式锁定的一些思路,锁定公共资源容易限制系统的并发,造成交通堵塞,就像将宽阔的多车道高速公路合并为自行车专用道一样。 因此,不上锁就能解决的问题,尽量不上锁。

以缓存操作为例,通常通过以下方式避免锁定:

场景一:查询时缓存命中

缓存命中,直接返回缓存数据

场景二:查询时缓存击穿

发生了缓存破坏。 在这种情况下,必须访问数据库以获取请求结果,将其写入高速缓存,然后返回

场景三:更新操作

发生数据更新时,首先更新数据库值,然后直接删除旧缓存,并返回操作结果

在更新场景中,删除缓存、破坏后续查询请求并更新缓存,而不是直接修改缓存,可以保证缓存内容和数据库内容的最终一致性。 当调整删除缓存以更新缓存的行为时,如果同时发生数据更新和缓存破坏,则会查询缓存破坏未修复的脏数据,并在回写时写入缓存破坏,然后最终导致缓存内容和数据库值不匹配

在复杂的商业场景中,缓存锁定是不可避免的。 如上所述,必须引入分布式锁定的概念,因为常规的进程同步机制无法控制服务器之间的进程。 分布式锁同样实现了公共资源的互斥访问,主要区别在于将控制范围从单机扩展到了集群。

以常见的“秒杀”事件为例,来看看分布式锁是如何工作的。

场景四:商品秒杀

收到商品要求后,首先检查现在的库存量; 在库存量满足的情况下,首先尝试获取分布式锁,表明要调整库存; 锁定成功后,更新数据库和缓存库存,最后解除锁定。如果锁定失败,秒杀失败; 加入分布式锁后,秒杀活动带来的流量压力转移到缓存读取和分布式锁的队列请求上,避免了大量更新请求直接落到数据库层。

目前主流的分布式框架不直接提供分布式锁定的接口。 相比之下,分布式锁定更接近逻辑概念,由开发人员自行设计实现。 典型的分布式锁定方案基于redis或Zookeeper实现,还有基于数据库的设计。

结尾

这几年来微服务的兴起和容器技术的发展,让分布式理念愈加渗透到各个领域。不过不管技术如何演变,任何时候抛开量级谈设计都是不靠谱的行为,单机设计不一定就比分布式要差,选择合适的才是最优解。

作者:迷路的音响

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。