MGW澳门美高梅手机网站——美团点评高品质四层负载均衡

暂停难题以及协和栈路径质量过长难题

停顿是震慑LVS质量最重点的一个因素,假若我们一秒须求处理600万的数据包,每六个数据包暴发三个硬件中断的话,那一秒就会时有暴发100万个硬件中断,每三回发出硬件中断都会卡住正在进展密集总括的载荷均衡程序,中间暴发大批量的cache
miss,对质量的震慑卓殊大。

同时鉴于LVS是依照内核netfilter开发的3个应用程序,而netfilter是运转在基本协议栈的三个钩子框架。那就代表当数码包到达LVS时,已经通过了一段相当短的磋商栈处理,不过那段处理对于LVS来说都不是少不了的,那也招致了一某个不须要的特性损耗。

澳门美高梅手机网站 1

本着那多个难题,消除措施是使用轮询情势的驱动以及做kernel
bypass,而DPDK提供的用户态PMD驱动恰好可以缓解这三个难点。DPDK在统筹时行使了大批量硬件相关本性比如numa、
memory channel、
DDIO等,对品质优化格外大,同时提供了相比多网络方面的库,可以大大减小开发难度,提升开销功用。由此采纳DPDK作为MGW的成本框架。

 

前言

在全速发展的位移网络时期,负载均衡有着非常首要的身价,它是采纳流量的输入,对应用的可相信性和属性起着决定性的功用,因而负载均衡要求满意高品质、高可信五个特征。MGW是美团点评自研的一款四层负载均衡,主要用以代替原有环境的四层负载均衡LVS,近期拍卖着美团点评数十
Gbps的流量、上千万的面世连接。本文主要介绍MGW是如何完结高质量、高可靠的。

  • 51单片机原理及应用(陈海宴)书P129案例是在主机发送状态下使用多机通讯,接收状态下利用单机通讯,在掌握上不难出现错误,进度分析及代码如下:

总结

透过美团点评以及美团云的流量验证,MGW无论在价值观网络环境照旧overlay的大二层环境下都有雅观的习性和稳定表现。在业务场景方面带有数据库业务,千万级其他长连接业务,嵌入式业务,存储业务以及酒馆、外卖、团购等Web应用工作。在作业须要快捷转移的环境下,MGW在不断完善本身效益,在种种工作场景下都有可以的显示。
在今后的一段时间内,MGW除了会完善四层的功能需要外,也会考虑向七层方向前行。

澳门美高梅手机网站 2

上下文切换

澳门美高梅手机网站 3

在筹划时,希望控制平面与数量平面完全分开,数据平面专心做团结的拍卖,不被任事件打断。因此将CPU分成两组,一组用作多少平面一组用做控制平面。同时,对数据平面的CPU举行CPU隔离,那样控制平面的历程就不会调度到数码平面的那组CPU上边了;对数码平面的线程举办CPU绑定,那样就足以让各种数据线程独占三个CPU。
其余的主宰平面的主次比如Linux kernel、 SSH等都跑在支配平面的这组CPU上。

  • 从机端

    安装与主机相同的串口参数和定时器和暗中同意突显值。允许收取中断

正文整理自美团点评技术沙龙第①4期:美团背后的轶事-你不领会的美团云。

实践流程:(多机通讯格局)

硬件负载均衡花费难点

  1. 硬件花费:中低端硬件负载均衡价格在数拾万,高端的上百万,价格极度高昂。当我们需求组合一个高可用集群时,必要数台机器,花费极度高。
  2. 人薪给本:硬件负载均衡作用相比较强硬,配置比较灵敏,那也促成在爱护上,大家须要部分通过专业培训的人士,就充实了人工花费。
  3. 时间成本:当使用的进度中蒙受bug或然新须要需求厂商提供新本子的时候,大家需求通过繁琐的流水线向厂商上报,然后厂商再公布新本子供我们升级,时间周期很短,在高速发展的互联网行业,这种周期是心有余而力不足经受的。
  • 从机

故障復苏与扩容

澳门美高梅手机网站 4

