数据库高可用实战

数据库高可用实战
数据库高可用实战

数据库高可用实战

说到高可用,看官们会想到很多方案,也许是自亲身经历过系统从单机变成高可用的痛苦过程,也许有的看官只是在自己的虚机上搭建过测试的玩具。本文以我自己的真实经历给大家讲述,不管怎样,实战和测试玩耍还是很大区别的,可能你觉得搭建一套高可用方案很简单,配置下就OK了,但在真正的复杂系统中一切就没那么轻松了!

本文主要讲述升级并搭建AlwaysOn高可用的过程,以实施的思路为主。文中并没有搭建集群的步骤,搭建步骤请自行学习。(个人认为会搭建可用组并不是关键,而一系列的调研细节才是项目成功的关键)

一、背景

客户的现有方案是一套使用发布订阅构建的读写分离方案,总体来说系统构建的很不错。也是在SQL2012之前很常见的一套架构。

架构图如下:

客户的需求:SQL Server 2008 R2升级到SQL Server 2014使用AlwaysOn替换现有发布订阅架构。实现本地高可用、读写分离,异地灾备等,并应用部分2014的新功能,如内存优化表等提升系统性能和并发能力等。

二、前期调研

1数据收集

前期对系统的了解很重要!那么怎样对系统有一个初步直观并且详细的了解呢?用脚本收集?这时就体现出工具的专业和协作价值。工欲善其事,必先利其器!

三、确定方案

通过前期的需求分析,并对客户系统结构有了一个初步的了解后,我们用了将近一周的时间从架构的复杂度,易用性,客户程序改动程度,性能,稳定性等多个角度敲定了最终的方案。

架构图如下:

从原来复杂的架构变成如此清爽的架构,使用AlwaysOn取代复杂的发布订阅,使用AlwaysOn的只读节点实现读写分离,另外使用异地灾备节点取代原有的异地发布数据库,很不错吧~这也是用户最倾向的架构,因为复杂度低,相对稳定易于维护。这里要注意,凡事有利必有弊!要说“但是”了。

但是,升级改动的成本大大提升!为什么这么说?我们接着看!

四、详细调研

这样一个复杂系统前期的详细调研是需要很长时间的,几套系统不仅仅是架构上设计得比较复杂,功能应用、接口等更是复杂。下面是主要的一些梳理过程:

1原有系统结构

我们首先要对原有系统的设计有透彻的了解,客户在两地分别有一个数据中心,三套系统有大量的业务要使用其他系统的数据,所以这里使用发布订阅准时地把其他系统中的数据发布到系统中的一个数据库,并使用同义词指向订阅来的数据。这种结构降低了使用链接服务器跨实例甚至跨机房访问的性能消耗。并且多份数据订阅到多个只读的节点,从而实现了报表、接口等业务的读写分离。

2系统对象整理

因为要做升级迁移,所以对象的整理是很重要的工作,业务对象的遗漏可能会带来不可挽回的灾难,甚至有可能会导致整个升级、架构部署的回滚。几套系统中涉及的对象列表过于庞大,比如帐号几十个,几十个作业,上百个同义词,实例级触发器等等……

服务器划分:

?主库对象

?读写分离各个只读库对象

?发布到其他业务系统的数据服务器配置对象?其他应用程序对象

对象划分:

?数据库帐号

?链接服务器

?实例级触发器

?作业

?系统参数

?维护计划

?cdc

?BI相关

?同义词

?程序集

?邮件

?操作员

?只读库多出来的索引、视图等对象

?等等等

五、测试过程

1搭建测试环境

所有的升级、高可用项目测试环节都是必不可少的。首先是测方案配合业务的可行性,因为作为第三方公司不能对用户所有的应用关系,系统架构了如指掌,甚至客户方自己的工程师可能也做不到这一点。其次是测试功能在新环境下是否出现异常。还有就是对收集并迁移的系统对象进行一次查缺补漏。这样也可以尽量保证系统上线时发生故障的概率。

测试环境无疑是任何升级、架构变更的必要步骤,也只有经过充分的测试才能做到心中有数,进而实现零故障上线。

2上线演练

上线演练?这是个什么东西?

首先数据库的操作一定要确定可实施的时间窗口,保证在固定的时间窗口完成工作很重要。这就是上线演练的最大好处,我们使用准备出的新机器完全模拟上线的全部步骤,并记录每个步骤使用的时间,可能出现的风险,最迟的完成时间等等。其次搭建完成后我们可以用这个环境(就是完成后正式环境的配置)进行压力测试。

上线演练是一个很必要的步骤,但这个步骤要视实际的情况而定,比如升级的方式,环境的配置等。在这样的一个项目中我们做了两轮的上线演练。

六、实施过程

1制定性能基线

这样一个大的变动,数据库在各个阶段的性能指标是什么样子的呢?这里我们依然使用Expert for SQL Server工具对每一个阶段实施前后性能进行对比,这样不仅能对实施的影响进行监控,更能清晰地分析出每个实施阶段对性能的影响。

对每个指标也都做相应的对比分析,指标比较多这里不一一介绍了。

2性能优化

这里的性能优化,我们主要针对语句系统的一些常规参数、慢语句进行第一轮的优化,另外一个重点就是为了应对升级到2014后可能变慢的语句进行调整。具体什么样的语句可能变慢?这个...

?系统的重点语句(执行最频繁的)

?语句复杂的

?大面积测试吧.....哈哈哈

这里为什么要在升级前就做这样的优化工作,而不是升级后系统运行时在针对慢的语句进行分析呢?这个道理很简单,如果上线了才发现变慢的功能很多,或变慢的是频繁的功能,那么上线的效果就是"失败"两个字。虽然有的看官知道可以使用提示或降低兼容级别解决这个问题,但是这只是特殊场景下的极端手段,并不是解决的根本。所以建议如果你有升级到2014的需要,那么这样的优化手段一定要提前做好。

七、升级到2014

升级数据库完全可以写成好几篇博客,甚至写本小书都可以。这里只做简单介绍,和一些要重点注意的问题。

