亚马逊AWS官方博客

Tag: 大咖专栏

如何在1个小时之内轻松构建一个Serverless 实时数据分析平台

数据分析平台,特别是实时数据分析,正在被越来越广泛的应用于各个行业。 举例来说,游戏公司在发布新游戏之后,需要实时定位用户的留存、增长等情况;快销公司需要精确地记录每一笔订单的情详情,并结合社交媒体,实时分析促销活动引起的用户购买行为与销量等等。基于这些需求, AWS提供了一整套成熟的解决方案与服务,并且得到了广泛的应用。 图1 AWS大数据参考架构示例 上图中,Amazon Kinesis 是实时的流式分析服务,而Amazon S3是AWS的海量数据存储服务。利用Kinesis与S3,我们可以十分方便的构建一个实时流式信息数据的采集与存储。 值得注意的是,作为Serverless计算服务的代表 , 用户只需要编写实现对应的ETL逻辑,Amazon Lambda就可以非常方便地对Kinesis流式数据进行抽取与分析而不需要部署任何服务器。另外,用户也可以使用Kinesis Firehose(Kinsis服务之一)实现原始数据的直接注入与收集。 随着Amazon Athena在AWS re:Invent 2016的重磅发布,AWS的大数据平台又增添了重要的一员!Amazon Athena 是一种交互式查询服务,用户可以使用标准SQL 分析 Amazon S3 中的数据。因为Athena底层是基于Serverless(无服务器)架构,用户不需要运维底层的服务器,并且查询处理能力会随着用户的数据将进行自适应与扩展,实现秒级别的数据查询与处理。 闲话少说,我们将利用AWS提供的三个重要服务——Amazon Kinesis Firehose,、Lambda和Athena在1个小时之内实现一套实时分析的Serverless数据分析平台! 准备好了吗?Let’s rock 1.数据源。作为测试,我们将对AWS VPC Flow Logs进行分析。您可以使用Kinesis Agent/Flume/Fluentd或者Amazon Kinesis SDK对前端的实时日志进行分析。Amazon VPC Flow Logs将实时记录VPC监控的网络端口的流量与通信日志,并将日志发布于AWS CloudWatch Logs。详细的配置请参见 https://aws.amazon.com/cn/blogs/aws/vpc-flow-logs-log-and-view-network-traffic-flows/ 2.数据ETL。VPC Flow Logs进入CloudWatch Logs之后,可以利用Lambda对实时日志进行订阅处理。订阅之后,Lambda会在CloudWatch Logs更新之后,自动调用执行,进行数据ETL。 首先,在控制台创建一个Lambda函数(利用Python实现).为了确保Lambda有对应的执行权限,需要赋予Lambda函数相应的Permission Role.在这个示例中,我们只需要服务Lambda对应的CloudWatch Logs以及Kinesis Firehose的权限即可。 其次,Lambda 代码会对进入的CloudWatch日志的第一个Base64编码的转码并进行gzip解压(因为Cloudwatch Logs会对送往Lambda首先进行Base64编码并进行gzip压缩)。之后,Lambda会对具体的日志进行汇聚,以batch的方式发送给Kinesis Firehose。具体的代码如下: […]

Read More

如何在AWS上安装使用分布式TensorFlow

