今年,OSCON 的与会者将有机会聆听 Henrik Ingo 关于 “Selling Opensource 101” 的演讲。
Ingo 是 MongoDB 的高级解决方案架构师。他活跃于许多开源项目,并且是《Open Life: The Philosophy of Open Source》(开放生活:开源哲学)的作者,这是一本关于开源社区伦理和商业模式的书。
在这次采访中,他深入分析了 MongoDB,并解释了为什么它是大数据分析和构建微服务的首选平台。
你所说的 NoSQL 数据库是什么意思?NoSQL 和 RDBMS 之间有什么区别?何时以及何时不应使用 NoSQL 数据库?NoSQL 数据库的优势是什么?
所谓的 “NoSQL 运动” 始于 2007 年左右。也许 NoSQL 的雏形是 memcached 的广泛使用,然后它演变成许多键值数据库,如 Redis、Riak、Voldemort 等。也有关于该主题的学术论文发表,例如 Google 和 Amazon 描述了这些公司内部使用的系统。
这种发展的主要驱动力是需要从旧的 RDBMS 架构转向更具可扩展性的横向扩展方法。RDBMS 产品一直为我们服务良好,但它们是在不同的时代为不同的需求而设计的。从历史上看,数据库的存在是为了支持公司的内部流程。即使是最大的公司也只有几十万员工——即使这样,他们也不会同时使用同一个数据库系统。相比之下,现代网络公司将有数千万,甚至数亿用户同时在其系统上进行操作。这是规模扩大了一千倍,需要不同的架构方法。此外,每个用户存储的数据量正在爆炸式增长,因此世界正在经历指数级增长。世界上的数据量大约每 14 个月翻一番。
“NoSQL” 这个名称仅仅指的是这种新型数据库摆脱了自 1974 年以来传统数据库所依赖的 API 和查询语言。事实上,我两年前加入 MongoDB 的主要动机之一是意识到,在我一生中(!),数据库世界正在发生一些新的事情,并且考虑到这个机会,我意识到如果我不参与其中将是疯狂的。
“NoSQL” 不是最恰当的名称,因为它只描述了这类产品不做什么,并且完全忽略了一个事实,即 NoSQL 数据库有多种变体,适用于非常不同的需求和用例。这一代新型数据库的唯一共同点是我们不是关系数据库。
更令人困惑的是,许多 NoSQL 数据库现在实际上提供了类似 SQL 的查询接口,因为已经有庞大的用户群熟悉 SQL。在我们自己的生态系统中,MongoDB 也有一些第三方解决方案来提供这种能力。所以现在我们最终进入了一个 NoSQL 数据库支持 SQL 的世界。许多人会说现在是 “NoSQL” 这个名称退休的时候了。在接下来的讨论中,为了避免争议,我将使用 “非关系型” 而不是 “NoSQL 数据库”。
尽管如此,在这类非关系型数据库中仍然存在共性。拥有横向扩展架构(基于某种形式的分片)是一个共同特征。复制或高可用性也是如此,即使在今天,在关系数据库的世界中,它通常仍然是一个附加产品。
最后,这些数据库不具有关系数据模型(意味着数据被建模为二维表)也是一个特点。例如,在 MongoDB 的情况下,我们基于 JSON 的数据模型和查询语言是开发人员非常喜欢的东西,并且通常是 MongoDB 的优势之一。不仅仅是开发人员熟悉 JSON,而且动态模式允许更快速和迭代的开发风格,而无需事先进行繁重的计划。今天生成的新数据中约有 80% 是非结构化的,因此这是我们需要匹配适当数据库解决方案的另一个原因。
哪些功能使 MongoDB 企业版成为优于 MongoDB 社区版的首选平台,特别是对于企业客户而言?
作为一个粗略的经验法则,核心区别在于开发人员很可能在 MongoDB 中找到他想要的一切,而运维团队将受益于 MongoDB Ops Manager 的管理、备份和监控功能,这些功能包含在 MongoDB Enterprise Advanced 中。许多这些功能在名为 MongoDB Management Service 的云托管解决方案中也可用。此外,MongoDB Enterprise Advanced 还包括一系列安全功能,这些功能在您开始投入生产后也可能变得重要,例如与 LDAP 和 Active Directory 的单点登录集成、PKI 证书以及维护针对数据库执行的所有操作的审计日志以进行合规性报告。
MongoDB Enterprise Advanced 还提供 24x7 全球支持,SLA 为 1 小时,以及企业认证和针对开发和 DBA 团队的按需培训。
MongoDB 3.0 集成了 WiredTiger 引擎和 Ops Manager 工具。这对企业意味着什么?
这很简单:更容易扩展!但它们各自出于不同的原因帮助扩展。
Ops Manager 帮助运维团队在您横向扩展时管理越来越多的 MongoDB 进程。MongoDB 本身就非常易于安装和管理,但当然,如果您有一个 100 个节点的集群,甚至只有 12 个节点,手动安装或升级每个服务器就没有意义了。Ops Manager 可以从单个控制台或 REST API 调用配置、部署和管理整个集群。您可以单击一个按钮启动复杂的零停机滚动升级等操作,然后去喝咖啡。当然,它也会执行您的基本操作,例如监控和持续备份等。
如果您不熟悉自动化的价值,请考虑 Ops Manager 的用户通常报告 DBA 时间的效率提高了 10 倍到 20 倍。
WiredTiger 存储引擎在 MongoDB 3.0 中引入,对于某些类型的工作负载(尤其是那些以数据库写入为主的工作负载)的数据库引擎性能来说,这是一个革命性的进步。顺便说一句,它在 3.0 中仍然是可选的。您必须在启动时选择它。
WiredTiger 由 BerkeleyDB 的原始开发人员创建,BerkeleyDB 是世界上使用最广泛的嵌入式数据库。MongoDB 于去年 12 月收购了 WiredTiger,因此它们与开发 MongoDB 的其余团队完全集成。
我们之前的数据库引擎我们只称之为 MMAPv1 引擎。它为 MongoDB 提供了良好的服务,可以追溯到 MongoDB 还是一个非常简单和年轻的非关系型数据库的时代。然而,今天 MongoDB 被要求非常苛刻的客户和越来越多的各种应用程序使用。因此,WiredTiger 帮助我们很好地应对更广泛的应用。它绝对使我们的数据库引擎故事站在了性能和基准测试辩论的前沿。它是一个现代 MVCC 引擎,使用现代锁定算法(如 hazard 指针)来支持高并发工作负载。
WiredTiger 的功能远不止为写密集型工作负载提供更好的性能。例如,大多数 MongoDB 用户存储大量数据,因此他们将受益于内置压缩。存储引擎还具有一些很棒的功能,这些功能将在未来集成并公开给 MongoDB——我已经知道将会发生的一个是基于 LSM 的索引。(基于 LSM 的索引非常适合写密集型、磁盘受限的工作负载。)
您是否认为 NoSQL 数据库比关系数据库更适合云计算?
是的。
实际上令人惊讶的是,在 2015 年,在 Amazon Web Services (AWS) 推出近十年后,主流 RDBMS 解决方案中没有一个对分片有任何类型的有用支持。
为了先发制人地回应来自我在 RDBMS 世界中的朋友的一些抗议,我应该澄清一下:我知道一些好的解决方案不是主流的,还有一些解决方案不好甚至没用。基本上,这对于 RDBMS 来说仍然是一个未解决的问题。
另一个区别是易用性和配置。从历史上看,在企业数据中心,您至少需要三个月才能获得新服务器——有时甚至长达 6 或 12 个月!在这种情况下,安装和配置数据库软件可能需要一天甚至一周的时间并不是什么大问题。但这在 2015 年是不可接受的。您可以在五分钟内启动一个云实例,即使手动操作,在其上安装 MongoDB 也应该不会花费太多时间。(而且,就像我之前提到的,我们的 MMS 服务可以为您自动化安装,使其更快。如果您提供密钥,它甚至可以为您启动 AWS 实例。)
NoSQL 的实现主要基于 CAP 定理吗?您能否解释一下 CAP 定理如何帮助选择合适的 NoSQL 技术?
哦,天哪。CAP 定理 是一个有争议的话题。充其量令人困惑,最坏的情况是没有用。
尽管如此,CAP 定理讨论的问题是真实的。对于分布式数据库,管理可用性、可扩展性和一致性之间的权衡是具有挑战性的。对此有很多有趣的解决方案,解决方案的范围远远超出 “CA” 或 “AP”。这是我个人花费大量时间学习和讨论的主题,并且可以成为单独采访的主题!
MongoDB 对此的解决方案非常简单且易于理解。我们提供基于 “最小惊喜/最高生产力” 哲学的默认配置:客户端写入和读取到单个主服务器(每个分片),复制到辅助服务器仅是为了提供高可用性。这提供了Consistent reads and non-conflicting writes,我们认为这是任何开发人员都觉得自然且易于理解的。通过配置选项,开发人员可以选择将读取发送到辅助节点,但随后他们必须理解和管理最终一致性的后果。
顺便说一句,与其试图理解 CAP 定理,我发现尝试理解不同一致性级别的含义是有用的。Doug Terry 写了一篇很棒的论文《Replicated Data Consistency Explained Through Baseball》(通过棒球解释复制数据一致性),我发现非常有用!
MongoDB 对大数据的看法是什么?它为构建大数据生态系统的过程增加了什么价值?
大数据通常以 “3V” 规则为特征:Volume(容量)、Variety(多样性)和 Velocity(速度)。虽然这有点像 “顾问式语言”,但我实际上觉得这是一个有用的描述。
第一个 V 很明显:您有大量数据。在 MongoDB 领域,不太可能有人拥有 PB 级的数据。我们确实有拥有这么多数据的客户,但通常对于他们来说,将其存储在多个独立的 MongoDB 集群中是有意义的——因为它源于不同的应用程序,并且没有必要将数据放在一起。但是,即使对于单个应用程序来说,拥有大量的 TB 级数据也很常见。在我销售 MySQL 的日子里,大约七年前,甚至没有人达到 1TB 都是不寻常的!
我认为,多样性是 MongoDB 和我们基于 JSON 的具有动态模式的数据模型的优势。人们经常关注大数据的 “大” 部分,但实际上,现代数据的多样性和非结构化性质通常更具挑战性。在我看来,MongoDB 在处理多样性方面做得非常好。
最后,速度指的是对数据新鲜度和数据进入数据库的速度的期望变化。从历史上看,您可以在晚上甚至周末将数据加载到数据仓库中,然后在月底生成报告。这当然不再可以接受 - 数据必须在到达时加载到您的大数据数据库中。在许多情况下,您还需要进行实时分析:这意味着从数据插入数据库开始,在几秒甚至几毫秒内进行查询。
在人们可能为大数据解决方案选择的技术中,MongoDB 扮演什么角色?
我们在所有方面都很好地满足了上述 3V 要求。
看到两种最流行的技术经常一起使用也就不足为奇了:Hadoop 和 MongoDB。它们彼此互补,可以很好地为大数据应用程序提供动力。从历史上看,Hadoop 专注于对大量历史数据进行真正的重型处理。这种 Hadoop 分析的范围可以从几秒到几小时不等。另一方面,MongoDB 是您的数据库,带有索引,并在几分钟到几毫秒的范围内执行相对快速的查询。
从 MongoDB 到 Hadoop 再返回 MongoDB 的典型数据流如下所示
- MongoDB 为在线实时运营应用程序提供支持,服务于业务流程和最终用户。
- Hadoop 从 MongoDB 消费数据,并将其与其他运营系统的数据混合,以推动复杂的分析和机器学习。
- 结果被加载回 MongoDB,以服务于更智能的运营流程,例如提供更相关的报价、更快地识别欺诈或改善客户体验。
- 也可以有一个实时的个性化组件,当用户使用网站或应用程序时,会话或个人资料信息直接在 MongoDB 中更新。Hadoop 历史上没有用于此目的,但现在像 Storm、Spark 和 Flink 这样的流数据框架正在执行完全相同的这类任务。因此,Hadoop 现在可以持续更新 MongoDB 中的数据,而不是在分析作业结束时将数据馈送到 MongoDB。
我们有很多客户使用完全这样的大数据架构:eBay、Pearson、Orbitz、SFR、Foursquare 和 Square Enix 只是其中几个。(您可以在我们的网站上阅读有关它们的信息。)
我们的查询语言的聚合框架部分在分析中真正闪耀。我相信这是 MongoDB 成为大数据热门选择的原因之一。
何时以及为何选择 MongoDB 作为构建微服务的平台?
在这里,我看到了两种不同的架构方法
对微服务的严格解释是,每个服务都是独立的,并且至少在理论上每个服务都可以使用不同的编程语言和数据库。在这样的架构中,您最终会得到多语言持久性,这意味着 “合适的工具做合适的工作” 的理念。因此,如果我们相信各种市场份额研究——仅仅为了这个例子——假设您一半的服务选择基于 MongoDB 构建,而 10-20% 的服务使用键值存储或宽列存储,有些服务使用图形引擎或文本搜索引擎。
另一方面,您可能更愿意采用数据库即服务模型。在这种方法中,数据库——假设它是 MongoDB——集中到一个专门的 DBA 团队,该团队也负责执行备份、高可用性和调优。每个构建微服务的开发团队都将只使用此 DBaaS,而无需担心数据库,从而使他们的生活更加轻松。当然,某些服务可能仍然需要不同的东西,例如文本搜索引擎或图形数据库。
最近的范式转变意味着许多关系数据库已经整合了存储非结构化数据的能力。一方面,这表明世界终于接受了以不同角度看待数据的重要性,但另一方面,它也弥合了关系型和 noSQL 世界之间的差异。您如何看待这一点?
嗯,这与 NoSQL 数据库添加对 SQL 的支持是同一回事,只是方向相反。它表明对非结构化数据的需求,并且这种需求还在增长。
但老实说,我仍然不认为这些新增功能真正与非关系型产品竞争。例如,PostgreSQL 对 JSON 的支持看起来非常好,但我不记得我是否听说过有人在 MongoDB 或 PostgreSQL 之间做出选择。在我看来,这些功能使 RDBMS 的现有用户的生活更轻松,但从根本上来说,它们仍然是 RDBMS。特别是,缺乏对分片的支持以扩展数据库以及对高可用性或跨区域数据分布的内置复制仍然是两个世界之间的一大区别。
演讲者访谈
本文是 OSCON 2015 演讲者访谈系列的一部分。OSCON OSCON 是关于开源的一切——全栈,包括您每天工作中使用的所有语言、工具、框架和最佳实践。OSCON 2015 将于 7 月 20 日至 24 日在俄勒冈州波特兰举行。.
1 条评论