标签: distributed

系统架构图中的"云架构"概念

如果您设计一个易于横向扩展的分布式应用程序,或者您只想使用亚马逊,谷歌或微软的任何新"云计算"产品,那么您通常最终会使用一些典型的概念或组件:

  • 分布式blob存储(又称S3)
  • 异步,持久的消息队列(又名SQS)
  • 非关系/非事务数据库(如SimpleDB,Google BigTable,Azure SQL服务)
  • 分布式背景工作者池
  • 负载平衡的边缘服务进程处理用户请求(通常是虚拟化的)
  • 分布式缓存(如memcached)
  • CDN(像Akamai这样的内容交付网络)

现在,在设计和绘制使用这种模式的架构时,我可以使用任何常用的符号吗?甚至可以下载一些很酷的Visio模板?:)

它不一定是像UML这样的正式系统,但我认为如果有每个人都知道和理解的符号会很好,比如我们通常使用数据库或文档的形状.我认为不要将它与普通文件系统(本地或网络服务器/ SAN)或关系数据库等传统概念混淆是很重要的.

简单来说,我希望能够通过查看系统架构概述图得出有关应用程序可伸缩性或数据一致性问题的一些结论.

更新:非常感谢您的回答.我喜欢在传统符号上加上一个小"云符号"的想法.但是我打开这个帖子以防万一有人会找到特定的符号(可能在一本书中) - 或上传一些拉皮条Visio模板;)

architecture cloud diagram distributed visio

6
推荐指数
1
解决办法
6329
查看次数

如何构建媒体流服务器

我们想构建一个媒体流服务器,并想知道选择硬件和软件时的策略.

我们的一些要求:

  • 我们自己主持一切
  • 带宽不是问题(我们得到了很好的支持)
  • 商品硬件(没有昂贵的NAS,SAN)
  • 支持大文件
  • 不希望使用Flash Media Server

这里的情况与你们之前可能遇到的情况略有不同.专业系统管理员和开发人员的成本比在存储解决方案领域与硬件或软件供应商签订合同要便宜得多.我们扩展的方式是购买廉价的商品硬件,并且(可能)使用各种开源软件自行构建基础设施.

我们正在研究各种用于存储的分布式文件系统,例如MogileFS,GlusterFS,HDFS,看起来HDFS可能是领跑者.

如果你之前已经建立了类似的东西,请分享你的经验.

谢谢!

media streaming distributed

6
推荐指数
1
解决办法
6324
查看次数

基于WCF的SOA,分布式和服务器端编程的好书?

我基本上是一个.NET GUI程序员,并且已经使用了很多WPF,Winforms,并且还使用过WCF.我加入了一家银行的新工作,我们正在编写一个新软件来取代现有的交易应用程序.这涉及基于WCF服务的大量工作,我们需要使用/实现许多与SOA相关的概念,如消息代理,pub-sub模式,消息总线等.因此,基本上意味着很多服务器端和分布式编程以我的方式先 !我们现在使用简单的WCF服务来完成我们的服务层工作,但目的是使其更具可扩展性,健壮性,安全性和可靠性.

我有一本基本的WCF书,但想知道是否有更专业的SOA,基于分布式架构的书(基于.NET,WCF或可能不是),可以快速帮助我完成服务器端编程的曲线.可能会谈到CEP,EDA等.

非常感谢,Mani

.net wcf soa distributed

6
推荐指数
1
解决办法
1072
查看次数

如何设计分布式node.js Web服务器

我需要实现一个具有大量并发用户的Web应用程序.我决定使用node.js,因为它扩展得非常好,它具有良好的性能,开源社区等等.然后,为了避免瓶颈,因为我可以在同一个事件循环中拥有大量用户,我决定使用一个群集进程利用多核CPU.此外,我有3台机器(主+ 2),因为我需要用Cassandra操纵大数据.太棒了,这意味着我有3*n个node.js进程,其中n是cpu的核心数(机器是相同的).

好的,然后我开始研究,我以下面的架构结束:

  • Nginx侦听端口80并仅用于提供静态内容(img,css,js等).
    将动态流量转发到haproxy.我知道如何配置nginx,但我仍然要看看haproxy,所以我会说haproxy正在侦听端口4000.Nginx和haproxy安装在主机(入口点).
  • 3台机器之间的Haproxy负载平衡.它将流量转发到端口4001,即node.js进程正在侦听4001.
  • 每个node.js都有一个n个进程的集群,监听4001.

如果我是正确的,单个http请求将被转发到单个node.js进程.

创建会话很正常,对吗?会话只是一个映射,这个映射是一个Object,这个Object存在于node.js进程中.Haproxy将配置循环调度程序,因此可以将同一用户转发到不同的node.js进程.如何跨所有node.js进程共享同一个会话对象?如何共享全局对象(这包括在同一台机器(node.js集群)和整个网络中)?我应该如何使用node.js设计分布式Web应用程序?是否有任何模块可以简化同步任务?

distributed scalability multicore node.js

6
推荐指数
1
解决办法
1327
查看次数

XCode 4.5中的分布式构建?

我想启用"分布式构建",以便我的Mac可以在办公室中建立其他闲置的Mac,以加快构建时间.显然,旧版XCode中的"首选项"中曾经存在"分布式构建"选项,如本博客顶部附近的屏幕截图所示:

http://blog.mundue.net/2010/12/distributed-builds/

但在最新的XCode中没有这样的东西.分布式构建甚至是XCode 4.5中的一个选项吗?

xcode distributed xcode4.5

6
推荐指数
1
解决办法
2086
查看次数

Ceph对象存储(RADOS)中对象的最佳大小

看起来RADOS最适合用作Ceph块存储和文件系统的存储后端.但是,如果我想使用对象存储本身:

  • 是否有最佳的物体尺寸可以提供最佳性能?
  • 大量小物件有问题吗?
  • 如何在不制造麻烦的情况下获得多大的物品?

如果你能分享你的经验会很棒.

storage distributed ceph

6
推荐指数
1
解决办法
3657
查看次数

内部分布式时间服务器实现

我为即将推出的分布式NoSQL数据库系统制作了一个内部分布式时间服务器(没有主服务器).只要分布式系统中2/3的时钟正确,它就应该处理Byzantium时钟和时钟偏移问题.

然而,我想看看其他人是如何实现这种模式的(对基于IEEE 1588的主/从模式实现不感兴趣) - 最好是一些已经在使用的开源代码 - 断言我已经正确实现了它因为很难为它编写单元测试.

有谁知道这样的开源实现?我们使用C++的编程语言,所以我更喜欢C/C++引用,但只要代码具有人类可读性,它可能就不那么重要了.

以下是我的实现到目前为止的代码(为简单起见,部分伪代码):

/*!
\brief Maximum allowed clock skew in milliseconds
\details A network node that has a clock skew greater than this value will be ignore
* and an error message will be logged
\note Maximum divergence (drift) between two clocks on the network nodes will be 3x this amount if we 
* have a worst case Byzantium clock issue
*/
#define MAX_ALLOWED_CLOCK_SCEW_MS 333

/*!
\class CTimeServer
\brief Internal distributed time server
\details …
Run Code Online (Sandbox Code Playgroud)

c++ distributed clock distributed-computing

6
推荐指数
1
解决办法
531
查看次数

使用etcd来管理Django设置

假设我有一个Django应用程序,我已经将环境变量存储卸载到etcd.当我部署新服务器时,应用程序可以从etcd读取,将vars写入(例如)可以在应用程序启动时有条件地加载的Python文件.这是可以接受的.

但是,当配置发生变化时,我无从知晓.Afaik,etcd不会广播变化.我是否需要设置一个守护程序,轮询然后在值更改时重新加载我的应用程序?每当我需要使用其中一个参数时,我应该查询etcd吗?人们如何处理这个问题?

python django configuration distributed etcd

6
推荐指数
1
解决办法
844
查看次数

保持本地缓存的策略在分布式系统中看到相同的"版本"数据

我正在尝试构建一个分布式系统来运行一些性能密集型计算.一个计算可以在多个工作节点处并行完成.问题是,随着数据源实时变化,我们希望每个工作节点(在单次计算期间)对相同的"版本"数据进行操作,即数据库的时间点快照.这是为了避免不一致的结果.

另一个问题是,每次计算的整个输入数据集可能非常大,因此目前我们在每个工作节点保留一个本地缓存,通过向数据源询问当前本地缓存版本的"差异"来定期刷新内容.将差异应用于本地缓存.

有哪些设计策略可以满足每个工作节点看到相同"数据"数据的要求(同时仍然有相当新鲜的数据)?我已经考虑过下面的解决方案,但想看看这是否是一个已经解决的常见模式:

  • 构建一个"版本控制"服务,定期查询数据源的差异,并将每个差异存储为数据"版本".工作节点的缓存与版本控制服务同步,并且还将其缓存数据保留在多个版本中.对于一个计算,我们确保工作节点使用相同版本的输入数据来实现一致性.此版本控制服务还应保留工作节点的整个数据集的最新副本,以便最初加载其缓存,并在工作节点关闭并重新启动时恢复本地缓存内容.

一些估计的系统参数:

  • 工人人数:10

  • 平均工作时间:显然我们希望这个尽可能快,但是假设应该不到2分钟

  • 输入作业数据(所有工人的总体数据):~100GB

  • 数据库大小:~1TB

database architecture distributed distributed-computing distributed-system

6
推荐指数
1
解决办法
174
查看次数

筏如何处理上一个提交的条目?

牛皮纸中,第5.4.2节

如果领导者在提交条目之前崩溃,则未来的领导者将尝试完成复制条目。但是,领导者一旦将其存储在大多数服务器上,就无法立即得出结论,即上一个条目的条目已提交。可能存在这样的情况,旧的日志条目存储在大多数服务器上,但仍可能被将来的领导者覆盖。

作者提到,要避免上述情况

为了消除类似图8中的问题,Raft决不通过对副本数进行计数来提交前项的日志条目。通过计算副本数,仅提交领导者当前任期的日志条目;一旦以这种方式提交了当前术语的条目,则由于“日志匹配”属性而间接提交了所有先前的条目。

但是会不会仍然出现同样的问题?

鉴于作者提供的以下情况

边缘情况

S5当选领导者时,它只会查看其当前已提交的日志,(term3, index1)这将覆盖term2所有关注者中的条目。

让领导者查看自己的已提交日志如何解决该问题?

algorithm leader distributed consensus raft

6
推荐指数
1
解决办法
783
查看次数