1升级方式

升级方式有2种:in place 和side by side,这里采用的是side by side。通俗地说就是准备新的服务器,安装对应版本的数据库,然后把数据还原上去。side by side的好处就是升级不会影响原有的环境,即使失败也能修改程序指向回退到原环境。

升级2014最大的一个问题

2014的新特性“参数估计”!这个让人兴奋又苦恼的新功能会导致很多语句在升级到2014后变慢,因为前面的优化阶段已经对这部分重点关注了,所以这部分的问题基本已经消灭。但是,万恶的分区表(200多个分区)依然导致了批处理的性能严重问题。

2集群搭建

集群搭建可能没有过多的可说支出,正常创建故障转移集群,搭建AlwaysOn 等,但这其中的细节还是很多的,比如仲裁的方式?异地节点的虚拟IP设置?节点个数与业务的配合?……等等的问题,这里也就不一一细说了。

3程序修改

这个架构的修改也必然导致程序上的变化,这也是前文中提到的为什么客户最倾向的架构,因为复杂度低而使成本大大提升。原始系统中的关联性无法通过发布订阅实现本地化访问,又不能使用性能非常差的链接服务器。那么路只有一条,那就是修改程序访问方式,简单理解为在程序中分别在各自的数据库中查出相应的数据,然后通过程序在内存中操作处理。

八、细节问题处理

总体的实施步骤可以说就是这样了,但是在这个整体步骤中充斥着无数的细节,每一个细节可能都决定着方案的可行性,升级、架构变更的成败。限于篇幅这里只举几个可能常见的问题说明一下。

?CDC功能与AlwaysOn:官方文档上说CDC与AlwaysOn可以实现转移后CDC不间断,但是经过测试CDC作业在AlwaysOn切换后多次执

行失败则不会再一次自动运行,CDC的logreader和发布订阅时一样

的,但在没有发布订阅存在的情况下只有CDC作业会出现上述问题。解决办法:配置调控作业(节点切换作业控制)

?重建索引操作:由于配置异地节点。日志重建变成问题,测试中重建索引的日志量是单机下日志量的好几倍!这样会导致异地日志队列过长。解决办法:使用手工脚本拆分细化索引重建,根据队列大小和传输速率控制每天的日志量。

?2014下语句变慢:具体就不细说了,2014参数估计和200+分区表组合产生的语句变慢问题至今没有答案。目前只是使用一些方法避免了这个问题!(这个问题也请遇到的朋友给些思路,谢谢)

?只读副本上有写操作:由于一些报表操作使用中间临时表,这里临时表不是#temp 这种而是真正的物理表作为临时表。解决办法:修改为临时

表,或创建单独数据库(不在可用性组中),在使用同义词指向新库实现写操作。

遇到的问题真是各种多,这也是为什么说当你的常规技术手段都掌握的时候,踩过的坑就是你的成长了!

总结

文章只是简单分享了一个较为复杂的08到14的升级并搭建高可用的工作,真正的实战项目和自己搭建的测试系统还是有很大的差别。项目整个工期持续了3个月,所以本文只是简单的说明思路和步骤,另外介绍了几个常见的大坑。项目中的主要步骤,个人认为这也是在数据库高可用方案搭建过程中的必要步骤:

?系统背景调查

?业务调研,生成初版方案

?详细调研,对象整理

?测试环境搭建

?系统测试,确定方案

?上线演练,确定时间窗口

?压力测试

?正式上线

?上线后监控

?解决问题,制定维护方案

此项目可以说是比较严格地遵循了相关管理的标准,在三个月的实施中,我们秉承这“稳定大于效率”的思想,工作细化到每一步,每一步都有详细的说明,最终保证了三套系统的上线运行零故障!

全文完

Oracle数据库高可用解决方案


甲骨文最高可用性架构 骨 最高 用性架构 Maximum Availability Architecture

议程表
? ? ? ? ? 甲骨文简介 高可用性介绍 传 高 用性分析 传统高可用性分析 甲骨文高可用性方案介绍(MAA) 客户成功案例分享
2

Oracle公司概揽
总揽
? ? ? ? ? ? 从08财年收入$22.4B,11财年收入35.6B 在40多项产品或市场领域占据业界第一 320,000客户跨越145国家 10W员工规模 (1 in i 3 joined j i df from acquisition) i iti ) Oracle在线社区上有超过五百万开发者 34年从业经验
革新和创新
? 超过3,000 3 000个产品,拥有 个产品 拥有2,000 2 000多个专利 ? 09财年投入$3B 研发和测试资金 ? 7,500 售后支持人员, 支持27国语言
3

今天的甲骨文公司
? 全球最大的企业软件供应商 ? 数据库市场占有率第一 ? 中间件市场占有率第一 ? 应用软件市场占有率第一 ? 服务器市场占有率第三 ? 开源产品的领军者 ? 虚拟化产品的竞争者 ? 云计算方案供应商
FAST?=?FusionMiddleware Applications System Tech
4

议程表
? ? ? ? ? 甲骨文简介 高可用性介绍 传 高 用性分析 传统高可用性分析 甲骨文高可用性方案介绍(MAA) 客户成功案例分享
5

服务器高并发解决方案

服务器高并发解决方案 篇一:JAVA WEB高并发解决方案 java处理高并发高负载类网站中数据库的设计方法(java教程,java处理大量数据,java高负载数据)一:高并发高负载类网站关注点之数据库没错,首先是数据库,这是大多数应用所面临的首个SPOF。尤其是的应用,数据库的响应是首先要解决的。 一般来说MySQL是最常用的,可能最初是一个mysql 主机,当数据增加到100万以上,那么,MySQL的效能急剧下降。常用的优化措施是M-S(主-从)方式进行同步复制,将查询和操作和分别在不同的服务器上进行操作。我推荐的是M-M-Slaves方式,2个主Mysql,多个Slaves,需要注意的是,虽然有2个Master,但是同时只有1个是Active,我们可以在一定时候切换。之所以用2个M,是保证M不会又成为系统的SPOF。 Slaves可以进一步负载均衡,可以结合LVS,从而将select操作适当的平衡到不同的slaves上。 以上架构可以抗衡到一定量的负载,但是随着用户进一步增加,你的用户表数据超过1千万,这时那个M变成了SPOF。你不能任意扩充Slaves,否则复制同步的开销将直线上升,怎么办?我的方法是表分区,从业务层面上进行分区。最简单的,以用户数据为例。根据一定的切分方式,比如id,

