多主复制与冲突解决机制_第1页
多主复制与冲突解决机制_第2页
多主复制与冲突解决机制_第3页
多主复制与冲突解决机制_第4页
多主复制与冲突解决机制_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1/1多主复制与冲突解决机制第一部分多主复制概念与特点 2第二部分冲突类型及产生原因 4第三部分基于时间戳的冲突解决 6第四部分基于向量时钟的冲突解决 9第五部分基于乐观并发控制的冲突解决 12第六部分基于悲观并发控制的冲突解决 15第七部分冲突解决机制的性能分析 16第八部分应用场景与发展趋势 19

第一部分多主复制概念与特点关键词关键要点多主复制概述

1.多主复制是一种分布式数据管理技术,允许在多个节点上维护数据副本,每个节点都可以接收和处理更新操作。

2.与主从复制不同,多主复制没有单一的中心节点,所有节点都能充当主节点和从节点,能够并行处理更新操作。

3.多主复制提高了系统的可用性和可扩展性,因为即使一个或多个节点发生故障,数据仍然可以从其他节点访问和更新。

多主复制优势

1.高可用性:多主复制消除了单点故障,即使一个节点发生故障,数据也不会丢失或不可访问。

2.可扩展性:可以根据需要轻松添加或删除节点,以扩展系统的处理能力和数据存储容量。

3.降低延迟:由于更新操作可以并行地在多个节点上处理,用户可以体验到更低的延迟和更快的响应时间。

多主复制挑战

1.数据一致性:多主复制面临的主要挑战是确保在所有副本之间保持数据一致性,防止出现数据冲突。

2.冲突检测和解决:多主复制需要有效的机制来检测更新操作之间的冲突,并以一致的方式解决这些冲突。

3.性能开销:与主从复制相比,多主复制在节点之间进行数据同步和冲突解决时可能会产生额外的性能开销。

冲突检测机制

1.乐观冲突检测:更新操作首先被执行,然后由其他节点检查是否存在冲突。如果检测到冲突,则回滚更新操作。

2.悲观冲突检测:在执行更新操作之前,先锁定受影响的数据项,以防止其他节点并发访问。

3.多版本并发控制(MVCC):使用时间戳或版本号跟踪数据项的不同版本,以检测和解决冲突。

冲突解决机制

1.最后写入者获胜:在冲突发生时,来自最后写入节点的更新操作将被保留,而来自其他节点的更新操作将被丢弃。

2.版本化数据:保留数据项的历史版本,允许用户查看和回滚到冲突之前的版本。

3.用户定义冲突解决器:用户可以定义自定义规则或算法来解决特定类型的冲突,根据特定业务场景的需要。多主复制概念

多主复制是一种分布式数据库系统配置,其中多个节点(主节点)可以同时更新和存储数据的副本。与传统的主从复制不同,多主复制允许所有主节点接收写入请求并更新其数据副本。

多主复制的特点

*高可用性:多个主节点的存在消除了单点故障,提高了系统的可用性。即使一个主节点发生故障,其他主节点仍可以继续处理写入请求。

*负载平衡:写入请求可以在多个主节点之间负载平衡,从而提高系统的吞吐量。

*降低延迟:写入请求可以在本地主节点快速处理,从而减少延迟。

*数据一致性挑战:多主复制的一个主要挑战是确保不同主节点上的数据副本之间的一致性。

解决数据一致性挑战

为了解决多主复制中的数据一致性挑战,使用各种冲突解决机制。以下是一些常见的机制:

*事务提交顺序:在提交事务之前,每个主节点都会获得一个唯一的顺序号。事务按顺序号提交,以确保主节点上的数据顺序一致。

*最后写入者胜出(LWW):LWW策略为每个数据项维护一个最后修改时间戳。当两个主节点同时尝试更新相同的数据项时,具有最新时间戳的更新获胜。

*基于冲突的复制(CRDT):CRDT是一个数据结构,允许主节点并行更新数据,而无需协调或锁定。CRDT会自动合并冲突的更新,确保数据的一致性。