前言 近几年来,深度学习得到了长足的发展,伴随着深度学习的发展,深度学习框架也变得越来越为人们所熟知。TensorFlow是谷歌开源的深度学习框架,自开源以来得到了业界的认可和支持,特别是在TensorFlow分布式版本发布以后,更多的深度学习专业人士开始使用TensorFlow进行分布式的深度学习研究。 深度学习框架底层需要硬件资源的支持,特别需要GPU实例的支持,而AWS云端弹性的GPU实例无疑是深度学习从业人员手中最灵活的资源。 本文将介绍在AWS上使用GPU实例安装配置分布式TensorFlow的过程,希望可以让读者快速搭建自己的深度学习环境,尽快深入到自己的生产应用中或者是研究领域中。 环境准备 首先我们需要为TensorFlow安装准备基础环境,其中包括AWS账号的创建,IAM用户的创建,VPC的划定等工作。有关这些具体工作的细节在本文就不详细讲述了,这些方面的细节请参考相关博文或者技术文档。 准备好账号之后就需要启动两台GPU实例进行设置,考虑到启动实例后需要进行一些软件部署,建议先启动一台GPU实例,安装设置好TensorFlow之后创建实例的AMI镜像,然后通过镜像启动第二台GPU实例,这样比较节省时间。 本文以Ubuntu作为基础环境,所以在启动实例的时候选择操作系统时选择Ubuntu镜像,本例选择的是。 进一步需要做的是选择实例类型,在AWS上的GPU实例有G2和P2两种大的类型。 P2使用了NVIDIA的K80 GPU,实例的具体配置如下: G2使用了NVIDIA的K520 GPU,实例具体配置如下: 选择你希望使用的实例类型,然后按照EC2启动向导启动该实例。关于EC2启动的不同选项请参考相关文档,这里需要留意的是“置放组”选项,如果我们启动多个EC2实例运行TensorFlow并进行分布式计算,把这些实例放在一个“置放组”内会有效提高实例间的网络通讯效率。 实例启动后通过ssh工具连接到该实例上开始安装过程。 安装TensorFlow 准备好EC2实例后,通过ssh工具连接到实例上,开始以下安装工作。 因为TensorFlow安装需要较长时间,所以建议连接到EC2实例上以后通过screen命令或者tmux命令启动session管理,这样安装过程中出现ssh连接中断也可以继续完成安装工作。 首先需要安装相关的依赖包,具体命令如下: sudo apt-get update sudo apt-get upgrade sudo apt-get install -y build-essential git python-pip libfreetype6-dev libxft-dev libncurses-dev libopenblas-dev gfortran python-matplotlib libblas-dev liblapack-dev libatlas-base-dev python-dev python-pydot linux-headers-generic linux-image-extra-virtual unzip python-numpy swig python-pandas python-sklearn unzip wget pkg-config zip g++ […]

Read More

构建健壮的混合云网络——BJS DX+VPN篇

背景介绍: 近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。 在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种: 1.    纯VPN组网 2.    纯专线组网 3.    VPN与专线的混合组网 其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。 本篇主要讲述第三种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈。 此外笔者始终认为“Network is not just ping success”,尤其对于大型企业来说,网络流量的监控,故障事件的告警,日志的搜集检索等功能并非可选项,所以本篇也会顺带介绍如何在AWS云上实现这些功能。 对于第一,第二种组网方式的高可用实现,请参考: 《构建健壮的混合云网络——BJS VPN篇》 《构建健壮的混合云网络——BJS DX篇》 注意:本篇以AWS中国区VGW尚未落地为前提,VPN部分以开源软件实现,但应用场景并不仅限于AWS中国区,如何客户需要一些VGW暂时无法满足的功能,同样可以在AWS Global利用本篇搭建符合自身需求的解决方案,具体可能的需求包括但不限于: 1.    需要使用VGW暂时不支持的加解密算法 2.    需要使用VGW暂时不支持的hash算法 3.    需要使用证书认证 4.    All in one解决方案,VPN设备除了提供VPN功能外,还需要提供防火墙,NAT等功能 拓扑图: 对于DX与VPN互备的场景,有如下几种情况: 1.    1条DX+1条VPN 2.    2条DX+1条VPN 3.    1条DX+2条VPN 4.    2条DX+2条VPN 对于1,2两种场景下,可以简单地通过调整Private-1,Private-2的路由表实现AWS侧的主备,即:流量优先选择DX专线,在专线故障时切换到VPN链路。 启用路由传递,路由表中会出现一条10.10.0.0/16,target为VGW的路由 设置一条静态路由10.0.0.0/8,target为VPN设备的eni 由于路由最长匹配的原则,默认去往本地站点10.10.0.0/16的流量会通过VGW走专线,当专线发生故障的时候,10.10.0.0/16的路由不会传递进入路由表,此时10.0.0.0/8的路由生效,流量切换到VPN链路。 对于3,4两种场景下,无法通过上述方式在两条VPN链路之间切换,需要部署拓扑图中的monitor设备来监控DX和VPN链路及VPN设备的健康状态并实现链路切换。 本例主要介绍monitor及Strongswan设备上的脚本功能,及如何与监控,告警相结合。 VPC基本配置,DX基本配置,Strongswan配置及本地站点切换方式请参考: 《构建健壮的混合云网络——BJS VPN篇》 《构建健壮的混合云网络——BJS DX篇》 […]

