标签: distributed-computing

为什么Google的TrueTime API很难复制?

我不确定为什么媒体普遍表示谷歌的TrueTime API难以复制(有线,Slashdot等).

我可以理解如何获得谷歌实现的低错误间隔是一件困难的事情,但我不知道API本身将如何变得非常困难.

例如,我掀起了一个黑客攻击版本.这是间隔.

    typedef struct TT_interval {
            struct timeval earliest;
            struct timeval latest;
    } TT_interval;
Run Code Online (Sandbox Code Playgroud)

这是现在的功能.

    int TT_now(TT_interval* interval)
    {
        struct ntptimeval tv;
        struct timeval delta;

        struct timeval* earliest_p = &(interval->earliest);
        struct timeval* latest_p = &(interval->latest);
        struct timeval* now_p = &(tv.time);
        struct timeval* delta_p = δ

        timerclear(&delta);
        timerclear(&interval->earliest);
        timerclear(&interval->latest);

        if(ntp_gettime(&tv) == 0) {
            tv.maxerror = tv.maxerror > 0 ? tv.maxerror : -(tv.maxerror);

            delta.tv_sec = delta.tv_sec + (tv.maxerror / 1000);
            delta.tv_usec = delta.tv_usec + ((tv.maxerror % 1000) * 1000);

            if(delta.tv_usec …
Run Code Online (Sandbox Code Playgroud)

c time distributed-computing google-cloud-platform google-cloud-spanner

30
推荐指数
1
解决办法
9536
查看次数

集中式Java日志记录

我正在寻找一种集中分布式软件(用Java编写)的日志问题的方法,这很容易,因为有问题的系统只有一台服务器.但请记住,特定服务器的更多实例很可能在未来运行(并且需要更多应用程序),必须有类似Logging-Server的东西,处理传入的日志,并使其可供支持团队访问.

现在的情况是,几个java应用程序使用log4j将其数据写入本地文件,因此如果客户端遇到问题,支持团队必须要求提供日志,这并不总是很容易并且需要花费大量时间.在服务器故障的情况下,诊断问题并不大,因为无论如何都存在远程访问,但即使通过Logging-Server监控所有内容仍然很有意义.

当我查看有关"集中式日志记录"的问题时,我发现了另一个问题(实际上是唯一一个带有(在这种情况下)可用答案的问题.问题是,所有应用程序都在封闭环境中运行(在一个网络内)和安全指南不允许有关内部软件的任何内容走出环境网络.

我还发现了一篇关于如何实现这样一个Logging-Server 的精彩文章.由于这篇文章写于2001年,我原本以为有人可能已经解决了这个特殊问题.但我的搜索结果没有任何结果.

我的问题:是否有一个日志框架可以通过支持团队访问的集中式服务器来处理网络登录?

规格:

  • 可用性
  • 服务器必须由我们运行.
  • Java 1.5兼容性
  • 与异构网络的兼容性.
  • 最佳案例:协议使用HTTP发送日志(以避免防火墙问题)
  • 最佳案例:使用log4j或LogBack或基本上任何实现slf4j的东西

没必要,但很高兴

  • 身份验证和安全性当然是一个问题,但可以至少暂时退出(如果它是开放式软件,我们会将其扩展到我们的需求OT:我们总是回馈项目).
  • 数据挖掘和分析对于使软件更好有所帮助,但也可以是外部应用程序.

我最糟糕的情况是他们不是那样的软件.对于这种情况,我们可能会自己实现.但是,如果有这样的客户端 - 服务器应用程序,我将非常感谢不需要做这个特别有问题的工作.

提前致谢

更新:解决方案必须在几个支持java的平台上运行.(主要是Windows,Linux,一些HP Unix)

更新:经过更多的研究,我们实际上找到了一个我们能够获得的解决方案.clusterlog.net(至少自2015年中起离线)为分布式软件提供日志服务,并兼容log4j和logback(与slf4j兼容).它允许我们通过应用程序分析每个用户的方式.因此,很容易重现报告的错误(甚至是未报告的错误).它还通过电子邮件通知我们重要事件,并且报告系统将相同来源的日志汇总为易于访问的格式.他们在几天前就在这里部署了(它完美无瑕)并且运行良好.

更新(2016):这个问题仍然有很多流量,但我提到的网站不再存在.

java logging log4j distributed-computing logback

29
推荐指数
2
解决办法
1万
查看次数

Paxos vs两阶段提交

我试图理解paxos和两阶段提交之间的区别,作为在多台机器之间达成共识的手段.两阶段提交和三阶段提交很容易理解.似乎3PC解决了在2PC中会阻塞的故障问题.所以我真的不明白Paxos正在解决什么问题.任何人都能说明Paxos究竟解决了什么问题吗?

database distributed-computing paxos

29
推荐指数
2
解决办法
8707
查看次数

当Spark意识到它不再被使用时,Spark会不会自己解决它?

当我们想要多次使用它时,我们可以将RDD持久存储到内存和/或磁盘中.但是,我们以后必须自己解除它们,或者Spark是否会进行某种垃圾收集并在不再需要RDD时解除它的作用?我注意到如果我自己调用unpersist函数,我的性能会变慢.

hadoop distributed-computing bigdata apache-spark rdd

29
推荐指数
1
解决办法
6332
查看次数

实时分布式系统的基本要素是什么?

我正在接受承包,今天我已经接受了承包商职位的第一轮面试.我已经通过了它,但有人告诉我 - 主要是一个UI开发人员 - 我只介绍了他们后端需要的基础知识,我应该在第二轮之前阅读分布式系统.

到目前为止,在我的职业生涯中,我一直在从事后期操作,从不需要实时.由于我还剩下几天,我需要涵盖哪些主题?首先能够回答他的问题并且通常被视为分布式系统中的适当问题?

问题是如何在UI上实时显示数据?后端需要做什么?我已经提到了实时数据馈送的生产者/消费者模式.他很喜欢,但他说他在第二次面试时需要更多.

任何帮助将非常感激,

distributed real-time distributed-computing distributed-system

27
推荐指数
1
解决办法
2万
查看次数

如何从C使用MPI_Scatter和MPI_Gather?

到目前为止,我的应用程序正在读取带有整数列表的txt文件.这些整数需要由主进程存储在数组中,即排名为0的处理器.这样可以正常工作.

现在,当我运行程序时,我有一个if语句检查它是否是主进程,如果是,我正在执行MPI_Scatter命令.

根据我的理解,这将使用数字细分数组并将其传递给从属进程,即所有rank> 0.但是,我不知道如何处理MPI_Scatter.从属进程如何"订阅"以获取子数组?如何告诉非主进程对子数组执行某些操作?

有人可以提供一个简单的例子来向我展示主进程如何从数组中发出元素,然后让奴隶添加总和并将其返回给主数据库,将所有总和加在一起并将其打印出来?

我的代码到目前为止:

#include <stdio.h>
#include <mpi.h>

//A pointer to the file to read in.
FILE *fr;

int main(int argc, char *argv[]) {

int rank,size,n,number_read;
char line[80];
int numbers[30];
int buffer[30];

MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);

fr = fopen ("int_data.txt","rt"); //We open the file to be read.

if(rank ==0){
printf("my rank = %d\n",rank);

//Reads in the flat file of integers  and stores it in the array 'numbers' of type int.
n=0;
while(fgets(line,80,fr) …
Run Code Online (Sandbox Code Playgroud)

c parallel-processing distributed-computing mpi

27
推荐指数
1
解决办法
3万
查看次数

akka或golang的类似替代方案支持分布式并发?

我知道golang在内置支持方面非常擅长并发,但在我看来它们并不是分布式的,所以框架/库允许我们在分布式环境中编写生产者/消费者应用程序.

distributed-computing go

27
推荐指数
4
解决办法
2万
查看次数

群集共享缓存

我正在寻找一个允许我在多个JVM之间共享缓存的java框架.

我需要的是Hazelcast,但没有"分布式"部分.我希望能够在缓存中添加一个项目并让它自动同步到另一个"组成员"缓存.如果可能的话,我希望通过可靠的多播(或类似的东西)来同步缓存.

我看过Shoal,但遗憾的是"分布式状态缓存"似乎不足以满足我的需求.

我已经看过了JBoss Cache,但对于我需要做的事情来说似乎有些过分.

我看过JGroups,它似乎是我需要做的最有前途的工具.有没有人有JGroups的经验?最好是否用作共享缓存?

还有其他建议吗?

谢谢 !

编辑:我们正在开始测试以帮助我们在Hazelcast和Infinispan之间做出决定,我很快就会接受答案.

编辑:由于需求突然变化,我们不再需要分布式地图了.我们将使用JGroups作为低级信令框架.谢谢大家的帮助.

java caching distributed-computing cluster-computing

26
推荐指数
4
解决办法
2万
查看次数

使用分布式群集的Python多处理

我正在寻找一个python包,它不仅可以在一台计算机中的不同内核之间进行多处理,而且还可以在多台机器上分布一个集群.分布式计算有许多不同的python包,但大多数似乎需要更改代码才能运行(例如,前缀表明对象在远程计算机上).具体来说,我希望尽可能接近多处理pool.map功能.因此,例如,如果在一台机器上,脚本是:

from multiprocessing import Pool
pool = Pool(processes = 8)
resultlist = pool.map(function, arglist)
Run Code Online (Sandbox Code Playgroud)

然后,分布式集群的伪代码将是:

from distprocess import Connect, Pool, Cluster

pool1 = Pool(processes = 8)
c = Connect(ipaddress)
pool2 = c.Pool(processes = 4)
cluster = Cluster([pool1, pool2])
resultlist = cluster.map(function, arglist)
Run Code Online (Sandbox Code Playgroud)

python distributed-computing multiprocessing

26
推荐指数
3
解决办法
1万
查看次数

2PC vs Sagas(分布式交易)

我正在开发我对分布式系统的洞察力,以及如何在这些系统中保持数据一致性,其中业务事务涵盖多个服务,有限的上下文和网络边界.

以下是我知道用于实现分布式事务的两种方法:

  • 两阶段提交(2PC)
  • 传奇

2PC是应用程序通过平台的支持透明地利用全局ACID事务的协议.作为平台的嵌入,据我所知,它对业务逻辑和应用程序代码是透明的.

另一方面,Sagas是一系列本地事务,其中每个本地事务变异并持久化实体以及指示全局事务的阶段并提交更改的一些标志.换句话说,事务的状态是域模型的一部分.回滚是进行一系列"倒置"交易的问题.在两种情况下,服务发出的事件都会触发这些本地事务.

现在,何时以及为什么人们会使用传真而不是2PC,反之亦然?两者的用例和优点/缺点是什么?特别是,传奇的脆弱让我感到紧张,因为倒置的分布式交易也可能失败.

cloud transactions distributed-computing saga microservices

26
推荐指数
3
解决办法
3601
查看次数