Heroku PostgreSQL与适用于PostgreSQL的Amazon RDS

出于许多充分的理由, PostgreSQL正在成为Web开发的首选关系数据库。 这意味着开发团队必须决定是托管自己的数据库还是将数据库用作服务提供者。

PostgreSQL世界上最大的两个参与者是Heroku PostgreSQLPostgreSQL的 Amazon RDS 。 今天,我将比较两个平台。

Heroku是第一个推动PostgreSQL而不是MySQL进行应用程序开发的大型提供商。 他们于2007年启动了自己的Heroku PostgreSQL平台。AmazonWeb Services于2013年11月在AWS re:Invent会议期间首次宣布了其PostgreSQL服务的RDS,引起了与会的程序员的热烈欢迎。

定价比较

在深入了解功能之前,让我们先介绍一下价格差异。 当然,这两种服务在生产力和维护方面的价值主张都不同,这些领域超出了这些直接成本。 但是,了解基本成本是值得的,因此您以后可以根据需要权衡这些价值。

Heroku PostgreSQL的定价最简单 。 费率和为它们获得的收益非常明确地设置为每月简单的费率,包括数据库,存储,数据传输,I / O,备份,SLA以及定价层内置的任何其他功能。

使用PostgreSQL的RDS,可以将价格分解为较小的单位资源使用量。 这意味着在估算价格时会涉及更多因素,因此要与Heroku PostgreSQL进行精确比较要困难一些。

您具有实例类型的每小时价格,如果它是多个可用区实例,则价格更高;如果您为该实例保留一到三年的前期费用,则价格更低。 存储成本和存储类别(单可用区和多可用区); 规定的IOP率; 备份存储和数据传输……然后有很多特殊情况需要考虑。 另外,请记住,当您注册时,您将获得最便宜的计划免费一年。

这是RDS计划与Heroku Premium 4计划的比较:

Heroku Premium 4

  • $ 1,200 /月
  • 15 GB内存
  • 512 GB储存空间
  • 500位联络人
  • 高可用性
  • 每月最多15分钟的停机时间
  • 1周回滚
  • 时间点恢复
  • 静态加密
  • 连续保护(异地预写日志)

PostgreSQL的RDS

  • $ 1,156 /月按需提供或$ 756 /月保留1年
  • db.m3.xlarge多可用区,每小时$ 0.780($ 580)
  • 4个vCPU,15GB RAM
  • 静态加密
  • 调配512 GB(SSD),每GB $ 0.250($ 128)
  • 2000年配置的IOPS为$ 0.20 / IOPS($ 400)
  • 估计备份存储超过免费可用量,可进行1周回滚; 512 GB,每GB $ 0.095($ 48)
  • 多数情况下,数据传输费用为$ 0
  • 每月停机时间为22分钟(基于AWS RDS SLA 99.95%的正常运行时间)

现在,下面是进行此类比较的警告:

  • Heroku没有透露与其计划相关的CPU数量。
  • Heroku的高可用性相当于AWS RDS Multi-AZ。 在这两种设置中,只读副本都保留在不同的地理区域中,专门用于在发生故障时自动进行故障转移。
  • 使用Heroku,您的存储空间已全部分配,您无需为IOPS付费。 因此,我们不知道IOPS的限制是什么,但是它们是非常高性能的数据库。 我分配了AWS允许的512 GB的最低IOPS,即2,000。 我们可能会高达5,000 IOPS,这将使价格每月增加$ 600。
  • 根据实际使用了多少预配置存储,AWS RDS备份可能不会花费任何费用。 备份存储可免费调配至已调配的存储级别,并且备份通常较小,增量且不包括索引使用的大量空间。 此估算基于允许一周回滚所需的七天存储时间。
  • AWS RDS存储可以即时扩展,因此您对RAM与存储的特定需求可能会产生截然不同的定价模式。 此比较旨在得出一个等效的结果。
  • AWS仅对超出可用区域的数据传输收取费用(不包括多可用区传输),因此在大多数情况下,传输速率将不适用。

