亚马逊AWS官方博客

Tag: 大咖专栏

使用DMT工具迁移北京区域的数据库

在前面的blog《将Oracle数据库迁移到AWS云的方案》中谈到了多种将Oracle数据库从数据中心迁移到AWS云中的方法。其中 使用DMS服务迁移的方法简单实用,也支持异构数据库的迁移,很多朋友都想使用这种方法完成迁移。但是在北京区域不支持DMS服务,如何实现类似的迁移工作呢?其实在北京区域支持使用Database Migration Tool(DMT)来迁移数据库,DMT工具是DMS服务的前身,它是安装在Windows上的一个软件,迁移前只需要获取DMT工具的AMI,然后简单的配置后,就可以进行数据迁移了。本文主要讨论如何使用DMT将Oracle迁移到Amazon RDS数据库,示例的场景如下图所示: 在建立客户本地数据中心与AWS连接的时候,考虑到安全性问题,我们建议您通过VPN或者企业专线来建立数据库之间的连接,您只需确保您本地数据库端口(例如Oracle端口1521)对外可访问。如果您的业务对安全性要求较高,需要传输的数据量较大,同时,要求以较快速度传输的时候,可以采用专线迁移,但是这种方法成本较高,您需要根据您的业务需求来选择是通过VPN还是企业专线迁移。 在介绍DMT数据库迁移之前,我们首先介绍一下DMT迁移工具支持的数据库类型以及对源和目标数据库的限制:DMT目前支持将Oracle、SQL Server、MySQL、SAP Sybase以及PostgreSQL作为源或目标数据库,您也可以将Amazon Redshift作为您的目标数据库。同时,DMT也支持异构数据库的迁移,例如将Oracle迁移到MySQL。 DMT工具为我们迁移数据库提供了巨大的便利,然而,它也有一些限制条件,下表主要介绍DMT支持的三种常用关系型数据库版本以及相关限制条件。如果您需要了解更多有关DMT迁移数据库信息,请参考DMT用户手册: https://s3.cn-north-1.amazonaws.com.cn/rdmt/RDS+Migration+Tool+User+Guide.pdf 使用DMT迁移主要有下面几个步骤: (1)获取DMT的AMI (2)启动DMT的AMI (3)登陆DMT服务器 (4)配置服务器 (5)访问DMT工具 (6)迁移数据 1.获取DMT的AMI 如果您有数据库数据需要导出或者导入到AWS 北京区域中,首先您需要获取DMT的AMI镜像,然后根据镜像启动EC2服务器。获取DMT的镜像有两种方式: (1)和支持您当前AWS账号的商务人员联系,他能帮您在后台申请访问DMT AMI的权限。 (2)您也可以自己在Support Center 中开case。在AWS Console中访问Support Center的方式如下图所示: 2.启动DMT的AMI 当您有能访问DMT的AMI以后,登陆您的AWS账号,进入Services->EC2->AMI的界面,选择“Private images”列表,就可以看到有一个Amazon_RDS_Migration_Tool的记录,这就是最新的迁移工具,如下图所示: 选择DMT点击上方的“Lunch”按钮,启动一个已经安装好DMT工具的服务器。接下来您需要配置您实例的类型、大小、实例所在VPC以及安全组和密钥等信息。具体配置步骤请参考官方文档:http://docs.aws.amazon.com/zh_cn/AWSEC2/latest/UserGuide/EC2_GetStarted.html 需要注意的是: (1)在选择DMT服务器所在VPC的时候,尽量选择源或者目标数据库所在的VPC创建DMT服务器,这样可以加快迁移的速度。 (2)在配置安全组的时候,您的安全组应该允许RDP协议和https协议。由于DMT服务器是Windows Server服务器,因此您需要使用Windows远程桌面连接访问,此时需要RDP协议,source指定当前需要连接客户端的IP或者IP段。DMT工具可以通过浏览器来访问,因此需要设置https协议的安全组,如下图所示: 3.登陆DMT服务器 启动DMT服务器,并下载私钥后,就可以登陆DMT服务器了,如下图所示,当您的服务器状态显示为running,并且通过健康检查后,您的服务器就可以正常访问了。如下图所示: 选择您的DMT服务器,然后点击Connect,显示如下界面: 在此步骤中,您需要根据下载的私钥获取登陆Windows的密码。点击 get Password,显示如下图所示界面: 输入您前面下载的私钥的文件全部内容,点击 Decrypt Password后,您在界面上可以看到Administrator的密码,请记录下这个密码。下面就可以登陆服务器了。 本例中是使用MAC的Windows远程终端软件来访问DMT服务器,如果您使用Windows客户端,访问过程类似,输入远程DMT服务器的DNS名称,输入用户名和密码并连接。 连接上DMT终端后,您会看到Windows Server 2012的桌面如下图所示,桌面上有DMT工具。 连接到远程终端后,您可以根据需要修改访问Windows的密码,修改密码可以在控制面板中完成,界面如下: 4. 配置服务器 登陆到DMT服务器后,在界面上有Database Migration […]