Read More

构建健壮的混合云网络——BJS DX篇

背景介绍: 近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。 在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种: 1.    纯VPN组网 2.    纯专线组网 3.    VPN与专线的混合组网 其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。 本篇主要讲述第二种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈。 对于第一,第三种组网方式的高可用实现,请参考: 《构建健壮的混合云网络——BJS VPN篇》 《构建健壮的混合云网络——BJS DX+VPN篇》 对于如何实现对VPN流量的监控、故障告警及事件日志搜集,请参考: 《构建健壮的混合云网络——BJS DX+VPN篇》 拓扑图: AWS与本地站点之间建立两条专线,为了保证一条专线故障后,剩下的专线能够承载所有的业务流量,建议使用主备模式,考虑到高可用,建议两条专线分别终结在SINNET和CIDS两个DX Location,并且可以使用两家专线提供商的链路。 配置步骤: 1.    申请专线 小于500M的专线由AWS APN Partner提供,这里以APN Partner方案为例,大于1G的专线接入请参考如下文档: https://www.amazonaws.cn/en/documentation/directconnect/ 向APN Partner申请链路,根据要求提供相关信息,通常包括用户AWS账号,专线带宽等信息。 2.    接受连接并创建virtual interface 当APN Partner建立好专线后,登入management console,选择Direct Connect服务,将可以看到相关的连接,需要选择接受连接。 创建Virtual Interface。 选择创建Private Virtual Interface,设置接口名称并与相关VPC的VGW关联 根据自己的需要设置互联地址及本地站点的AS号 3.    下载本地站点端路由器的配置 4.    修改本地路由器端BGP配置,实现主备冗余 a.    AWS侧出向流量主备通过AS-PATH属性实现 b.    本地站点侧出向流量主备通过Local-Preference属性实现 下面是本地站点侧,备份链路路由器上的参考配置: route-map […]

Read More

构建健壮的混合云网络——BJS VPN篇

背景介绍: 近年来,随着公有云的普及,一方面,越来越多的用户选择利用公有云在弹性、灵活性等方面的优势,在云上部署新的应用系统,另一方面,大量的企业有很多现有的本地基础设施投资,所以企业上云的过程并不是一触而就的,期间势必存在云应用与本地数据中心应用并存的局面,为了更好的融合云与本地数据中心的应用环境,实现整体应用系统的稳定性和高可用性,构建一个健壮的混合云网络至关重要。 在AWS上,用来连接AWS与本地数据中心的方式主要有以下3种: 1.    纯VPN组网 2.    纯专线组网 3.    VPN与专线的混合组网 其中,对于AWS中国区来讲,由于AWS自身的VPN服务VGW目前尚未落地,客户急需要一个替代方案,能够达到类似于VGW的冗余及故障切换功能。 本篇主要讲述第一种组网方式,着眼点在于如何实现混合云网络的健壮性及故障自愈,并不会讲述太多的IPSec VPN知识。 对于第二,第三种组网方式的高可用实现,请参考: 《构建健壮的混合云网络——BJS DX篇》 《构建健壮的混合云网络——BJS DX+VPN篇》 对于如何实现对VPN流量的监控、故障告警及事件日志搜集,请参考: 《构建健壮的混合云网络——BJS DX+VPN篇》 拓扑图: Strongswan-1和Strongswan-2分别作为Region A两个AZ内的VPN设备,与客户本地站点的internet出口设为分别建立两条VPN隧道,Private-1和Private-2分别模拟Region A两个AZ中的两台内网设备。 本场景需要实现如下目的: 1.    Private-1,Private-2能够与本地站点内的设备通过私网互通 2.    AWS侧能够检测VPN连接的健康状态并实现自动的故障切换 3.    AWS侧能够检测VPN设备的健康状态并实现自动的故障切换 4.    本地站点侧能够检测VPN连接的健康状态并实现自动的故障切换 5.    本地站点侧能够检测VPN设备的健康状态并实现自动的故障切换 系统工作流程: 1.    Strongswan-1和Strongswan-2设置开机自动运行vpn_monitor.sh脚本,该脚本首先会将Private-1和Private-2去往本地站点的路由分别指向本AZ中的VPN设备,即:Strongswan-1和Strongswan-2 2.    接着Strongswan-1和Strongswan-2会通过互相ping来检测对端的可达性,同时通过ping本地站点VPN设备的tunnel地址来检测VPN连接的可达性。 3.    如果Strongswan-1的VPN连接发生故障,Strongswan-1会将Private-1路由的target从Strongswan-1修改为指向Strongswan-2,连接恢复后,Strongswan-1会将路由切换回自身 4.    如果Strongswan-1发生故障,Strongswan-2的ping检测失败,Strongswan-2会将Private-1路由的target从Strongswan-1修改为指向Strongswan-2 5.    Strongswan-2接着会对Strongswan-1做stop,start操作 6.    当Strongswan-1在另外一台物理机上启动后,自动运行的脚本会将Private-1路由从Strongswan-2修改为指向Strongswan-1 配置步骤: 1.    为Strongswan-1和Strongswan-2创建合适的角色并关联 由于Strongswan-1和Strongswan-2需要对VPC路由表及EC2实例做操作,所以需要创建合适的角色并与实例关联。 在IAM服务中选择策略->创建策略 选择创建您自己的策略 使用如下内容设置策略文档,并点击创建策略 […]