清澈如泥。

设置复杂度

Heroku PostgreSQL的安装非常简单。

每当您创建PostgreSQL项目时,已经在等待连接的情况下创建了一个免费的开发计划。 升级数据库仅会为您提供一个新的连接字符串,其中包含设置的用户名,密码,主机名和数据库标识符,这些字符串均由其系统随机生成。 数据库连接必须安全,但可以在Internet上的任何位置访问,包括直接从家用计算机访问。 您还可以选择将其部署在美国东部地区还是欧洲地区。

PostgreSQL的RDS设置稍微复杂一些; 您必须选择定价部分中概述的各种选项,包括实例类型,是否应为多可用区,是否启用静态加密,存储类型,要配置的数量,要配置的IOP(如果有) ,备份保留期,是否启用自动次要版本升级,选择备份和维护窗口,数据库标识符,名称,端口,主用户和密码,要在哪个可用区中创建以及选择VPC组和子网组,以及您的数据库配置。

显然,RDS使您可以更好地控制细节。 根据您的观点,可能是好是坏。

例如,数据库配置对每种实例类型的每个数据库版本都有一组默认值。 您可以采用这些默认值,并使用自己的自定义设置对其进行修改,然后将其另存为自己的参数组,以分配给此参数以及将来可能选择创建的任何数据库。 由于VPC,子网组和公共可访问性等各种因素,初始设置时间可能会稍微多一些。 但是,一旦为您的帐户首次定义了这些内容,一切都将变得更加接近点击体验。

主机位置,区域限制

Heroku与AWS美国东部地区(us-east-1)和欧洲(eu-west-1)合作。 这也意味着您的数据库将仅限于这些区域。 可用区在内部进行管理。

如果您选择将Heroku PostgreSQL与托管在这两个区域以外的AWS区域中使用,则应该期望数据库请求之间的等待时间更长,并且传输速率可能适用。 同样,如果您希望将AWS RDS for PostgreSQL与Heroku应用程序一起使用,只需确保在适当的区域中进行了设置即可。

安全和访问注意事项

在Heroku PostgreSQL中,为您提供了一个随机用户名,一个随机密码和一个必须通过SSL连接的随机数据库名。 他们的网络(以及亚马逊的网络)具有内置的防护功能,可以防范可能强行访问此类数据库的扫描仪。 那是相当安全的。

不利之处在于,任何需要访问数据库并拥有连接信息的人都可以在世界任何地方进行访问。 这比项目上已离开程序员的人力资源风险更大,但仍然需要注意。 在程序员离开团队之后交换掉数据库凭据通常可以减轻这种担忧。

另一方面,适用于PostgreSQL的AWS RDS具有更全面的安全策略。 设置和定义VPC和专用子网组的功能使您可以将数据库访问权限限制为仅对需要它的服务器和人员进行访问。 您可以根据需要创建任意数量的具有不同权限级别的数据库用户,以便更轻松地管理具有不同权限级别的访问数据库的多个用户或应用程序,同时提供日志记录。 多亏了VPC,即使有人确实具有连接信息,他们仍然无法进入VPC内部而无法访问数据库。

为了获得更严格(尽管更复杂)的安全性,RDS势不可挡。 根据应用程序的复杂性,团队和开发状态,这种级别的安全性妄想症可能还没有意义,并且可能比您想要管理的事更令人头疼。 您也可以使用与Heroku PostgreSQL相同的访问规则来配置它。

备份/还原/升级

两种平台都提供非常相似的备份和还原选项。 两者都具有计划的备份,时间点恢复,还原到新副本以及创建快照的功能。

升级涉及更多。 在两个平台上,主要版本升级都会涉及一些停机时间,这是无法避免的。

Heroku提供了三个选项 ,所有这些选项都涉及一些手动步骤来完成:复制数据,升级升级的关注者或使用pg:upgrade命令就地升级大型数据库。 pg:upgrade最类似于RDS上的升级过程。