Read More

VPC中NAT的那点事

NAT就在那里 下图 是EC2实例通过IGW(Internet网关) 接入到Internet的示意图。熟悉AWS的读者会知道,这里EC2实例和Internet通信的两个方向上,实际上发生了如下的转换: 从EC2实例发出的前往Internet的IP包,其源地址10.0.0.10在经过IGW时,会被转换为与实例关联的公网地址 54.232.0.1; 从Internet发给54.232.0.1的IP包,经过IGW时其目的地址会转换为ENI对应的内网地址10.0.0.10并被送到 EC2实例; 可以看到,这里Internet网关就是起到实例的内网地址和公网地址一对一的基本 NAT(网络地址转换)的功能。 相比于没有NAT的场景,大部分的应用、软件不需要任何改变就能在基本NAT的场景下继续工作,例如基于HTTP协议的Web应用等;但是对于某些应用,例如FTP、VoIP等,网络地址转换会给应用带来一些意想不到的挑战。今天我们以历史悠久的FTP协议为例,来和大家探讨一下NAT给FTP这样的应用带来什么样的挑战,以及FTP应用和协议又是如何演进去适应它。 被动模式下的FTP 我们重温一下FTP的工作过程。客户端连接服务端TCP 21端口建立命令通道后,输入用户名密码完成登录;随后的每一次数据传输都需要另外建立数据通道进行; 如果数据通道由客户端发起,服务端接受,我们称之为被动模式;反之,如果数据通道由服务端发起,客户端接受,则称之为主动模式。 为简化讨论,我们以被动模式为例。 同一个私网内 我们在EC2实例10.0.0.10上搭建了一台FTP服务器,它监听在21端口。现在我们从同一个VPC里的另外一台EC2上运行FTP客户端;那么整个过程会很顺利。 从Internet访问 现在我们从位于Internet某处的一台PC上运行FTP客户端。 这里连接超时的原因显而易见,FTP服务端发送给客户端的IP地址是服务端的私有地址。位于Internet上的客户端无法建立与位于VPC内部的私有地址10.0.0.10直接通讯。 解决这个问题有多种方法,我们由简单到复杂分别叙述。 增强协议适配NAT FTP协议针对NAT和其他因素,对协议进行了增强,提供了增强版的被动模式EPSV命令[1]。 下面的例子里,服务端不再显式指定IP地址,只提供数据通道的端口号。客户端默认与控制通道相同的IP地址建立数据通道。 可以看到,解决方案很优雅。实际上如果你在阅读本文的时候,绝大部分FTP服务端和客户端都已经实现了EPSV,而且优先使用它,所以FTP应用目前在EC2上是可以称之为开箱即用的。当然这需要客户端和服务端都支持增强的协议才能达成;如果我们不修改协议,能否解决这个问题呢。 放开那协议!我来! 有些时候,修改协议和实现需要多方协调和很长的时间才能完成。在RFC2428标准化之前,一些FTP实现就已经通过修改实现来适配基本NAT,而非修改协议。 以vsftpd为例,它允许通过配置文件vsftpd.conf中的配置项 pasv_address=54.232.0.1 告知服务端,在PASV被动模式下,应当指示客户端连接到配置项指定的IP(而不是服务端的私有IP)来适配基本NAT。 其他的一些常见应用例如VoIP类应用,也有类似的机制去适配基本NAT;例如引入STUN/TURN/ICE等方式[2]适配各种更加复杂的NAT穿越场景;但是针对部署在EC2上的基本NAT环境,也有通过实现上的简单调整,例如开源VoIP应用Asterisk就支持通过在配置文件/etc/asterisk/sip.conf里指定本机的公网地址和本地网段的方式来适配基本NAT。 nat=yes externaddr=54.223.0.1 localnet=10.0.0.0/16 协议和实现我都不想动! 作为一枚任性的读者,如果您既不想动协议也不想动实现,这里笔者给读者介绍一种剑走偏锋的方式,读者若有兴趣,可以轻松愉快的在AWS上试一试,看看能否解决你的应用适配基本NAT。下面是一段shell脚本,当然是运行在Linux操作系统上的。           #从EC2 实例元数据服务获取本实例的公网IP(如有)、私网IP           public_ipv4=`curl -s http://169.254.169.254/latest/meta-data/public-ipv4`           local_ipv4=`curl -s http://169.254.169.254/latest/meta-data/local-ipv4`           #配置私网地址段,这里应为EC2实例所在VPC的地址范围           local_net=10.0.0.0/16           if [ […]