Read More

利用Amazon CloudWatch 搭建无人值守的监控预警平台

资源与应用服务层监控 Amazon CloudWatch 监控和预警平台可以帮助客户统一管理和运维AWS云端和本地资源、服务和业务系统;使用 Amazon CloudWatch 可以收集和跟踪指标,收集和监控日志文件,设置警报。您可通过使用 Amazon CloudWatch 全面地了解资源使用率、应用程序性能和运行状况。使用这些分析结果,您可以及时做出反应,保证应用程序顺畅运行。 Amazon CloudWatch 的基本概念 请参考AWS 官方文档了解 Amazon CloudWatch的核心概念和术语,比如指标、命名空间、维度、时间戳、单位、统计数据、时间段、聚合、警报等。 基于CloudWatch 的监控预警平台架构 CloudWatch 提供了一套标准的API接口,用户可以利用该平台发布自定义应用、业务或者更加详细的系统指标。用户发布到Amazon CloudWatch 的指标是按时间排序的数据点集合,数据点本身可以来自于任何应用程序或者业务活动;指标通过名称、命名空间和维度进行唯一定义;维度可以帮助你设计数据点的分组特征或者类别,发布指标数据点时必须必须指定维度,比如虚机的CPU使用率,用户可以查看单独某个虚机的监控指标也可以按AutoScaling组来查看,这里的单个虚机或者AutoScaling组就是同一数据点的不同的维度。用户可以使用秒级甚至千分之一秒的频率发布自定义指标,但是Amazon CloudWatch 还是会将数据聚合到1分钟为最小粒度。 基于指标数据,用户可以翻译业务的波动异常到相应的指标,从而创建警报来和相应的操作来自动化应对各种异常情况,操作包括弹性伸缩(Auto Scaling)机制来应对访问流量变化或者Amazon SNS 主题订阅绑定的邮件通知、HTTP请求的调用和消息队列异步处理。 指标数据用户可以直接通过AWS 控制台进行的图形化按时间筛选、查看和分享;同时,用户也可以通过API接口获取指标数据进行第三方的处理和展示。CloudWatch默认保存两周的指标数据(海外区域部分可以支持免费存储最多15个月的统计数据,详情请查看AWS CloudWatch文档)。 本文的架构中,自定义指标收集不需要自己编程而是利用collectd守护进程进行监控和获取,同时利用CloudWatch Plugin for collectd直接将自定义指标发布和存储到CloudWatch中,用户随后可以基于自定义指标的进行自动化警报处理从而实现无人值守的统一监控平台。 什么是CloudWatch Plugin for collectd CloudWatch一直支持用户发布自定义指标来存储、监控自己关心的业务、应用和系统健康状况;AWS最新发布了CloudWatch Plugin for collectd开源项目,该插件整合了collectd强大的收集各种类型统计数据的能力,帮助客户简化了开发收集自定义指标的相关工作,开箱即用地支持发布Apache、Nginx Web服务器应用指标,内存监控指标等监控数据到CloudWatch进行统一存储、展示和预警。 什么是collectd collectd是一个基于C语言的守护进程,主要任务就是用来收集统计信息,它提供各种了存储方式来存储不同值的机制。它支持超过100种各类插件,下面大概列出一些比较常见的插件类型,具体的请参考collectd官方网站。 Web应用:Apache、nginx 数据库:MySQL、Oracle、PostgreSQL、memcached 网络:OpenVPN、Ping、TCPConns、 系统:Memory、Disk、FileCount、vmem、uptime、df 安装配置CloudWatch Plugin for collectd […]