*乐观并发控制(OCC):OCC允许主节点同时写入数据,而不进行任何协调。当检测到冲突时,会回滚其中一个更新,以维护一致性。

*悲观并发控制(PCC):PCC在写入数据之前对数据项进行锁定。这可以防止冲突,但可能会降低吞吐量。

其他注意事项

除了冲突解决机制外,在设计多主复制系统时还应考虑以下其他因素:

*数据副本管理:必须管理不同主节点上的数据副本,以确保数据一致性和避免数据丢失。

*网络延迟:网络延迟可能会影响不同主节点之间的数据同步和冲突解决过程。

*主节点选取:必须制定策略来选取新的主节点以替换发生故障的主节点,并确保系统稳定性。第二部分冲突类型及产生原因关键词关键要点【冲突类型】

1.更新冲突:当多个副本收到的更新次序不一致时,会出现更新冲突。

2.数据冲突:当不同副本对同一数据项进行修改时,会出现数据冲突。

3.读写冲突:当一个副本试图读取数据时,另一个副本尝试写入相同数据,从而导致读写冲突。

【并发控制冲突】

冲突类型

写-写冲突

*发生在多个事务同时试图修改同一数据库记录时。

*通常由并发事务不正确地隔离导致。

读-写冲突

*发生在一个事务读取某个数据库记录时,另一个事务试图修改该记录。

*导致读取的事务获得过时的或不完整的数据。

序列化异常

*发生在除了写-写冲突或读-写冲突之外的场景中,但仍违反了事务隔离性。

*通常由系统错误或不正确的并发控制机制导致。

冲突产生原因

并发访问

*多个事务同时访问同一数据库,造成资源争夺。

事务隔离不当

*数据库系统未能提供足够的事务隔离级别,导致事务之间相互干扰。

脏写

*一个事务修改了一个数据库记录,但没有提交该事务,而另一个事务读取了未提交的数据。

不可重复读

*一个事务读取了一个数据库记录,然后另一个事务修改了该记录,导致第一个事务在后续读取时获得不同的结果。

幻读

*一个事务读取了一组数据库记录,然后另一个事务插入或删除了该组记录中的一些记录,导致第一个事务在后续读取时获得不同的结果集。

数据库锁机制

*数据库系统使用锁机制来防止冲突,但锁机制的粒度或实现可能存在问题。

系统错误

*系统故障或软件错误可能导致事务隔离机制失效,从而导致冲突。

对并发性的需求

*随着数据库系统变得更加复杂,对并发访问的需求也在不断增加,这增加了冲突发生的可能性。

多语句事务

*多语句事务包含多个修改数据库的操作,这增加了与其他并发事务冲突的风险。

无事务操作

*在某些情况下,数据库系统允许执行无事务操作,这可能绕过事务隔离机制并导致冲突。第三部分基于时间戳的冲突解决关键词关键要点【基于时间戳的冲突解决】:

1.时间戳分配:冲突解决的一个关键方面是对事务分配唯一的时间戳。这可以通过使用集中式时间戳服务、本地时钟或其他机制来实现。

2.时间戳比较:当发生冲突时,比较涉及事务的时间戳。具有较高时间戳的事务将被视为更最新的事务,并且将优先于具有较低时间戳的事务。

3.乐观并发控制:基于时间戳的冲突解决通常与乐观并发控制一起使用,允许事务在不锁定资源的情况下继续执行,直到冲突检测发生。

【并发控制】:

基于时间戳的冲突解决

在多主复制系统中,当副本之间针对同一数据项发生冲突时,需要一种机制来解决冲突,确定哪个副本版本应被保留。基于时间戳的冲突解决是解决此类冲突的一种常见方法。

概述

基于时间戳的冲突解决机制利用时间戳来识别和解决冲突。每个副本都维护着一个时间戳,该时间戳记录了副本对数据项的最后一次更新时间。当发生冲突时,副本比较其时间戳,时间戳较新的副本版本被保留,而其他副本版本被丢弃。

工作原理

当副本收到来自其他副本的更新时,它将比较更新的时间戳与其自身的时间戳:

*时间戳较新:更新将被接受,副本将更新其数据项并更新其时间戳。

*时间戳较旧或相等:更新将被丢弃,副本将保留其当前的数据项版本。

优点

基于时间戳的冲突解决机制具有以下优点:

*简单性:易于实现和理解,无需复杂的逻辑或算法。

*效率:通过一次时间戳比较快速解决冲突,而无需执行任何复杂操作。

*可扩展性:随着副本数量的增加,性能不会受到显著影响。

缺点

然而,基于时间戳的冲突解决也有一些缺点:

*时钟不协调:副本之间时钟不协调可能会导致不正确的冲突解决。例如,如果时钟稍有不同步,则时间戳较早但实际更新的副本版本可能会被丢弃。

*并发冲突:对于具有高并发更新的数据项,基于时间戳的冲突解决可能会导致频繁的冲突,因为多个副本可能同时对其进行更新。

*顺序依赖性:更新顺序会影响冲突的解决。后更新的副本版本可能会覆盖先更新的副本版本,即使先更新的版本包含更重要的数据。

改进

为了解决基于时间戳的冲突解决机制的这些缺点,可以采用一些改进措施:

*校准时钟:定期校准副本之间的时钟,以确保时钟协调一致。

*乐观并发控制(OCC):允许多个副本并发更新数据项,并使用时间戳在稍后解决冲突。

*多版本并发控制(MVCC):维护数据项的多个版本,使冲突得以解决,同时保留所有更新的历史记录。

用例

基于时间戳的冲突解决机制常用于以下场景:

*分布式数据库系统

*复制文件系统

*分布式缓存系统

*协作编辑应用程序

结论

基于时间戳的冲突解决是一种简单且高效的机制,用于解决多主复制系统中的冲突。通过比较副本的时间戳,它可以快速确定哪个副本版本应被保留。然而,它容易受到时钟不协调和并发冲突的影响,因此需要考虑改进措施来增强其健壮性。第四部分基于向量时钟的冲突解决关键词关键要点基于向量时钟的冲突解决

1.向量时钟的概念:

-每个数据条目都关联着一个向量时钟,其长度等于系统中参与者的数量。

-向量时钟的每个元素代表一个参与者处理过的最新事件数量。

2.冲突检测:

-当两个数据条目具有不完全相同的向量时钟时,将检测到冲突。

-冲突表示存在更新版本的数据条目,需要合并。

3.合并过程:

-创建一个新向量时钟,其大小等于参与者数量的总和。

-将每个参与者的最新事件数量加到新向量时钟中。

-具有最大向量时钟条目数的数据条目将被保留。

复制冲突的类型

1.写-写冲突:

-两个参与者同时尝试修改同一数据条目。

-冲突可以通过基于向量时钟的合并过程解决。

2.读-写冲突:

-一个参与者尝试读取数据条目,而另一个参与者尝试修改该条目。

-冲突可以通过延迟读取操作或强制写入操作来解决。

3.并发控制的策略:

-可用性策略:允许并发操作,但可能导致数据损坏。

-一致性策略:防止并发操作,以确保数据完整性。基于向量时钟的冲突解决

在分布式系统中,多主复制架构允许来自多个副本的并发更新。然而,这可能会导致冲突,即同一对象的不同副本具有不同的值。解决冲突的一种机制是基于向量时钟。

向量时钟简介

向量时钟是一种逻辑时钟,它为系统中的每个事件分配一个向量,其中每个分量表示一个特定的副本。对于副本集合\(R\)和事件序列\(S\),向量时钟\(VC(S)\)定义为:

```

VC(S)[r]=count(r,S)

```

其中:

*\(VC(S)[r]\)是向量时钟\(VC(S)\)的第\(r\)个分量。

*\(count(r,S)\)是序列\(S\)中由副本\(r\)发出的事件数。

向量时钟可以表示因果关系和系统中事件的顺序。

解决冲突

基于向量时钟的冲突解决机制如下:

*对于给定的对象,每个副本都维护自己的向量时钟。

*当一个副本接收一个来自其他副本的更新请求时,它比较自己当前的向量时钟和更新请求中包含的向量时钟。