Read More

Amazon CloudWatch Events监控您应用的安全

每个应用程序时刻都在产生事件,Amazon CloudWatch Events能帮助您针对应用的事件进行有针对性的响应和处理,及时响应,并处理错误事件,存储和分析潜在的告警信息。在接下来的篇幅里,我将利用AWS的CloudWatch Events,Lambda,SNS,SQS等服务向您展示如何及时分析与处理应用事件。 在这个场景中,我将应用事件划分分三个等级(当然,在您的具体业务场景中,您可以根据实际情况划分任意多的等级),Green,Yellow,Red。Green代表应用正常,您不需要进行任何动作。Yellow表示您应用的健康检查失败,通过Lambda来处理该类型事件。Red表示您的应用在至少一台服务器上已经失败,立即通知运维部门处理。 以下是该场景中的架构示意图: 1. 最左边为您的应用服务器群,他们将各自的事件发送给CloudWatch Events; 2. 在CloudWatch Events中设置Rule来进行区分,并将对应的事件发送相应的目标,如Lambda,SNS,SQS; 3. 目标在收到事件后进行相应的处理; 具体步骤: 1.   创建3个目标,Lambda,SNS,SQS; 1.1, 目标1,创建Lambda函数,SampleAppDebugger; 1.2, 目标2,创建SNS主题,RedHealthNotifier; 1.3, 目标3,创建SQS消息队列,ReportInspectionQueue;   2.   创建CloudWatch Events Rule 2.1, 将以下内容保存为YellowPattern.json; 2.2, 使用以下命令创建名为myCustomHealthStatusYellow的规则; 2.3, 使用以下命令创建目标; 2.4, CloudWatch Event需要将事件发送给Lambda,所以需要给Lambda添加适当权限允许CloudWatch这么做; 3.   重复上面的步骤创建第2条规则,并设置目标为SQS和SNS,特别注意,不要忘记给SNS,SQS设置相应权限以允许CloudWatch发送事件过来; 3.1, 使用以下命令创建名为myCustomHealthStatusRed的规则,这里的RedPattern.json文件其实是将2.1步骤中的YellowPattern.json是一样的,只是将内容中的Yellow替换成了Red; 3.2, 创建两个目标,SQS,SNS; 3.3, 添加权限允许CloudWatch Events发送事件; 其他SNS,SQS权限设置相关,请参考该官方链接:http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/events/resource-based-policies-cwe.html#sns-permissions 4.   进行测试,手动放入一些Red事件(我设置了个小脚本,每次运行都会放入61个事件),看看SQS及SNS情况; 这里我运行了三次脚本,所以SQS中有183条消息 看看邮箱中是否会收到邮件 5.   测试Yellow事件及Lambda反应; Lambda被触发的次数 作者介绍: […]