不论在进展故障復苏如故扩容操作,都会导致集群节点数量发生变化,那样也就会招致流量路径暴发变化。当变化的流量到达集群中原本的节点时,因为原本节点都维护着三个大局的session表,由此这一个流量是足以被符合规律转载的;可是一旦流量到达了新机械上,这几个机器是绝非大局session表的,那么那部分流量就会全部被放任。为了消除那么些标题,MGW在上线将来会经历1个预上线的中间状态,在那个状态上,MGW不会让交流机感知到温馨上线了,那样交流机也就不会把流量切过来。首先MGW会对集群中其余节点发送3个批量一同的哀告,其余节点收到请求未来会将自身的session全量的联手到新上线的节点上,新上线节点在收受全部session今后才会让交流机感知到祥和上线,那时沟通机再将流量切过来就可以平常被转化出来了。

在那个进度中重大设有两点难题。
先是个难题是,由于集群中并不曾多个主控节点来保安二个大局的气象,尽管request报丢失恐怕session同步的数据丢失的话,那新上线节点就不只怕尊敬三个大局的session状态。不过考虑到持有节点都维护着1个大局的session表,因而有着节点有所的session数量都以相同的,那么就足以在全体节点每趟做完批量手拉手未来发送三个finish音讯,finish消息中带着自个儿抱有的session数量。当新上线节点收到finish新闻随后,便会以友好的session数量与finish中的数量做相比较。当达到数据须求之后,新上线节点就决定本身举行上线操作。否则在等候一定的逾期时间之后,重新开展三遍批量同步操作,直到达到须要甘休。

除此以外一个难题是在进展批量同步操作时,假若出现了新建连接,那么新建连接就不会透过批量同台同步到新上线的机械上。假如新建连接特别多,就会导致新上线机器直接达不到需求。因此,需求保障处于预上线状态的机械能吸纳到增量同步数据,因为新建连接可以通过增量同步同步出来。通过增量同步和批量一起就可以保障新上线机器可以最终得到二个大局的session表。

当按键被按下,判断主机要通信的是否是自己,是则显示对应数字并向主机发送数字,否则重置状态。

MGW如何做到高可信

上面从MGW集群、MGW单机以及应用服务器层那多个层介绍MGW怎么样在每一层已毕高可信。

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

何以是负载均衡?

互连网早期,业务流量相比较小而且作业逻辑相比较简单,单台服务器便足以满意基本的急需;但随着网络的上扬,业务流量越来越大并且作业逻辑也更为复杂,单台机器的性质难点以及单点难题呈现了出去,由此需求多台机器来开展品质的档次伸张以及幸免单点故障。可是要什么样将不一致的用户的流量分发到不相同的服务器下边吧?

澳门美高梅手机网站 5

最初的方法是应用DNS做负载,通过给客户端解析差距的IP地址,让客户端的流量直接到达种种服务器。不过那种办法有一个很大的瑕疵就是延时性难点,在做出调度策略改变之后,由于DNS各级节点的缓存并不会应声的在客户端生效,而且DNS负载的调度策略相比较不难,不大概满足工作要求,因而就涌出了负荷均衡。

澳门美高梅手机网站 6

客户端的流量首先会到达负载均衡服务器,由负载均衡服务器通过一定的调度算法将流量分发到不相同的应用服务器上面,同时负载均衡服务器也会对应用服务器做周期性的健康检查,当发现故障节点时便动态的将节点从应用服务器集群中去除,以此来担保应用的高可用。

澳门美高梅手机网站 7

负载均衡又分为四层负载均衡和七层负载均衡。四层负载均衡工作在OSI模型的传输层,主要办事是转账,它在收取到客户端的流量以往通过改动数据包的地址音信将流量转载到应用服务器。

七层负载均衡工作在OSI模型的应用层,因为它必要分析选拔层流量,所以七层负载均衡在吸纳客户端的流量以往,还亟需多少个一体化的TCP/IP协议栈。七层负载均衡会与客户端建立一条完整的接连并将应用层的伏乞流量解析出来,再依照调度算法采纳贰个应用服务器,并与应用服务器建立此外一条连接将呼吁发送过去,因而七层负载均衡的重中之重工作就是代理。