Read More

一键搞定云端网络环境,让您轻松迁移至AWS!

一键搞定云端网络环境,让您轻松迁移至AWS! 知识补充:什么是AWS CloudFormation? AWS CloudFormation 模板是一个文本文件,其格式符合 JSON 格式标准。您可使用任何扩展名(如.json、.template 或 .txt)保存这些文件。AWS CloudFormation可帮助您对AWS资源进行建模和设置,包括EC2实例、RDS实例、Auto Scaling Group、Elastic Load Balancing以及整个AWS VPC的网络环境。点击部署模板,成功创建堆栈之后,AWS 资源将正常运行。点击删除模板,所有堆栈中涉及到的资源将都删除。详细参考 http://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/Welcome.html 注:此文章所用的AWS CloudFormation模板适合: (1)由于项目紧急,您在一两天内就想上线,将资源部署在AWS平台上,之后再花时间学习AWS服务与功能。 (2)您想基于AWS实现自动化基础设施部署,比如快速实现开发 / 测试 / 生产环境,这个模板是您学习AWS一个好的开始。 模板下载: AWS中国区模板: https://s3.cn-north-1.amazonaws.com.cn/danrong-share/external/aws-template-bjs-addELB-V3.txt AWS海外区模板: https://s3.cn-north-1.amazonaws.com.cn/danrong-share/external/aws-template-global-addELB-V3.txt 注:为节约成本,此模板所启用的EC2配置很低,为t2.small。 模板主要解决的问题: (1)启动VPC,网段为10.40.0.0/16(当然,模板可以自定义IP地址范围)。自动启动6个子网 Public Subnet 1(子网范围10.40.1.0/24) Public Subnet 2(子网范围10.40.2.0/24) Private Subnet 1(子网范围10.40.3.0/24) Private Subnet 2(子网范围10.40.4.0/24) Private DB Subnet 1(子网范围10.40.5.0/24) Private DB Subnet 2(子网范围10.40.6.0/24) 打开DNS解析和主机名功能。 […]

Read More

程序员的深度学习入门指南