Read More

使用Oracle Data Pump将数据库迁移到AWS的RDS Oracle数据库

1.Oracle数据库的迁移方法 如何将Oracle数据库从数据中心迁移到AWS云上是DBA经常遇到的问题,迁移Oracle数据库有多种方式: (1)使用AWS DMS服务迁移 (2)使用Oracle SQL Developer迁移 (3)使用Oracle Data Pump迁移 (4)使用Oracle Export/Import迁移 (5)使用Oracle SQL Loader迁移 如果需要了解不同的迁移方法,可以参考 博客《Oracle数据库迁移到AWS云的方案》 。 2.使用Oracle Data Pump迁移 本文主要讨论使用Oracle Data Pump将Oracle数据库迁移到RDS数据库。示例数据库的信息如图。   下面是模拟在数据中心的Oracle11g源数据库中创建用户和表,并将源数据库迁移到AWS云中RDS Oracle 11g数据库的全过程。 步骤一:初始化源数据库并使用Data Pump导出 (1)使用SQL Plus登录源Oracle数据库 sqlplus / as sysdba (2)创建用户test create user test identified by welcome1; (3)为新创建用户grant权限(实际使用请给用户grant合适的权限) grant dba to test; (4)为用户test创建表 create table test.aa(id varchar(20) not null […]

Read More

使用AWS的数据库迁移DMS服务

前面博客《Oracle数据库迁移到AWS云的方案》介绍了AWS数据库迁移的几种基本方法,本文主要介绍如何使用AWS的DMS服务完成数据库的迁移。 1.DMS服务介绍 为了使用户更容易的将数据库迁移到云中,AWS已经在海外区域推出了AWS Database Migration Service服务,如果您的数据库在海外,DMS可以在源数据库不停机的情况下,帮您将数据迁移到AWS云中。DMS的功能非常强大,支持同构数据库的迁移(如Oracle迁移到Oracle),也支持异构数据库直接的迁移,如Oracle到Mysql等)。在数据库迁移期间,源数据库无需停机,并且能将迁移期间数据的更改持续复制到目标数据库。因此迁移完成后,您只需在短暂的停机时间内直接切换数据库,从而保证业务数据的完整性。 在中国BJS区域,还没有推出DMS服务,但是提供了Database Migration Tool(DMT)工具,您可以使用DMT工具来完成数据库迁移。 2.使用DMS完成迁移 使用DMS服务必须确保源或目标数据库有一个在AWS云中。 使用DMS服务的步骤如下: 步骤一:Create migration 登陆AWS全球区域的Console,选择DMS,点击“Create migration”,我们便来到了“welcome”界面,从该界面我们可以看到,通过DMS进行数据迁移我们至少需要一个源数据库、目标数据库和复制实例。当然,DMS 也支持多个源数据库向一个目标数据库的迁移以及单个源数据库向多个目标数据库的迁移。迁移时,数据通过一个运行在复制实例上的任务将源数据库复制到目标数据库。点击“Next”进行复制实例的创建。 步骤二:创建“Replication Instance” 您在进行数据库迁移过程中的第一个任务是创建具有足够存储空间和处理能力的复制实例,通过复制实例来执行您分配的任务并将数据从您的源数据库迁移到目标数据库。此实例所需的大小取决于您要迁移的数据和您需要执行的任务量。具体配置参数见下表1。 如果您需要为网络和加密设置值,请选择高级选项卡。具体参数见表2。 步骤三:创建数据库连接 当您在创建复制实例时,您可以指定源和目标数据库。源数据库和目标数据库可以在AWS的EC2上,也可以是AWS的关系数据库服务(RDS)的DB实例或者本地数据库。在设置源和目标数据库时,             具体参数可以参见表3。您也可以通过高级选项卡来设置连接字符串和加密密钥的值。 等图示上部分的显示变成”Replication instance created successfully”并且“Run test“按钮变成正常,然后测试,确保测试结果为”Connection tested Successfully”,由于需要从AWS服务端连接测试数据库,因此需要设置好security group,设置的security group必须确保复制实例能够访问源和目标数据库。需要的话,可以短暂的将security group 1521 的访问设置为 0.0.0.0/0,测试成功后,点击”Next”按钮。 步骤四:创建“task” 当源数据库和目标数据库建立连接后,您需要创建一个任务来指定哪些表需要迁移,使用目标架构来映射数据并且在目标数据库中创建新表。作为创建任务的一部分,您可以选择迁移类型:迁移现有数据、迁移现有数据并复制正在进行的更改,或只复制更改的数据。 如果选择”Migrate existing data and replicate data changes”选项需要打开Task Settings 中的supplemental loging开关。在Table Mapping中Schema to Migrate选择“Oracle”,点击“Create Task”。 当您创建的task状态从creating变为ready的时候,您的task便创建好了。点击该“task”并点击上方的“Start/Resume”,您数据迁移任务便开始了! 数据库迁移完成后,目标数据库在您选择的时间段内仍会与源数据库保持同步,使您能够在方便的时候切换数据库。 3.总结 […]

