交易流程容灾及测试策略-1

上一篇 / 下一篇  2012-11-26 09:36:42 / 个人分类:其他

51Testing软件测试网.U.d/R y O

  什么是容灾51Testing软件测试网d"F-Frp&{/D7b,O

$e2Lwvh/Rw0  首先来梳理下什么是系统容灾。互联网上容灾的概念解释很多,我们来看看百度百科里的解释:51Testing软件测试网;G}E^.e

o ^5Xi"x3g"W0  从其对系统的保护程度来分,可以将容灾系统分为:数据容灾和应用容灾 。

l*@5@7`Yg051Testing软件测试网'x6cxJra9ZV

  数据容灾就是指建立一个异地的数据系统,该系统是本地关键应用数据的一个实时复制。51Testing软件测试网 XQ#f.d9T2b

%T7?9}V(a-l+l-m){0  应用容灾是在数据容灾的基础上,在异地建立一套完整的与本地生产系统相当的备份应用系统(可以是互为备份),在灾难情况下,远程系统迅速接管业务运行。数据容灾是抗御灾难的保障,而应用容灾则是容灾系统建设的目标。51Testing软件测试网Hk+Av,^/IC

-]1Xol(r#d%N9~'X0  其实,上面指的容灾已经由我们的数据仓储和运维团队一直在很好的进行着。而且该容灾工作的目的主要是为了预防一些不可预料的意外,比如火灾、地震、紧急硬件故障等等。

0I;o1s/z~x P0

^ a%m%Z?E0  为了保障系统的稳定性和可用性,作为业务团队的我们, 我们的容灾主要做什么呢?谷歌了下一直没有找到和我们所做的事情相似的概念,索性自己取了个名字叫业务容灾。 这里只讨论基于互联网的web业 务系统,业务容灾主要就是指使用一定的技术手段,在极端访问量的情况下,牺牲一小部分非主要业务功能或者一小部分用户体验, 保障整体系统的稳定以及提供的主要功能,以保障绝大部分的用户需求和体验。我们的容灾工作,预防发生的场景是可以预见的,比如今年的双11、双12大促。51Testing软件测试网f5XjmWg1A)~%I`

L,~e.F5|;H e7^0  现在我们主要分析总结下我们的业务容灾主要包括哪些内容。

/N.a0n%PW yzX+a0

