本文由  网易云发布。

数字化转型浪潮之下,采用云计算服务提升业务敏捷性、降低运维成本,成为了传统企业的优选方案。网易云资深解决方案架构师张亮通过某物流企业客户的实际案例,分享了传统业务系统在云上的架构设计如何满足数据高可靠、业务高可用的需求,并总结了传统业务上云的常见问题和解决方案。

物流企业业务系统上云需求

对于物流企业来说,内部沟通、供应链协同对优化供应链效率提升核心竞争力非常重要。作为行业翘楚,该物流企业客户建立了一个企业级移动办公平台,该平台集成了即时通讯(IM)、企业内部的ERP、OA以及核心供应链信息,用于支持内部员工的内部沟通协作,会议、日程安排以及供应链信息、ERP信息、OA流程审批和办理的查询,平台同时也提供给上下游合作伙伴查询供应链信息,以满足供应链协同的需求。该系统最初部署在客户自建机房中,服务于客户内部员工,但为了给一些大型合作伙伴提供类似的能力,客户同时采用了网易云支撑系统的建设和运行。

客户自建机房和网易云基础设施存在一些差异,例如客户自建机房有共享SAN和NAS,并采用带库和商业备份软件来满足数据合规的要求(存储冷数据、归档),MySQL数据库运行在物理机上,而网易云作为成熟的互联网服务,采并没有提供共享块存储服务,数据库是运行在虚拟机上的。

由于该系统要作为一项业务给第三方提供服务,项目一期覆盖数万名用户,考虑基础设施的差异性,客户最为关注如下四个方面:

数据安全性:影响客户业务的数据,包括员工通信记录、日程和供应链信息等,必须保证最高的安全性和可靠性;

业务可用性:此业务系统是客户为其客户提供的服务,因此对于SLA关注度非常高。客户要求在极端状况下(整个生产站点不可用)需要有快速业务恢复能力;

功能:应用探活、监控告警、内网负载均衡(LB)、内网DNS等功能,直接影响客户的运维能力和部署高可用业务的便捷性;

性能:客户原有数据库使用物理机,采用虚拟机担心性能不足,需要避免高并发场景下会的卡顿甚至崩溃的情况。

网易云跨机房容灾架构方案

客户原有业务系统底层是一个传统的同城主备容灾双机房架构(主机房宕机,则备机房接管),在应用侧采用了Redis缓存、Kafka、内外网负载均衡,是一个类互联网架构。系统采用商业硬件全局负载均衡(GSLB)做站点间的容灾,后端存储有传统的SAN、NAS、磁带库和VTL(虚拟磁带库)等,持久化数据大部分在存储上,通过专线和存储能力做跨站点的快照同步和数据同步复制。一般说来,商业磁盘阵列的高级License会带这些功能,但高级License比较昂贵,且该方案的容灾能力极大依赖于阵列设备的容灾能力,一旦阵列设备出故障,数据存储就危险。此外,Jetty、Java应用间是软负载均衡的设计,对外有硬件负载均衡。

该业务系统在网易云上的部署是一个分步试水、逐步完善的过程。业务系统的即时通讯能力由网易云通信服务(云信)SDK提供底层能力,客户自己做上层的封装,云信和应用系统部署在不同的机房,通过网易云内部高速通信。刚开始的架构相对简单,没有考虑容灾,Redis、Kafka、RDS、NAS都映射原来的系统架构,GSLB取消,用Elasticsearch做日志搜索。

之后是跨机房容灾的完善。针对原有系统,运维部门每隔半年会进行一次容灾切换的演练,所以客户希望云上容灾也能满足数据可靠性、业务可用性的需求。

张亮介绍,云上跨机房容灾根据机房距离和网络延迟,可以分为两种:一是跨可用区(AZ)容灾,一般用来支持需要双活的业务;二是跨Region的容灾,一般是异地,两个机房比较远,网络延迟无法满足双活的要求。网易云为客户设计了跨AZ容灾的方案。客户最初在云主机中自己搭建Redis和Kafka,后来发现需要自己关注监控、高可用,但这是网易云现成的Redis和Kafka服务自带的功能。

网易云提供的容灾服务包括:

负载均衡:提供跨机房的负载均衡服务(NLB),每个机房是2个NLB实例(主备),但客户流量进来只看到同一个公网IP——如果生产站点AZ1宕机,路由会实现IP漂移,把IP关联到灾备站点AZ2上,客户不需要关注IP的变化。

数据持久化:提供跨机房的RDS高可用实例,生产站点主备2个实例,灾备站点1个实例(考虑成本因素),通过内部DNS访问,一边的RDS宕机,对于应用来说是无感知的,因为系统会自动把域名解析到灾备站点的RDS实例上。

文件系统服务:通过跨机房的复制做数据同步,对于用户来说,数据持久化不需要管。

