因为公司策略变更,由之前的国外市场,转而发展国内市场,因此对架构提出了更高的要求,因此也产生了更多的需求,如何高效的利用现有架构满足不断变更的业务需求成为最大的问题。
背景:
公司最早为了满足国外的市场需求,在新加坡自建了自己的idc机房,因此最早,公司所有的基础服务、业务服务、大数据集群,都是部署于自建的新加坡IDC内,为了方便管理新加坡IDC机房,在北京永丰搭建了属于自己的IDC机房,通过跨国专线来管理新加坡IDC机房,测试和开发环境为了模仿生产部署于永丰机房
需求
为了满足新增的国内市场,减少初期的投入成本,决定在阿里云部署一套完整的环境,但是大数据位于新加坡IDC内,如果重建成本太高,因此大数据不在阿里云部署,因此怎么样将阿里云的数据平滑迁回新加坡IDC内成了当午之急。
方案

  1. 需要数据回传的业务在阿里云做映射回到新加坡IDC,这样数据就回到了新加坡内
  2. 将新加坡IDC的kafka集群暴露于公网,做防火墙保护
  3. 通过haproxy反向代理kafka集群,将haproxy暴露于公网
  4. 通过其他中间件的方式将阿里云的kafka信息转储回新加坡IDC内的kafka集群中

网络
选择
方案1相当于那些需要上报数据的应用部署于新加坡idc内,但是这样相当于对国内用户访问并不友好,如果香港的访问链路出现问题,将会极大的影响用户数据的上报
方案2和方案3虽然方便了,用户,但是在安全性上对运维的要求更高,因此在和运维的沟通下,并不建议这样使用,除非没有选择
方案4通过中间件的方式将阿里云的kakfa消息搬运到新加坡idc内,对用户而言没有影响,因为服务器在国内,对用户无感知,但是需要部署一个中间件,增加架构的复杂度,对架构提出了更高的要求,而且新家idc和阿里云环境是不允许联通,因此对网络有要求,但是阿里云机房和新加坡IDC都必须和永丰IDC的管理网段必须联通,因此除了对网络的要求更高之外,并没有其他的风险点。
因此在最后选择方案4

实施:
因为阿里云和新加坡IDC默认和永丰IDC的管理网段必须联通,但是联通方式却有很大的不同
区别

  1. 新加坡IDC和永丰是通过专线联通,稳定性和可用性更高而阿里云和永丰这是通过vpn的方式连接,可用性和稳定性远不及新加坡和永丰的连接
  2. 速率的区别,新加坡IDC使用的是100M国际专线而阿里云使用的是5M速率,速率差别更大,单位时间传输的数据会更小

在和业务的沟通下,在业务的初期,上报至大数据的数据量并不是很大,5M在峰值时可能并不够,但是允许降低部分的实效性,而且阿里云和新加坡IDC的专线正在搭建,只是这个时间成本大于我们的预期,跟不上我们速度,因此后期速度并不会成为阻碍我们的瓶颈,更多应该承担初期的数据导入

进入中间件选型阶段

  1. 使用官方推荐的mirror方案
  2. 使用开源社区的uReplicator
  3. 自研

官方推荐的mirror方案,使用起来更方便,但是在可维护性和长期的发展而言并不是最优选
uReplicator使用起来虽然很方便,但是并没有对应页面,暂时只有rest接口方式
自研,只有不到一周的时间了,时间上绝对来不及啊
因此最后只能先上uReplicator,后期再慢慢开发

部署,实际部署时为了应对网络闪断的情况,我们的zk节点位于阿里云,因为网络相对而言,专线的好于vpn,当时网络出现问题时,至少可以保证消息的送达,虽然可能导致消息多次送达,但大数据允许这种情况发生

因此最终架构为

经测试消息延迟时间大约为1秒,在数据量多的时候远达不到甚至毫秒级,对业务而言可以忍受