A部分:
Erlang有很多关于运行并发代理的成功案例,例如数百万个同时进行的Facebook聊天.这是数以百万计的代理商,但当然不是网络中的数百万个CPU.当在LAN/WAN上进行"水平"扩展时,我无法找到Erlang扩展程度的指标.
让我们假设我有许多(数万个)物理节点(在Linux上运行Erlang)需要通过LAN/WAN进行通信和同步少量不常数据.在什么时候我会遇到通信瓶颈,而不是代理之间,而是物理节点之间?(或者这只是工作,假设一个稳定的网络?)
B部分:
我理解(作为一个Erlang新手,意思是我完全错了)Erlang节点尝试连接并相互了解,从而产生N ^ 2连接点对点网络.假设A部分不仅仅适用于N = 10K,可以轻松配置Erlang(使用开箱即用的配置或平凡的样板,而不是自己编写完整的分组/路由算法),将节点集群化为可管理的通过群集/组层次结构分组和路由系统范围的消息?
据我所知,MPI让我能够更好地控制集群中不同节点的通信方式.
在MapReduce/Hadoop中,每个节点进行一些计算,与其他节点交换数据,然后整理其结果分区.看起来很简单,但由于您可以迭代这个过程,甚至像K-means或PageRank这样的算法也能很好地适应模型.在具有调度位置的分布式文件系统上,性能显然很好.相比之下,MPI让我可以明确控制节点如何相互发送消息.
任何人都可以描述一个集群编程场景,其中更通用的MPI模型比简单的MapReduce模型更明显吗?
我正在尝试使用JMeter建立分布式负载测试环境.我需要使用像Linux Live CD这样的便携式设置远程客户端,但每当我尝试在Linux中启动jmeter-server时,我都会收到以下错误...
Created remote object: UnicastServerRef [liveRef: [endpoint:[127.0.0.1:49018](local),objID:[3b0d3d42:12985b7a49b:-7fff, -8459389540436649718]]]
Server failed to start: java.rmi.RemoteException: Cannot start. testbox01.qa.nwr.lan is a loopback address.
Run Code Online (Sandbox Code Playgroud)
经过大量的谷歌搜索后,我能找到的唯一补救措施是编辑/ etc/hosts文件,使主机名映射到127.0.0.1环回地址以外的其他内容.我已经尝试过使用Ubuntu,Fedora和CentOS,显然他们都默认将主机名设置为127.0.0.l.
我看到它的方式,我有四个选择......
1)为我设置的每个远程测试盒自定义/ etc/hosts文件,其中包含超过20-50个动态DHCP分配的IP地址.
2)找出一种强制Linux本身默认将主机名分配给其DHCP IP地址的方法.这当然是更优雅的解决方案,但我不知道如何做到这一点.谁知道?
3)查找并使用可用作Live CD的Linux发行版,默认情况下不将其主机名映射到127.0.0.1.谁知道一个?
4)深入了解JMeter的代码并开始使用电线,但如果涉及到这一点,我会尽快使用另一个开源工具,具有更细的功能集,但其分布式架构不会遇到此问题.
如果有人有任何建议,我将不胜感激.谢谢!
我想我已经非常擅长编程的基础知识(适用于各种语言).我可以写一个*好的**代码行.我可以写一个好方法.我可以写一堂好课.我可以写一组很好的课程.我可以写出好的小型或中型应用程序.
但是,我不知道如何构建一个好的大型应用程序.特别是在涉及多种技术并且更多可能与时间有关的情况下.假设一个带有大型Web前端的项目,一个连接到其他集成后端的大型服务器后端,最后是一个庞大而复杂的数据库.哦,我参与了其中的一些应用程序,我可以构建一个我确定的.然而,我不太确定它是否有资格作为"好".
因此,我的问题是参考书籍或其他良好的阅读来源,在那里我可以学习如何为一般大型项目分发和组织代码和数据.例如,我是想要非常严格地对事物进行分层,还是要将其封装为独立单元.我是否想要尝试将大部分逻辑保留在同一个池中,或者它应该只是分布,因为在添加我添加的任何功能时它似乎最合乎逻辑.
我已经看到很多关于这些问题的一般原则(例如没有意大利面条代码,肉丸代码......),并阅读了一些讨论此事的优秀文章,但我从来没有遇到过能引导我具体实践知识的来源.我意识到问题的难点,所以我很高兴听到其他人发现的帮助他们寻求这些知识的读物.
一如既往,感谢您的回复.
****鉴于"好"代码定义的辩论性质,在这种情况下,术语"好"将不会被定义(它意味着你认为它应该是什么意思).
我最近发现了Erlang,现在我正在通过几个教程.到现在为止,我很期待将某些东西作为一个爱好项目来实现.我对另一个聊天服务器并不感兴趣.我想编写更有趣的东西(是的,我知道这是一个相当模糊的术语),这也是可以管理的,所以我可以在业余时间完成它.
有什么建议?
编辑:项目应该优先突出Erlang的优势(并发,分布式).
我有一个问题,这让我很难找到理想的解决方案,为了更好地解释它,我将在这里公开我的方案.
我有一台服务器将收到几个客户的订单.每个客户端将提交一组应在某些指定时间间隔执行的重复任务,例如:客户A提交的任务AA应该在2009-12-31和2010-12-31之间每分钟执行一次 ; 因此,如果我的数学是正确的,一年中大约525 600次操作,给定更多的客户端和任务 ,让服务器处理所有这些任务是不可行的,所以我想出了工人机器的想法.服务器将在PHP上开发.
工作机器只是常规廉价 的基于Windows的计算机,我将在我的家中或工作场所托管,每个工作人员将拥有专用的Internet连接(带有动态IP)和UPS以避免断电.每个工作人员还将通过Web服务调用每隔30秒左右查询服务器,获取下一个待处理作业并进行处理.作业完成后,工作人员会将输出提交给服务器,并无限期地请求新作业.如果需要扩展系统,我应该设置一个新的工作者,整个事情应该无缝运行.工作者客户端将使用PHP或Python开发.
在任何给定时间,我的客户端都应该能够登录到服务器并检查他们订购的任务的状态.
现在这里是棘手的部分:
我对一般数据库设计和使用哪些技术有一些疑问.
最初我想过使用几个SQLite数据库并将它们全部加入到服务器上,但我无法弄清楚如何按客户端分组来生成作业报告.
我从来没有真正使用过以下任何技术:memcached,CouchDB,Hadoop等等,但我想知道这些是否适用于我的问题,如果是的话,你推荐给新手使用的是像我这样的"分布式计算"(或者这是平行的吗?).请记住,工人拥有动态IP.
就像我之前说过的那样,我也遇到了一般的数据库设计问题,部分是因为我还没有选择任何特定的R(D)DBMS但是我认为它与我选择的DBMS无关的一个问题是相关的到排队系统 ...我应该预先计算特定作业的所有绝对时间戳并具有大量时间戳,执行并按升序标记它们,或者我应该有一个更聪明的系统,如" 当时间戳模数60 = = 0 - >执行 ".这个"聪明"系统的问题在于,某些工作不会按顺序执行,因为有些工作人员可能在等待其他人过载时无所事事.你有什么建议?
PS:我不确定这个问题的标题和标签是否恰当地反映了我的问题和我想要做的事情; 如果没有请相应编辑.
感谢您的输入!
@timdev:
我正在接受承包,今天我已经接受了承包商职位的第一轮面试.我已经通过了它,但有人告诉我 - 主要是一个UI开发人员 - 我只介绍了他们后端需要的基础知识,我应该在第二轮之前阅读分布式系统.
到目前为止,在我的职业生涯中,我一直在从事后期操作,从不需要实时.由于我还剩下几天,我需要涵盖哪些主题?首先能够回答他的问题并且通常被视为分布式系统中的适当问题?
问题是如何在UI上实时显示数据?后端需要做什么?我已经提到了实时数据馈送的生产者/消费者模式.他很喜欢,但他说他在第二次面试时需要更多.
任何帮助将非常感激,
distributed real-time distributed-computing distributed-system
最好的方法是获取函数的表示(如果它可以以某种方式恢复).出于效率原因,优选二进制序列化.
我认为有一种方法可以在Clean中实现,因为实现iTask是不可能的,因为当服务器再次运行时,依赖于任务(以及其他功能)可以保存并继续.
这对于分布式haskell计算必不可少.
我不打算在运行时解析haskell代码,如下所述:Haskell中的函数序列化.我还需要序列化而不仅仅是反序列化.
使用以下文件读取代码:
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
using (TextReader tr = new StreamReader(fileStream))
{
string fileContents = tr.ReadToEnd();
}
}
Run Code Online (Sandbox Code Playgroud)
并且以下文件编写代码:
using (TextWriter tw = new StreamWriter(fileName))
{
tw.Write(fileContents);
tw.Close();
}
Run Code Online (Sandbox Code Playgroud)
可以看到以下异常详细信息:
该进程无法访问文件'c:\ temp\myfile.txt',因为它正由另一个进程使用.
避免这种情况的最佳方法是什么?读者是否需要在收到例外后重试,还是有更好的方法?
请注意,阅读器进程使用FileSystemWatcher来了解文件何时更改.
另请注意,在这种情况下,我不是在寻找在两个进程之间共享字符串的替代方法.
我正在使用Microsoft azure服务总线队列来处理计算,我的程序可以正常运行几个小时,但后来我开始为从那时起处理的每条消息都获得此异常.我不知道从哪里开始,因为前几个小时一切正常.我的代码似乎也很准确.我将发布处理azure服务总线消息的方法.
public static async Task processCalculations(BrokeredMessage message)
{
try
{
if (message != null)
{
if (connection == null || !connection.IsConnected)
{
connection = await ConnectionMultiplexer.ConnectAsync("connection,SyncTimeout=10000,ConnectTimeout=10000");
//connection = ConnectionMultiplexer.Connect("connection,SyncTimeout=10000,ConnectTimeout=10000");
}
cache = connection.GetDatabase();
string sandpKey = message.Properties["sandp"].ToString();
string dateKey = message.Properties["date"].ToString();
string symbolclassKey = message.Properties["symbolclass"].ToString();
string stockdataKey = message.Properties["stockdata"].ToString();
string stockcomparedataKey = message.Properties["stockcomparedata"].ToString();
var sandpTask = cache.GetAsync<List<StockData>>(sandpKey);
var dateTask = cache.GetAsync<DateTime>(dateKey);
var symbolinfoTask = cache.GetAsync<SymbolInfo>(symbolclassKey);
var stockdataTask = cache.GetAsync<List<StockData>>(stockdataKey);
var stockcomparedataTask = cache.GetAsync<List<StockMarketCompare>>(stockcomparedataKey);
await Task.WhenAll(sandpTask, dateTask, symbolinfoTask,
stockdataTask, stockcomparedataTask); …Run Code Online (Sandbox Code Playgroud) distributed ×10
c# ×2
erlang ×2
architecture ×1
azure ×1
concurrency ×1
couchdb ×1
file-io ×1
haskell ×1
jmeter ×1
linux ×1
loopback ×1
mapreduce ×1
mpi ×1
php ×1
real-time ×1
scalability ×1
sqlite ×1