切分到不同的数据库集群去。 全局数据库用于meta数据的查询。缺点是每次查询,会增加一次,比如你要查一个用户nightsailer,你首先要到全局数据库群找到nightsailer对应的cluster id,然后再到指定的cluster找到nightsailer的实际数据。 每个cluster可以用m-m方式,或者m-m-slaves方式。这是一个可以扩展的结构,随着负载的增加,你可以简单的增加新的mysql cluster进去。 需要注意的是: 1、禁用全部auto_increment的字段 2、id需要采用通用的算法集中分配 3、要具有比较好的方法来监控mysql主机的负载和服务的运行状态。如果你有30台以上的mysql数据库在跑就明白我的意思了。 4、不要使用持久性链接(不要用pconnect),相反,使用sqlrelay这种第三方的数据库链接池,或者干脆自己做,因为php4中mysql的链接池经常出问题。 二:高并发高负载网站的系统架构之HTML静态化 其实大家都知道,效率最高、消耗最小的就是纯静态化 /shtml/XX07/的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实

5-企业案例-网络安全审计系统(数据库审计)解决方案

数据库审计系统技术建议书

目次 1.综述 (1) 2.需求分析 (1) 2.1.内部人员面临的安全隐患 (2) 2.2.第三方维护人员的威胁 (2) 2.3.最高权限滥用风险 (2) 2.4.违规行为无法控制的风险 (2) 2.5.系统日志不能发现的安全隐患 (2) 2.6.系统崩溃带来审计结果的丢失 (3) 3.审计系统设计方案 (3) 3.1.设计思路和原则 (3) 3.2.系统设计原理 (4) 3.3.设计方案及系统配置 (14) 3.4.主要功能介绍 (5) 3.4.1.数据库审计........................ 错误!未定义书签。 3.4.2.网络运维审计 (9) 3.4.3.OA审计............................ 错误!未定义书签。 3.4.4.数据库响应时间及返回码的审计 (9) 3.4.5.业务系统三层关联 (9) 3.4.6.合规性规则和响应 (10) 3.4.7.审计报告输出 (12) 3.4.8.自身管理 (13) 3.4.9.系统安全性设计 (14) 3.5.负面影响评价 (16) 3.6.交换机性能影响评价 (17) 4.资质证书.......................... 错误!未定义书签。

1.综述 随着计算机和网络技术发展,信息系统的应用越来越广泛。数据库做为信息技术的核心和基础,承载着越来越多的关键业务系统,渐渐成为商业和公共安全中最具有战略性的资产,数据库的安全稳定运行也直接决定着业务系统能否正常使用。 围绕数据库的业务系统安全隐患如何得到有效解决,一直以来是IT治理人员和DBA们关注的焦点。做为资深信息安全厂商,结合多年的安全研究经验,提出如下解决思路: 管理层面:完善现有业务流程制度,明细人员职责和分工,规范内部员工的日常操作,严格监控第三方维护人员的操作。 技术层面:除了在业务网络部署相关的信息安全防护产品(如FW、IPS 等),还需要专门针对数据库部署独立安全审计产品,对关键的数据库操作行为进行审计,做到违规行为发生时及时告警,事故发生后精确溯源。 不过,审计关键应用程序和数据库不是一项简单工作。特别是数据库系统,服务于各有不同权限的大量用户,支持高并发的事务处理,还必须满足苛刻的服务水平要求。商业数据库软件内置的审计功能无法满足审计独立性的基本要求,还会降低数据库性能并增加管理费用。 2.需求分析 随着信息技术的发展,XXX已经建立了比较完善的信息系统,数据库中承载的信息越来越受到公司相关部门、领导的重视。同时数据库中储存着诸如XXX等极其重要和敏感的信息。这些信息一旦被篡改或者泄露,轻则造成企业或者社会的经济损失,重则影响企业形象甚至社会安全。 通过对XXX的深入调研,XXX面临的安全隐患归纳如下:

高并发下的接口幂等性解决方案

高并发下的接口幂等性解决方案 我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。例如: 1.前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 2.我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统 bug重发,也应该只扣一次钱; 3.发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 4.创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。 等等很多重要的情况,这些逻辑都需要幂等的特性来支持。 二、幂等性概念 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。例如,“getUsername()和setTrue()”函数就是一个幂等函数.更复杂的操作幂等保证是利用唯一交易号(流水号)实现。我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的 三、技术方案 1. 查询操作查询一次和查询多次,在数据不变的情况下,查询结果是一样的。select是天然的幂等操作; 2. 删除操作删除操作也是幂等的,删除一次和多次删除都是把数据删除。(注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个); 3.唯一索引,防止新增脏数据比如:支付宝的资金账户,支付宝也有用户账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个,那么给资金账户表中的用户ID加唯一索引,所以一个用户新增成功一个资金账户记录。 要点:唯一索引或唯一组合索引来防止新增数据存在脏数据(当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可) 4. token机制,防止页面重复提交 业务要求: 页面的数据只能被点击提交一次。发生原因:由于重复点击或者网络重发,或者nginx重发等情况会导致数据被重复提交 解决办法:集群环境:采用token加redis(redis单线程的,处理需要排队)单JVM环境:采用token加redis或token加jvm内存。 处理流程: 1.数据提交前要向服务的申请token,token放到redis或jvm内存,token有效时间 2.提交后后台校验token,同时删除token,生成新的token返回; 3.token特点:要申请,一次有效性,可以限流; 4.注意:redis要用删除操作来判断token,删除成功代表token校验通过,如果用select+delete 来校验token,存在并发问题,不建议使用; 5. 悲观锁获取数据的时候加锁获取select * from table_xxx where id=3939 for update;注意:id 字段一定是主键或者唯一索引,不然是锁表,会死人的悲观锁使用时一般伴随事务一起使用,数据锁定时间可能会很长,根据实际情况选用。 6. 乐观锁乐观锁只是在更新数据那一刻锁表,其他时间不锁表,所以相对于悲观锁,效率更高。乐观锁的实现方式多种多样可以通过version或者其他状态条件:

技术方案-应用高可用解决方案(两地三中心)

英方软件数据库系统高可用解决方案 英方软件(上海)有限公司

目录 1. 概述 (1) 2. 需求分析 (2) 3.1主机配置 (3) 3.2方案拓扑图: (3) 3.3 I2高可用方案功能介绍 (4) 3.4管理控制台 (7) 5. I2的主要优势 (10) 6. 典型案例 (12) 7.公司简介 (13)

1. 概述 现代大型企业大多拥有为数众多的服务器,提供Internet与Intranet使用者各种不同的服务。如数据库系统、影像系统、录音系统、Email系统等。保持业务的持续性是当今企业用户进行数据存储需要考虑的一个重要方面。系统故障的出现,可能导致生产停顿,客户满意度降低,甚至失去客户,企业的竞争力也大打折扣。因此,保持业务的持续性是用户在选择计算机系统的重要指标。究其根本,保护业务持续性的重要手段就是提高计算机系统的高可靠性同时将数据的损失降至最低限度。 关键数据和数据库的备份操作已经成为日常运行处理的一个组成部分,以确保出现问题时及时恢复重要数据。传统的解决方案,类似于磁带机备份存在较大的缺点. 通常数据采用磁带离线备份,当数据量较大或突发灾难发生时,备份磁带无法真正及时快速恢复数据及业务。 提供有效的数据保护和高可用性服务,又在合理预算范围之内,并且能够基于你现有环境当中,获得实时数据保护,并无距离限制,为确保你重要数据的保护----包含数据库和邮件系统。I2为您提供了完美的解决方案。 I2 采用先进的异步实时数据复制技术(Asychronous Real-Time Data Replication),立即将所有服务器上对于磁盘系统的变更透过网络传输至备援服务器,而非整个档案或磁盘的镜设(Mirror),因此对于服务器的效能与网络带宽的影响都能降至最低,并能将成本降至最低,做到真正的实时数据保护. 业务数据是用户最宝贵的资产之一,数据的损失就是企业资产利润的损失,所以保护业务数据是企业计算系统的主要功能之一。实施I2的备份方案可以将用户数据的损失降至最低甚至为零。

.net高并发解决方案_1

竭诚为您提供优质文档/双击可除.net高并发解决方案 篇一:开源企业级web高并发解决方案 开源企业级web高并发解决方案 主要介绍利用开源的解决方案,来为企业搭建web高并发服务器架构花了一个多小时,画了张图片,希望能先帮你理解整个架构,之后我在一一介绍.linux的大型架构其实是一点点小架构拼接起来的,笔者从各个应用开始配置,最后在完全整合起来,以实现效果。 笔者所使用的环境为Rhel5.4内核版本2.6.18实现过程在虚拟机中,所用到的安装包为dVd光盘自带rpm包装过developmentlibrariesdevelopmenttools包组 笔者所使用的环境为Rhel5.4内核版本2.6.18实现过程在虚拟机中,所用到的安装包为dVd光盘自带rpm包装过developmentlibrariesdevelopmenttools包组 笔者虚拟机有限,只演示单边varnish配置 一、配置前端lVs负载均衡 笔者选用lVs的dR模型来实现集群架构,如果对dR模型不太了了解的朋友建议先去看看相关资料。

本模型实例图为: 现在director 上安装ipvsadm,笔者yum配置指向有集群源所以直接 用yum安装。yuminstallipvsadm 下面是director配置: dip配置在接口上172.16.100.10 Vip配置在接口别名上:172.16.100.1 varnish服务器配置:Rip配置在接口上:172.16.100.11;Vip配置在lo别名上 如果你要用到下面的heartbeat的ldirectord来实现 资源转换,则下面的#director配置不用配置 1.#director配置 2.ifconfigeth0172.16.100.10/16 3.ifconfigeth0:0172.16.100.1broadcast172.16.100.1ne tmask255.25 5.255.255up 4.routeadd-host172.16.100.1deveth0:0 5.echo1>/proc/sys/net/ipv4/ip_forward 1.#varnish服务器修改内核参数来禁止响应对Vip的aRp广播请求 2.echo1>/proc/sys/net/ipv4/conf/lo/arp_ignore

黑马程序员:高并发解决方案

黑马程序员:高并发解决方案 一、什么是高并发 高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关常用的一些指标有响应时间(Response Time),吞吐量(Throughput),每秒查询率QPS(Query Per Second),并发用户数等。 响应时间:系统对请求做出响应的时间。例如系统处理一个HTTP请求需要200ms,这个200ms就是系统的响应时间。 吞吐量:单位时间内处理的请求数量。 QPS:每秒响应请求数。在互联网领域,这个指标和吞吐量区分的没有这么明显。并发用户数:同时承载正常使用系统功能的用户数量。例如一个即时通讯系统,同时在线量一定程度上代表了系统的并发用户数。 二、什么是秒杀 秒杀场景一般会在电商网站举行一些活动或者节假日在12306网站上抢票时遇到。对于电商网站中一些稀缺或者特价商品,电商网站一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大量用户前来抢购,并且会在约定的时间点同时在秒杀页面进行抢购。

