草庐IT

architectural-patterns

全部标签

设计模式 -- 策略模式(Strategy Pattern)

策略模式:一种行为型模式,这些设计模式特别关注对象之间的通信。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。介绍意图:定义一系列的算法、策略或行为,把它们封装成一个一个的策略类,主要解决问题:在有多种相似算法、策略或行为的情况下,使用if...else所带来的复杂和难以维护。关键代码:实现同一个接口优点:1、算法可以自由切换。2、避免使用多重条件判断。3、扩展性良好。缺点:1、策略类会增多。2、所有策略类都需要对外暴露(这有点违背设计模式六大原则的迪米特法则)。举个例子:绘制三角形、圆形、矩形图案(And

【COMP329 LEC 2 Agent and Robot Architectures】

AgentandRobotArchitecturesPart3 ReactiveArchitecturesandtheSubsumptionArchitectureIntheselectures,welookatalternativearchitecturesthatbettersupportsomeclassesofagentsandrobots•Attheend,wethenexaminehowhybridarchitecturesexploitsthebestaspectsofdeliberativeandreactiveones1. AgentControlLoopasLayers连续

redis - Redis "Pattern: Reliable queue"的代码实现

出色的redis文档列出了一个Reliablequeuepattern作为RPOPLPUSH函数的一个很好的候选者/示例。我将“可靠队列”理解为具有像AmazonSQSFIFOexactlyoncepattern这样的交付模式的东西.具体来说,您有一些N个进程向一个队列中提供数据,而一些M个工作进程从该队列中工作。这实际上看起来像什么实现?我会冒险做这样的事情:使供给进程填充工作队列。#feeder1importredisimportdatetimeimporttimer=redis.Redis(host='localhost',port=6379,db=0)whileTrue:now

design-patterns - Redis中持久队列的 worker 管理

使用LPUSH和BRPOPLPUSH(http://redis.io/commands/rpoplpush)在Redis中实现持久队列是一种众所周知的模式。然而,为了扩大规模,该设计需要满足主任务队列中BRPOPLPUSH的多个工作人员/消费者。所以规范似乎是对于每个工作人员都有一个单独的processing_queue记录特定工作人员正在处理的任务,这样工作人员可以跟踪剩下要做的事情以防万一它在处理过程中退出。关于这个processing_queue我有两个问题:worker的processing_queue中任何时候都最多一个项/任务的推理是否正确?我假设工作人员首先检查其自己的p

design-patterns - 用于多个生产者和多个消费者的 Redis pub sub

假设有N个生产者和订阅这N个生产者的M个用户。这里N生产者生产N种不同类型的消息,例如producer1producesmessageType1,producer2producesmessageType2,producer3producesmessageType3,...producerNproducesmessageTypeN.M个用户可以订阅这些消息。一个用户可以订阅多种类型的消息。例如user1consumes(messageType1,messageType2,messageType10)user2consumes(messageType14,messageType5)..us

node.js - Redis 发布订阅 : Design pattern

我们正在使用socketi/o处理大量实时数据。用户使用套接字发送/接收数据。由于我们正在使用负载均衡器,因此我们不能使用套接字i/o的命名空间模型,而是在套接字中使用redis的pub/sub。到目前为止,我们为每个用户每个channel的订阅创建了一个单独的redis连接。但最近我们遇到了redis上达到最大连接数的问题(Error:Readycheckfailed:ERRmaxnumberofclientsreached),我们发现这是因为通过pub有太多的redis连接子。为了解决这个问题,我想到,与其为每个用户使用多个订阅Redis连接,不如有一个发布Redis连接和一个订阅

architecture - 在 MongoDB 中存储单个 "first-class"列表的惯用方法?

我有一个特殊的列表(一种队列,在数据结构中,而不是在工作队列中),我想将其存储在MongoDB中。我需要在我的应用程序中经常访问和操作这个单一列表-我没有多个相同类型的列表。将它存储在单个文档中是最简单的,但我遇到的问题是找出从我的应用程序代码中引用该特定文档的最佳方法。我不想查询多个文档来找到正确的文档,因为只有一个文档会包含此列表。我也不希望将列表拆分为一个集合中的多个文档,因为它只是一个简短的简单列表(它被限制为400个元素,每个元素只是一小段文本,所以有没有超过4MB文档限制的风险)。我想过几种方法可以做到这一点,但似乎没有一种是理想的。如果一种方法是正确的,或者我是否遗漏了什

architecture - 如何向用户提出带有数据的 Web 应用程序演示?

我正在开发一个Web应用程序(与表单等的接口(interface)-服务器-数据库)。我使用AngularJS、NodeJS和MongoDB。该应用程序在网上,但我仍然不为用户提供演示。我会为他们提供登录名和密码(“demo”、“demo”)或只是一个“Demo”按钮来访问演示版本。在公共(public)界面上,有一个简短的介绍,一个联系表等。有很多内部接口(interface)。一旦注册用户通过身份验证,他就会根据其角色被重定向到一个界面。所以我会建议一个按钮或一个角色列表来选择(界面取决于用户的角色)。用户选择他想看到的角色并打开演示。那么,如何从技术上组织这个演示版本呢?知道在演

Mongodb - 多文本索引 : Index key pattern too large error code 67

我有以下Mongodb数据库结构:{"_id":"519817e508a16b447c00020e","keyword":"Justanexamplequery","rankings":{results:{"1":{"domain":"example1.com","href":"http://www.example1.com/"},"2":{"domain":"example2.com","href":"http://www.example2.com/"},"3":{"domain":"example3.com","href":"http://www.example3.com/"},"

云计算系统的底层架构及其组件的功能、结构及其工作原理 Understanding the Architecture of Cloud Infrastructure

作者:禅与计算机程序设计艺术文章目录1.简介2.基本概念术语说明(1)云计算系统概述(2)IaaS、PaaS、SaaS分类(3)云计算模型及作用(4)云计算系统架构模式(5)云计算系统组件Ⅰ.网络模块Ⅱ.存储模块Ⅲ.计算模块Ⅳ.消息模块Ⅴ.安全模块Ⅵ.监控模块Ⅶ.日志模块3.云计算系统中的主要组成元素及其功能4.云计算系统的各个模块间交互机制以及数据流向5.云计算系统不同层级的优化策略6.云计算系统中关键