既然四层负载均衡做的主要工作是转账,那就存在一个转化模式的难点,如今着重有四层转载情势:DKoleos形式、NAT格局、TUNNEL格局、FULLNAT格局。

澳门美高梅手机网站 8

DCRUISER形式也叫作三角传输,通过改动数据包的目标MAC地址来让流量经过二层转载到达应用服务器,那样应用服务器就足以平素将回应发给应用服务器,品质相比较好。由于那种形式必要依靠二层转载,因而它须求负载均衡服务器和应用服务器必须在三个二层可达的环境内,并且需求在应用服务器上布署VIP。

NAT情势通过改动数据包的目标IP地址,让流量到达应用服务器,那样做的益处是数据包的目的IP就是应用服务器的IP,因而不需求再在应用服务器上计划VIP了。缺点是由于那种格局修改了目标IP地址,那样假若应用服务器直接将回应包发给客户端的话,其源IP是应用服务器的IP,客户端就不会不奇怪接收这一个答复,由此大家必要让流量继续回来负载均衡,负载均衡将应答包的源IP改回VIP再发到客户端,那样才得以确保健康通讯,所以NAT格局要求负载均衡必要以网关的花样存在于互联网中。

TUNNEL形式的利弊和DXC60是一模一样的,并且TUNNEL情势必要应用服务器必须扶助TUNNEL成效。

FULLNAT情势是在NAT形式的底蕴上做两回源地点转换(即SNAT),做SNAT的好处是可以让应答流量经过正规的三层路由回到负载均衡上,那样负载均衡就不需求以网关的样式存在于互连网中了,对互联网环境须求比较低,缺点是出于做了SNAT,应用服务器会丢掉客户端的实际IP地址。

澳门美高梅手机网站 9

上边详细介绍一下FULLNAT格局。首先负载均衡上急需存在1个localip池,在做SNAT时的源IP就是从localip池中甄选的。当客户端流量到达负载均衡设备未来,负载均衡会依据调度策略在应用服务器池中采纳三个应用服务器,然后将数据包的目的IP改为应用服务器的IP。同时从localip池中甄选三个localip将数据包的源IP改为localip,这样应用服务器在应答时,目的IP是localip,而localip是动真格的存在于负载均衡上的IP地址,由此可以透过正规的三层路由到达负载均衡。由于FULLNAT比NAT方式多做了四遍SNAT,并且SNAT中有选端口的操作,因此其属性要没有于NAT形式,不过出于其较强的互连网环境适应性,我们选用了FULLNAT作为MGW的转速形式。

通过MAX487芯片将3个单片机连接,并通过设置/RE、DE管脚控制单片机输入输出状态。


需要按下主机按键时检测按键状态,切换当前对象,设置中断,并标记此时状态是从机1或从机2。


//中断发生时按照中断优先级,主机先执行cort++并发送信息,主机中断结束后才进入从机中断。


如果是从机1,输出状态下发送对应数字,输入状态下设置单片机通信(非多机通信)接收并显示对应数字,重置输出状态。从机2同理。

参考资料

  1. DPDK.
  2. LVS.
  3. Eisenbud D E, Yi C, Contavalli C, et al. Maglev: A Fast and
    Reliable Software Network Load
    Balancer
    .

LVS的属性难题

最初美团点评使用的是LVS+Nginx组成的负荷均衡布局,LVS做四层负载均衡,Nginx做七层负载均衡,不过随着美团点评流量的长足增进(多少个月内无论新建连接数仍然吞吐量都有三倍的增高),LVS故障频发,质量上冒出瓶颈,由此大家自研了一款高质量、高可相信的四层负载均衡MGW来替换LVS。

————————————————————————————————————————————

MGW怎么样完成高质量

下边通过对照LVS的局地品质瓶颈来介绍MGW是什么促成高质量的。

统筹要求:

美团点评技术沙龙由美团点评技术公司主持,每月一期。每期沙龙诚邀美团点评及别的网络集团的技能专家分享来自一线的实践经验,覆盖各紧要技术领域。

