方案提出的初衷:外网需要定时和不定时推送数据到内网服务器(只要求数据到达内网,没有要求直接连接到内网)

为什么不是直连到内网:每个人第一想到的是不安全,是的,没错不安全。内网的应用和外网的应用最明显的区别就是承载的访问量,虽然都应该配置防恶意攻击策略,但是内网的应用一般不会像外网的应用考虑那么多安全的策略。所以这里的安全,包含防窃取资料的安全性、恶意攻击以及给hacker留了后门等因素。(我想的是这些)

所以,专门留一台外网可以访问的机器A,外网把数据推送到机器A,然后内网的应用B去机器A PULL 数据。

怎么去PULL数据?

有两种方式:

第一,定时去机器A PULL,缺点有延时,如果每隔20分钟取一次数据,最长延时为20分钟。如果外网推送本来就延时推送,那么数据状态实际产生的时间到达数据的最终消费者的时候,延时更长。

第二,监听机器A,当机器A上一旦有可用数据的时候,就PULL过来。(我采用的是这种方案)

监听机器A怎么监听?

第一,可以自己写个程序,建立请求连接,机器A保留连接请求不立即响应,等到机器A上有可用消息的时候,再响应。(相当于我们在HTTP里面经常说的 long connection)

第二,使用MSMQ的reveive方法,这个方法本身就实现了这样的机制,当MSMQ中有可用消息时Receive才返回消息。这里需要合理建立专门的消息队列。

推送消息怎么到达数据消费者C?

监听机器A是否有可用消息的服务,我们暂且称为“数据转发服务B”,转发服务可以独立部署,也可以部署在消费者C里面。

我最初把转发服务部署在IIS上,并且设置应用程序池不回收,即“固定时间间隔”设置为0,“限制超时”也设置为0,但是过几个小时后,这个转发服务还是会“休息”,需要访问这个站点的一个页面,使服务“醒”过来。服务没有死,只是可能闲置了,被回收了。具体原因望高手支招。

后来把转发服务配置到了windows服务,这样不会有应用程序池被回收的问题。

数据消费者C需要公开一个接受“推送数据”的服务,转发服务将PULL得到的数据 转 给 该服务。

这样的完整流程我实现了,目前运行正常,但不知会有什么潜在问题?望高手支招。

以上叙述中,机器A是处于DMZ中的。

备用方案:

由于推送数据经过了两个中间机器,机器A和转发服务处于的机器,如果哪天不能用了,让数据消费者B临时主动请求外网API去获得数据,这样对消费者B是有压力的,所以不建议这样使用。

小插曲,就因为后期做了一个主动请求外网API的备用方案,上线测试的时候,没有考虑到生成环境的数据库有上万的历史数据,导致系统异常发了上万条异常邮件。因此被记过加现金处罚。