d*kE+a R!SU { t{0  业务容灾手段

2H|n[0O"LNK051Testing软件测试网q(o ~!Z1rF t

  目前在集市交易系统中使用的业务容灾手段主要有以下几种,下面一一分析。需要说明的是,开关本身不是一种容灾方式,它只是容灾手段中便于人为操作而使用的某种方式,大部分容灾的手段都可以使用开关来达到目的。

X^-d m8? [+o{l051Testing软件测试网 Wj%_#h}9g!l

  业务降级

`Vn_I5yh Q051Testing软件测试网*^$k3d2HL?p6PP2B

  1、提前降级:51Testing软件测试网$zTT"L6l.YNjy)Th

s5kDb v*ze+j ?0   在极端访问的情况下,为了减少对系统的压力,对于一些用户量很小或者对用户体验影响极小的业务可以进行提前关闭。可以使用到时间点自动关闭的方式实现, 也可以使用开关提前人为的关闭。这里如果选择使用开关进行人为关闭,需要考虑到不同应用系统之间对同一个业务的协调和时间差,尽可能做到平稳的过渡,让用 户完全没有感知。

P K nt gnd@&Y'^051Testing软件测试网^5h m`U+[K

  2、应急降级:

4LWFVf^"sLQN051Testing软件测试网z8dpq-H&H

  应急降级主要是针对重要性稍低的业务提前完成预备降级的工作,并提供开关以备不时之需。在系统稳定的情况下正常提供功能,紧急情况下可以人为临时关闭,以保障系统最高优先级的核心功能的可用性和系统整体的稳定性。

n#VTz7mlF dE0

)g1J\c3d#rj0  数据备份

wM-B*Uw3t_n0

_,L(v*KYM)Q?0  为了解决数据读取的问题,我们可以对数据进行提前备份,并在当老数据读取出现异常的紧急情况下,临时切换到新的存储系统进行读取。需要完成的研发功能有:新存储的数据备份功能;紧急切换开关;历史数据的复制。

;a [0_(G5R0

Q4_AK C uG}5U0  自动流控/限流51Testing软件测试网e:U^@wkX

(HEw1pg0  自动流控主要是指,当系统中对某些二方应用系统访问的线程数超过一定阀值的时候,进行自动限流,防止因为二方应用响应超时太多,拖垮我们的应用。 实现上可以直接抛异常,用户会感觉某功能不可用;也可以直接忽略,让流程继续往下走,用户不会有任何感知。

6m4b~"wM!q*p051Testing软件测试网\@%K'CA ]Fn

  当然,限流后是应该抛异常还是直接忽略,这个不能直接凭用户体验来,不是说用户感知不到就一定是最好的。这里一定要根据具体功能点的设计来决定。比如如果查询库存的线程被限流了,那么就一定要抛异常让下单失败,否则会引起宝贝超卖,这个对于卖家是绝对不能接受的。51Testing软件测试网ys:iv |NQK a\

d(LYc%m@F[C`0   对于不同应用请求的流控的阀值的设置也需要再三斟酌,设置高了可能会导致极端情况下流控还没生效,我们的系统已经被拖跨了;设置低了可能会资源浪费,导 致系统还未达到自己的最大承受临界点之前就已经牺牲了部分功能和用户体验。所以流控阀值的设置,需要平时在生产系统多观察,不断调整阀值以求达到一个最合 适的值。并提供阀值调整开关以备不时之需。51Testing软件测试网3y0\o.Gt6wT

51Testing软件测试网n;O-[l,E,i

  备注:系统中不是对所有的二方应用的访问都有自动流控,这个是需要单独添加的。对于一些重要性非常高的应用一般不做自动流控。51Testing软件测试网6JZbXc

51Testing软件测试网]iG R+QU|/H%Hh

  请求拦截

J#Wo)jJ(Z4V051Testing软件测试网pu~]v4Q[#np

  请求拦截是指当我们的系统压力比较大的时候, 牺牲掉对我们系统访问的一部分重要性稍低的请求,直接对请求进行拦截,减少系统压力,保障系统的稳定性。具体拦截哪些业务方的请求,什么接口,或者接口允 许访问的最大QPS是多少,这些最好能做成可配置化,在紧急情况下可以灵活调整。

x5b7` r/Xf8d051Testing软件测试网#MQQ(giSH1Rl

  强弱依赖设计51Testing软件测试网CW9I#m9N F

6C-@.\7cP[0  在系统设计时,需要考虑所有系统内部访问的其他系统接口为强依赖还是弱依赖。比如对于某个功能点,内部需要调用其他系统的接口A和B,如果A出现异常则该功能不可用,而B出现异常,不会影响该功能的整体可用性,那么我们需要将A设计为强依赖,B设计为弱依赖。

(t)TXcG b@051Testing软件测试网:_4ev Oj

  强弱依赖的设计对于系统整体的可用性非常重要,特别是在极端访问量的情况下。我们要尽可能的保证系统功能不受弱依赖系统的影响。 并且强弱依赖需要独立的测试场景来持续保障,以防强弱依赖的设计因为代码的不断改动而发生意料之外的改变。51Testing软件测试网*T]%Zpc*w i

&p1}-J"Y8L0  容灾测试方法

*S^Eh0JJ051Testing软件测试网D[:MXc!cS

  业务降级、数据备份、以及请求的拦截这类的容灾场景一般都会有自己独立的业务测试方法,也会有对应的开关去控制,只需将开关设置到对应状态,使用和普通业务测试相同的方法即可。51Testing软件测试网V7ur,{{ cD&F!sK

!\ n{~ `0  对于自动流控的测试,可以将阀值调整的开关设置为最低值,即等同于业务的降级测试;也可以将阀值设置为一个较低的值,并模拟依赖系统的请求变慢,再进行业务测试来达到触发流控的条件。

B(wW.|q&}]c051Testing软件测试网KQ&c G \ elv!M

  对于强弱依赖的测试可以直接模拟和依赖系统之间的网络不通,或者网络变慢,从而模拟依赖系统返回的请求超时或者变慢的场景,再进行业务测试观察系统各功能点的可用性。具体模拟网络不通或者变慢超时的方式如下:

NNaAO$o} @0

B'O0_/_;o:v*i-b0  模拟网络不通51Testing软件测试网"T3y{;DUSv+U

xC;qmWl0  1、使用iptbables直接模拟系统和某系统之间的网络不通:

;NE g6hW^(W"E0

WC~i7].ZC*`0  sudo iptables -A OUTPUT -o eth0 -d <依赖系统的IP>  -j DROP51Testing软件测试网+dI[a:QHX

51Testing软件测试网 Y&^b0U+M

  这个命令需要在我们被测系统上执行,并且将需要模拟的依赖系统的IP替换掉。它的主要作用是将我们被测机器往依赖系统这个IP上发送的所有的网络包给丢弃掉,依赖系统接收不到任何我们发送的包,自然也不会做任何回应。相当于系统接口的调用没有返回。

vc N;n,|{;YU+Lw S051Testing软件测试网[$pi8]$_W}*R

  2、使用iptables直接模拟系统的某个端口不通51Testing软件测试网i K&qC|t wI

51Testing软件测试网7KG ww?| R

  sudo iptables -A OUTPUT -o eth0 -p tcp  --dport <端口号> -j DROP51Testing软件测试网N5[ k+NJ!S

51Testing软件测试网PQoo&TB0J

  这个命令同样需要在被测系统上执行。它的主要作用是将我们被测机器通过这个端口发送的所有的包给丢弃掉。51Testing软件测试网VM1h*fs^

51Testing软件测试网@1U V[m t*i W

  3、清除所有设置的iptables规则:iptables –F

&WK!a rwf ^8?Rk3`0

[*o;g8|5Y0w m0  4、查看当前设置的所有iptables规则:iptables –L51Testing软件测试网/N |"P {`qx

r5o:p[1R&~.n7fI'G0  模拟应用变慢和超时

/~&xj&n"?fU!k0

/z9a*R4sgL~D5`a0  添加对某个依赖系统的流量控制,下面的命令需要按照顺序执行:

qL!w4Kmw(l.{+k#V I%y051Testing软件测试网1Dea6Q {0V;I

  1、使用ifconfig查看默认的网卡信息,一般默认为eth051Testing软件测试网){$m!B*c7Xq/F

'[F tOe0f(}0  2、使用tc流量控制命令将eth0网口过来的数据包延迟1000ms51Testing软件测试网r8R5h"F6O6sO

51Testing软件测试网c!e w7R0F IP

  sudo tc qdisc add dev eth0 root handle 1: prio51Testing软件测试网1u l!mUOR5j
  sudo tc qdisc add dev eth0 parent 1:3 handle 30: tbf rate 20kbit buffer 1600 limit  300051Testing软件测试网Y4x a*YE B [X3|+\;[Q
  sudo tc qdisc add dev eth0 parent 30:1 handle 31: netem delay 1000ms 10ms distribution normal
51Testing软件测试网/h*M9LuI;vS$d!H1B

n%f7x&IM-}"g0T0  3、添加从某ip过来的流控规则(替换**.**.**.**为需要流控的ip)51Testing软件测试网&Y|.G#J]4S.|N

51Testing软件测试网%P Wh,vq'a-O

  sudo tc filter add dev eth0 protocol ip parent 1:0 prio 3 u32 match ip dst **.**.**.**/32 flowid 1:351Testing软件测试网 iZ\"G X*P

/|/R;uu5KhU0  查看已经设置的限流规则: sudo tc filter list dev eth0 parent 1:051Testing软件测试网 @7i,eUl i,mtqm0K

51Testing软件测试网C-vF4Gd,EO7~

  删除已经设置的所有的限流规则: sudo tc filter del dev eth0 parent 1:0 prio 3 u3251Testing软件测试网D5X1L k!Nk7|_9f(t


TAG:

 

评分:0

我来说两句

Open Toolbar