————————————————————————————————————————————

故障切换

澳门美高梅手机网站 10

在故障切换的难点上,大家目的在于在机器故障今后,沟通机可以即时将流量切到其余机器上,因为流量不切走,意味着到达那台机器流量会被全部丢掉,产生大量丢包。经过调研测试发现,当互换机侧全体运用物理接口并且服务器侧对接口进行断电时,交流机会须臾间将流量切换来另外机器上。通过一个100ms发七个包的测试(客户端和服务端各发一个),那种操作方法是0丢包的。

出于故障切换主要借助于沟通机的感知,当服务器上出现部分老大,互换机感知不到时,互换机就不能开展故障切换操作,因而须要二个健康自检程序,每半秒举行一回不荒谬自检,当发现服务器存在13分时就对服务器执行网口断电操作,从而让流量即时切走。

故障切换紧要着重于网口断电操作并且网卡驱动是跑在主程序里面的,当主程序挂掉未来,就不能再对网口执行断电操作了,因而为了缓解这一个难题,主进程会捕获极度信号,当发现分外时就对网卡举办断电操作,在断电操作截止今后再持续将信号发给系统开展处理。

由此上述设计,MGW可以落成升级操作0丢包,主程序故障0丢包,其余尤其(网线等)会有三个最长500ms的丢包,因为这种格外需求靠自检程序去检测,而自检程序的周期是500ms。

试行7.5:MAX487多机通讯应用实例

一致性源IP Hash调度器

源IP
Hash调度器紧若是确保同一的客户端的连年被调度到均等应用服务器上,相当于说建立一个客户端与应用服务器一对一的映照关系。普通的源IP
Hash调度器在应用服务器暴发变化今后会促成映射关系发出转移,会对工作造成影响。

为此大家付出了一致性源IP
Hash调度器,保险在应用服务器集群发生变化时,唯有爆发变化的应用服务器与客户端的照射关系发生转移,其余都以不变的。

澳门美高梅手机网站 11

为了保障流量的均匀,首先在hash环上分红一定数量的虚拟节点,然后将虚拟机节点均衡的重分布到大体节点上,重分布算法要求确保两点:

  1. 在物理节点暴发变化时,唯有少数虚拟节点映射关系暴发变化,约等于要保险一致性Hash的着力尺度。
  2. 因为MGW是以集群的样式存在的,当多少个应用服务器暴发上线下线操作时,反馈到不同的MGW节点上就有恐怕会油可是生顺序差距的标题,由此无论不同的MGW节点暴发何种应用服务器上下线顺序,都需求确保最后的映照关系一致,因为一旦不平等就招致相同客户端的连日会被区其他MGW节点调度到差别的应用服务器上,也就违背了源IP
    Hash调度器的尺度。

综合以上两点,谷歌Maglev负载均衡的一致性Hash算法是3个很好的例子,在paper中有详实的介绍,那里就可是多探究了。

落成代码:SM2=1,多机通讯方式!

节点平滑下线

澳门美高梅手机网站 12

在帕杰罗S可相信性方面,MGW提供了节点平滑下线功效,紧如果为了化解当用户需求对本田UR-VS进行进步操作时,假若一贯将索要提高的RAV4S下线,那这一个牧马人S上设有的具有连接都会失利,影响到业务。此时只要调用MGW的平整下线功用,MGW就可以确保此OdysseyS已有两次三番不奇怪干活,但不会往下面调度新的连续。当有着已有连接完成未来,MGW会上报1个扫尾的景况,用户就足以依照这么些截止的状态对安德拉S举行升级操作,升级后再调用上线接口让这一个奥迪Q5S器举行正规的服务。假使用户平台协助自动化应用安排,这就足以经过连接云平台使用平滑下线作用,完毕完全自动化且对事情无影响的晋升操作。

本期沙龙席卷三场讲座:美团云Docker平台、美团云对象存储系统、美团四层负载均衡网关MGW。其余几场讲座的图文实录会陆续发布,请继续关切。

