A. 多台电脑网络共享连接上了文件也可以共享,但是我不能同步最新文件
通过以下步骤可实现局域网内多台计算机共享:一、多台电脑必须是共用同一网络internet连接,比如都是网通宽带接入,或都是移动宽带接入二、都在同一个网段除ip地址最后一段数字不同外,其余数字都应相同三、设置工作组和计算名,必须起一个相同的工作组名、但各台计算机的计算机名应不同。四、设置本地用户和组。一般组中的设置保持不变。但用户中的设置应理顺关系,并启用来宾帐户(Guests)试例:将用户界面全部清理,一般保留三个用户即可:如:名称 全名 描述Wwbs wu wang buseng 供来宾…Zzy zhao yi 管理计…Fnc fenf ning chao双击wwbs:“常规”卡 密码永不过期“隶属于” administrators双击zzy:“常规”卡 密码永不过期“隶属于”卡 administrators双击fnc:“常规”卡 用户不能更改密码,密码永不过期“隶属于”卡 Guests注:用些法设置的用户与在控制面版中显示的用户数不同,一般少显示一个。渚如此例中,在控制面版中就不显示wwbs用户,它只有在zzy被意外锁定后,重启计算机才会在“欢迎屏幕”中显示。当然这种意外也可在“本地用户和组”中设置“帐户已锁定”来人工实现(这种实现的过程:组策略—计算机配置—Windows设置—安全设置—帐户策略—帐户锁定策略—帐户锁定闸值—不锁定或几次无效登录之后,锁定帐户)五、文件共享的设置:1、在Windows防火墙中“例外”“选项卡”中,选中“文件和打印机共享”2、在资源管理器中,“工具—文件夹选项—查看—使用简单文件共享(推荐)不选中3、XP自带的“共享文档”设置为共享。右击“共享文档”—属性—共享—共享此文件夹选中。将需要共享的文档复制到此“共享文档”。六、重启电脑你说的这种情况是对方的共享文件夹或文件没有把你这个用户设置成允许,请你让他调整一下设置即可。祝好运!B. 如何实现同步两个服务器的数据库
同步两个sqlServer数据库x0dx0ax0dx0a如何同步两个sqlserver数据库的内容?程序代码可以有版本管理cvs进行同步管理,可是数据库同步就非常麻烦,只能自己改了一个后再去改另一个,如果忘记了更改另一个经常造成两个数据库的结构或内容上不一致.各位有什么好的方法吗?x0dx0ax0dx0a一、分发与复制x0dx0ax0dx0a用强制订阅实现数据库同步操作. 大量和批量的数据可以用数据库的同步机制处理:x0dx0a//x0dx0a说明:x0dx0a为方便操作,所有操作均在发布服务器(分发服务器)上操作,并使用推模式x0dx0a在客户机器使用强制订阅方式。x0dx0ax0dx0a二、测试通过x0dx0ax0dx0a1:环境x0dx0ax0dx0a服务器环境:x0dx0a机器名称: zehuadbx0dx0a操作系统:windows 2000 serverx0dx0a数据库版本:sql 2000 server 个人版x0dx0ax0dx0a客户端x0dx0a机器名称:zlpx0dx0a操作系统:windows 2000 serverx0dx0a数据库版本:sql 2000 server 个人版x0dx0ax0dx0a2:建用户帐号x0dx0ax0dx0a在服务器端建立域用户帐号x0dx0a我的电脑管理->本地用户和组->用户->建立x0dx0ausername:zlpx0dx0auserpwd:zlpx0dx0ax0dx0a3:重新启动服务器mssqlserverx0dx0ax0dx0a我的电脑->控制面版->管理工具->服务->mssqlserver 服务x0dx0a(更改为:域用户帐号,我们新建的zlp用户 .\zlp,密码:zlp)x0dx0ax0dx0a4:安装分发服务器x0dx0ax0dx0aa:配置分发服务器x0dx0a工具->复制->配置发布、订阅服务器和分发->下一步->下一步(所有的均采用默认配置)x0dx0ax0dx0ab:配置发布服务器x0dx0a工具->复制->创建和管理发布->选择要发布的数据库(sz)->下一步->快照发布->下一步->选择要发布的内容->下一步->下一步->下一步->完成x0dx0ax0dx0ac:强制配置订阅服务器(推模式,拉模式与此雷同)x0dx0a工具->复制->配置发布、订阅服务器和分发->订阅服务器->新建->sql server数据库->输入客户端服务器名称(zlp)->使用sql server 身份验证(sa,空密码)->确定->应用->确定x0dx0ax0dx0ad:初始化订阅x0dx0a复制监视器->发布服务器(zehuadb)->双击订阅->强制新建->下一步->选择启用的订阅服务器->zlp->下一步->下一步->下一步->下一步->完成x0dx0ax0dx0a5:测试配置是否成功x0dx0ax0dx0a复制监视器->发布衿?zehuadb)->双击sz:sz->点状态->点立即运行代理程序x0dx0ax0dx0a查看:x0dx0a复制监视器->发布服务器(zehuadb)->sz:sz->选择zlp:sz(类型强制)->鼠标右键->启动同步处理x0dx0ax0dx0a如果没有错误标志(红色叉),恭喜您配置成功x0dx0ax0dx0a6:测试数据x0dx0ax0dx0a在服务器执行:x0dx0ax0dx0a选择一个表,执行如下sql: insert into wq_newsgroup_s select '测试成功',5x0dx0ax0dx0a复制监视器->发布服务器(zehuadb)->sz:sz->快照->启动代理程序 ->zlp:sz(强制)->启动同步处理x0dx0ax0dx0a去查看同步的 wq_newsgroup_s 是否插入了一条新的记录x0dx0ax0dx0a测试完毕,通过。x0dx0a7:修改数据库的同步时间,一般选择夜晚执行数据库同步处理x0dx0a(具体操作略) :dx0dx0ax0dx0a/*x0dx0a注意说明:x0dx0a服务器一端不能以(local)进行数据的发布与分发,需要先删除注册,然后新建注册本地计算机名称x0dx0ax0dx0a卸载方式:工具->复制->禁止发布->是在"zehuadb"上静止发布,卸载所有的数据库同步配置服务器x0dx0ax0dx0a注意:发布服务器、分发服务器中的sqlserveragent服务必须启动x0dx0a采用推模式: "d:\microsoft sql server\mssql\repldata\unc" 目录文件可以不设置共享x0dx0a拉模式:则需要共享~!x0dx0a*/x0dx0a少量数据库同步可以采用触发器实现,同步单表即可。x0dx0ax0dx0a三、配置过程中可能出现的问题x0dx0ax0dx0a在sql server 2000里设置和使用数据库复制之前,应先检查相关的几台sql server服务器下面几点是否满足:x0dx0ax0dx0a1、mssqlserver和sqlserveragent服务是否是以域用户身份启动并运行的(.\administrator用户也是可以的)x0dx0ax0dx0a如果登录用的是本地系统帐户local,将不具备网络功能,会产生以下错误:x0dx0ax0dx0a进程未能连接到distributor '@server name'x0dx0ax0dx0a(如果您的服务器已经用了sql server全文检索服务, 请不要修改mssqlserver和sqlserveragent服务的local启动。x0dx0a会照成全文检索服务不能用。请换另外一台机器来做sql server 2000里复制中的分发服务器。)x0dx0ax0dx0a修改服务启动的登录用户,需要重新启动mssqlserver和sqlserveragent服务才能生效。x0dx0ax0dx0a2、检查相关的几台sql server服务器是否改过名称(需要srvid=0的本地机器上srvname和datasource一样)x0dx0ax0dx0a在查询分析器里执行:x0dx0ause masterx0dx0aselect srvid,srvname,datasource from sysserversx0dx0ax0dx0a如果没有srvid=0或者srvid=0(也就是本机器)但srvname和datasource不一样, 需要按如下方法修改:x0dx0ax0dx0ause masterx0dx0agox0dx0a-- 设置两个变量x0dx0adeclare @serverproperty_servername varchar(100),x0dx0a@servername varchar(100)x0dx0a-- 取得windows nt 服务器和与指定的 sql server 实例关联的实例信息x0dx0aselect @serverproperty_servername = convert(varchar(100), serverproperty('servername'))x0dx0a-- 返回运行 microsoft sql server 的本地服务器名称x0dx0aselect @servername = convert(varchar(100), @@servername)x0dx0a-- 显示获取的这两个参数x0dx0aselect @serverproperty_servername,@servernamex0dx0a--如果@serverproperty_servername和@servername不同(因为你改过计算机名字),再运行下面的x0dx0a--删除错误的服务器名x0dx0aexec sp_dropserver @server=@servernamex0dx0a--添加正确的服务器名x0dx0aexec sp_addserver @server=@serverproperty_servername, @local='local'x0dx0ax0dx0a修改这项参数,需要重新启动mssqlserver和sqlserveragent服务才能生效。x0dx0ax0dx0a这样一来就不会在创建复制的过程中出现18482、18483错误了。x0dx0ax0dx0a3、检查sql server企业管理器里面相关的几台sql server注册名是否和上面第二点里介绍的srvname一样x0dx0ax0dx0a不能用ip地址的注册名。x0dx0ax0dx0a(我们可以删掉ip地址的注册,新建以sql server管理员级别的用户注册的服务器名)x0dx0ax0dx0a这样一来就不会在创建复制的过程中出现14010、20084、18456、18482、18483错误了。x0dx0ax0dx0a4、检查相关的几台sql server服务器网络是否能够正常访问x0dx0ax0dx0a如果ping主机ip地址可以,但ping主机名不通的时候,需要在x0dx0ax0dx0awinnt\system32\drivers\etc\hosts (win2000)x0dx0awindows\system32\drivers\etc\hosts (win2003)x0dx0ax0dx0a文件里写入数据库服务器ip地址和主机名的对应关系。x0dx0ax0dx0a例如:x0dx0ax0dx0a127.0.0.1 localhostx0dx0a192.168.0.35 oracledb oracledbx0dx0a192.168.0.65 fengyu02 fengyu02x0dx0a202.84.10.193 bj_db bj_dbx0dx0a或者在sql server客户端网络实用工具里建立别名,例如:x0dx0a5、系统需要的扩展存储过程是否存在(如果不存在,需要恢复):x0dx0ax0dx0asp_addextendedproc 'xp_regenumvalues',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc 'xp_regdeletevalue',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc 'xp_regdeletekey',@dllname ='xpstar.dll'x0dx0agox0dx0asp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' x0dx0ax0dx0a接下来就可以用sql server企业管理器里[复制]-> 右键选择 ->[配置发布、订阅服务器和分发]的图形界面来配置数据库复制了。x0dx0ax0dx0a下面是按顺序列出配置复制的步骤:x0dx0ax0dx0a1、建立发布和分发服务器x0dx0ax0dx0a[欢迎使用配置发布和分发向导]->[选择分发服务器]->[使"@servername"成为它自己的分发服务器,sql server将创建分发数据库和日志]x0dx0a->[制定快照文件夹]-> [自定义配置] -> [否,使用下列的默认配置] -> [完成]x0dx0ax0dx0a上述步骤完成后, 会在当前"@servername" sql server数据库里建立了一个distribion库和 一个distributor_admin管理员级别的用户(我们可以任意修改密码)。x0dx0ax0dx0a服务器上新增加了四个作业:x0dx0ax0dx0a[ 代理程序历史记录清除: distribution ]x0dx0a[ 分发清除: distribution ]x0dx0a[ 复制代理程序检查 ]x0dx0a[ 重新初始化存在数据验证失败的订阅 ]x0dx0ax0dx0asql server企业管理器里多了一个复制监视器, 当前的这台机器就可以发布、分发、订阅了。x0dx0ax0dx0a我们再次在sql server企业管理器里[复制]-> 右键选择 ->[配置发布、订阅服务器和分发]x0dx0ax0dx0a我们可以在 [发布服务器和分发服务器的属性] 窗口-> [发布服务器] -> [新增] -> [确定] -> [发布数据库] -> [事务]/[合并] -> [确定] -> [订阅服务器] -> [新增] -> [确定]x0dx0ax0dx0a把网络上的其它sql server服务器添加成为发布或者订阅服务器.x0dx0ax0dx0a新增一台发布服务器的选项:x0dx0ax0dx0a我这里新建立的jin001发布服务器是用管理员级别的数据库用户test连接的,x0dx0ax0dx0a到发布服务器的管理链接要输入密码的可选框, 默认的是选中的,x0dx0ax0dx0a在新建的jin001发布服务器上建立和分发服务器fengyu/fengyu的链接的时需要输入distributor_admin用户的密码。到发布服务器的管理链接要输入密码的可选框,也可以不选,也就是不需要密码来建立发布到分发服务器的链接(这当然欠缺安全,在测试环境下可以使用)。x0dx0ax0dx0a2、新建立的网络上另一台发布服务器(例如jin001)选择分发服务器x0dx0ax0dx0a[欢迎使用配置发布和分发向导]->[选择分发服务器]x0dx0ax0dx0a-> 使用下列服务器(选定的服务器必须已配置为分发服务器) -> [选定服务器](例如fengyu/fengyu)x0dx0ax0dx0a-> [下一步] -> [输入分发服务器(例如fengyu/fengyu)的distributor_admin用户的密码两次]x0dx0ax0dx0a-> [下一步] -> [自定义配置] -> [否,使用下列的默认配置]x0dx0ax0dx0a-> [下一步] -> [完成] -> [确定]x0dx0ax0dx0a建立一个数据库复制发布的过程:x0dx0ax0dx0a[复制] -> [发布内容] -> 右键选择 -> [新建发布]x0dx0ax0dx0a-> [下一步] -> [选择发布数据库] -> [选中一个待发布的数据库]x0dx0ax0dx0a-> [下一步] -> [选择发布类型] -> [事务发布]/[合并发布]x0dx0ax0dx0a-> [下一步] -> [指定订阅服务器的类型] -> [运行sql server 2000的服务器]x0dx0ax0dx0a-> [下一步] -> [指定项目] -> [在事务发布中只可以发布带主键的表] -> [选中一个有主键的待发布的表]x0dx0ax0dx0a->[在合并发布中会给表增加唯一性索引和 rowguidcol 属性的唯一标识符字段[rowguid],默认值是newid()]x0dx0ax0dx0a(添加新列将: 导致不带列列表的 insert 语句失败,增加表的大小,增加生成第一个快照所要求的时间)x0dx0ax0dx0a->[选中一个待发布的表]x0dx0ax0dx0a-> [下一步] -> [选择发布名称和描述] ->x0dx0ax0dx0a-> [下一步] -> [自定义发布的属性] -> [否,根据指定方式创建发布]x0dx0ax0dx0a-> [下一步] -> [完成] -> [关闭]x0dx0ax0dx0a发布属性里有很多有用的选项:设定订阅到期(例如24小时)x0dx0ax0dx0a设定发布表的项目属性:x0dx0ax0dx0a常规窗口可以指定发布目的表的名称,可以跟原来的表名称不一样。x0dx0ax0dx0a下图是命令和快照窗口的栏目x0dx0ax0dx0a( sql server 数据库复制技术实际上是用insert,update,delete操作在订阅服务器上重做发布服务器上的事务操作x0dx0ax0dx0a看文档资料需要把发布数据库设成完全恢复模式,事务才不会丢失x0dx0ax0dx0a但我自己在测试中发现发布数据库是简单恢复模式下,每10秒生成一些大事务,10分钟后再收缩数据库日志,x0dx0a这期间发布和订阅服务器上的作业都暂停,暂停恢复后并没有丢失任何事务更改 )x0dx0ax0dx0a发布表可以做数据筛选,例如只选择表里面的部分列:x0dx0ax0dx0a例如只选择表里某些符合条件的记录, 我们可以手工编写筛选的sql语句:x0dx0ax0dx0a发布表的订阅选项,并可以建立强制订阅:x0dx0ax0dx0a成功建立了发布以后,发布服务器上新增加了一个作业: [ 失效订阅清除 ]x0dx0ax0dx0a分发服务器上新增加了两个作业:x0dx0a[ jin001-dack-dack-5 ] 类型[ repl快照 ]x0dx0a[ jin001-dack-3 ] 类型[ repl日志读取器 ]x0dx0ax0dx0a上面蓝色字的名称会根据发布服务器名,发布名及第几次发布而使用不同的编号x0dx0ax0dx0arepl快照作业是sql server复制的前提条件,它会先把发布的表结构,数据,索引,约束等生成到发布服务器的os目录下文件x0dx0a(当有订阅的时候才会生成, 当订阅请求初始化或者按照某个时间表调度生成)x0dx0ax0dx0arepl日志读取器在事务复制的时候是一直处于运行状态。(在合并复制的时候可以根据调度的时间表来运行)x0dx0ax0dx0a建立一个数据库复制订阅的过程:x0dx0ax0dx0a[复制] -> [订阅] -> 右键选择 -> [新建请求订阅]x0dx0ax0dx0a-> [下一步] -> [查找发布] -> [查看已注册服务器所做的发布]x0dx0ax0dx0a-> [下一步] -> [选择发布] -> [选中已经建立发布服务器上的数据库发布名]x0dx0ax0dx0a-> [下一步] -> [指定同步代理程序登录] -> [当代理程序连接到代理服务器时:使用sql server身份验证]x0dx0a(输入发布服务器上distributor_admin用户名和密码)x0dx0ax0dx0a-> [下一步] -> [选择目的数据库] -> [选择在其中创建订阅的数据库名]/[也可以新建一个库名]x0dx0ax0dx0a-> [下一步] -> [允许匿名订阅] -> [是,生成匿名订阅]x0dx0ax0dx0a-> [下一步] -> [初始化订阅] -> [是,初始化架构和数据]x0dx0ax0dx0a-> [下一步] -> [快照传送] -> [使用该发布的默认快照文件夹中的快照文件]x0dx0a(订阅服务器要能访问发布服务器的repldata文件夹,如果有问题,可以手工设置网络共享及共享权限)x0dx0ax0dx0a-> [下一步] -> [快照传送] -> [使用该发布的默认快照文件夹中的快照文件]x0dx0ax0dx0a-> [下一步] -> [设置分发代理程序调度] -> [使用下列调度] -> [更改] -> [例如每五分钟调度一次]x0dx0ax0dx0a-> [下一步] -> [启动要求的服务] -> [该订阅要求在发布服务器上运行sqlserveragent服务]x0dx0ax0dx0a-> [下一步] -> [完成] -> [确定]x0dx0ax0dx0a成功建立了订阅后,订阅服务器上新增加了一个类别是[repl-分发]作业(合并复制的时候类别是[repl-合并])x0dx0ax0dx0a它会按照我们给的时间调度表运行数据库同步复制的作业。x0dx0ax0dx0a3、sql server复制配置好后, 可能出现异常情况的实验日志:x0dx0ax0dx0a1.发布服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制没有多大影响x0dx0ax0dx0a中断期间,分发和订阅都接收到没有复制的事务信息x0dx0ax0dx0a2.分发服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制有一些影响x0dx0ax0dx0a中断期间,发布服务器的事务排队堆积起来x0dx0a(如果设置了较长时间才删除过期订阅的选项, 繁忙发布数据库的事务日志可能会较快速膨胀),x0dx0ax0dx0a订阅服务器会因为访问不到发布服务器,反复重试x0dx0a我们可以设置重试次数和重试的时间间隔(最大的重试次数是9999, 如果每分钟重试一次,可以支持约6.9天不出错)x0dx0ax0dx0a分发服务器sql server服务启动,网络接通以后,发布服务器上的堆积作业将按时间顺序作用到订阅机器上:x0dx0ax0dx0a会需要一个比较长的时间(实际上是生成所有事务的insert,update,delete语句,在订阅服务器上去执行)x0dx0a我们在普通的pc机上实验的58个事务100228个命令执行花了7分28秒.x0dx0ax0dx0a3.订阅服务器断网,sql server服务关闭,重启动,关机的时候,对已经设置好的复制影响比较大,可能需要重新初试化x0dx0ax0dx0a我们实验环境(订阅服务器)从18:46分意外停机以, 第二天8:40分重启动后, 已经设好的复制在8:40分以后又开始正常运行了, 发布服务器上的堆积作业将按时间顺序作用到订阅机器上, 但复制管理器里出现快照的错误提示, 快照可能需要重新初试化,复制可能需要重新启动.(我们实验环境的机器并没有进行快照初试化,复制仍然是成功运行的)x0dx0ax0dx0a4、删除已经建好的发布和定阅可以直接用delete删除按钮x0dx0ax0dx0a我们最好总是按先删定阅,再删发布,最后禁用发布的顺序来操作。x0dx0ax0dx0a如果要彻底删去sql server上面的复制设置, 可以这样操作:x0dx0ax0dx0a[复制] -> 右键选择 [禁用发布] -> [欢迎使用禁用发布和分发向导]x0dx0ax0dx0a-> [下一步] -> [禁用发布] -> [要在"@servername
C. 黑匣子这么重要,但为什么数据不能云同步呢
想要让黑匣子实现所有的数据云同步,那根本就不是一件简单的事情,因为我们要知道这个东西,它最主要的一个任务就是帮我们保存飞机相关的数据,除此之外,它其他方面的性能是非常的差的,根本就没有办法搭载实现数据同步所需要的一个环境。发明黑匣子的那个年代,各方面的技术都不是特别的成熟,所以它能够记录保存数据就已经非常的不容易了,虽然说现在的各方面通信技术都有很大的发展,飞机也可以连WiFi了,但是想要实现数据同步也没有那么简单的。
D. 两台服务器,在不同的机房,两台都放着同一个网站,目前域名解析到A服务器,如何实现网站数据实时同步到
双机热备:基于共享存储与纯软件方式
数据库双机热备有两种典型的方式,一种是比较标准的,两台服务器通过一个共享的存储设备(一般是共享的磁盘阵列或存储区域网SAN),并且安装双机软件,实现双机热备,称为共享方式。另一种方式是通过纯软件的方式,一般称为纯软件方式或镜像方式(Mirror)。
对于共享方式,数据库放在共享的存储设备上。当一台服务器提供服务时,直接在存储设备上进行读写。而当系统切换后,另一台服务器也同样读取该存储设备上的数据。
对于纯软件的方式,通过镜像软件,将数据可以实时复制到另一台服务器上,这样同样的数据就在两台服务器上各存在一份,如果一台服务器出现故障,可以及时切换到另一台服务器。
纯软件方式可以在一定程度上降低成本,但它也有非常明显的缺点:
1.可靠性相对较差,两服务器间的数据实时复制是一个比较脆弱的环节。
2.一旦某台服务器出现中断,恢复后还要进行比较复杂的数据同步恢复。并且,这个时段系统处于无保护状态。
3.没有事务机制,由于其复制是在文件和磁盘层进行的,复制是否成功不会影响数据库事务操作,因此有出现数据不完整变化的情况,这个存在着相当的风险。
因此,建议除非不得已,不要选择纯软件方案。
E. 分布式存储中,怎样使用paxos算法保证数据的一致性
在分布式系统中,我们经常遇到多数据副本保持一致的问题,在我们所能找到的资料中该问题讲的很笼统,模模糊糊的,把多个问题或分类糅合在一起,难以理解。在思考和翻阅资料后,通俗地把一致性的问题可分解为2个问题:
1、任何一次修改保证数据一致性。
2、多次数据修改的一致性。
在弱一致性的算法,不要求每次修改的内容在修改后多副本的内容是一致的,对问题1的解决比较宽松,更多解决问题2,该类算法追求每次修改的高度并发性,减少多副本之间修改的关联性,以获得更好的并发性能。例如最终一致性,无所谓每次用户修改后的多副本的一致性及格过,只要求在单调的时间方向上,数据最终保持一致,如此获得了修改极大的并发性能。
在强一致性的算法中,强调单次修改后结果的一致,需要保证了对问题1和问题2要求的实现,牺牲了并发性能。本文是讨论对解决问题1实现算法,这些算法往往在强一致性要求的应用中使用。
解决问题1的方法,通常有两阶段提交算法、采用分布式锁服务和采用乐观锁原理实现的同步方式,下面分别介绍这几种算法的实现原理。
两阶段提交算法
在两阶段提交协议中,系统一般包含两类机器(或节点):一类为协调者(coordinator),通常一个系统中只有一个;另一类为事务参与者(participants,cohorts或workers),一般包含多个,在数据存储系统中可以理解为数据副本的个数。两阶段提交协议由两个阶段组成,在正常的执行下,这两个阶段的执行过程如下所述:
阶段1:请求阶段(commit-request phase,或称表决阶段,voting phase)。
在请求阶段,协调者将通知事务参与者准备提交或取消事务,然后进入表决过程。在表决过程中,参与者将告知协调者自己的决策:同意(事务参与者本地作业执行成功)或取消(本地作业执行故障)。
阶段2:提交阶段(commit phase)。
在该阶段,协调者将基于第一个阶段的投票结果进行决策:提交或取消。当且仅当所有的参与者同意提交事务协调者才通知所有的参与者提交事务,否则协调者将通知所有的参与者取消事务。参与者在接收到协调者发来的消息后将执行响应的操作。
举个例子:A组织B、C和D三个人去爬长城:如果所有人都同意去爬长城,那么活动将举行;如果有一人不同意去爬长城,那么活动将取消。用2PC算法解决该问题的过程如下:
首先A将成为该活动的协调者,B、C和D将成为该活动的参与者。
阶段1:A发邮件给B、C和D,提出下周三去爬山,问是否同意。那么此时A需要等待B、C和D的邮件。B、C和D分别查看自己的日程安排表。B、C发现自己在当日没有活动安排,则发邮件告诉A它们同意下周三去爬长城。由于某种原因,D白天没有查看邮件。那么此时A、B和C均需要等待。到晚上的时候,D发现了A的邮件,然后查看日程安排,发现周三当天已经有别的安排,那么D回复A说活动取消吧。
阶段2:此时A收到了所有活动参与者的邮件,并且A发现D下周三不能去爬山。那么A将发邮件通知B、C和D,下周三爬长城活动取消。此时B、C回复A“太可惜了”,D回复A“不好意思”。至此该事务终止。
两阶段提交算法在分布式系统结合,可实现单用户对文件(对象)多个副本的修改,多副本数据的同步。其结合的原理如下:
1、客户端(协调者)向所有的数据副本的存储主机(参与者)发送:修改具体的文件名、偏移量、数据和长度信息,请求修改数据,该消息是1阶段的请求消息。
2、存储主机接收到请求后,备份修改前的数据以备回滚,修改文件数据后,向客户端回应修改成功的消息。 如果存储主机由于某些原因(磁盘损坏、空间不足等)不能修改数据,回应修改失败的消息。
3、客户端接收发送出去的每一个消息回应,如果存储主机全部回应都修改成功,向每存储主机发送确认修改的提交消息;如果存在存储主机回应修改失败,或者超时未回应,客户端向所有存储主机发送取消修改的提交消息。该消息是2阶段的提交消息。
4、存储主机接收到客户端的提交消息,如果是确认修改,则直接回应该提交OK消息;如果是取消修改,则将修改数据还原为修改前,然后回应取消修改OK的消息。
5、 客户端接收全部存储主机的回应,整个操作成功。
在该过程中可能存在通信失败,例如网络中断、主机宕机等诸多的原因,对于未在算法中定义的其它异常,都认为是提交失败,都需要回滚,这是该算法基于确定的通信回复实现的,在参与者的确定回复(无论是回复失败还是回复成功)之上执行逻辑处理,符合确定性的条件当然能够获得确定性的结果哲学原理。
分布式锁服务
分布式锁是对数据被外界修改持保守态度,在整个数据处理过程中将数据处于锁定状态,在用户修改数据的同时,其它用户不允许修改。
采用分布式锁服务实现数据一致性,是在操作目标之前先获取操作许可,然后再执行操作,如果其他用户同时尝试操作该目标将被阻止,直到前一个用户释放许可后,其他用户才能够操作目标。分析这个过程,如果只有一个用户操作目标,没有多个用户并发冲突,也申请了操作许可,造成了由于申请操作许可所带来的资源使用消耗,浪费网络通信和增加了延时。
采用分布式锁实现多副本内容修改的一致性问题, 选择控制内容颗粒度实现申请锁服务。例如我们要保证一个文件的多个副本修改一致, 可以对整个文件修改设置一把锁,修改时申请锁,修改这个文件的多个副本,确保多个副本修改的一致,修改完成后释放锁;也可以对文件分段,或者是文件中的单个字节设置锁, 实现更细颗粒度的锁操作,减少冲突。
常用的锁实现算法有Lamport bakery algorithm (俗称面包店算法), 还有Paxos算法。下面对其原理做简单概述。
Lamport面包店算法
是解决多个线程并发访问一个共享的单用户资源的互斥问题的算法。 由Leslie Lamport(英语:Leslie Lamport)发明。
Lamport把这个并发控制算法可以非常直观地类比为顾客去面包店采购。面包店只能接待一位顾客的采购。已知有n位顾客要进入面包店采购,安排他们按照次序在前台登记一个签到号码。该签到号码逐次加1。根据签到号码的由小到大的顺序依次入店购货。完成购买的顾客在前台把其签到号码归0. 如果完成购买的顾客要再次进店购买,就必须重新排队。
这个类比中的顾客就相当于线程,而入店购货就是进入临界区独占访问该共享资源。由于计算机实现的特点,存在两个线程获得相同的签到号码的情况,这是因为两个线程几乎同时申请排队的签到号码,读取已经发出去的签到号码情况,这两个线程读到的数据是完全一样的,然后各自在读到的数据上找到最大值,再加1作为自己的排队签到号码。为此,该算法规定如果两个线程的排队签到号码相等,则线程id号较小的具有优先权。
把该算法原理与分布式系统相结合,即可实现分步锁。
Paxos算法
该算法比较热门,参见WIKI,http://zh.wikipedia.org/wiki/Paxos%E7%AE%97%E6%B3%95
Paxos算法解决的问题是一个分布式系统如何就某个值(决议)达成一致。一个典型的场景是,在一个分布式数据库系统中,如果各节点的初始状态一致,每个节点都执行相同的操作序列,那么他们最后能得到一个一致的状态。为保证每个节点执行相同的命令序列,需要在每一条指令上执行一个“一致性算法”以保证每个节点看到的指令一致。一个通用的一致性算法可以应用在许多场景中,是分布式计算中的重要问题。节点通信存在两种模型:共享内存(Shared memory)和消息传递(Messages passing)。Paxos算法就是一种基于消息传递模型的一致性算法。BigTable使用一个分布式数据锁服务Chubby,而Chubby使用Paxos算法来保证备份的一致性。
采用乐观锁原理实现的同步
我们举个例子说明该算法的实现原理。如一个金融系统,当某个操作员读取用户的数据,并在读出的用户数据的基础上进行修改时(如更改用户帐户余额),如果采用前面的分布式锁服务机制,也就意味着整个操作过程中(从操作员读出数据、开始修改直至提交修改结果的全过程,甚至还包括操作员中途去煮咖啡的时间),数据库记录始终处于加锁状态,可以想见,如果面对几百上千个并发,这样的情况将导致怎样的后果。
乐观锁机制在一定程度上解决了这个问题。乐观锁,大多是基于数据版本( Version)记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
对于上面修改用户帐户信息的例子而言,假设数据库中帐户信息表中有一个 version 字段,当前值为 1 ;而当前帐户余额字段( balance )为 $100 。
操作员 A 此时将其读出(version=1 ),并从其帐户余额中扣除 $50($100-$50 )。
在操作员 A 操作的过程中,操作员B也读入此用户信息( version=1 ),并从其帐户余额中扣除 $20 ( $100-$20 )。
操作员 A 完成了修改工作,将数据版本号加一( version=2 ),连同帐户扣除后余额( balance=$50 ),提交至数据库更新,此时由于提交数据版本大于数据库记录当前版本,数据被更新,数据库记录 version 更新为 2 。
操作员 B 完成了操作,也将版本号加一( version=2 )试图向数据库提交数据( balance=$80 ),但此时比对数据库记录版本时发现,操作员 B 提交的数据版本号为 2 ,数据库记录当前版本也为 2 ,不满足 “ 提交版本必须大于记录当前版本才能执行更新 “ 的乐观锁策略,因此,操作员 B 的提交被驳回。这样,就避免了操作员 B 用基于 version=1 的旧数据修改的结果覆盖操作员A 的操作结果的可能。
乐观锁机制与分布式系统相结合上, 我整理了伪代码如下:
obj 操作的目标
vlaue 修改的值
atom_update_ver 每个目标上的版本,每次修改该值递增
set( obj, value)
{
//从每个节点上取出修改前的对象版本
get original_ver = obj.atom_update_ver from each node;
//将值赋到每个节点的obj目标
set obj = value from each node;
//条件修改每个节点的obj版本,目标版本加一
//比较和修改操作是原子操作
result = (set obj.atom_update_ver = original_ver + 1
where original_ver + 1 > obj.atom_update_ver
for each node);
if(result == ok)
return set_ok;
else
return set(obj, value);//不成功递归修改
该算法未考虑节点下线、失效等问题,在后续我将分析采用乐观锁原理实现一致性算法,解决问题2、节点失效、通信失败等问题。
F. iCloud云储存空间当前不可用,请问如何解决iPhone和Mac的日历无法同步
iCloud云储存满了才会出现这种情况,具体的解决方法:
1、打开设置中蜂窝移动网络。
如果以上方法还不行的话,那么使用电脑登录iCloud网页,重新修改iCloud账号密码。
(6)网络存储数据不能同步扩展阅读
iCloud要求使用 WLAN 或其他互联网连接。 各项功能可能会有所变化,某些服务仅限 10 部装置进行访问。
iCloud 的部分功能要求使用安装iOS 5的 iPhone 3GS、iPhone 4、iPhone 4S、iPod touch (第三和第四代)、iPad 或 iPad 2。
或安装 OS X Lion 的 Mac 电脑或配备 Windows Vista 或 Windows 7 的 PC (推荐使用 Outlook 2007 或 2010)。
G. 第一个黑匣子找到后,数据为何不能云同步引热议,专家对此是如何解读的
先说坠落时舱内人员的状况。初始阶段:无比的惊恐、莫明的害怕、本能的尖叫、亲人间的呼应,机舱内一片混乱!坠落阶段:8000米高空,40吨重量,超音速的俯冲速度,无论舱内人员保持什么姿态,均已陷入昏迷。即便落地燃爆,也是一无所知。再说坠地瞬间所发生的一切。飞机坠落时并未解体,当属人机共为一体。落地瞬间,两种恐怖结果同时产生:一是威力巨大的撞击力;二是令人恐怖的燃爆力。撞击力导致人员瞬间叠压在机头位置,而机头犹如钻地导弹般钻入地下10多米土层中,接着又被土掩埋。燃爆力导致机体后部粉碎性解体,其巨大的冲击波将各种残存的物件带离核心区,四散抛撒。
H. 360智灵通系统显示基础数据同步失败
网络问题。360智灵通系统显示基础数据同步失败是网络问题,可重新设置网络。网络故障是指硬件的问题、软件的漏洞、病毒的侵入等可以引起网络的故障。
I. SQL Server 2005在局域网内与Access数据库同步问题
数据库同步,你的意思是你的一个系统用的sql2005的数据库,一个系统用的access数据库,里面有些表是一样一样的,还是整个数据库的表都是一样的,当一个表的数据有变化的时候另一个数据库也要有变化,是这个意思不?借助第三方的收费插件。要 不就自己写存储过程或者写游标触发。要不就用那些硬件供应商的什么备份机制
J. win7系统同步到网络硬盘的数据库文件xp系统为什么不能保存,xp系统同步到win7系统能修改保存,而win7系统
win7系统的网络连接有问题