此种场景就是非常有特点的高并发场景,如果不对流量进行合理管控,肆意放任大流量冲击系统,那么将导致一系列的问题出现,比如一些可用的连接资源被耗尽、分布式缓存的容量被撑爆、数据库吞吐量降低,最终必然会导致系统产生雪崩效应。 一般来说,大型互联网站通常采用的做法是通过扩容、动静分离、缓存、服务降级及限流五种常规手段来保护系统的稳定运行。 三、扩容 由于单台服务器的处理能力有限,因此当一台服务器的处理能力接近或已超出其容量上限时,采用集群技术对服务器进行扩容,可以很好地提升系统整体的并行处理能力,在集群环境中,节点的数量越多,系统的并行能力和容错性就越强。在无状态服务下,扩容可能是迄今为止效果最明显的增加并发量的技巧之一。从扩容方式角度讲,分为垂直扩容(scale up)和水平扩容(scale out)。垂直扩容就是增加单机处理能力,怼硬件,但硬件能力毕竟还是有限;水平扩容说白了就是增加机器数量,怼机器,但随着机器数量的增加,单应用并发能力并不一定与其呈现线性关系,此时就可能需要进行应用服务化拆分了。 从数据角度讲,扩容可以分为无状态扩容和有状态扩容。无状态扩容一般就是指我们的应用服务器扩容;有状态扩容一般是指数据存储扩容,要么将一份数据拆分成不同的多份,即sharding,要么就整体复制n份,即副本。sharding遇

SQL server高可用方案

SQL server高可用方案 一、高可用的类型 ●AlwaysOn 高可用性解决方案,需要sql server 版本在2012以上 SQL Server AlwaysOn 即“全面的高可用性和灾难恢复解决方案”。客户通过使用AlwaysOn 技术,可以提高应用管理方面的工作。 SQL Server AlwaysOn 在以下2个级别提供了可用性。 *数据库级可用性 是一种“热备份”技术。在同步提交模式下,主副本的数据被同步更新到其他辅助副本,主副本与辅助副本之间可以时,辅助副本可以立即成为新的主副本。 *实例级可用性 AlwaysOn 故障转移群集实例(Failover Cluster Instance,简称FCI)可以在多个16个节点之间实现故障转移(版只支持2个节点。 当主节点发生故障时,辅助节点提升为主节点并获取共享存储中的数据,然后才在这个新的主节点服务器中启动FCI 是一种“冷备份”技术。辅助节点并不从主节点同步数据,唯一的一份数据被保存在共享存储(群集共享磁盘)●日志传送 日志传送依赖于传统的Windows 文件复制技术与SQL Server 代理。 主数据库所做出的任何数据变化都会被生成事务日志,这些事务日志将定期备份。然后备份文件被辅助数据库所属最后事务日志备份在辅助数据库中进行恢复,从面实现在两个数据库之间异步更新数据。 当主数据库发生故障时,可以使辅助数据库变成联机状态。可以把每一个辅助数据库都当作“冷备用”数据库

●其它辅助技术 对数据库进行备份,当出现故障时,手动将数据还原到服务器,使得数据库重新联机,这也可以算作实现高可用性复制(Replication)并不算是一个高可用性解决方案,只是它的功能可以实现高可用性。复制通过“发布-订阅”模式服务器间实现可用性。 SQL server复制 定义及应用:数据库间复制和分发数据和数据库对象,然后在数据库间进 过局域网和广域网、拨号连接、无线连接和Internet 将数据分配到不同位sql server复制分成三类: 事务复制通常用于需要高吞吐量的服务器到服务器方案(包括:提高可伸 点的数据、集成异类数据以及减轻批处理的负荷)。 合并复制主要是为可能存在数据冲突的移动应用程序或分步式服务器应用 交换数据、POS(消费者销售点)应用程序以及集成来自多个站点的数据 快照复制用于为事务复制和合并复制提供初始数据集;在适合数据完全刷二、高可用的服务器配置: 如果只是需要复制方式,则搭建两台相同硬件配置和操作系统版本与补丁 如果需要AlwaysOn 高可用方式,即出现故障后系统自动进行切换到备用 服务器、从服务器)相同硬件配置和操作系统版本与补丁、相同数据库版本三、各种实现方式的对比 下表将SQL Server 常用的高可用性解决方案进行综合对比。

数据库负载均衡解决方案