兑现代码:SM2=0,单机通讯情势!

干什么采纳自研四层负载均衡?

选料自研四层负载均衡的由来首要有七个:第③个是考虑到硬件负载均衡开销相比高;第③个,随着美团点评业务流量越来越大,LVS出现了质量瓶颈以及运转开销的进步难点。

  • 在单机通讯方式下,SM2 == 0,

    初始化:SCON = D0;

    发送完毕:TI=0;

    吸收完成:KugaI=0;

    暂停触发条件:本田UR-VI=0且SM2=0,劲客I置位

    此情状下,发送和吸纳消息截至后需求对TiguanI和TI手动置为0即可。

    澳门美高梅手机网站 13

  • 在多机通讯情势下,SM2在0和1之间调动

    初始化:主机:SCON = F8;从机:SCON = F0;

    暂停触发条件:接收到的第12人RB9==1,奥德赛I置位(即使RB8=0,奇骏I就会等于0,就不大概进入接收中断,自然丢失音讯了。)

鉴于水源是2个相比较通用的应用程序,由此它并不曾对某些一定情景做一些定制设计,那就造成部分国有的数据结构必要锁的保安。下边介绍一下油不过生锁的缘由和MGW的缓解形式。

澳门美高梅手机网站 14

率先介绍一下TucsonSS(Receive Side
Scaling),凯雷德SS是壹个由此数据包的元组音讯将数据包散列到差别网卡队列的功能,这时候不一样的CPU再去相应的网卡队列读取数据进行拍卖,就可以丰裕利用CPU能源。此前介绍MGW使用FULLNAT的方式,FULLNAT会将数据包的元组信息全体改动,那样同3个连续,请求和回应方向的多寡包有大概会被ENCORESS散列到不相同的网卡队列中,在差其他网卡队列也就象征在被差别的CPU进行拍卖,那时候在走访session结构的时候就须要对这一个布局举行加锁爱惜。

解决那一个难题的法门有三种,一种就是在做SNAT选端口的时候,通过选拔多少个端口lport0让OdysseySS(cip0,
cport0, vip0, vport0) = 奥迪Q3SS(dip0, dport0, lip0,
lport0)相等;此外一种办法就是我们为各样CPU分配三个localip,在做SNAT选IP的时候,差别的CPU选用自个儿的localip,等应对回来将来,再经过lip和CPU的炫耀关系,将点名目的IP的数目包送到钦点队列上。

是因为第2种格局恰好可以被网卡的flow
director特性襄助,由此大家采用了第二种办法来去掉session结构的锁。

澳门美高梅手机网站 15

flow
director可以依照早晚策略将点名的数额包送到钦赐网卡队列,其在网卡中的优先级要比奔驰M级SS高,因而大家在做初叶化的时候就为逐个CPU分配3个localip,比如为cpu0分配lip0,为cpu1分红lip1,为cpu2分配lip2,为cpu3分配lip3。
当3个呼吁包(cip0, cport0, vip0,
vport0)到达负载均衡后,被本田CR-VSS散列到了队列0上,那时那几个包被cpu0处理。cpu0在对其做fullnat时,选取cpu0自身的localip
lip0,然后将数据包(lip0, lport0, dip0,
dport0)发到应用服务器,在应用服务器应答后,应答数据包(dip0, dport0,
lip0,
lport0)被发到了负荷均衡服务器。此时我们就足以在flow
director下一条将目标IP为lip0的多寡包送到队列0的规则,这样答复数据包就会被送到队列0让cpu0处理。那时候CPU在对同三个接连八个趋势的数目包举行处理的时候就是截然串行的贰个操作,也就绝不再对session结构进行加锁拥戴了。

有关该实验在多机通讯和单机通讯下分化意况的议论