我的第一个DMZ方案实践的更多相关文章

  1. 网易云信技术分享:IM中的万人群聊技术方案实践总结

    本文来自网易云信团队的技术分享,原创发表于网易云信公众号,原文链接:mp.weixin.qq.com/s/LT2dASI7QVpcOVxDAsMeVg,收录时有改动. 1.引言 在不了解IM技术的人眼 ...

  2. 第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案

    第五十一个知识点:什么是基于ID的加密的安全模型,然后描述一个IBE方案 在公钥密码学中,如果Alice想要给Bob发送一条消息,她需要Bob的公钥,一般来说公钥都很长,就像一个随机的字符串. 假设A ...

  3. 基于Github Actions + Docker + Git 的devops方案实践教程

    目录 为什么需要Devops 如何实践Devops 版本控制工具(Git) 学习使用 配置环境 源代码仓库 一台配置好环境的云服务器 SSH远程登录 在服务器上安装docker docker技术准备工 ...

  4. 基于微前端qiankun的多页签缓存方案实践

    作者:vivo 互联网前端团队- Tang Xiao 本文梳理了基于阿里开源微前端框架qiankun,实现多页签及子应用缓存的方案,同时还类比了多个不同方案之间的区别及优劣势,为使用微前端进行多页签开 ...

  5. Linux实战教学笔记39:Mha-Atlas-MySQL高可用方案实践(一)

    一,mysql-mha环境准备 1.1 实验环境: 主机名 IP地址(NAT) 描述 mysql-db01 eth0:192.168.0.51 系统:CentOS6.5(6.x都可以) 安装:mysq ...

  6. redis-sentinel 高可用方案实践

    近期公司的一块核心业务使用redis作为配置转发中心,存在单点问题,考虑服务的可靠性.针对业务需求,我们确定了我们的需求: 异地跨机房容灾 故障自动切换 尽可能高的保证数据不丢失 针对以上需求,我们分 ...

  7. docker监控方案实践(cadvisor+influxdb+grafana)

    一.概要 1.1 背景 虚拟化技术如今已经非常热门,如果你不知道什么是虚拟化,那你应该了解虚拟机.虚拟化技术如同虚拟机一样,用于将某些硬件通过软件方式实现"复制",虚拟出" ...

  8. DevOps研发模式下「产品质量度量」方案实践

    在当今互联网环境下,需求变更越来越快,交付周期却越来越短, 怎么判断一个系统是否测试充分? 产品质量满足什么样的条件才能投产? 如何判断测试工作.研发团队工作的效率是高还是低? 这些问题不能靠感觉.拍 ...

  9. 知识全聚集 .Net Core 技术突破 | 如何实现一个模块化方案一

    简介 模块化的介绍一共2篇 这一篇我们实现一个功能非常简单的StartupModules模块化. 第二篇我们来实现一个ABP的模块化效果. 思考 其实来简单想一下模块化的实验思路,写个接口=>模 ...

随机推荐

  1. 制作OS X 10.9 Mavericks 安装U盘

    转载:http://www.macx.cn/forum.php?mod=viewthread&tid=2094799 安装win7的话,在mac中使用bootcamp制作一个win7安装盘即可 ...

  2. 理解 OpenStack + Ceph (4):Ceph 的基础数据结构 [Pool, Image, Snapshot, Clone]

    本系列文章会深入研究 Ceph 以及 Ceph 和 OpenStack 的集成: (1)安装和部署 (2)Ceph RBD 接口和工具 (3)Ceph 物理和逻辑结构 (4)Ceph 的基础数据结构 ...

  3. Javascript的DOM操作 - 你真的了解吗?

    摘要 想稍微系统的说说对于DOM的操作,把Javascript和jQuery常用操作DOM的内容归纳成思维导图方便阅读,同时加入性能上的一些问题. 前言 在前端开发的过程中,javascript极为重 ...

  4. Codeforces 715A. Plus and Square Root[数学构造]

    A. Plus and Square Root time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  5. Thread对象的yield(),wait(),notify(),notifyall()

    Thread类中的主要方法: join()方法:让一个线程强制运行,线程强制运行期间,其他线程无法运行,必须等到此线程完成之后才可以继续执行. setDaemon():设置线程为后台线程,这样即使Ja ...

  6. vijos1037搭建双塔(一维背包问题)

    描述 2001年9月11日,一场突发的灾难将纽约世界贸易中心大厦夷为平地,Mr. F曾亲眼目睹了这次灾难.为了纪念“9?11”事件,Mr. F决定自己用水晶来搭建一座双塔. Mr. F有N块水晶,每块 ...

  7. Fragment的startActivityForResult详细解决方案

    由于要用到Fragment中startActivityForResult,所以一开始就直接用activity.startActivityForResult(intent, 0);发现这样用首先会跳转到 ...

  8. ip的划分,超详细

    from:http://blog.liuts.com/post/128/ IP和子网掩码我们都知道,IP是由四段数字组成,在此,我们先来了解一下3类常用的IP A类IP段 0.0.0.0 到127.2 ...

  9. PhpExcel中文帮助手册|PhpExcel使用方法

    下面是总结的几个使用方法 include 'PHPExcel.php'; include 'PHPExcel/Writer/Excel2007.php'; //或者include 'PHPExcel/ ...

  10. XAMPP中proftpd的简明配置方法

    XAMPP中proftpd的简明配置方法   用LAMPP的安装方法可以开一个默认的nobody用户,用lampp security就可以初始设置相应的默认用户密码.如果要有多用户,又怎样管理.目录怎 ...