本文根据费良宏在2016QCon全球软件开发大会(上海)上的演讲整理而成。 今天我想跟大家分享的话题与深度学习有关。事实上,深度学习本身是一个非常庞大的知识体系。今天的内容,不会涉及深度学习的理论知识,更多想从程序员的视角出发,让大家观察一下深度学习对我们程序员意味着什么,以及我们如何能够利用这样一个高速发展的学科,来帮助程序员提升软件开发的能力。 前言 1973年,美国上映了一部热门的科幻电影叫做《Westworld》,三年之后又有一个续集叫做《Futureworld》。这部电影在80年代初被引进到中国叫《未来世界》。那部电影对我来讲简直可以说得上是震撼。影片中出现了很多机器人,表情丰富的面部下面都是集成电路板。这让那时候的我觉得未来世界都是那么遥远、那么样的神秘。时间转到了2016年,很多朋友可能都在追看HBO斥巨资拍摄的同一个题材的系列剧《Westworld》。如果前两部电影还是局限在机器人、人工智能这样的话题,2016年的新剧则在剧情、以及对于人工智能的思考方面有了很大的突破。不再渲染机器人是否会威胁到人类,而是在探讨 “Dreams are mainly memories“这一类更具哲理的问题。记忆究竟如何影响了智能这个话题非常值得我们去思考,也给我们一个很好的启示 – 今天,人工智能领域究竟有了怎样的发展和进步。 今天我们探讨的话题不仅仅是简单的人工智能。如果大家对深度学习感兴趣,我相信各位一定会在搜索引擎上搜索过类似相关的关键字。我在Google上以deep learning作为关键字得到了2,630万个搜索的结果。这个数字比一周之前足足多出了300多万的结果。这个数字足以看得出来深度学习相关的内容发展的速度,人们对深度学习的关注也越来越高。 从另外的一个角度,我想让大家看看深度学习在市场上究竟有多么热门。从2011年到现在一共有140多家专注人工智能、深度学习相关的创业公司被收购。仅仅在2016年这种并购就发生了40多起。其中最疯狂的是就是Google,已经收购了 11 家人工智能创业公司,其中最有名的就是击败了李世石九段的 DeepMind。排名之后的就要数 Apple、Intel以及Twitter。以Intel 公司为例,仅在今年就已经收购了 3 家创业公司,Itseez、Nervana 和 Movidius。这一系列大手笔的并购为了布局人工智能以及深度学习的领域。 当我们去搜索深度学习话题的时候,经常会看到这样的一些晦涩难懂的术语:Gradient descent(梯度下降算法)、Backpropagation(反向传播算法)、Convolutional Neural Network(卷积神经网络)、受限玻耳兹曼机(Restricted Boltzmann Machine)等等。如你打开任何一篇技术文章,你看到的通篇都是各种数学公式。大家看到下面左边的图,其实并不是一篇高水准的学术论文,而仅仅是维基百科关于玻耳兹曼机的介绍。维基百科是科普层面的内容,内容复杂程度就超过了大多数数学知识的能力。 右边的那张图则是深度学习很流行的深度学习框架Theano 的一个简单的例子。对于大多数程序员而言学习这一类框架和程序代码的时候更让人抓狂,大段代码我们完全不明就里。我们看到的很多概念,对很多程序员来说觉得非常陌生,所以这确实是对程序员的一个很大的挑战。 在这样的背景之下,我今天的的话题可以归纳成三点:第一,我们为什么要学习深度学习;第二,深度学习最核心的关键概念就是神经网络,那么究竟什么是神经网络;第三,作为程序员,当我们想要成为深度学习开发者的时候,我们需要具备怎样的工具箱,以及从哪里着手进行开发。 为什么要学习深度学习 首先我们谈谈为什么要学习深度学习。在这个市场当中,最不缺乏的就是各种概念以及各种时髦新技术的词汇。深度学习有什么不一样的地方?我非常喜欢Andrew Ng(吴恩达)曾经用过的一个比喻。他把深度学习比喻成一个火箭。这个火箭有一个最重要的部分,就是它的引擎,目前来看在这个领域里面,引擎的核心就是神经网络。大家都知道,火箭除了引擎之外还需要有燃料,那么大数据其实就构成了整个火箭另外的重要组成部分——燃料。以往我们谈到大数据的时候,更多是强调存储和管理数据的能力,但是这些方法和工具更多是对于以往历史数据的统计、汇总。而对于今后未知的东西,这些传统的方法并不能够帮助我们可以从大数据中得出预测的结论。如果考虑到神经网络和大数据结合,我们才可能看清楚大数据真正的价值和意义。Andrew Ng就曾经说过“我们相信(神经网络代表的深度学习)是让我们获得最接近于人工智能的捷径”。这就是我们要学习深度学习的一个最重要的原因。 其次,随着我们进行数据处理以及运算能力的不断提升,深度学习所代表的人工智能技术和传统意义上人工智能技术比较起来,在性能上有了突飞猛进的发展。这主要得益于在过去几十间计算机和相关产业不断发展带来的成果。在人工智能的领域,性能是我们选择深度学习另一个重要的原因。 这是一段Nvidia 在今年公布的关于深度学习在无人驾驶领域应用的视频。我们可以看到,将深度学习应用在自动驾驶方面,仅仅经历了3千英里的训练,就可以达到什么样的程度。在今年年初进行的实验上,这个系统还不具备真正智能能力,经常会出现各种各样的让人提心吊胆的状况,甚至在某些情况下还需要人工干预。但经过了3千英里的训练之后,我们看到在山路、公路、泥地等各种复杂的路况下面,无人驾驶已经有了一个非常惊人的表现。请大家注意,这个深度学习的模型只经过了短短几个月、3千英里的训练。如果我们不断完善这种模型的话,这种处理能力将会变得何等的强大。这个场景里面最重要的技术无疑就是深度学习。我们可以得出一个结论:深度学习可以为我们提供强大的能力,如果程序员拥有了这个技术的话,无异于会让每个程序员如虎添翼。 神经网络快速入门 如果我们对于学习深度学习没有任何疑虑的话,接下来就一定会关心我需要掌握什么样的知识才能让我进入到这个领域。这里面最重要的关键技术就是“神经网络”。说起“神经网络”,容易混淆是这样两个完全不同的概念。一个是生物学神经网络,第二个才是我们今天要谈起的人工智能神经网络。可能在座的各位有朋友在从事人工智能方面的工作。当你向他请教神经网络的时候,他会抛出许多陌生的概念和术语让你听起来云里雾里,而你只能望而却步了。对于人工智能神经网络这个概念,大多数的程序员都会觉得距离自己有很大的距离。因为很难有人愿意花时间跟你分享神经网络的本质究竟是什么。而你从书本上读的到的理论和概念,也很让你找到一个清晰、简单的结论。 今天就我们来看一看,从程序员角度出发神经网络究竟是什么。我第一次知道神经网络这个概念是通过一部电影—1991年上映的《终结者2》。男主角施瓦辛格有一句台词:“My CPU is a neural-net processor; a learning computer.“(我的处理器是一个神经处理单元,它是一台可以学习的计算机)。从历史来看人类对自身智力的探索,远远早于对于神经网络的研究。1852年,意大利学者因为一个偶然的失误,将人类的头颅掉到硝酸盐溶液中,从而获得第一次通过肉眼关注神经网络的机会。这个意外加速了人对人类智力奥秘的探索,开启了人工智能、神经元这样概念的发展。 生物神经网络这个概念的发展,和今天我们谈的神经网络有什么关系吗?我们今天谈到的神经网络,除了在部分名词上借鉴了生物学神经网络之外,跟生物学神经网络已经没有任何关系,它已经完全是数学和计算机领域的概念,这也是人工智能发展成熟的标志。这点大家要区分开,不要把生物神经网络跟我们今天谈到的人工智能有任何的混淆。 神经网络的发展并不是一帆风顺的,这中间大概经历了三起三折的过程。 大约在1904年,人类已经对人脑的神经元有了最初步的认识和了解。1943年的时候,心理学家麦卡洛克 (McCulloch) 和数学家 Pitts […]