使用RDS,您可以为实例选择Modify选项并更改版本。 它将在就地升级期间创建快照前和快照后,同时保持完全相同的连接字符串。

RDS允许您在设置的维护时段内自动计划数据库升级。 Heroku PostgreSQL将自动应用较小的升级和安全补丁,而RDS允许您选择是否希望它们在维护窗口内自动执行此操作。

两者都是相当简单的过程,尽管在这种情况下,RDS流程需要更多的时间。

功能/扩展可用性

撰写本文时,适用于PostgreSQL的AWS RDS具有版本9.3.1–9.3.6和9.4.1,而Heroku PostgreSQL具有9.1、9.2、9.3和9.4。

Heroku会自动进行次要版本升级,因此无需发布正式版。 Heroku PostgreSQL已经存在了更长的时间,因此它为现有用户提供了更多的旧版本。 RDS随9.3版本一起发布,似乎无意支持较早版本。

除了PostgreSQL内置的所有功能之外,还有一组不断增长的扩展。

两种平台都具有以下共同扩展:

  • 商店
  • 文字
  • 不是
  • 立方体
  • dict_int
  • 不重音
  • 邮政地理信息系统
  • 数据库链接
  • 地球距离
  • 模糊匹配
  • 数组
  • pg_stat_statements
  • pgcrypto
  • pg_trgm
  • tablefunc
  • uuid-ossp
  • pgrowlocks
  • btree_gist
  • PL / pgSQL
  • PL / Tcl
  • PL / Perl
  • PL / V8

在Heroku PostgreSQL上可用:

  • pgstattuple

在适用于PostgreSQL的AWS RDS上可用:

  • postgres_fdw
  • chkpass
  • 印记
  • tsearch2
  • sslinfo

这是Heroku PostgreSQL适用于PostgreSQL的AWS RDS的完整列表。

缩放选项

“扩展”在数据库中是一个棘手的词,因为根据您的应用程序的需求,它意味着不同的含义。 与低容量和高强度(分析)相比,写入与读取的缩放比例基于低强度和高容量(网络流量)。

网络上最常见的扩展情况是扩展读取流量。 Heroku和RDS都具有创建只读副本的能力来满足这一需求。 RDS称它们为只读副本,而Heroku称其为followers ,但它们本质上是同一件事:数据库副本,通过网络上的预写日志接收实时更新,从而使您可以将读取流量分布在多个服务器上。 这通常称为水平缩放 。 在任一平台上创建只读副本是指单击操作。

垂直扩展是指增加或减少就地数据库硬件的功能。 AWS和Heroku对此情况的处理方式不同。

Heroku指示用户创建新希望的数据库类的关注者,然后在追上主数据库后将其升级到主数据库,然后销毁原始数据库。 您的应用程序将需要更新其数据库连接信息以使用新数据库。

如果您的RDS数据库是多可用区数据库,则故障转移数据库将首先升级。 准备就绪后,连接将自动故障切换到该实例,然后升级主实例,然后切换回该实例。 如果没有多可用区,则可以就地进行升级,但是停机时间会根据数据库的大小而有所不同。 您的另一个选择是创建一个具有新的所需统计信息的只读副本,然后在准备就绪时将其升级为主副本,就像Heroku建议的那样。

对于某些可以处理分布式写缩放的东西,要超出标准的垂直和水平选项,这两个选项都不是特别合适。 可能有必要管理您自己的Postgres-XC安装或重组您的应用程序,以将大量写流量隔离到更特定于用例的数据源中。

监控方式

适用于PostgreSQL的AWS RDS通过Cloudwatch附带了所有标准的AWS监视选项。

Cloudwatch提供了广泛的指标,您可以跟踪历史记录,并且具有通过电子邮件或SNS通知(基本上是Webhooks)设置警报的精细功能。 这些非常适合与PagerDuty之类的工具集成。

Heroku PostgreSQL监视更多地依赖日志和命令行工具。 他们的pgextras命令行工具将显示有关数据库中最新情况的当前信息,包括膨胀,阻止查询,高速缓存和索引命中率,未使用索引的标识以及杀死特定查询的能力。

