分类 架构 下的文章

微服务模式:Saga

背景

你已经应用了一个服务一个数据库的模式,每个服务都有自己的数据库。但是一些事务需要跨服务,因此你需要一种机制来保证跨服务的数据一致性。假设你正在建设一个电子商城,客户有其信用额度。应用必须确保新订单不会超过该客户的可用额度限制。因为订单和客户信息在不同的数据库中,因此应用不能简单的使用ACID事务。

- 阅读剩余部分 -

CQRS/ES架构下如何保证用户名的唯一性?

CQRS/ES下,许多开发者不了解如何在系统中处理这样的场景:

在用户创建的时候,我们想要去验证用户名在数据库中是否是唯一的。我应该使用Event Store还是使用读数据库查询?我该在哪执行这个查询?

这个问题是StackOverflow上与CQRS话题有关的最受关注的话题。因此在这篇文章中,我们将尝试针对这个问题寻找出最佳解决方案。

- 阅读剩余部分 -

什么是双机热备 ?

什么是双机热备技术?双机热备,英文”Hot Standby“,是一种常见的服务器高可用技术。顾名思义,A,B两台机器互相做备份,A歇菜了B顶上,B歇菜了A顶上。

showimage-10057963-10009581-c4d4df6cba4fb6fcf79206c9c6fcb774.jpg

双机热备典型应用环境就是:

对于关键性的业务系统,需要有两台或两台以上的服务器完成相同的功能,共同执行同一服务,让它们具有相同的配置,彼此互为备用,当一台服务器出现故障时,不需要人工介入,可以由另一台服务器自动接替工作,保证系统持续运转,实现高可用性。

双机热备的工作模式有三种

根据两台服务器的工作方式可以有三种不同的工作模式,即双机主从模式、双机互备模式和双机双工模式。下面分别予以简单介绍:

双机主从模式
最常见的双机热备模式,即目前通常所说的active/standby 方式,active服务器处于工作状态;而standby服务器处于监控准备状态。当active服务器出现故障的时候,通过软件诊测或手工方式将standby机器激活,保证应用在短时间内完全恢复正常使用。典型应用在证券资金服务器或行情服务器。这是目前采用较多的一种模式,但由于另外一台服务器长期处于后备的状态,从计算资源方面考量,就存在一定的浪费。

双机互备模式
两个相对独立的应用在两台机器同时运行,但彼此均设为备机,当某一台服务器出现故障时,另一台服务器可以在短时间内将故障服务器的应用接管过来,从而保证了应用的持续性,但对服务器的性能要求比较高。服务器配置相对要好。

双机双工模式
目前Cluster(集群)的一种形式,active/active两台服务器均为活动状态,同时运行相同的应用,保证整体的性能,也实现了负载均衡和互为备份。WEB服务器或FTP服务器等用此种方式比较多。

双机热备的实现方式有两种

双机热备有两种实现模式,一种是基于共享的存储设备的方式,另一种是没有共享的存储设备的方式,一般称为纯软件方式。

基于存储共享的双机热备是双机热备的最标准方案。这种方式采用两台(或多台)服务器,使用共享的存储设备(磁盘阵列柜或存储区域网SAN)。两台服务器可以采用热备(主从)、互备、双工(并行)等不同的方式。在工作过程中,两台服务器将以一个虚拟的IP地址对外提供服务,依工作方式的不同,将服务请求发送给其中一台服务器承担。同时,服务器通过心跳线(目前往往采用建立私有网络的方式)侦测另一台服务器的工作状况。当一台服务器出现故障时,另一台服务器根据心跳侦测的情况做出判断,并进行切换,接管服务。对于用户而言,这一过程是全自动的,在很短时间内完成,从而对业务不会造成影响。由于使用共享的存储设备,因此两台服务器使用的实际上是一样的数据,由双机或集群软件对其进行管理。

概念解释:集群与分布式的区别

之前一直对集群与分布式的概念不是很清楚,认为两个名词概念都差不多,那到底区别在哪呢,我也在网上找了很多解释,但似乎都没有言简意赅的讲清区别,或者说没有很形象的讲明每个名词是什么意思,到底有何用。那么我就依我的看法来讲一下,首先是分别讲解,再来合起来讲一下:

【集群】

处理同一个业务,目的是实现高可用性,可用性顾名思义,就是要让用户能用,并且随时能访问。一个集群针对一个业务并且有着多台服务器,当一个服务器挂掉,剩下的几台能顶替着继续工作(当然这几台服务器在那台服务器没挂的时候也不是闲着的,他们都是在同时处理大量请求的业务,那台服务器挂掉后,它的一些任务只好让这几台来顺带帮着完成了),这样用户能继续访问网站的某一业务。举个例子,比如我有发布日志的业务,如果我只有一台服务器支撑着这个业务,当服务器因某种原因挂掉后,那么用户也就无法发日志,这一业务也就无法使用。然而如果我有着服务器集群,其中一台挂掉,用户仍然能发日志。

【分布式】

将不同的业务放在不同的地方(节点),换句话说,每个分布式节点都处理不同的任务(一个节点处理一个业务),举个例子,有一个节点的业务是处理上传图片,还有一个节点的业务是处理发布文章,就这样把每个业务放在不同的地方(节点)。

【分布式与集群的关系】

每一个分布式节点都可以看做一个集群,上面说了,分布式的每一个节点都处理一种业务,而集群是处理同一业务,那么分布式的节点可以做一个集群。


 

当然,从不同角度看,可能理解也有偏差。主要还是集群的概念比较重要。我个人认为集群除了实现高可用性,还有高并发和高性能。这可能要涉及负载均衡了,比如访问一个网站的一个业务,对应的有一个集群,前面放着相应服务器,后面几台服务器负责处理这个业务,当有业务访问的时候,相应服务器会根据哪台服务器负载情况,将业务交给负载不是很重的服务器去完成