Kafka:通过MirrorMaker做跨机房同步,它的消费者可以在灾备站点去消费Kafka和消息,如果只是部分服务宕机,系统可以提供跨机房的访问,当然延迟会比同机房高一些,这取决于应用对访问数据延迟的要求,如果延迟要求非常高,可能需要做应用单元化,尽量减少跨机房的访问,把一些对延迟敏感的请求放在一个机房内,这是业务架构上的设计。

张亮补充说,网易云支持应用去访问另外一个机房的RDS,但应用之间的容灾还需要客户自己做跨机房部署。NLB可以通过内网DNS判断请求是从哪个AZ过来的,从而让应用能够正确访问对应的底层服务。

跨Region和跨AZ不一样,后者在同一个VPC里面,前者在两个不同的VPC里面,网络延迟比较高,NLB没有提供跨机房高可用实例,对外IP不一样,需要外部有一个类似GSLB或者DNS的服务去做流量切换。其他的如RDS、Kafka的复制,依赖于VPC Peering,需要在核心交换机上做一些后台操作,让两个VPC能打通(默认内网是不通的),否则需要通过公网再从前端路由绕回来,无法通过机房内部专线直接访问。

跨Region的RPO(恢复点目标)比跨AZ要差,跨AZ的RDS可以做到RPO等于0,两边都写入以后,才能返回“写成功”。而跨Region,一边写完就返回“写成功”,如果数据只是在主站点写成功,尚未复制到灾备站点时主站点宕机,这就会造成数据永久丢失。传统架构下的Oracle RAC跨机房集群、存储双活的方案,其实每一次数据写入都是双写,才能实现双活。

所以,跨Region容灾一般用于两地三中心的异地灾备,业务可用性要求高的情况下,建议客户采用跨AZ容灾的部署架构。对于客户而言,基于云的跨AZ容灾方案,只是在容灾、监控、服务的使用方法上和自建机房有所区别,但满足RPO和RTO的要求没有问题。

张亮补充说,跨AZ容灾切换是客户自己做切换,RPO取决于客户运维团队多久才能感知故障、多久把灾备站点服务配置好,因为客户应用的配置比较传统,提前把后端的服务IP、DNS域名写入配置文件,而不是采用服务注册/服务发现的机制动态发布。如果进行应用微服务化改造,RTO还可以有很大的提升空间。

上云常见问题与对策

对于托管IDC、自建机房的传统行业而言,云基础设施带来的变化确实需要虑周全。基于网易云支撑传统业务上云的经验,张亮最后总结了传统业务上云的常见问题和解决方案。

云上很少有共享块存储。SQL Server提供的Always-On故障转移集群高可用方案需要共享块存储的支撑,但企业现在可以使用无需共享存储的SQL Server高可用方案,比如日志传输、Always-On可用性组等SQL Server 2012及之后的版本都支持的方案,都不依赖于任何共享存储形式。

VPC网络不支持广播、多播,而一些应用需要通过广播、多播的形式做集群。

Keepalived:升级到支持单播的新版本,在配置文件中指定使用单播,即可在VPC网络下正常工作。

Tomcat通过广播支持集群成员通信:一是使用Tomcat-Static cluster membership这种静态方式,通过在配置文件中手动告知集群节点有哪些成员,弹性伸缩比较麻烦,只适合规模小的业务;二是无状态化,把Session从Tomcat分出来,放到Redis之类的服务中。

采用N2N Peer-to-Peer VPN的方案,在VPC网络上再构建一个VPN网络,就可以广播,但这种方式会有性能损耗,可以用于POC测试、概念验证,生产环境慎用。

无物理磁带库。一些行业有合规要求,不经常访问的冷数据会存储在磁带库中。在云上有两种方案:一是通过云服务商提供的VTL存储网关,备份软件连接网关,可以把后端当做磁带库使用;二是现在不少的备份软件已经支持主流云服务商的对象存储服务,直接在备份软件中把数据备份到对象存储,成本比磁盘阵列或者NAS要低很多。

网易云为您提供对象存储负载均衡等服务,感兴趣的朋友欢迎点击免费试用。

了解 网易云 :
网易云官网:https://www.163yun.com/
新用户大礼包:https://www.163yun.com/gift
网易云社区:https://sq.163yun.com/

