设计一种100%可用性服务的架构--适用于任何系统(B/S,C/S)[中英文版本]

设计一种100%可用性服务的架构--适用于任何系统(B/S,C/S)[中英文版本]

-- How to design an architecture which have 100 percent availability service?

 

版权所有,转载请注明出处http://blog.csdn.net/yangzhenping,谢谢!

本篇原创非译文,有需要设计和部署这种架构的,请私信我,谢谢!

最近一直在想怎样设计一种100%可用性的服务,于是有了最初的版本:

如上图,有多个备份的网页服务器和数据库服务器,还有一台同步服务器把主数据库A中的数据同步到其他副本从服务器

问题来了:

当数据库服务器A还没来得及被DBSync  Server同步到B上,这时A宕机了,我们可能会丢失部分数据。

那我们怎么才能不丢失数据呢?

As above graph, there are some backup web servers and database servers, also have one sync server to sync data from master database server A to other slave database servers.

Then problem comes:

We may lost some data when some data in DBS A didn’t sync toDBS B and it is outage!

How can we NOT to lose any data?

 

根据上面这个设计所碰到的问题,我又设计了下面的架构,当然这个架构还可以继续提升,文章结尾再说哈:

Based on above problem, I design another architecture like below, of course we can improve it again, talk it at the end of this article:

网页服务器A提交一个SQL脚本请求(包含requestId,它是一种Guid类型)给主数据库服务器A,
A的DbSync Service会将这个SQL脚本请求同步给副本服务器B,然后再在A上执行这个SQL脚本,最终把结果返回给网页服务器A。

同样数据库服务器接受到来自A的请求,会同步这个SQL脚本到下一个副本服务器C上,然后执行结果返回给RCS结果比较服务器(所有的副本服务器的DBSync 
Service都会返回结果给RCS)。

RCS结果比较服务器会根据同一个requestId比较主数据库服务器执行的结果和副本服务器执行的结果:

如果主DBS执行成功,副本执行失败,RCS会重新在副本上重新执行直到成功。

如果主DBS执行失败,副本也执行失败,RCS不会做任何事。

如果主DBS执行失败,副本执行成功,我们有两种选择:

选择一:RCS在主DBS上重新执行直到成功,然后通知用户他之前提交的失败任务现在成功了。

选择二:RCS在副本服务器上回滚已经成功的这个SQL脚本,在主DBS上不做任何事。

Web Server A request a SQL script (Contains requestId, it isa Guid type) to Master DBS A, in DBS A its sync service will sync the SQLscript to Slave B, then DBS A’s Sync service will do the SQL script and
thenreturn the result to Web Server A.

Also DBS B’s sync service receive the SQL script will syncthe SQL script to the next Slave DB server C, then execute the SQL script andreturn toResult Compare Server (allslave DB server’s
DB sync service will return the result toResult Compare Server).

Result Compare Server will compare the result usingrequestId, compare the Mater’s requestId result to Slave’s requestId result:

If Master execute pass, but Slave execute failure, RCS willrerun until pass on Slave.

If Master execute fail, and Slave execute failure, RCS willdo nothing on Slave.

If Master execute fail, but Slave execute pass,  

Option 1, RCS will rerun on Master until pass and notifyuser about this request pass when it pass.

Option 2, RCS will roll back the SQL script action on Slave,and do nothing on Master.

 

文章的结尾顺便说下,这个可以继续提升为可用性更高的服务,就是搭建一台RCS的备份服务器。

本文主要提供一种100%可用性架构是针对网页服务器和数据库服务器,当然您也可以把它应用于C/S架构上。

At the end of this article, you can improve it to be a better service, that's deploy another RCS backup server.

This article provide a way to deploy 100% high availability web server and database server, of course, you can also use it in C/S, not only B/S, thanks.

版权所有,转载请注明出处http://blog.csdn.net/yangzhenping,谢谢!

时间: 2025-01-19 08:59:06

设计一种100%可用性服务的架构--适用于任何系统(B/S,C/S)[中英文版本]的相关文章

如何设计可管理移动云服务安全架构?

本文讲的是 :  如何设计可管理移动云服务安全架构?  ,[IT168 评论]云计算已在资源敏捷性方面掀起了一次变革,与此同时已获授权的移动用户们也已在活动点敏捷性方面掀起了一次变革.因此,那些构建自己云计算的服务提供商们必须应对好这两次变革,尤其是两者的交集部分. 提高对移动云计算的控制是从制定应用端开发人员计划开始的.运营商可以建立他们自己的开发人员计划,但他们可能会发现支持各种不同的移动平台将是一项非常繁重的工作.大多数的提供商都有兴趣在他们的基础设施上创建移动服务的托管组件,而不是在手持

