如果您设计一个易于横向扩展的分布式应用程序,或者您只想使用亚马逊,谷歌或微软的任何新"云计算"产品,那么您通常最终会使用一些典型的概念或组件:
现在,在设计和绘制使用这种模式的架构时,我可以使用任何常用的符号吗?甚至可以下载一些很酷的Visio模板?:)
它不一定是像UML这样的正式系统,但我认为如果有每个人都知道和理解的符号会很好,比如我们通常使用数据库或文档的形状.我认为不要将它与普通文件系统(本地或网络服务器/ SAN)或关系数据库等传统概念混淆是很重要的.
简单来说,我希望能够通过查看系统架构概述图得出有关应用程序可伸缩性或数据一致性问题的一些结论.
更新:非常感谢您的回答.我喜欢在传统符号上加上一个小"云符号"的想法.但是我打开这个帖子以防万一有人会找到特定的符号(可能在一本书中) - 或上传一些拉皮条Visio模板;)
我们想构建一个媒体流服务器,并想知道选择硬件和软件时的策略.
我们的一些要求:
这里的情况与你们之前可能遇到的情况略有不同.专业系统管理员和开发人员的成本比在存储解决方案领域与硬件或软件供应商签订合同要便宜得多.我们扩展的方式是购买廉价的商品硬件,并且(可能)使用各种开源软件自行构建基础设施.
我们正在研究各种用于存储的分布式文件系统,例如MogileFS,GlusterFS,HDFS,看起来HDFS可能是领跑者.
如果你之前已经建立了类似的东西,请分享你的经验.
谢谢!
我基本上是一个.NET GUI程序员,并且已经使用了很多WPF,Winforms,并且还使用过WCF.我加入了一家银行的新工作,我们正在编写一个新软件来取代现有的交易应用程序.这涉及基于WCF服务的大量工作,我们需要使用/实现许多与SOA相关的概念,如消息代理,pub-sub模式,消息总线等.因此,基本上意味着很多服务器端和分布式编程以我的方式先 !我们现在使用简单的WCF服务来完成我们的服务层工作,但目的是使其更具可扩展性,健壮性,安全性和可靠性.
我有一本基本的WCF书,但想知道是否有更专业的SOA,基于分布式架构的书(基于.NET,WCF或可能不是),可以快速帮助我完成服务器端编程的曲线.可能会谈到CEP,EDA等.
非常感谢,Mani
我需要实现一个具有大量并发用户的Web应用程序.我决定使用node.js,因为它扩展得非常好,它具有良好的性能,开源社区等等.然后,为了避免瓶颈,因为我可以在同一个事件循环中拥有大量用户,我决定使用一个群集进程利用多核CPU.此外,我有3台机器(主+ 2),因为我需要用Cassandra操纵大数据.太棒了,这意味着我有3*n个node.js进程,其中n是cpu的核心数(机器是相同的).
好的,然后我开始研究,我以下面的架构结束:
如果我是正确的,单个http请求将被转发到单个node.js进程.
创建会话很正常,对吗?会话只是一个映射,这个映射是一个Object,这个Object存在于node.js进程中.Haproxy将配置循环调度程序,因此可以将同一用户转发到不同的node.js进程.如何跨所有node.js进程共享同一个会话对象?如何共享全局对象(这包括在同一台机器(node.js集群)和整个网络中)?我应该如何使用node.js设计分布式Web应用程序?是否有任何模块可以简化同步任务?
我想启用"分布式构建",以便我的Mac可以在办公室中建立其他闲置的Mac,以加快构建时间.显然,旧版XCode中的"首选项"中曾经存在"分布式构建"选项,如本博客顶部附近的屏幕截图所示:
http://blog.mundue.net/2010/12/distributed-builds/
但在最新的XCode中没有这样的东西.分布式构建甚至是XCode 4.5中的一个选项吗?
看起来RADOS最适合用作Ceph块存储和文件系统的存储后端.但是,如果我想使用对象存储本身:
如果你能分享你的经验会很棒.
我为即将推出的分布式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) 假设我有一个Django应用程序,我已经将环境变量存储卸载到etcd.当我部署新服务器时,应用程序可以从etcd读取,将vars写入(例如)可以在应用程序启动时有条件地加载的Python文件.这是可以接受的.
但是,当配置发生变化时,我无从知晓.Afaik,etcd不会广播变化.我是否需要设置一个守护程序,轮询然后在值更改时重新加载我的应用程序?每当我需要使用其中一个参数时,我应该查询etcd吗?人们如何处理这个问题?
我正在尝试构建一个分布式系统来运行一些性能密集型计算.一个计算可以在多个工作节点处并行完成.问题是,随着数据源实时变化,我们希望每个工作节点(在单次计算期间)对相同的"版本"数据进行操作,即数据库的时间点快照.这是为了避免不一致的结果.
另一个问题是,每次计算的整个输入数据集可能非常大,因此目前我们在每个工作节点保留一个本地缓存,通过向数据源询问当前本地缓存版本的"差异"来定期刷新内容.将差异应用于本地缓存.
有哪些设计策略可以满足每个工作节点看到相同"数据"数据的要求(同时仍然有相当新鲜的数据)?我已经考虑过下面的解决方案,但想看看这是否是一个已经解决的常见模式:
一些估计的系统参数:
工人人数:10
平均工作时间:显然我们希望这个尽可能快,但是假设应该不到2分钟
输入作业数据(所有工人的总体数据):~100GB
数据库大小:~1TB
database architecture distributed distributed-computing distributed-system
在牛皮纸中,第5.4.2节
如果领导者在提交条目之前崩溃,则未来的领导者将尝试完成复制条目。但是,领导者一旦将其存储在大多数服务器上,就无法立即得出结论,即上一个条目的条目已提交。可能存在这样的情况,旧的日志条目存储在大多数服务器上,但仍可能被将来的领导者覆盖。
作者提到,要避免上述情况
为了消除类似图8中的问题,Raft决不通过对副本数进行计数来提交前项的日志条目。通过计算副本数,仅提交领导者当前任期的日志条目;一旦以这种方式提交了当前术语的条目,则由于“日志匹配”属性而间接提交了所有先前的条目。
但是会不会仍然出现同样的问题?
鉴于作者提供的以下情况
当S5当选领导者时,它只会查看其当前已提交的日志,(term3, index1)这将覆盖term2所有关注者中的条目。
让领导者查看自己的已提交日志如何解决该问题?