产生过在一个或多个数据存储中的数据预填充的观点时,数据被格式化以不利于所需的查询操作的一种方式。这种模式可以帮助支持高效的查询和提取数据,并提高应用程序的性能。背景和问题何时存储数据时,优先级为开发者和数据管理员经常集中在如何将数据存储,而不是它是如何读出。
通过协调合作,在分布式应用程序的任务实例集合执行的操作,选举一个实例作为承担管理的其他实例责任的领导者。这个模式可以有助于确保任务实例不互相冲突,导致争用共享资源,或与其他的任务实例正在执行的工作无意中干扰。背景和问题一个典型的云应用包括行动协调的方式很多任务。
创建索引过的被查询条件经常被引用的数据存储等领域。这种模式可以通过允许应用程序更快速地定位数据来从数据存储中检索提高查询性能。背景和问题许多数据存储通过使用主键组织为实体的集合的数据。应用程序可以使用此键来查找和检索数据。图 1 显示了一个数据存储区保持顾客的信息的例子。主键是客户 ID。
实施外部工具可以定期通过暴露终端访问应用程序中的功能检查。这个模式可以帮助验证的应用和服务被正确执行。背景和问题它是很好的做法,并且通常是一个业务需求,并监控web应用程序,和中间层和共享服务,以确保它们是可用的,并执行正确的。然而,它更难以监测在云中运行比它要监控本地服务的服务。
通过使用充当客户端和应用程序或服务之间的代理,验证和进行消毒的请求,并将它们之间的请求和数据的专用主机实例保护的应用程序和服务。这可以提供一个额外的安全层,并限制了系统的攻击面。 背景和问题应用程序通过接受和处理请求揭露它们的功能提供给客户。在云托管方案,应用程序暴露终端客户机连接,一般包括代码来处理来自客户端的请求。
验证委托给外部身份提供者。这种模式可以简化开发,最大限度地减少对用户管理的要求,并提高了应用程序的用户体验。 背景和问题用户通常需要使用由提供,并通过与它们有商业关系的不同组织主持的多个应用程序一起工作。但是,这些用户可能被迫使用特定的(和不同的)的凭证,每一个。这可以: 原因脱节的用户体验。用户经常忘记登录凭据时,他们有很多不同的的。
移动配置信息从应用部署包到一个集中位置。这个模式可以提供机会,以便管理和配置数据的控制,以及用于跨应用程序和应用程序实例共享的配置数据。 背景和问题大多数应用程序运行时环境包括位于应用程序文件夹内的在部署应用程序文件保持配置信息。在某些情况下也能够编辑这些文件来改变该应用程序的行为,它已经被部署之后。
使用仅追加存储到记录完整一系列描述在一个域上取数据,而不是存储仅仅是当前的状态,从而使存储区可以被用来实现该域对象的动作事件。该图案可以通过避免需要同步的数据模型和商业领域中简化复杂的结构域的任务;提高性能,可扩展性和响应能力;提供交易数据的一致性;并保持完整的审计跟踪和记录,可能使补偿措施。
隔离,通过使用不同的接口,从操作读取数据更新数据的操作。这种模式可以最大限度地提高性能,可扩展性和安全性;支持系统在通过较高的灵活性,时间的演变;防止更新命令,从造成合并在域级别上的冲突。背景和问题在传统的数据管理系统中,这两个命令(更新数据)和查询(请求数据),针对在一个单一的数据存储库中的相同的一组实体的执行。
合并多个任务或操作成一个单一的计算单元。这种模式可以提高计算资源的利用率,并降低与云托管的应用程序进行计算处理相关的成本和管理开销。背景和问题云应用程序频繁执行各种操作。在某些解决方案也可能是有意义的最初遵循的关注点分离的设计原则,并把这些操作成托管和独立部署(例如,如在微软的 Azure 云服务,独立 Azure 网站不同的角色独立计算单元或单独的虚拟机)。
允许多个并发用户处理在同一个通讯通道接收的消息。这种模式使系统能够同时处理多个邮件,以优化吞吐量,提高可扩展性和可用性,以及平衡工作负载。背景和问题在云中运行的应用程序,可以预计,以处理大量的请求。而不是过程的每个请求同步地,一个常用的方法是通过一个消息传送系统到该异步地处理它们的另一服务(消费者服务),以通过他们的应用程序。
撤消由一系列步骤,它们共同限定了最终一致性操作中,如果一个或多个步骤失败执行的工作。按照最终一致性模型,业务实现复杂的业务流程和工作流的云托管的应用程序中很常见。背景和问题在云中运行的应用程序频繁修改数据。此数据可跨在各种地理位置的所保持的数据源的一个品种传播。
处理故障连接到远程服务或资源时,可能需要耗费大量的时间。这种模式可以提高应用程序的稳定性和灵活性。背景和问题在分布式环境中,如在云,其中,应用程序执行访问远程资源和服务的操作,有可能对这些操作的失败是由于瞬时故障,如慢的网络连接,超时,或者被过度使用的资源或暂时不可用。
缓存预留模式是根据需求从数据存储缓存加载数据。这种模式可以提高性能,并有助于维持在基础数据存储在高速缓存中保持的数据和数据之间的一致性。背景和问题应用程序使用的高速缓存来优化重复访问的数据存储中保持的信息。然而,它通常是不切实际的期望缓存的数据将始终与在数据存储器中的数据完全一致。
云带来的改变是显而易见的,云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。
安装实际的例子译者注:有些软件的最新版本已有变化,译文不会完全按照原文翻译,而是列出当前最新版本的软件。首先,从下述 GitHub 的 URL 克隆这个例子:> git clone git://github.com/storm-book/examples-ch06-real-life-app.git src/main包含拓扑的源码src/test包含拓扑的测试用例webapps 目录包含 Node.js Web 可以执行拓扑应用.├── pom.
安装 Storm 集群译者注:本附录的内容已经有些陈旧了。最新的 Storm 已不再必须依赖 ZeroMQ,各种依赖的库和软件也已经有更新的版本。有以下两种方式创建 Storm 集群:使用 Storm 部署在亚马逊 EC2 上面创建一个集群,就像你在第6章看到的。手工安装(详见本附录) 要手工安装 Storm,需要先安装以下软件Zookeeper集群(安装方法详见管理向导)Java6.0Python2.6.
安装 Storm 客户端Storm 客户端能让我们使用命令管理集群中的拓扑。按照以下步骤安装 Storm 客户端:从 Storm 站点下载最新的稳定版本(https://github.com/nathanmarz/storm/downloads)当前最新版本是storm-0.8.1。(译者注:原文是 storm-0.6.2,不过翻译的时候已经是 storm-0.8.1 了) 把下载的文件解压缩到 /usr/local/bin/storm 的 Storm 共享目录。
正如书中之前所提到的,使用 Storm 编程,可以通过调用 ack 和 fail 方法来确保一条消息的处理成功或失败。不过当元组被重发时,会发生什么呢?你又该如何砍不会重复计算? Storm0.7.0 实现了一个新特性——事务性拓扑,这一特性使消息在语义上确保你可以安全的方式重发消息,并保证它们只会被处理一次。
有时候你可能想使用不是基于 JVM 的语言开发一个 Storm 工程,你可能更喜欢使用别的语言或者想使用用某种语言编写的库。Storm 是用 Java 实现的,你看到的所有这本书中的 spout 和 bolt 都是用 java 编写的。那么有可能使用像 Python、Ruby、 或者 JavaScript 这样的语言编写 spout 和 bolt 吗?答案是当然可以!可以使用多语言协议达到这一目的。
关注时代Java