(nodeA@foo.hyd.com)8> spawn(nodeA@bar.del.com, tut, test, [hello, 5]).
Run Code Online (Sandbox Code Playgroud)
我想在 bar.del.com 上生成一个进程,该进程没有对 foo.hyd.com 的文件系统访问权限(从我生成进程的位置),运行模块“tut”的子例程“test”。
有没有办法做到这一点,而无需为 nodeA@bar.del.com 提供已编译的“tut”模块文件?
我正在寻找一种算法来在每个时期更改它的密钥,并且仍然可以被破译.
基本上我正在寻找一种方法来维护移动客户端和固定服务器之间的安全链接,使得即使您截获哈希甚至身份验证凭证本身,它们也会在每个时段都在双方都发生变化.
对任何人都响铃吗?
是否有更好的方法来确保即使您将以某种方式拦截身份验证凭据,它只对某个用户的某个请求有效?
我从来没有使用过消息传递接口(MPI),但我听说过它的名字,最近才发布了Windows HPC Server.我快速浏览一下亚马逊,看看是否有任何书籍,但它们都是在7年或更久以前的日期.MPI仍然是新应用程序的有效技术选择,还是被其他分布式编程替代品(例如DataSynapse GridServer)取代?
因为它不是一个实现,而是一个标准,学习它的可能性(假设它没有死)将导致更好的分布式编程系统设计?还有什么我应该看的东西吗?
上下文:在.NET平台上构建智能客户端应用程序,其中包含涉及大量列的复杂数据库模型.自然的应用程序风格是典型的数据驱动CRUD.在某些情况下,还有一些服务器端逻辑,以及一些复杂的验证.您可以完全控制客户端和服务器,因此对互操作性的需求至少是必需的.
这个问题有很多细节,为此道歉,但这是因为我想为答案设置适当的背景.
还有一些假设
- 在微软世界中并不罕见,大多数以前的应用程序都是用DataSet编写的,因此它是所涉及开发人员最熟悉的技术.但是,让我们说开发人员也非常精通OO思维.
- 您需要在客户端和服务器上运行验证.
- 您不以表格形式显示大多数数据.
- 这不是内联网应用程序,因此您不能过多地考虑带宽
最大的问题:数据集还是对象?
如果你选择数据集,你会有一些积极的和消极的
- 在积极方面:你从数据库中获取数据,通过网络获取数据并通过网络返回更改的数据方面获得了一些Microsoft支持较小的块 - 因为您只能指定发送更改.发送较少的数据是好的,因为可能涉及相当多的数据.
- 否定的是:在验证,业务逻辑等方面,你得到了一个程序化的代码形式,你没有得到面向对象代码的好处 - 行为和数据在一起,更自然的工作和思考方式你正在做什么,可能更接近验证逻辑.您还可以放弃将数据集放在网格中的好处,因为这不是常见的用例.
如果你去寻找对象,那就是同样的练习,但还有更多的选择:
肯定:行为和数据在一起.验证逻辑更接近.更容易查看和理解对象之间的关系.更易读的代码.更容易进行单元测试.但是,您还需要做很多选择和工作:
OR/Mapping
- 从关系模型获取数据到对象.OR映射器并不复杂,并且能够很好地处理它.但它增加了开发时间.
合同映射
- 将数据从服务器端对象映射到合同对象(通常是DTO)通常是一种很好的做法.由于这是一个非常适合CRUD风格架构的应用程序,因此DTO并没有真正为图片增加太多价值,只是映射工作.
共享代码
- 您可以使用共享代码方案,其中包含域数据和逻辑的程序集在客户端和服务器端都可用.这是紧密耦合,但当你有一个自然紧密耦合的客户端 - 服务器应用程序时,它并不一定是坏的.
无论您选择是否添加合同层,您都必须通过线路发送大型对象结构因为我们控制客户端和服务器,所以传输和编码应该是TCP上的二进制编码.那会有所帮助.使用数据集,您可以选择仅发送更改.前后发送整个对象结构可能是性能问题.发送整个对象结构的选项是以某种方式识别所涉及的更改(创建,更新,删除),并仅发送有关该更改的信息.理论上,将聚合根ID发送到服务器以及更改并不太难,要求服务器延迟加载聚合根,执行所做的更改,然后再次保存.但涉及的最大复杂性是确定所做的改变.你有没有采用这种方法?为什么?你究竟是怎么做到的?
演示文稿
确切的UI技术对于这个问题并不是那么重要,WinForms,Silverlight或WPF是可能的.让我们假设我们正在使用WPF,因为它是一个新的智能客户端.这意味着我们有两种方式绑定,可以正确使用MVVM.
绑定到用户界面的对象需要实现INotifyPropertyChanged并在每次更新属性时引发事件.你是如何解决这个问题的?如果您选择共享代码方案,则可以将其添加到域对象中,但这将涉及在服务器端添加从未在那里使用的代码和逻辑.如果你去合同对象,分离是更自然的,但是添加一层映射并不是很多增值.
技术
有一些技术可以帮助解决一些问题,但这通常会使其他问题复杂化.你是使用它们,还是自己从头开始构建东西?
**
- CSLA是可能的,但它使单元测试更加困难,并且似乎为数据访问增加了更紧密的耦合.它确实对许多问题有所帮助,但我个人对这项技术没有任何能力,所以它是否适合它是有点难以说的.
- WCF RIA服务可用于Silverlight解决方案,但肯定存在限制.数据大小是一个.
- WCF数据服务是另一种快速获取内容的方法,但REST没有太大帮助,而且您还缺乏RIA服务中的验证支持.
总结
如果你已经走到这一步,我希望你能够了解我的目标.我试图将其缩小以避免一次性讨论所有内容,但分布式开发很复杂,因此您必须考虑许多部分.
更新
谢谢你们的回应!我试图提出足够开放的问题以获得不同的答案,但具体到足以处理一些不常见的要求.
有不同的考虑因素有不同的优点和缺点,并且因系统而异.每种方法通常都会增加寻找解决方案的复杂性.这个问题的一个要点是特别提出一些额外的要求,而这些要求并不是直接适合今天通常是正确的答案 - 基于任务的UI.如果你愿意,我不是一个"CRUD-guy".但是由于各种原因(通常是遗留的),一些系统非常适合CRUD.
许多商业应用程序都有类似的需求,可以引导不同的方
业务相关
- 查看:向用户显示数据并更新相同的数据(读取和CUD - 创建,更新,删除)
- 验证:业务规则
UI相关
- 验证:UI规则
- UI更新:特定于仅使UI更新对象更改的代码(INotifyPropertyChanged)
网络相关
- 数据大小:通过网络发送的数据量
DB相关
- 延迟加载
SRP /重用相关
- 映射:由多层对象/分离问题引起
维护/更改相关
- …
我开始构建一个具有以下要求的项目:
我正在考虑使用Mnesia/Erlang作为这个项目的基础平台,但我想知道它(Mnesia)能够处理数据集上同时断开连接的冲突操作的情况.
一个说明性场景:
为简化起见,我们假设不需要完整的更改历史记录(例如,记录1用于包含ABC或DEF并不重要,它现在只包含GHI非常重要).
这是Mnesia的开箱即用(或简单实施)功能吗?
什么是事件驱动编程,事件驱动编程与线程有什么关系?我来到这个问题阅读有关服务器以及它们如何处理用户请求和管理数据的问题.如果用户发送请求,服务器将开始处理数据并将状态写入表中.为什么会这样?服务器是否停止为该用户处理数据并开始为另一个用户处理数据,或者为每个用户处理是否在另一个线程(多线程服务器)中运行?
我将使用Scala和Akka设计分布式系统.我想从集群聚合跟踪消息,并有可能在某种UI中查看它们.Zipkin是最好的解决方案,还是Flume(+一些包装?),还是其他什么?
我使用两个worker/replicas和一个参数服务器.喜欢
--ps_hosts='hosta.com:2222' --worker_hosts='hosta.com:2223,hostb.com:2223'
Run Code Online (Sandbox Code Playgroud)
使用tf.train.SyncReplicasOptimizer之类的
opt = tf.train.SyncReplicasOptimizer(
opt,
replicas_to_aggregate=2,
replica_id=FLAGS.task_id,
total_num_replicas=2,
variables_to_average=variables_to_average)
Run Code Online (Sandbox Code Playgroud)
由于跨机器网络通信,从日志中我看到worker0(hosta.com:2223)比worker1(hostb.com:2223)快得多.看起来worker0没有等待来自worker1的渐变.即使在我杀死worker1的工作后,worker0仍在处理中.而worker0有许多重复的日志,如
INFO:tensorflow:Worker 0: 2016-04-21 03:24:02.659749: step 29010, loss = 0.40(812.0 examples/sec; 0.315 sec/batch)
INFO:tensorflow:Worker 0: 2016-04-21 03:24:02.990509: step 29010, loss = 0.59(775.3 examples/sec; 0.330 sec/batch)
INFO:tensorflow:Worker 0: 2016-04-21 03:24:04.650522: step 29013, loss = 0.56(774.0 examples/sec; 0.331 sec/batch)
INFO:tensorflow:Worker 0: 2016-04-21 03:24:04.989555: step 29013, loss = 0.47(756.3 examples/sec; 0.338 sec/batch)
INFO:tensorflow:Worker 0: 2016-04-21 03:24:06.549120: step 29016, loss = 0.49(816.6 examples/sec; 0.313 sec/batch)
INFO:tensorflow:Worker 0: 2016-04-21 …Run Code Online (Sandbox Code Playgroud) 为什么要创建一个幻觉,您正在向远程节点发送Fun以在新进程中执行?如果客户端节点必须具有相同的模块可加载,则无论如何都将Fun定义为服务器节点.那么为什么不只生成(Node,M,F,A),这清楚地表明你正在发送一个函数调用的定义,而不是Fun本身.
我有许多火花数据帧,我需要在其中执行以下操作:
1) load a single spark dataframe
2) select rows from it
3) merge it with all of the previous spark dataframes
Run Code Online (Sandbox Code Playgroud)
现在,上述每个操作都需要不同数量的分区.选择行需要许多分区,例如100个分区.合并需要很少的分区,比如10个分区.
所以,我真的希望它像这样工作:
1) load a single spark dataframe
1.5) repartition into 100 partitions
2) select rows from it
2.5) repartition into 10 partitions
3) merge it with all of the previous spark dataframes
Run Code Online (Sandbox Code Playgroud)
现在,如何强制它在步骤1和2之间以及2到3之间重新分配?
我知道,当我打电话给data = data.repartition(7)它时,它会被懒惰地评估,所以它只是在实际保存时重新分配.
所以,我一直这样做:
1) load a single spark dataframe
1.5) repartition into 100 partitions
1.75) `df.count()` *just* to force materialization
2) …Run Code Online (Sandbox Code Playgroud) distributed ×10
erlang ×3
architecture ×2
.net ×1
apache-spark ×1
crud ×1
cryptography ×1
data-driven ×1
encryption ×1
event-driven ×1
flume ×1
logging ×1
mnesia ×1
mpi ×1
process ×1
pyspark ×1
python ×1
scala ×1
spawn ×1
synchronized ×1
tensorflow ×1
zipkin ×1