基于如下电商业务场景,基本分布式的架构思路:
-
数据库基于业务特点,进行分库分表;
-
数据库拆分,随之就是业务的服务化(SOA);
基于电商业务进行拆分,会出现常见的:订单,用户,库存,物流等一系列的服务,管理不同的业务数据库,在实际的下单支付应用场景下,需要同时操作用户,订单,库存等多个服务,就必须保证数据一致性,下单支付成功,库存必须就需要用到分布式事务。
二、CAP基础理论
=========
1、基础简介
======
说到分布式事务问题,必然会说下CAP理论,分布式系统的三大指标:
Consistency:一致性
单个事务执行更新写操作,操作结束成功返回,在同一时间的其他事务读取的数据完全一致,不存在中间状态。在分布式的系统中描述:用户下单支付,扣款,减库存,生成物流,必须一致。例如限量打折促销中,用户下单后库存没减少,这就导致不一致问题。
Availability:可用性
服务必须一直处于可用的状态,收到用户的请求,服务器必须在有限的时间给出回应,不管结果是处理成功或者处理失败。
Partition tolerance:分区容错
通俗说,在分布式系统中,一个流程里可能出现某个服务出错情况,这是无法绝对避免的,在程序设计上要能容忍这种错误发生。
2、CP和AP模式
=============
分布式系统很难同时满足一致性、可用性、分区容错性三个特点,在大部分的系统架构中,都会选择CP或者AP模式,即需要抛弃一个特点,说明一点,为何P没有抛弃,对于分布式系统而言,分区容错是该架构模式下的基本原则,不同的SOA服务和数据库是比如会被部署到不同的节点下。所以如何解决C(一致性)和A(可用性)就成分布式系统的最大痛点。
为何不能同时满足C和A,这也是基于分布式架构特点看,不同服务直接不能保证通信是100%成功,一旦出现失败情况,一致性和可用性就无法满足。
既然强一致性无法保证,那退一步,给处理时间,最后结果保证一致性,也可以,这就涉及到BASE理论。
三、BASE基础理论
==========
1、基础简介
======
BASE理论是由eBay公司的架构师提出的,主要是对上述的CAP理论中一致性和可用性做的权衡结果,基于CAP定律逐步演化而来,核心思想;即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当策略实现数据的最终一致性。
Basically Available:基本可用
分布式系统在发生故障的时,允许损失部分可用性。例如常见电商清仓甩卖时,为保证主业务可以,一些不重要的服务直接降级提示。
Soft State:软状态
允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性。相对于原子性而言,要求多个节点的数据副本都是一致的,这是一种硬状态。
Eventual Consistency:最终一致
强调的数据更新操作,即软状态必须有个时间期限,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。时间期限长短取决于延时、负载、数据同步等各种因素。
BASE理论提出是基于大规模高可用可扩展的分布式系统架构,不同于关系型数据库事务特点(ACID)的强一致性模型,通过牺牲强一致性来获取更高的可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。实际的业务场景下事物(ACID)基本特性和BASE理论也是要权衡考虑。
2、柔性事务
======
遵循BASE理论,利用业务特点,在指定期限内让事务保持最终一致性,柔性事务是一种思想,从根本上看,就是业务模式对于事务过程中不一致性有一定的容忍度,可以留出足够的时间执行事务最终一致的方法。
3、PAXOS算法
=========
Paxos算法一种保障分布式系统最终一致性的共识算法,利用的是选举策略,少数服从多数的思想。PAXOS不要求对所有节点做实时同步,实质上是考虑到了分区情况下的可用性,通过减少完成一次事务需要的参与者个数,来保障系统的可用性。
例如:N个服务节点,有(N/2)+1个节点达成共识,则认为系统达到了一致,并且按照Paxos原则,最终理论上也达到了一致,不会再改变,如此一来,只要保证有半数以上的服务存活,允许小部分服务挂掉,客户可以与大部分服务节点通信,那么就不会影响整体操作流程,也不需确保服务器全部处于工作状态,容错性非常好。操作影响的数据和结果随后会被异步的同步到其他节点上,从而保证最终一致性。
四、服务间隔离
=======
1、分布式结构
=======
分布式系统架构的明显特点,就是按照业务系统的功能,拆分成各种服务,每个服务下面都有自己独立的数据库,以此降低业务间的耦合度,隔离不同的数据库保证系统最大的稳定性等。
例如上图是电商系统中经典的业务场景,订单-仓储-物流的服务模式,不同服务提供不同的应用场景,服务间存在通信机制,以此实现服务的高可用。
2、隔离思想
======
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Java)
最后
各位读者,由于本篇幅度过长,为了避免影响阅读体验,下面我就大概概括了整理了
一个人可以走的很快,但一群人才能走的更远。如果你从事以下工作或对以下感兴趣,欢迎戳这里加入程序员的圈子,让我们一起学习成长!
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算
6d4c3ab8389e65ecb71ac0)
AI人工智能、Android移动开发、AIGC大模型、C C#、Go语言、Java、Linux运维、云计算、MySQL、PMP、网络安全、Python爬虫、UE5、UI设计、Unity3D、Web前端开发、产品经理、车载开发、大数据、鸿蒙、计算机网络、嵌入式物联网、软件测试、数据结构与算法、音视频开发、Flutter、IOS开发、PHP开发、.NET、安卓逆向、云计算