RS可靠性

  • 主机

     1 #include <reg51.h>
     2 #include <intrins.h>
     3 unsigned char cort = 0;
     4 sbit P3_5 = P3 ^ 5;
     5 key_serial() interrupt 0 using 1
     6 {
     7     ++cort;
     8     if (cort == 3)
     9         cort = 1;
    10 }
    11 void main()
    12 {
    13     P2 = 0xff;
    14     TMOD = 0x20;
    15     TH1 = 0xFD;
    16     TL1 = 0xFD;
    17     PCON = 0x00;
    18     TR1 = 1;
    19     SCON = 0xF8;
    20     EA = 1;
    21     EX0 = 1;
    22     IT0 = 1;
    23     P3_5 = 1;
    24     while(1)
    25     {
    26         if (cort == 1)
    27         {
    28             SBUF = 0x01;
    29             while(TI != 1);
    30             TI = 0;
    31             P3_5 = 0;
    32             RB8 = 1;
    33             while(RI != 1);
    34             RI = 0;
    35             P2 = SBUF;
    36             P3_5 = 1;
    37         }
    38         if(cort == 2)
    39         {
    40             SBUF = 0x02;
    41             while(TI != 1);
    42             TI = 0;
    43             P3_5 = 0;
    44             RB8 = 1;
    45             while(RI != 1);
    46             RI = 0;
    47             P2 = SBUF;
    48             SM2 = 1;
    49             P3_5 = 1;
    50         }
    51 
    52     }
    53 }
    
  • 从机1

     1 #include <reg51.h>
     2 #include <intrins.h>
     3 sbit P3_5 = P3 ^ 5;
     4 void serial(void) interrupt 4 using 1
     5 {
     6     ES = 0;
     7     RI = 0;
     8     if (SBUF == 0x01)
     9     {
    10         P3_5 = 1;
    11         RI = 0;
    12         TB8 = 1;
    13         P1 = 0x10;
    14         SBUF = 0x10;
    15         while(!TI);
    16         TI = 0;
    17     }
    18     else P1 = 0;
    19     P3_5 = 0;
    20     ES = 1;
    21 }
    22 void main()
    23 {
    24     P1 = 0x00;
    25     TMOD = 0x20;
    26     TH1 = 0xFD;
    27     TL1 = 0xFD;
    28     PCON = 0x00;
    29     TR1 = 1;
    30     SCON = 0xF0;
    31     EA = 1;
    32     ES = 1;
    33     P3_5 = 0;
    34     while(1)
    35         _nop_();
    36 }
    
  • 从机2

     1 #include <reg51.h>
     2 #include <intrins.h>
     3 sbit P3_5 = P3 ^ 5;
     4 void serial() interrupt 4 using 1
     5 {
     6     ES = 0;
     7     RI = 0;
     8     if (SBUF == 0x02)
     9     {
    10         P3_5 = 1;
    11         RI = 0;
    12         TB8 = 1;
    13         P1 = 0x20;
    14         SBUF = 0x20;
    15         while(!TI);
    16         TI = 0;
    17     }
    18     else P1 = 0;
    19     P3_5 = 0;
    20     ES = 1;
    21 }
    22 void main()
    23 {
    24     P1 = 0x00;
    25     TMOD = 0x20;
    26     TH1 = 0xFD;
    27     TL1 = 0xFD;
    28     PCON = 0x00;
    29     TR1 = 1;
    30     SCON = 0xF0;
    31     EA = 1;
    32     ES = 1;
    33     P3_5 = 0;
    34     while(1)
    35         _nop_();
    36 }
    

方今沙龙会分别在上海、巴黎和艾哈迈达巴德等地举办,要到位下一回最新沙龙活动?急忙关切微信公众号“美团点评技术团队”。

 1 #include <reg51.h>
 2 main()
 3 {
 4     TMOD = 0x20;
 5     SM0 = 0;
 6     SM1 = 1;
 7     REN = 1;
 8     PCON = 0;
 9     TH1 = 0xFD; //253=256-(1*11.0592*10^6)/(384*9600)
10     TL1 = 0xFD;
11     TR1 = 1;
12     P1 = SBUF;
13     while(!RI);
14     RI = 0;
15     SBUF = P1;
16     while(!TI);
17     TI = 0;
18 }

集群的高可看重

澳门美高梅手机网站 16