双节点数据库负载均衡解决方案 问题的提出? 在SQL Server数据库平台上,企业的数据库系统存在的形式主要有单机模式和集群模式(为了保证数据库的可用性或实现备份)如:失败转移集群(MSCS)、镜像(Mirror)、第三方的高可用(HA)集群或备份软件等。伴随着企业的发展,企业的数据量和访问量也会迅猛增加,此时数据库就会面临很大的负载和压力,意味着数据库会成为整个信息系统的瓶颈。这些“集群”技术能解决这类问题吗?SQL Server数据库上传统的集群技术 Microsoft Cluster Server(MSCS) 相对于单点来说Microsoft Cluster Server(MSCS)是一个可以提升可用性的技术,属于高可用集群,Microsoft称之为失败转移集群。 MSCS 从硬件连接上看,很像Oracle的RAC,两个节点,通过网络连接,共享磁盘;事实上SQL Server 数据库只运行在一个节点上,当出现故障时,另一个节点只是作为这个节点的备份; 因为始终只有一个节点在运行,在性能上也得不到提升,系统也就不具备扩展的能力。当现有的服务器不能满足应用的负载时只能更换更高配置的服务器。 Mirror 镜像是SQL Server 2005中的一个主要特点,目的是为了提高可用性,和MSCS相比,用户实现数据库的高可用更容易了,不需要共享磁盘柜,也不受地域的限制。共设了三个服务器,第一是工作数据库(Principal Datebase),第二个是镜像数据库(Mirror),第三个是监视服务器(Witness Server,在可用性方面有了一些保证,但仍然是单服务器工作;在扩展和性能的提升上依旧没有什么帮助。

MSSQL数据库高可用性方案

高可用MS SQL Server数据库解决方案 建设目标 减少硬件或软件故障造成的影响,保持业务连续性,从而将用户可以察觉到的停机时间减至最小,确保数据库服务7*24小时(RTO为99.9%)运转,建设一套完整的高可用性MS SQL Server数据库系统。 需求分析 服务器宕机造成的影响 服务器宕机时间使得丢失客户收益并降低员工生产效率,为了避免对业务造成影响,从两个方面采取预防措施: 一、计划宕机时的可用性: ●补丁或补丁包安装 ●软硬件升级 ●更改系统配置 ●数据库维护 ●应用程序升级 二、防止非计划性宕机: ●人为错误导致的失败 ●站点灾难 ●硬件故障

●数据损毁 ●软件故障 现有状况 ●服务器存在单点故障; ●数据库未做高可用性配置; ●数据库版本为MS SQL Server2008; ●服务器配置为CPU E7540 2.0,24G存; ●数据库容量约800G 技术解决方案 解决思路 考虑到本项目的需求和最佳性能,为了达到最佳可用性,方案采用两台数据库服务器做故障转移集群,连接同一台存储做数据库的共享存储,实现故障自动转移。同时,将旧服务器作为镜像数据库,采用SQL Server 2012的alwayson 功能来再次完成自动故障转移,并可以分担查询的负载。

架构拓扑 新数据库:承担数据库主体计算功能,用于生产数据,采用双机集群,实现自动故障转移。 旧数据库:通过镜像功能,存储数据库副本,用于发生故障时的转移。也可配置为只读,承担备份的负载。 存储:存储采用双控制器,双FC连接两台服务器,避免单点故障。 主/辅域控制器:采用双机模式,SQL Server 2012 实现高可用的必备基础设施。 高可靠性技术方案 SQL Server的企业版支持所有的高可用性功能,这些功能包括:

数据库高并发升级方案1

XXXXXXXXXXXX平台数据库升级方案 XXXXXXXXXXXXXXX有限公司2016年11月28日

目录 1. 概述 (4) 1.1. 背景 (4) 1.2. 目标与目的 (4) 1.3. 可行性分析 (4) 1.4. 参考依据 (5) 2. 数据库高并发方案 (5) 2.1. 数据库均衡负载(RAC) (5) 2.2. 数据库主从部署 (8) 2.3. 数据库垂直分割 (9) 2.4. 数据库水平分割 (10) 3. 二代办公平台数据库优化设计 (11) 3.1. 数据库集群 (11) 3.2. 重点业务表分区 (11) 3.3. 任务表历史数据分割 (12) 3.4. 数据库表结构优化 (12) 3.5. 数据访问优化 (12) 4. 实施方案 (13) 5. 工作量及预算评估 (14) 5.1. 工作量及预算评估 (14) 5.2. 其他费用 (15)

1.概述 1.1.背景 随着XXXXXX平台及其他子系统业务量增多,且用户已面向各地州市,用户数量增大,现有的二代办公平台及其他子系统在单一环境下的架构体系和数据库架构体系也无法高效的满足这样的场景。 当前XXXXXX平台及其子系统通过搭建多台WEB服务器和双机热备份的方式进行部署运行。虽已提高了整体效率,但对于部分的业务处理还是未解决。部分业务量并发处理多,业务关联多等因素,导致对数据库并发处理的业务量大,读写量大等也无法用双机热备份进行解决。 因此,在此背景下提高数据库访问效率,增大访问吞吐量等将成为二代办公平台及其子系统运行顺畅的关键因素。 1.2.目标与目的 目标:依托现有系统服务和设备环境,建立可扩容、高并发、高吞吐量的数据库架构体系。 目的:为缓解当前XXXXXX平台机器及其他子系统对数据库访问过大,造成的访问效率低下的问题,提升数据库访问效率和并发效率。对部分业务繁杂的表和访问进行优化设计,缓解因此造成的使用效率低下问题。 1.3.可行性分析 数据库性能分析:根据当前的数据库性能分析,当前硬件设备的提高也无法满足数据库性能的提升,因此应考虑数据库访问控制和数据访问方面进行优化。现有的数据库虽也实现双机热备份,但访问的效率未较大改善,因此应考虑各健全的数据库高并发访问方案。 数据库优化分析:当前的数据库采用的ORACLE数据库,同时,现有的均衡负载、读写分离、数据分割技术较为成熟,在对系统进行适当调整和优化的情况下,能保证系统的正常运行。

高并发网站系统架构解决方案

高并发网站系统架构解决方案 一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。 大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。 上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。 1、HTML静态化 其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。 除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。 同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。 2、图片服务器分离

MYSQL数据库高可用性方案

撰写人:陈明2010-7-25

目录 I综述 (2) II实现目标 (2) III方案建设概要 (2) III.1现有高可用方案分析 (2) III.2Mysql+replication (2) III.2.1概述 (2) III.2.2Mysql replication方案拓扑图 (3) III.2.3Mysql+replication优缺点 (4) III.3mysql+heartbeat+共享存储 (4) III.3.1概述 (4) III.3.2Mysql+heartbeat+共享存储方案拓扑图 (5) III.3.3Mysql+heartbeat+共享存储优缺点 (6) III.4Mysql+drbd+heartbeat (6) III.4.1概述 (6) III.4.2Mysql+drbd+heartbeat方案拓扑图 (7) III.4.3Mysql+drbd+heartbeat优缺点 (7) III.5Mysql cluster (8) III.5.1概述 (8) III.5.2Mysql cluster方案拓扑图 (8) III.5.3Mysql cluster优缺点 (9) IV可行性方案选择 (9) V Mysql+heartbeat+共享存储方案具体实施步骤 (9)

I综述 数据库位于现代企业应用的核心,它储存了组织机构中最有价值的资产,包括客户信息、产品信息、订单信息和历史数据。另外,组织机构依赖于数据库来运行他们关键业务应用。几小时甚至是几分钟的宕机,往往会造成收入的大量流失和客户的不满。因此,保证数据库高可用是所有组织机构优先考虑的事情。对于希望在当今瞬息万变的经济环境立于不败之地并取得成功的企业来说,构建一个具有高可用性的IT基础架构至关重要。 II实现目标 通过技术手段实现mysql数据库的高可用性,从而减少停工时间保证服务的正常稳定运行。 III方案建设概要 III.1现有高可用方案分析 Mysql作为一款开源软件经过多年的发展,已经形成很多套实现高可用方案,并且均都投入生产使用,主要为这几种:mysql+replication、mysql+heartbeat+共享存储、mysql+drbd+ heartbeat、mysql cluster。以下将依次对各个方案进行分析。 III.2Mysql+replication III.2.1概述 Mysql的复制(Replication)是一个异步的复制,从一个Mysql instace(称之为Master)复制到另一个Mysql instance(称之Slave)。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在Master(IO进程)上。

高并发解决方案总结

高并发解决方案总结 1.使用缓存 在绝大多数情况下,服务器的压力都会集中在数据库,减少数据库的访问次数,就可以减轻服务器的压力。所以,在高并发场景下,缓存的作用是至关重要的。 redis缓存数据库,它可以很好的在一定程度上解决一瞬间的并发量,redis之所以能解决高并发的原因是它可以直接访问内存,提高了访问效率,解决了数据库服务器压力。 使用缓存框架的时候,我们需要关心的就是什么时候创建缓存和缓存失效策略。 缓存的创建可以通过很多的方式进行创建,具体也需要根据自己的业务进行选择。例如,供应商平台的应用信息,应用上线后就进行缓存。需要注意的是,当我们修改或删除应用信息的时候,我们要考虑到同步更新该条缓存。 2.数据库优化 数据库优化是性能优化的最基础的一个环节,虽然提供了缓存技术,但是对数据库的优化还是一个需要认真的对待。数据库优化的方式很多,这里说下分表与分区。 ?分表 分表的适用场景 1. 一张表的查询速度已经慢到影响使用的时候。 2.当频繁插入或者联合查询时,速度变慢。

分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面。分表的重点是存取数据时,如何提高数据库的并发能力。分表后,单表的并发能力提高了,磁盘I/O性能也提高了。 以安审日志服务的历史记录表为例: 表按年月拆分,格式为:表名+年+月,例如:TEST_202001、TEST_202002、、TEST_202003……然后可以 根据日期来查询。 ?分区 分区的适用场景 1. 一张表的查询速度已经慢到影响使用的时候。 2.表中的数据是分段的。 3.对数据的操作往往只涉及一部分数据,而不是 所有的数据。 分区是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上。分区把存放数据的 文件分成了许多小块,分区后的表还是一张表,数据处理还是 由自己来完成。 3.分离数据库中活跃的数据 数据库的数据虽然很多,但是经常被访问的数据还是有限的, 因此可以将这些相对活跃的数据进行分离出来单独进行保存来提高 处理效率。其实前边使用redis缓存的思想就是一个很明显的分离数据库中活跃的数据示例,将应用经常使用的数据缓存在内存中。

高并发网站架构解决方案

一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构、性能的要求都很简单,随着互联网业务的不断丰富,网站相关的技术经过这些年的发展,已经细分到很细的方方面面,尤其对于大型网站来说,所采用的技术更是涉及面非常广,从硬件到软件、编程语言、数据库、WebServer、防火墙等各个领域都有了很高的要求,已经不是原来简单的html静态网站所能比拟的。 大型网站,比如门户网站。在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。但是除了这几个方面,还没法根本解决大型网站面临的高负载和高并发问题。 上面提供的几个解决思路在一定程度上也意味着更大的投入,并且这样的解决思路具备瓶颈,没有很好的扩展性,下面我从低成本、高性能和高扩张性的角度来说说我的一些经验。 1、HTML静态化 其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。 除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。 同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。

java,高并发解决方案

java,高并发解决方案 篇一:Java高并发程序设计 Java 高并发程序设计 第一课前沿 ? 在计算密集型的领域中非常适用并行程序 ? 多核CPU的产生促使了并行程序的设计,摩尔定律的失效,芯片的性能不能提高,4GHz已经是当下最高的频率,从而产生多核CPU的出现。 ? 活锁:两个资源A、B,进程1和2 分别占用A和B 时发现不能工作,就同时释放掉,然后又同时分别占用B 和A 如此反复!出现活锁 ? 阻塞: 第二课Java并行程序基础 ? 线程是比进程更细粒度的执行单元,可以说是属于进程的一个子集 ? 7, Thread 类的run()方法实现于Runnable 接口,如果直接调用run()方法,不会启动新的线程,而是在当前线程下运

行,start() 方法会开启一个新的线程。 两种方式,1 重载run方法2,实现Ruanable接口 8, Thread.Interrupt() 是一种比较的让线程终止的方法优雅的方法,不会立刻停止掉该程序,根据程序的设计,而是根据该程序的设计,当执行完该程序的一次循环之后,在下次循环程序开始之前中断,保证该程序的数据完整性。9,try { Thread.sleep(2000); } catch (InterruptedException e) { // //设置中断状态,抛出异常后会清除中断标记位e.printStackTrace(); } 10,查看当前被挂起的进程命令jps 查看进程中具体线程的信息jstack 5880 11, ? 等待线程结束join(),其本质是判断线程是否还存活,如果一直存活那么通 知调用该线程的其他线程等待,如果结束有JVM 调用notifyAll()唤醒所 有等待该线程的线程。 f (millis == 0) { while (isAlive()) { wait(0); }

数据库安全、高可用性

保障数据安全防篡改 为了保证数据安全,落实到软件,最重要的就是权限控制、审计追踪和数据版本可追溯。那么,针对这三点,计算机化系统附录都做了哪些规定呢? 访问控制和权限分配: 第十四条只有经许可的人员才能进入和使用系统。企业应当采取适当的方式杜绝未经许可的人员进入和使用系统。 也就是说需要访问控制,为不同级别的用户设置不同权限,没有权限不能进入和使用系统。第十六条计算机化系统应当记录输入或确认关键数据人员的身份。只有经授权人员,方可修改已输入的数据。每次修改已输入的关键数据均应当经过批准,并应当记录更改数据的理由。 也就是说,没有相应的权限,用户将无法修改数据的,而且更改数据时还要注明更改的理由,不能留空。 这两条强调了数据输入的准确性和数据修改等处理过程的正确性和合理性,以保证数据的合规性。 审计追踪(基于风险评估): 第十六条应当根据风险评估的结果,考虑在计算机化系统中建立数据审计跟踪系统,用于记录数据的输入和修改以及系统的使用和变更。

这里的审计跟踪功能适用于数据的访问、录入、修改和删除等操作,所有和数据有关的活动都需要有记录,并且不可被编辑或者删除。 电子签名 第十八条对于电子数据和纸质打印文稿同时存在的情况,应当有文件明确规定以电子数据为主数据还是以纸质打印文稿为主数据。 这里的电子签名,是可以有,而不是必须。 所谓电子数据签名就是不打印这份报告,直接在软件里点击签名,也表示了对这个报告的认可。使用电子数据签名,应当写一个书面的文档,规定实验室里电子签名的效力。 第十九条以电子数据为主数据时,应当满足以下要求: 为满足质量审计的目的,存储的电子数据应当能够打印成清晰易懂的文件。 比如说PDF文件。对数据的每一次修改都可以存储和打印为的结果版本,以避免非授权的修改,造成审计时,数据结果不能重现。 这里就涉及到数据版本可追溯,也就是说你的每个版本的数据都需要存储,不能被覆盖以及删除。 强调计算机系统的逻辑和物理安全性: 第十九条(二)日常运行维护和系统发生变更(如计算机设备或其程序)时,应当检查所存储数据的可访问性及数据完整性。

高并发下的接口幂等性解决方案

我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。 例如: 1.前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果。 2.我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统 bug重发,也应该只扣一次钱; 3.发送消息,也应该只发一次,同样的短信发给用户,用户会哭的; 4.创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题。 等等很多重要的情况,这些逻辑都需要幂等的特性来支持。 二、幂等性概念 幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。 在编程中.一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。 这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。 例如,“getUsername()和setTrue()”函数就是一个幂等函数. 更复杂的操作幂等保证是利用唯一交易号(流水号)实现. 我的理解:幂等就是一个操作,不论执行多少次,产生的效果和返回的结果都是一样的 三、技术方案 1. 查询操作查询一次和查询多次,在数据不变的情况下,查询结果是一 样的。select是天然的幂等操作 2. 删除操作删除操作也是幂等的,删除一次和多次删除都是把数据删除。 (注意可能返回结果不一样,删除的数据不存在,返回0,删除的数据多条,返回结果多个) 3.唯一索引,防止新增脏数据比如:支付宝的资金账户,支付宝也有用户 账户,每个用户只能有一个资金账户,怎么防止给用户创建资金账户多个,那么给资金账户表中的用户ID加唯一索引,所以一个用户新增成功一个资金账户记录 要点:唯一索引或唯一组合索引来防止新增数据存在脏数据(当表存在唯一索引,并发时新增报错时,再查询一次就可以了,数据应该已经存在了,返回结果即可) 4. token机制,防止页面重复提交 业务要求: 页面的数据只能被点击提交一次。发生原因:由于重复点击或者网络重发,或者nginx重发等情况会导致数据被重复提交 解决办法:集群环境:采用token加redis(redis单线程的,处理需要排队)单JVM环境:采用token加redis或token加jvm内存 处理流程:

MongoDB数据库高性能、高可用架构设计

MongoDB数据库高性能、高可用架构设计

随着企业服务窗口的不断增加,业务中断对很多企业意味着毁灭性的灾难,因此,跨多个数据中心的应用部署成为了当下最热门的话题之一。 如今,在跨多个数据中心的应用部署最佳实践中,数据库通常负责处理多个地理区域的读取和写入,对数据变更的复制,并提供尽可能高的可用性、一致性和持久性。 但是,并非所有的技术在选择上都是平等的。例如,一种数据库技术可以提供更高的可用性保证,却同时只能提供比另一种技术更低的数据一致性和持久性保证。 本文先分析了在现代多数据中心中应用对于数据库架构的需求。随后探讨了数据库架构的种类及优缺点,最后专门研究MongoDB如何适用于这些类别,并最终实现双活的应用架构。 双活的需求 当组织考虑在多个跨数据中心(或区域云)部署应用时,他们通常会希望使用“双活”的架构,即所有数据中心的应用服务器同时处理所有的请求。

图1:“双活”应用架构 如图1 所示,该架构可以实现如下目标: ?通过提供本地处理(延迟会比较低),为来自全球的请求提供服务。 ?即使出现整个区域性的宕机,也能始终保持高可用性。 ?通过对多个数据中心里服务器资源的并行使用,来处理各类应用请求,并达到最佳的平台资源利用率。

“双活”架构的替代方案是由一个主数据中心(区域)和多个灾备(DR)区域(如图2 所示)所组成的主-DR(也称为主-被)架构。 图2:主-DR 架构

在正常运行条件下,主数据中心处理请求,而DR 站点处于空闲状态。如果主数据中心发生故障,DR 站点立即开始处理请求(同时变为活动状态)。 一般情况下,数据会从主数据中心复制到DR 站点,以便在主数据中心出现故障时,能够迅速实施接管。 如今,对于双活架构的定义尚未得到业界的普遍认同,上述主-DR 的应用架构有时也被算作“双活”。 区别在于从主站到DR 站点的故障转移速度是否够快(通常为几秒),并且是否能够自动化(无需人为干预)。在这样的解释中,双活体系架构意味着应用停机时间接近于零。 有一种常见的误解,认为双活的应用架构需要有多主数据库。这样理解是错误的,因为它曲解了多个主数据库对于数据一致性和持久性的把握。 一致性确保了能读取到先前写入的结果,而数据持久性则确保了提交的写入数据能够被永久保存,不会产生冲突写入;或是由于节点故障所产生的数据丢失。

相关文档
最新文档