Read More

Oracle数据库迁移到AWS云的方案

当前云已经成为常态,越来越多的企业希望使用云来增加基础设施的弹性、减轻基础设施的维护压力,运维的成本等。很多企业使用云碰到的难题之一是如何将现有的应用迁移到云上,将现有应用的中间件系统、Web系统及其他组件迁移到云上相对容易,一般只需要重新部署或复制即可,但如何将数据库迁移到AWS云中,是很多企业需要面对的一个难题。由于数据库的种类繁多,本文将以Oracle数据库为例,介绍将数据中心的Oracle迁移到云中的基本知识,不同方法涉及的迁移过程,请参考后续的博客。 1.云中数据库的模式 如果要在云中使用Oracle数据库,有两种选择: EC2服务器模式 使用AWS的EC2服务器,在EC2服务器上手工安装Oracle数据库软件,用户需要自己准备Oracle的License,这和用户自己在机房安装Oracle数据库类似。如果在中国以外的区域,用户也可以使用AWS Marketplace里面的不同版本的Oracle镜像,直接初始化Oracle数据库,这种情况你也需要自己准备Oracle的License。 RDS模式 Amazon Relational Database Service (Amazon RDS) 是一种 AWS提供的Web 服务,可以让我们更轻松地在云中设置、 操作和扩展关系数据库,减少管理关系型数据库复杂的管理任务。RDS包括了Oracel、SQL Server、My SQL,等多种数据库引擎,你可以根据需要选择数据库的类型。 根据我们使用模式的不同,能选择的迁移方式也不同。 2.逻辑迁移和物理迁移 数据库的迁移可以分为逻辑迁移和物理迁移两种方式: 逻辑迁移 逻辑迁移一般只是迁移数据库表、视图及其它数据库对象,不要求源库和目标库在底层的存储及表空间完全一致。逻辑迁移适用于EC2服务器模式和RDS模式。 逻辑迁移一般使用Dump/Load+Log Apply的方式,使用Dump工具将数据库对象从源数据库导出,然后Load到目标数据库,最后根据需要同步数据库日志。 物理迁移 物理迁移可以让迁移的源库和目标库在底层的存储文件、存储介质、表空间、用户等信息完全一致。物理迁移适用于EC2服务器模式。 物理迁移(Oracle)一般是使用RMan等物理备份+Log Apply的方式,使用RMan等工具备份数据库,然后在目标系统还原数据库,最后根据需要同步日志。 3.日志同步 在迁移数据库过程中,如果我们的业务有足够停机时间,可以将源数据库设置成只读数据库,然后使用Dump/Load或者备份/还原的方式来创建目标库。因为源库是只读的,迁移过程中源库不会发生变化,因此只需要根据源库数据创建目标库,无需日志的同步。 在迁移数据库过程中,如果我们的业务没有足够的停机时间,此时除了要使用Dump/Load或备份还原的方式迁移已有数据,还需要将迁移过程中变化的数据同步到目标数据库,此时需要日志同步的工具。 4.Oracle数据库同步的方法 将Oracle数据库迁移到AWS云中主要有下面几种方法: 迁移Oracle数据库有多种方式,本文主要介绍以下五种,这五种方式都是逻辑迁移: (1)使用AWS DMS服务迁移 AWS在中国以外的区域提供了数据库迁移DMS服务,支持同构和异构数据库间的迁移,也支持日志的同步。在中国区可以使用AWS提供的DMT(Database Migration Tool)工具完成同构或异构数据库间的迁移。 DMS适合于迁移中小型的数据库。 (2)使用Oracle SQL Developer迁移 Oracle提供的SQL Developer工具里面提供了迁移功能,适合于迁移数据较少的数据库。SQL Developer可以在Oracle的官网里免费下载。 (3)使用Oracle Data Pump迁移 使用Oracle Data Pump工具将数据库导出,复制数据到目标平台,最后使用Data Pump将数据导入到目标数据库。数据量较大或数据少的库都可以使用这种方式。 […]