*如果收到的向量时钟分量比当前向量时钟的分量小或相等,则认为该更新请求已过期,将被拒绝。否则,该更新请求被接受。

详细过程

假设副本\(R_1\)和副本\(R_2\)具有以下向量时钟:

```

VC(R_1)=(1,2,3)

VC(R_2)=(2,1,4)

```

*如果副本\(R_1\)收到来自副本\(R_2\)的更新请求,并且该请求包含向量时钟\(VC(R_2)\),那么:

*\(VC(R_1)[1]<VC(R_2)[1]\),因此更新请求被视为过期,将被拒绝。

*如果副本\(R_2\)收到来自副本\(R_1\)的更新请求,并且该请求包含向量时钟\(VC(R_1)\),那么:

*\(VC(R_1)[2]>VC(R_2)[2]\),因此更新请求被视为较新,将被接受。

优点

*可扩展性:基于向量时钟的冲突解决机制是可扩展的,因为每个副本只维护自己当前的向量时钟。

*高并发性:该机制允许高并发性,因为来自不同副本的更新请求可以同时处理。

*无中心:该机制是无中心的,不需要任何协调器或锁服务。

缺点

*开销:向量时钟需要存储和更新,这会增加分布式系统的开销。

*精确性:向量时钟不能保证精确的时间顺序,因为它们只包含事件计数。

*粒度:向量时钟的粒度取决于副本的集合,因此可能会太粗糙,无法解决某些类型的冲突。

替代方案

基于向量时钟的冲突解决机制之外,还有其他解决冲突的替代方案,例如:

*多版本并发控制(MVCC):每个对象创建多个版本,每个版本都存储它在系统中的时间点。

*最后编写者胜利(LWW):每个更新都包含时间戳,系统只接受具有最新时间戳的更新。

*操作冲突检测(OCC):系统在执行更新之前检查是否有冲突,并在发生冲突时回滚更新。第五部分基于乐观并发控制的冲突解决关键词关键要点基于乐观并发控制的冲突解决

主题名称:乐观并发控制

1.乐观并发控制机制假定在大多数情况下,事务不会发生冲突。

2.事务在执行时不会对数据库进行任何锁定,而是等到事务提交时才检查是否存在冲突。

3.如果检测到冲突,则回滚事务并显示错误消息。

主题名称:多版本并发控制(MVCC)

基于乐观并发控制的冲突解决

在多主复制环境中,乐观并发控制(OCC)是一种冲突解决机制,它允许事务在未进行任何显式锁定或时间戳的情况下并发执行。OCC依赖于这样一个假设:冲突发生的概率较低,并且冲突可以轻松检测和解决。

OCC的工作原理如下:

1.读取未提交的数据:事务读取数据库中的数据,而无需对其进行任何锁定。这些数据可能已被其他事务修改,但尚未提交。

2.检测冲突:当事务试图提交其更改时,它会与数据库中的当前状态进行比较。如果检测到冲突,则事务将被中止。

3.重新执行事务:中止的事务将被重新执行。在重新执行期间,它将读取最新的数据库状态,并根据该状态调整其更改。

4.提交:如果重新执行的事务不检测到冲突,则它将被提交。

OCC的主要好处是:

*高吞吐量:由于事务在执行期间不会进行锁定,因此OCC可以显着提高吞吐量。

*低延迟:事务可以并发执行,无需等待锁定,从而减少了延迟。

*易于实现:OCC的实现相对简单,因为它不需要复杂的锁定机制。

然而,OCC也有一些缺点:

*冲突率高:在高并发环境中,冲突发生的概率较高。

*处理冲突的成本:中止和重新执行事务可能会造成性能开销。

*脏读:事务可能会读取未提交的数据,这可能会导致不一致性。

OCC适用于以下情况:

*冲突概率低:当冲突发生不频繁时,OCC是一个不错的选择。

*冲突容易解决:当冲突可以轻松检测和解决时,OCC是有效的。

*高吞吐量和低延迟至关重要:在需要高吞吐量和低延迟的情况下,OCC是一个合适的选项。