传统业务上云:跨AZ容灾架构解析的更多相关文章

  1. QQ 相册后台存储架构重构与跨 IDC 容灾实践

    欢迎大家前往云加社区,获取更多腾讯海量技术实践干货哦~ 作者简介:xianmau,2015 年加入腾讯 TEG 架构平台部,一直负责 QQ 相册平台的维护和建设,主导相册上传架构重构和容灾优化等工作. ...

  2. ceph 对象存储跨机房容灾

    场景分析 每个机房的Ceph都是独立的cluster,彼此之间没有任何关系. 多个机房都独立的提供对象存储功能,每个Ceph Radosgw都有自己独立的命名空间和存储空间. 这样带来两个问题: 针对 ...

  3. 极简配置,业务上云只需 3min

    为了简化账号配置环节,实现本地一键开发部署,Serverless Framework 发布了微信扫码一键登录能力,支持用户在 Serverless Framework 环境扫码注册登陆,用户无需登录控 ...

  4. 阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力

    近日,阿里云正式发布OSS同城冗余存储产品.这是国内目前提供同城多AZ冗余部署能力覆盖最广的云上对象存储产品,可以实现云存储的同城双活,满足企业级客户对于“发生机房级灾难事件时数据不丢失,业务不中断” ...

  5. 腾讯云COS对象存储占据数据容灾C位

    说到公有云容灾,大家首先想到的是云上数据备份. 然而,随着企业核心业务逐渐从线下迁移到云上,客户提出了更高的要求.如何确保云上业务的高可用.数据的高可靠,这对云厂商提出了新的挑战. 腾讯云作为全球领先 ...

  6. 基于消息队列 RocketMQ 的大型分布式应用上云最佳实践

    作者|绍舒 审核&校对:岁月.佳佳 编辑&排版:雯燕 前言 消息队列是分布式互联网架构的重要基础设施,在以下场景都有着重要的应用: 应用解耦 削峰填谷 异步通知 分布式事务 大数据处理 ...

  7. 阿里云基于OSS的云上统一数据保护方案2.0技术解析

    近年来,随着越来越多的企业从传统经济向数字经济转型,云已经渐渐成为数据经济IT新常态.核心业务系统上云,云上的业务创新,这些都产生了大量的业务数据,这些数据也成为了企业最重要的资产.资源. 阿里云基于 ...

  8. QQ全量上云,你想了解的技术细节都在这

    腾讯的业务体量非常庞大,在2019年,腾讯已拥有超过了100万台服务器,其中,社交业务包括QQ和空间的体量有近20万台服务器,且分布在全国三地. 把QQ这头大象搬到云上并非易事.作为腾讯最庞大.最悠久 ...

  9. ​云中奈飞(一):Netflix的上云之旅

    作者按: Netflix(译为奈飞/网飞)公司自1997年创立以来,已发展成为美国最大的互联网流媒体服务商.它从2008到2015年间长达七年的将其所有IT系统从自有数据中心迁移到AWS之上的旅程,在 ...

随机推荐

  1. SSH框架项目开发命名规范

    SSH 框架项目开发命名规范   一.各层包及类命名规范   总体原则:包名所有字母小写,类名采用 "驼峰标识",具体如下:   1. Action 类      包命名规范:co ...

  2. ubuntu下ruby文件执行蛋疼的一个问题

    ubuntu下面用sublime打开非常简单的一段代码(其实不算代码,因为没有实际语句): #!/usr/bin/ruby 在shell下加入x权限:chmod u+x doit.rb,然后运行 ./ ...

  3. Django(一)入门基础——hello world

    环境配置 windows7 python3.6 Django 2.0 PyCharm 2018.1 专业版(PS:不建议社区版,因为被"阉割"了很多功能,比如cmd的Termina ...

  4. Spring ioc 详解

    引述:IoC(控制反转:Inverse of Control)是Spring容器的内核,AOP.声明式事务等功能在此基础上开花结果.但是IoC这个重要的概念却比较晦涩隐讳,不容易让人望文生义,这不能不 ...

  5. 乐学习知选择--我的J2EE技术历程

    转眼换工作已经两个多月了,转眼今年已经到9月份了,转眼女朋友也来到了自己身边.有太多的转眼,如今在这个经理不在的早晨,可以肆意的点点这里看看那里,想想自己,有点吉利思的感觉. 这两个多月,知道了什么叫 ...

  6. 实现CString的Format功能,支持跨平台

    #include <string>#include <stdio.h> #include <stdarg.h> std::string& std_strin ...

  7. Pivotal开源基于PostgreSQL的数据库Greenplum

    http://www.infoq.com/cn/news/2015/11/PostgreSQL-Pivotal 近日,Pivotal宣布开源大规模并行处理(MPP)数据库Greenplum,其架构是针 ...

  8. 关于期权池Option Pools与Vesting:码农创业防身必备法器

    之前又看到饿了么创始人团队纠纷的几篇文章,参考了百科.wiki.36Kr.虎嗅.知乎以及邵亦波老师的文章,对之前一直感兴趣的期权汇编初略总结了下 ,仍觉粗糙,对一些具体操作还是不甚了了,不过感觉在中国 ...

  9. The note of Developing Innovative Ideas for New Companies Course

    This course is free on the Coursera Site,But it only has English version Threee pieces of the course ...

  10. Ubuntu本地uwsgi配Django问题的解决

    版本Ubuntu14.04,Django1.6.5 ubuntu本地Uwsgi调Django可能会报错: -- unavailable modifier requested: 0 -- 解决方法:先安 ...