Read More

手把手教你使用Amazon EMR进行交互式数据查询

本文将带您一步步完成一个利用Amazon EMR进行交互式数据查询的实例,过程包括数据的注入、数据的分析、结果的转存、以及将整个过程自动化的方法。其中涉及的EMR组件主要包括: Hive, Hadoop, presto, sqoop。除EMR外,涉及到的其他服务包括:S3, RDS. 本文所使用的数据源是cloudfront产生的日志。 在按照本文档进行操作之前,读者需了解S3,RDS并能够进行基本的S3,RDS的操作,读者需了解EMR的基本概念。以下是参考资料: 什么是EMR: Amazon Elastic MapReduce (Amazon EMR) 是一种托管数据分析服务的框架,提升企业、研究人员、数据分析师和开发人员轻松、经济高效掌控海量数据的能力。其当前版本中托管的服务包括:Hadoop, Zeppelin, Tez, Ganglia, HBase, Pig, Hive, Presto, ZooKeeper, Sqoop, Mahout, Hue, Phoenix, Oozie, Spark, Hcatalog. EMR让您专注于数据分析,无需担心费时的集群设置、管理或调整,也无需担心所需要的计算能力。 具体参考: https://aws.amazon.com/cn/documentation/elastic-mapreduce/ 什么是S3: Amazon Simple Storage Service (Amazon S3) 为开发人员和 IT 团队提供安全、耐用且高度可扩展的对象存储。S3 可为EMR提供文件存储服务。 具体参考:https://aws.amazon.com/cn/documentation/s3/ 什么是RDS: Amazon Relational Database Service (Amazon RDS) 是一种可让用户在云中轻松设置、操作和扩展关系数据库的 Web […]

Read More

手把手教你如何用Lambda + Alexa调用echo设备

知识补充: 什么是AWS Lambda? AWS Lambda在可用性高的计算基础设施上运行您的代码,执行计算资源的所有管理工作,其中包括服务器和操作系统维护、容量预置和自动扩展、代码监控和记录,只在需要时执行您的代码并自动缩放,从每天几个请求到每秒数千个请求,其提供了AWS基础设施的高可用性,高安全性,高功能性和高可扩展性。 具体可参考: https://docs.aws.amazon.com/zh_cn/lambda/latest/dg/welcome.html 什么是Alexa Skills Kit? Alexa是Echo内置的语音助手,通过它能够唤醒Echo。Alexa的优点在于,它基于云端,因此我们可以随时对其进行改进。Alexa Skills Kit (ASK)是一个由自服务API、工具、文件和实例代码的集合,可轻松构建你自定义的Alexa skills,然后发布。 具体可参考: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit 1. 打开链接https://aws.amazon.com/,申请亚马逊AWS账号。登录控制台,选择AWS Lambda服务,创建Lambda Function。 2. 选择Alexa Skills Kit 3. 下载需要用到的代码,解压,打开index.js文件,修改文件中的开发者账号ID,如下: https://s3.cn-north-1.amazonaws.com.cn/bjsdemo/LambdaAlexaSkillsKit/RecipeTemplate.zip 修改完成之后,然后打成Zip包上传(注意,这里的打包不需要文件夹,直接把.js文件打包成RecipeTemplate.zip) 接着点击“Create function” 到这里,Lambda 创建成功。 4. 进入https://developer.amazon.com/,创建Alexa Skills Kit。 选择ALEXA 5. 选择“Alexa Skills Kit” 6. 点击“Add a new Skill” 7. 填写Name: Solution Helper,Invocation Name: solution helper 8. […]