OCC算法

有几种不同的OCC算法可用。最常用的算法之一是多版本并发控制(MVCC)。MVCC通过为数据库中的每行维护多个版本来实现OCC。每个版本都带有时间戳,表示该版本被写入数据库的时间。

当事务读取数据时,它读取具有最大时间戳的版本。这确保了事务读取的是数据库的最新一致状态。

当事务尝试提交其更改时,它会将自己的时间戳与数据库中的当前版本的时间戳进行比较。如果时间戳较低,则表示冲突已经发生,并且事务将中止。

MVCC的主要优点是它可以处理读写冲突,同时不会导致写写冲突。此外,MVCC还可以提供时间点隔离,这意味着事务可以读取特定时间点的数据库状态。

结论

基于乐观并发控制的冲突解决是一种在多主复制环境中提高吞吐量和减少延迟的有效方法。然而,重要的是要注意OCC的缺点,并在选择OCC算法时加以考虑。第六部分基于悲观并发控制的冲突解决基于悲观并发控制的冲突解决

在多主复制环境中,基于悲观并发控制的冲突解决机制通过严格地锁定数据,最大程度地减少并发事务之间的冲突。其核心原理是,事务在访问数据之前需要获取排它锁,以确保事务期间数据不会被其他事务修改。

机制概览

1.排它锁获取:当事务尝试访问受保护的数据时,它会请求一个排它锁。如果锁被授予,事务可以读取和修改数据。

2.冲突检测:如果另一个事务试图获取相同数据的排它锁,系统会检测到冲突,并使后来的事务等待。

3.锁释放:当事务完成时,它会释放所有持有的锁,以便其他事务可以访问数据。

分类

基于悲观并发控制的冲突解决机制可细分为:

*表锁:事务为整个表获取排它锁。

*行锁:事务仅为它要修改的行获取排它锁。

优点

*保证数据完整性:通过严格的锁定,所有事务都能看到数据的一致版本。

*简单实现:实现和管理相对简单,因为系统只需要跟踪谁持有哪些锁。

缺点

*低并发性:由于每个事务都需要获取排它锁,这可能会导致较高的阻塞级别,从而限制了并发事务的数量。

*性能影响:频繁的锁操作会对数据库性能产生负面影响,尤其是当大多数事务是只读事务时。

*死锁:如果两个事务相互等待对方的锁释放,可能会发生死锁,需要人工干预。

适用场景

基于悲观并发控制的冲突解决机制适用于以下场景:

*数据完整性至关重要,冲突不可接受。

*事务数量较少且锁定冲突的概率较低。

*只读事务的数量相对较少。

替代方案

对于并发性要求较高的环境,可以考虑使用其他冲突解决机制,如乐观并发控制或多版本并发控制。第七部分冲突解决机制的性能分析关键词关键要点冲突解决机制的性能分析

主题名称:基于Paxos算法的冲突解决

1.强一致性保障:Paxos算法提供强一致性,确保所有副本最终达成对数据项的相同值。

2.消息传递开销:Paxos算法需要大量的消息传递以达成共识,这可能会对性能产生影响。

3.吞吐量限制:Paxos算法的吞吐量受到消息传递开销和副本数量的限制。

主题名称:基于Raft算法的冲突解决

冲突解决机制的性能分析

冲突解决机制在多主复制系统中至关重要,其性能直接影响系统的可用性和一致性。本文对常见的冲突解决机制进行性能分析,评估其在不同场景下的优缺点。

1.最终一致性冲突解决机制

1.1单值复制(SV)

单值复制机制将每个副本视为一个独立的实体,副本之间不存在数据同步。当冲突发生时,系统允许写入冲突值,无需协调。

*优点:性能高,实现简单。

*缺点:数据不一致,无法解决丢失更新和并发写的问题。

1.2多值时间戳复制(MVTO)

MVTO机制基于时间戳,冲突时以时间戳较新的写入为准。

*优点:一致性高于SV,可解决丢失更新问题。

*缺点:性能低于SV,需要维护时间戳和冲突历史。

2.可协调性冲突解决机制