架构设计:一种远程调用服务的设计构思(zookeeper的一种应用实践)

在深入学习zookeeper我想先给大家介绍一个和zookeeper相关的应用实例,我把这个实例命名为远程调用服务.通过对这种应用实例的描述,我们会对zookeeper应用场景会有深入的了解. 远程调用是系统与系统之间的通信机制,它的另一种理解就是进程间的通信.做分布式系统的开发,远程调用技术是其核心技术.远程调用技术可以将一组计算机系统形成一个网络系统,对外提供整体服务,那么这一群的计算机系统就构成了一个更大型,性能更高的计算机系统. 我在前面的博客里介绍了一种分布式网站的架构设计,其中就有一

“.NET技术”使用WCF实现SOA面向服务编程—— 架构设计

SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统中,具体应用程序的功能是由 一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的.因此,基于SOA的架构也一定是从企业的具体需求开始构建的.但是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性.业务灵活性是指企业能对业务变更快速和有效地进行响应.并且利用业务变更来得到竞争优势的能力.对企业级架构设计师来说,创建一个业务灵活的架构意味着创建一个

大咖直播第五期问答整理:小咖秀张华伟讲解千万级用户App服务端架构设计

3月18日在线实时分享顺利结束,本次由小咖秀技术总监张华伟讲解千万级用户App服务端架构设计.本次直播中现场观众提出了很多技术问题,我们把这些问题和答案整理好分享给大家. 问答列表: 负载均衡是怎么做的? 如果使用阿里云负载均衡,是如何做数据同步? 有用到反向代理吗?技术架构能说下吗? 程序怎么扩展 能说下服务器数量? 怎么上线? 上线版本怎么控制的? 初期搭建系统的时候,阿里云选择的基本配置是什么呢 请问功能模块之间的通信是怎么实现的?http接口?RPC?WS?还是其他? 缓存选择的方向是怎

springmvc-项目架构设计,提供接口的服务怎么设计

问题描述 项目架构设计,提供接口的服务怎么设计 目前系统需要对app端提供接口,我想请教下,大家一般是怎么做的?提供给其他系统调用的接口是另外一个单独的工程?是同一个工程的话,感觉比较混乱,而且接口访问量会比web端大很多 解决方案 同一个工程,弄个app模块 解决方案二: 解决方案三: 解决方案四: 我也是这样做的,想看看大家是怎么做的.有没有更好的方法.

使用WCF实现SOA面向服务编程—— 架构设计

本文转载:http://kb.cnblogs.com/page/96479/   SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统中,具体应用程序的功 能是由 一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的.因此,基于SOA的架构也一定是从企业的具体需求开始构建的.但 是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性.业务灵活性是指企业能对业务变更快速和有效地进行响应.并且利用业务

向服务组件架构出发

相当数量的博客们一直想知道关于服务组件架构(SCA)的标准化努力. SCA的挑选(pick-and-chose)规范风格使人很容易在SCA的宇宙中迷失.因为社区中基本没有SCA的使用经验,许多值得详细说明的领域依旧还处于调查研究之中,或者甚至还未被触及. 首先,读者很容易被误导相信SCA是Java领域的(又一个)革命.就两点来说,这是错误的.首先,尽管面向Java的工作吸引了绝大多数的注意力,但是SCA不仅仅只关心Java领域:还有针对C++.COBOL.PHP和BPEL的规范.话说回来,我们所

一种基于FPGA云存储架构的关键技术研究

一种基于FPGA云存储架构的关键技术研究 云南大学  陈成 目前常见的云存储服务有:亚马逊的Simple Storage Service(S3).Nutanix的存储服务.搜狐企业网盘.百度云盘等等,而这些并不提供小型开发板所需的云服务.本系统则是以TCP/IP做为基本通信手段,并且加入自定义的数据通信协议,通过整合分布式存储的调度思想,来实现基于FPGA的云存储架构.这样不仅使FPGA开发板能够实现云存储的功能,同时也为基于FPGA的云计算打下了坚实的基础. 本系统利用集群以及分布式的思想,将

针对不同需求,蓝海讯通提供两种产品和服务交付模式

实际上,针对企业用户在应用性能管理解决方案部署和交付模式上的不同需求,蓝海讯通提供了两种产品和服务交付模式:传统的软件许可证模式(blueware)和基于云计算的SaaS模式(OneAPM).blueware主要针对传统大型企业,而OneAPM主要针对互联网企业开发者 . 借助OneAPM,开发者可以提升开发速度.让应用更快发布,并且能精准定位使用体验中的瓶颈.据蓝海讯通介绍,OneAPM的功能很适合支持敏捷开发模式.他们希望提供一种服务,让应用性能管理不再是问题,对开发者来说,你只需要把业务做