Read More

如何在AWS上构建基于 OpenSwan 的软件 VPN 解决方案

概述 随着云的普及以及即用即付的模式,正在被大家逐渐接受,那么在初期从原始数据中心到云迁移的过程中,为了保证数据的平稳迁移,并不推荐将应用以及数据库一次性的迁移到云中。所有项目都应该分阶段来进行,阶段迁移的情况下就必须要将云资源与本地数据中心的资源互连互通。 要做到互连互通,有三种备选方案,互联网,专线直连(DX)和 VPN。从三个方面比较下这三种解决方案,安全,稳定性以及费用。DX 服务无疑是最优的一种解决方案,提供安全稳定的网络性能,高吞吐量。由于国内专线铺设所带来的高昂费用,所以在初期阶段,DX 并不是一个最优的。这里面互联网是最便宜的,因为本身数据中心就已经支付了这部分费用,只要保证云中的资源可以上互联网就可以了,但互联网面临的问题是网络依赖互联网,互联网的网络性能并不是可控的,另外一方面是互联网的安全性。VPN 呢是基于互联网的服务,虽然不能保证网络性通的可控,但可以做到数据的安全。 就以上比较而言,在初期阶段,VPN 无疑是一种高性比的安全以及节约成本的方案。考虑到目前北京区域并不支持硬件VPN的服务,即Global区域的VPN Connection。那么有没有可以替代的方案呢?答案是肯定的,一切问题都难不倒我们伟大的开源组织,开源方案如 OpenSwan (今天的主角),StrongSwan,Raccoon等等了。除了开源的解决方案外,还有一些商业解决方案,比如Sanfor 深信服,Hillstone 山石,Checkpoint , Cisco CSR1000v等也可以部署,有兴趣的可以与相应的软件提供商联系。 前面说了那么多关于VPN的各种软件,那么该如何选择呢?这里我们从使用上来划分下吧,将VPN主要划分为两类,一类是工作于客户端到服务端的模式,像OpenVPN,SSL VPN,L2TP,PPTP这些都是需要客户端主动发起连接,拨到Server端在两者之间建立一个逻辑上的隧道 (tunnel)进行通信。这种方式一般适用于个人到总部场景。服务器是无法主动发起连接到客户端。 另外一种就是站点到站点(site-to-site)的模式,像OpenSwan,StrongSwan, Raccoon 等软件,这种情况下两端会各有一个设备负责来建立两个站点之间安全通信的隧道,任何需要到对端的通信都会触发设备来建立安全隧道通信。 那么公司原有数据中心与云通信都是双向通信,所以站点到站点更合理。 实际上这里说的 VPN 即是指 IPsec VPN,IPsec 是一种工业标准,只要支持这种标准的设备都可以互相协商建立一个安全的隧道出来,比如支持的硬件设备有路由器,防火墙以及专业的 VPN 设备。 说了这么多,下面我们就以 AWS 端为 OpenSwan 与 Cisco 的路由器之间的配置为例。 场景及拓扑 拓扑如上图,AWS端建立一个VPC(CIDR:192.168.0.0/16),包含两个子网,一个可以上互联网的Public子网192.168.1.0/24以及私有子网Private 192.168.2.0/24。在公有子网上会配置一台OpenSwan实例与公司的Cisco设备做VPN连接。 OpenSwan的EIP地址为54.223.152.218 子网:192.168.1.0/24 Cisco设备的公网地址为54.223.170.5 子网:10.1.2.0/24 目标:实现AWS上私有子网192.168.2.0/24和数据中心10.1.2.0/24双向互通 详细配置步骤 1.配置 VPC 基础环境 1.1 创建 VPC 在AWS […]