2.1主协调复制(MCC)

MCC机制指定一个主副本作为协调者,所有写入操作均由协调者执行。

*优点:一致性高,可解决所有冲突问题。

*缺点:性能受限于协调者,单点故障风险。

2.2乐观并发控制(OCC)

OCC机制允许副本并发执行写入操作,并在提交前进行冲突检查。

*优点:性能高,可避免不必要的协调开销。

*缺点:可能出现丢失更新和并发写问题,需要回滚和重试。

2.3悲观并发控制(PCC)

PCC机制在写入操作前获取锁,以确保排他访问。

*优点:一致性高,可避免冲突。

*缺点:性能低,可导致锁竞争和死锁。

3.性能比较

下表比较了不同冲突解决机制的性能:

|机制|性能|一致性|冲突解决方式|

|||||

|SV|最高|最低|无协调|

|MVTO|中等|中等|时间戳比较|

|MCC|最低|最高|主协调|

|OCC|中等|中低|乐观并发|

|PCC|最低|最高|悲观并发|

4.场景选择

冲突解决机制的选择取决于系统需求和具体场景:

*高性能要求,数据一致性要求较低:SV

*中等性能要求,中等数据一致性:MVTO

*高一致性要求,性能可接受:MCC

*低锁竞争,较高的数据一致性:OCC

*高锁竞争,绝对的数据一致性:PCC

5.优化建议

提高冲突解决机制性能的建议:

*正确设计数据模型:减少冲突发生的可能性。

*使用批量写入:减少协调开销。

*合理分配主副本:避免单点故障。

*优化锁机制:使用粒度较细的锁,减少死锁风险。

*采用并发控制机制:避免不必要的锁争用。

6.结论

冲突解决机制在多主复制系统中至关重要,其性能直接影响系统的可用性和一致性。根据系统需求和具体场景选择合适的冲突解决机制,并结合优化建议,可显著提高系统性能。第八部分应用场景与发展趋势关键词关键要点分布式数据库与数据一致性

*多主复制在分布式数据库中尤为重要,可确保即使在主节点故障的情况下也能保持数据可用性。

*复制冲突解决机制在保证数据一致性方面至关重要,可防止在多个主节点更新同一数据时出现不一致。

*Paxos、Raft和Zab等共识算法被广泛用于分布式数据库中的冲突解决。

云计算和微服务架构

*在云计算环境中,多主复制可增强应用程序的弹性和可用性,确保在云端节点故障时业务连续性。

*微服务架构需要高度灵活和可扩展的基础设施,而多主复制可满足这些要求,支持动态扩缩容和服务无缝切换。

*Kubernetes和DockerSwarm等容器编排平台提供了原生支持多主复制。

物联网和大数据

*物联网设备不断生成大量数据,需要分布式且高可用的数据存储解决方案。多主复制可确保这些数据即使在网络中断或设备故障的情况下也能得到安全存储和访问。

*在大数据处理中,多主复制可通过分布式流处理和并行计算实现高吞吐量和低延迟。

边缘计算与实时应用

*随着边缘计算的发展,数据处理和决策需要更接近数据源。多主复制可实现边缘节点之间的实时数据同步,支持实时分析和决策。

*多主复制在实时应用中至关重要,可确保系统在需要时快速高效地访问最新数据。

区块链与去中心化网络

*区块链网络要求高度安全和不可变的数据,多主复制可提供数据冗余和分布式验证,增强其可靠性。

*在去中心化网络中,多主复制允许节点之间达成共识并维护一致的数据副本。

未来发展趋势

*基于人工智能和机器学习的冲突解决机制将进一步提高多主复制的效率和准确性。

*异构数据复制技术的发展将支持不同类型数据库和数据源之间的无缝复制。

*多主复制在云原生环境和边缘计算中的应用将持续增长,为分布式应用程序提供更高的可用性和弹性。应用场景

多主复制具有广泛的应用场景,包括:

*高可用性和数据冗余:在分布式系统中,通过将数据复制到多个主节点,可以确保即使其中一个主节点发生故障,应用程序仍能继续访问数据,从而

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论