MGW使用OSPF+ECMP的方式组成集群,通过ECMP将数据包散列到集群中相继节点上,再经过OSPF保险单台机器故障以往将那台机器的路由动态的删减出去,那样ecmp就不会再给那台机器分发流量,也就马到成功了动态的failover。

澳门美高梅手机网站 17

观念的ecmp算法有3个很严重的标题,当集群中节点数量暴发变化以往,会促成大多数流量的路子发生转移,爆发转移的流量到达任何MGW节点上时是找不到温馨的session结构的,那就会招致大气的接连出现万分,对业务影响很大,并且当大家在对集群做升高操作时会将各类节点都开展三次下线操作,那样就深化了那些标题标熏陶。

一种缓解方法是运用匡助一致性hash的交流机,这样在节点暴发变化的时候,唯有发生变化的节点上面的接连会有震慑,其他连接都会保持正规,然而援救那种算法的互换机比较少,并且也平昔不完全落到实处高可用,因而大家做了集群间的session同步功用。

澳门美高梅手机网站 18

集群中各个节点都会全量的将本人的session同步出去,使集群中逐个节点都维护一份全局的session表,因而无论节点变化之后流量的不二法门以任何款式改变,那一个流量都能够找到自身的session结构,也等于说可以被符合规律的转折,那样就可以在集群中节点数量爆发变化时有限帮忙拥有连接不奇怪。

在布置的进度中根本考虑了七个难题:第三个是故障切换,第③个是故障復苏以及扩容。

澳门美高梅手机网站 19

单机高可依赖

澳门美高梅手机网站 20

在单机高可相信方面,MGW做了1个自动化测试平台,自动化平台经过连通性和配置的不利来判断一个测试用例是不是实施成功,败北的测试用例平台可以通过邮件文告测试人士。在历次新成效迭代停止之后,都会将新作用的测试用例加到自动化平台之中,那样在历次上线在此之前都进展两次自动化测试,可以大大防止改动引发的难点。

在头里,每趟上线此前都必要进行五遍手动的回归测试,回归测试卓殊耗时并且很不难遗漏用例,不过为了幸免改动引发新题材又不得不做,有了自动化测试平台之后,大大提升了回归测试的成效和可倚重性。


  • 主机

     1 #include <reg52.h>
     2 unsigned char cort = 0;
     3 sbit P3_5 = P3 ^ 5;
     4 void key_serial() interrupt 0 using 1
     5 {
     6     ++cort;
     7 }
     8 void main()
     9 {
    10     P2 = 0x0f;
    11     TMOD = 0x20;
    12     TH1 = 0xFD;
    13     TL1 = 0xFD;
    14     PCON = 0x00;
    15     TR1 = 1;
    16     SCON = 0xD0;
    17     EA = 1;
    18     EX0 = 1;
    19     IT0 = 1;
    20     P3_5 = 1;
    21     while(1)
    22     {
    23         if (cort == 1)
    24         {
    25             SBUF = 0x01;
    26             while(!TI);
    27             TI = 0;
    28             P3_5 = 0;
    29             while(!RI);
    30             RI = 0;
    31             P2 = SBUF;
    32             P3_5 = 1;
    33         }
    34         if(cort == 2)
    35         {
    36             SBUF = 0x02;
    37             while(!TI);
    38             TI = 0;
    39             P3_5 = 0;
    40             while(!RI);
    41             RI = 0;
    42             P2 = SBUF;
    43             P3_5 = 1;
    44         }
    45         if (cort == 3)
    46             cort = 1;
    47     }
    48 }
    
  • 从机1

     1 #include <reg51.h>
     2 #include <intrins.h>
     3 sbit P3_5 = P3 ^ 5;
     4 void serial(void) interrupt 4 using 1
     5 {
     6     ES = 0;
     7     RI = 0;
     8     P2 =  SBUF;
     9     if (SBUF == 0x01)
    10     {
    11         P3_5 = 1;
    12         P1 = 0x10;
    13         SBUF = 0x30;
    14         while(!TI);
    15         TI = 0;
    16     }
    17     else P1 = 0;
    18     P3_5 = 0;
    19     ES = 1;
    20 }
    21 void main()
    22 {
    23     P1 = 0x00;
    24     TMOD = 0x20;
    25     TH1 = 0xFD;
    26     TL1 = 0xFD;
    27     PCON = 0x00;
    28     TR1 = 1;
    29     SCON = 0xD0;
    30     EA = 1;
    31     ES = 1;
    32     P3_5 = 0;
    33     while(1)
    34         _nop_();
    35 }
    
  • 从机2:略