Read More

Amazon CloudFront常见错误配置及解决方法

很多的用户在最初使用CloudFront做Web类内容分发的时候遇到无法调通的情况,本文总结了用户在配置过程中遇到的常见错误,内容涵盖了大部分用户遇到的情况。 错误一  源访问权限未放开 这种错误常见于用S3做源的情况, 引起这种错误的原因是s3的访问控制没有对CloudFront开放。从浏览器中返回的错误通常类似于下图: 更具体些,可分为以下两个场景: 场景1. CloudFront使用了Restrict Bucket Access 在创建distribution的时候选择了Restrict Bucket Access 为yes, 但 Grant Read Permissions on Bucket, 选择的是”No, I Will Update Permissions”, 而用户事后却没有在s3的桶里更新policy。如下图所示。 解决方法: 方法1, 在S3中增加桶的策略,使该桶允许该CloudFront访问,以下是policy示例,其中标黄部分需要替换成用户自己的信息。 {                 “Version”: “2008-10-17”,                 “Id”: “PolicyForCloudFrontPrivateContent”,                 “Statement”: [                                 {                                                 “Sid”: “1”,                                                 “Effect”: “Allow”,                                                 “Principal”: {                                                                 “AWS”: “arn:aws:iam::CloudFront:user/CloudFront Origin Access […]

Read More