这些工具虽然不涉及随时间推移从Cloudwatch获得的统计信息跟踪,但它们提供了非常有价值的洞察力,可帮助您了解数据库中发生的事情,而您几乎无法从RDS中获得。 您可以在GitHub上查看pg-extras的更多示例。 这些类型的见解对于调整应用程序和数据库非常有用,可避免您首先需要监视器发现的问题。

日志中还提供了其他历史数据,尽管Heroku建议尝试使用Librato (它可以与任何PostgreSQL数据库一起使用,但是具有可用于自动配置的Heroku插件)。 此外,免费的New Relic计划将为您的应用程序和数据库的运行情况提供丰富的见解。

虽然Cloudwatch提供了有关机器内部运行情况的更详细的见解,但是Heroku使用pg-extras中的指标来监视并通知您他们认为需要纠正的各种问题。 如果发生数据损坏,Heroku会识别并修复它。 安全问题,他们会处理。 DBA或DevOps职位将更加关注Cloudwatch指标。 Heroku PostgreSQL尝试着重于确保您不必担心它。

数据片段

您可以从Heroku PostgreSQL获得的一项额外功能是Dataclips 。 数据剪辑基本上是一种用于在团队之间存储和共享只读查询以进行报告的方法,而不必授予可能需要查看它们的每个人访问的权限。 只需输入查询并在页面上查看结果即可。 查询受版本控制; 如果您的团队正在传递它们并对其进行调整,您将能够看到随着时间的变化。

以我的个人经验,我发现数据剪辑是一种救命稻草,特别是与非程序员团队合作时。

当业务或支持人员需要有关销售,欺诈,用户行为,帐户活动或我们可能在其中发生的其他任何事情的信息时,我总是能够编写查询以获取该信息。 在进行数据剪辑之前,这意味着我需要编写查询,将其保存在某个位置,通常将结果集导出为CSV或电子表格,然后通过电子邮件将其发送给请求它的人。 最终,这成为您必须在每次请求时都要处理的例行活动。

输入数据片段。 现在,我可以接受该查询,然后将随机散列的链接发送给请求信息的人。 如果他们希望在第二天,一周或一个月获得更多最新信息,则只需刷新页面即可。 我编写查询,然后再也听不到该请求。 那就是开发人员节省时间的地方。 您可以保存它们并命名,也可以根据需要管理更严格的访问权限。

总结与建议

总体而言,适用于PostgreSQL的AWS RDS通常更便宜,并且可以更严格地针对您的应用程序需求量身定制。 您将对访问,安全性,监视,警报,地理位置和维护计划进行更精细的控制。

使用Heroku PostgreSQL,尽管所有开发数据库都是免费的,但您将需要为简化的价格结构多付一些钱。 您将无法控制RDS允许您访问的许多细节,但这部分是设计使然,因此您不必处理这些细节。 使用Heroku,您将直接洞悉数据库的性能,并使用内部资源来帮助您捕获,调整和改进设置,以免出现问题。

如果必须选择的话 ,我可能会选择 Heroku和Heroku PostgreSQL作为创业公司,而我则专注于实际开发应用程序并吸引客户。 节省时间专注于业务目标的价值主张是最重要的,因为我们可以建立收入流。 然后,当事情发展到数据库不再有太大变化的程度时,开始将事情迁移到RDS可能是有意义的,因为我们专注于锁定事物,着眼于稳定性,长期维护和安全性。

最后,它实际上归结为花费更多的时间:时间或基础架构。 如果您花费更多时间,请使用Heroku PostgreSQL。 如果基础架构花费更多,请使用RDS。 将两个平台都放置在AWS数据中心内,可以随着需求的变化在两个平台之间切换变得更加容易。

通过@codeship的“ Heroku PostgreSQL与RDS PostgreSQL”

点击鸣叫

翻译自: https://www.javacodegeeks.com/2015/06/heroku-postgresql-vs-amazon-rds-for-postgresql.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值