![](https://images2015.cnblogs.com/blog/1146465/201705/1146465-20170516153941307-336436808.png)

   

经过串口发送接收数据(串口工作章程1)

![](https://images2015.cnblogs.com/blog/1146465/201705/1146465-20170516153942213-2032990228.png)

实现代码: 

-   主机:
         1 #include <reg51.h>
         2 #include <intrins.h>
         3 unsigned char cort = 0;
         4 sbit P3_5 = P3 ^ 5;
         5 key_serial() interrupt 0 using 1
         6 {
         7     ++cort;
         8 }
         9 void main()
        10 {
        11     P2 = 0xff;
        12     TMOD = 0x20;
        13     TH1 = 0xFD;
        14     TL1 = 0xFD;
        15     PCON = 0x00;
        16     TR1 = 1;
        17     SCON = 0xF8;
        18     EA = 1;
        19     EX0 = 1;
        20     IT0 = 1;
        21     P3_5 = 1;
        22     while(1)
        23     {
        24         if (cort == 1)
        25         {
        26             SBUF = 0x01;
        27             while(TI != 1);
        28             TI = 0;
        29             P3_5 = 0;
        30             SM2 = 0;
        31             while(RI != 1);
        32             RI = 0;
        33             P2 = SBUF;
        34             SM2 = 1;
        35             P3_5 = 1;
        36         }
        37         if(cort == 2)
        38         {
        39             SBUF = 0x02;
        40             while(TI != 1);
        41             TI = 0;
        42             P3_5 = 0;
        43             SM2 = 0;
        44             while(RI != 1);
        45             RI = 0;
        46             P2 = SBUF;
        47             SM2 = 1;
        48             P3_5 = 1;
        49         }
        50         if (cort == 3)
        51             cort = 1;
        52         SM2 = 1;
        53     }
        54 }

-   从机1:
         1 #include <reg51.h>
         2 #include <intrins.h>
         3 sbit P3_5 = P3 ^ 5;
         4 void serial(void) interrupt 4 using 1
         5 {
         6     ES = 0;
         7     RI = 0;
         8     if (SBUF == 0x01)
         9     {
        10         P3_5 = 1;
        11         SM2 = 0;
        12         P1 = 0x10;
        13         SBUF = 0x10;
        14         while(!TI);
        15         TI = 0;
        16     }
        17     else P1 = 0;
        18     SM2 = 1;
        19     P3_5 = 0;
        20     ES = 1;
        21 }
        22 void main()
        23 {
        24     P1 = 0x00;
        25     TMOD = 0x20;
        26     TH1 = 0xFD;
        27     TL1 = 0xFD;
        28     PCON = 0x00;
        29     TR1 = 1;
        30     SCON = 0xF0;
        31     EA = 1;
        32     ES = 1;
        33     P3_5 = 0;
        34     while(1)
        35         _nop_();
        36 }

-   从机2:略 

一往无前思路:

  • 定时器设置
  • 串口设置

    • 干活格局
    • 波特率
  • 打开定时/计数器

  • 串口执行

    • 收受数据
    • 出殡数据

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –


在基本二个单片机中开展双机通讯,当从机显示的数字和主机相同,则意味该主机和从机正在通信。按下主机按键切换当前目的。

试行7.4:哈弗S232串口应用实例

  • 主机端

    在主机中设置定时器和串口参数,并直接维持发送数据的图景。

落到实处思路:

得心应手代码:

  • 主机

– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –

澳门美高梅手机网站 21

————————————————————————————————————————————

澳门美高梅手机网站 22

设计须求:

发表评论

电子邮件地址不会被公开。 必填项已用*标注