Read More

AWS Kinesis的Javascript交互方法

一.介绍 Amazon Kinesis 是一种托管的弹性可扩展服务,能实时处理大规模的流数据。在该服务收集大数据记录流后,可用多种数据处理应用程序实时处理该数据流。Amazon Kinesis Streams 每小时可从数十万种来源中连续捕获和存储数 TB 数据,如网站点击流、财务交易、社交媒体源、IT 日志和定位追踪事件。Amazon Kinesis Streams 数据流的吞吐量每小时可从数 MB 扩展到数 TB,PUT 记录每秒钟可从数千次扩展到数百万。您可以随时根据您的输入数据量动态调节数据流的吞吐量。 AWS为旗下的服务提供了多种开发工具包,支持包括Java、PHP、Python、Ruby、浏览器端等语言或平台。对于Amazon Kinesis,我们除了使用上述的Stream API进行开发外,AWS还提供了Amazon Kinesis Client Library (KCL) 开发适用于 Amazon Kinesis Streams 的使用器应用程序。在本文当中,我们展示如何使用Javascript在浏览器端与Amazon Kinesis进行交互,包括把记录Put到Kinesis,和从Kinesis读取记录。 二.基本概念与限制 在阐述如何AWS Kinesis的Javascript交互方法前,我们有必要对Kinesis Stream当中的关键概念——“分片”和“数据记录”作初步的了解。 分片 分片Share是流中数据记录的唯一标识组。一个流由一个或多个分片组成,每个分片提供一个固定的容量单位。流的总容量是其分片容量的总和。每个分片对应提供 1 MB/s 的写入容量和 2 MB/s 的读取容量。需要注意的是,每个分片可支持最多1000条记录/s的写入,和5个事务/s的读取。用户需要根据上述的容量和数目的限制,为流添加足够多的分片数目,以满足自身需求。 数据记录 数据记录是存储在 Amazon Kinesis Stream中的数据单位。数据记录由序列号、分区键和数据 Blob 组成。 每个数据记录都有一个唯一的序列号。当应用程序对Amazon Kinesis Stream进行写入记录时,Streams将自动为其分配序列号。同一分区键的序列号通常会随时间变化增加;写入请求之间的时间段越长,序列号则越大。但需要注意的是,序列号不能用作相同流中的数据集的索引。用户如果需要在逻辑上分隔数据集,请使用分区键或为每个数据集创建单独的流。 分区键Partition Key用于按分片对流中的数据进行分组。Streams 服务使用与每条数据记录关联的分区键将属于流的数据记录分为多个分片,以便确定给定的数据记录所属的分片。分区键是最大长度限制为 […]

Read More

算法改变世界 - 从Prisma 的走红说开去

假设你是一个摄影爱好者,估计最近这几天应该正忙着用一款热门的手机App去修图并晒到朋友圈里面。原因很简单,用这款软件提供的滤镜处理过的照片看起来更像是个艺术品,而不是那种常见的苍白的脸蛋和色彩失真的风景。这款爆红的程度可媲美Pokémon Go 的App的名字叫做Prisma。对于这个现象级的App,一个笑话是这样说的,“全球有一半的人正在用Pokémon GO抓皮卡丘玩,另一半的人则用Prisma在修图”。 6月24日,俄罗斯总理梅德韦杰夫在自己拥有230万粉丝的Instagram上传了一张莫斯科风景照,解说文字是“滤镜里的莫斯科”。这张照片使用了Prisma的其中一款滤镜,让整张照片呈现出浓郁的铅笔画效果,获得了超过7.8万个点赞。 Prisma 面世是在今年的6月11日,是由一个不足9人的名为Prisma Lab的俄罗斯团队在一个半月以内开发出来。一经面世就引起了轰动,在发布短短4天后就成了年轻人的新宠,10个国家的App Store榜首,两周内下载量超过160万。这个数字也创造了一个App下载的新的记录。   包括我在内的许多人喜欢这款应用的原因是因为它所提供的30多款滤镜完全不同于VSCO、Snapseed 以及Instagram 这些成名已久的的软件,经它处理过的图片看起来就像是我们熟悉的毕加索、梵高、爱德华.蒙克的作品,或者是强烈的线条、简洁概括夸张的造型,或者是用色阴暗的紫、绿色调的蚀刻风格,又或者是粗旷而狂野的印象派。总之,一幅色彩暗淡、构图不佳的照片一经处理就变成了大师范的艺术品。这样的软件如何不让像我这样的低级别的摄友痴狂呢。   如果仅仅是几个还算不错的滤镜也难逃昙花一现的结局,就如同曾经大热过许多款软件一样。但是如果你可以了解这些滤镜的来源,恐怕你会和我一样会大吃一惊了。不同与传统的设计出来的滤镜,Prisma 有自己一套独特的方法。当用户上传照片时,Prisma系统会使用基于神经网络的人工智能算法,获取著名绘画大师和主要流派的艺术风格,然后对你的照片进行智能化处理。也就是说,它所提供的每一个滤镜,都是模仿过去伟大艺术家的风格而对你的照片进行智能分析和重绘而产生的。   作为一个程序员,这个励志故事却有着不一样的味道。通常情况下,我们总是习惯于在我们熟悉的领域去捕捉灵感,并将这种灵光乍现的想法都过程序变成一个个具体的应用。但是如果你已经读过上面的故事,你应该也会与我一样蹦出来这样的一个想法,人工智能或许可以可以让我们跳出这样的思维的局限。让我们可以在跟更广阔的领域去发掘新的需求。   为了验证这个想法,我打算复制Prisma 核心算法的实现。当然,这种实现并不是你想像的那么高深莫测。在一篇名为“Neural networks with artistic talent” 的博客文章里面,我大致梳理出来了这个算法的脉络。早在2015年9月在ariV 上面就刊出了德国学者的一篇名为”A Neural Algorithm of Artistic Style“论文。在这片文章里面,了如何使用神经网络学习一副画的绘画风格,并把这种风格用于处理一幅照片使之具有了该种艺术风格。而这篇论文所提出的算法据说所就是Prisma 的核心。 看到这里我想许多人都会产生实现这个算法的冲动。且慢下手,因为有意境找到了一个更简洁的方法。斯坦福大学的Justin Johnson 已经在github 上面为我们提供了一个很好的框架,而基于这个项目的成果实现这个算法就变得轻而易举。 实现这个深度学习的算法需要具备一定的条件,重要的就是计算的性能。而目前解决这个问题的通常思路就是使用GPU来提高处理能力。对于普通程序员来说,我们通常并不具备这一类的资源。但解决问题的思路已经有人给出了。早在2014年2月Netflix 久通过他们的技术博客分享过一篇实现分布式神经网络的文章,文章的题目是“Distributed Neural Networks with GPUs in the AWS Cloud“。 于是我的尝试就从AWS 提供的云计算的环境 。我需要的仅仅是启动一个AWS EC2 的实例,EC2这个服务可以理解为一个托管的虚拟服务器。 Amazon EC2 提供多种经过优化,适用于不同使用案例的实例类型,而适合于深度计算的类型无疑就是G2这个 […]

Read More