我梦想改善分布式编程的世界:)
特别是,我感觉缺乏必要的工具来调试,监控,理解和可视化分布式系统的行为(哎呀,我必须编写自己的记录器和可视化器来满足我的要求),而且我是在我的空闲时间写下几个这样的工具。
社区,你在这方面缺少哪些工具?请描述每个答案,并大致了解该工具应该做什么。其他人可以指出这些工具的存在,或者有人可能会受到启发并写下它们。
答案 0 :(得分:14)
好的,让我开始。
具有高精度全球时间轴的分布式记录器 - 允许在分布式系统中的不同机器上注册事件,具有高精度且独立于时钟偏移和漂移;具有足够的可扩展性,可处理数百台机器和数千个日志记录过程的负载。这样的记录器允许在分布式系统中查找传输级延迟瓶颈,例如,通过查看消息通过消息队列从发布者传输到订户实际需要多少毫秒,等
Syslog不行,因为它不够可扩展 - 每秒50000个记录事件对它来说太多了,在这样的负载下时间戳精度会受到很大影响。
Facebook的Scribe不合适,因为它没有提供全球时间轴。
实际上,syslog和scribe都在到达时间戳下注册事件,而不是在出现时间戳下。
老实说,我并不缺少这样的工具 - 我为自己编写了一个工具,我对此感到非常满意,并且我将开源它。但其他人可能。
P.S。我是开源的:http://code.google.com/p/greg
答案 1 :(得分:10)
亲爱的圣诞老人,我想要了解分布式系统中组件之间交互的可视化。
我想要一个直观的表示:
我希望能够:
我整年都是一名优秀的开发者,并且非常喜欢这个。
答案 2 :(得分:9)
然后再看看这个问题 - How to visualize the behavior of many concurrent multi-stage processes?。
(我无耻地提到我自己的东西,但那是因为这些东西解决的问题对我来说很重要,而当前的问题恰恰是对某些人来说很重要的问题。)
答案 3 :(得分:5)
您可以查看一下erlang / OTP附带的一些工具。它没有其他人建议的所有功能,但其中一些非常方便,并且具有丰富的经验。其中一些是,例如:
除了平台提供的基本功能之外,当然还有这些功能,如节点发现,IPC协议,RPC协议和协议。服务,透明分发,分布式内置数据库存储,进程名称的全局和节点本地注册表以及使平台更新的所有其他基础内容。
答案 4 :(得分:2)
我认为这是一个很好的问题,这是我在0.02工具上发现的非常有用的问题。 我发现分布式编程的挑战之一是将代码部署到多台机器上。这些机器通常可能具有稍微不同的配置,或者更糟糕的是具有不同的应用设置
我想到的工具是可以按需访问部署应用程序的所有计算机并提供系统信息的工具。如果指定设置文件或注册表之类的资源,它将提供所有计算机的列表。它还可以查看运行应用程序的用户的用户访问权限。
一项改进是在设置与开发人员提供的主列表不匹配时提供指示。它还可以指示具有不同配置并提供差异功能的服务器。
这对.NET应用程序非常有用,因为有很多配置(machine.config,application.config,IIS设置,用户权限等),配置变化的可能性很高。
答案 5 :(得分:2)
在我看来,缺少的是分布式编程平台......现在,这个平台使分布式系统上的应用程序编程像非分布式编程一样透明。
答案 6 :(得分:2)
你也可以看一下Akka: http://akka.io
答案 7 :(得分:1)
当我们甚至不同意某个平台时,使用工具是不是有点早?我们有几种演员模型,虚拟共享内存,UMA,NUMA,同步数据流,标记令牌数据流,多层次内存矢量处理器,集群,消息传递网格或片上网络,PGAS,DGAS等。
随意添加更多。
贡献: 我发现自己通过构建DAG编写了许多分布式程序,并将其转换为特定于平台的代码。每个平台优化都是此DAG上的一种不同的转换规则。您可以在Microsoft的Accelerator和Dryad,Intel的Concurrent Collections,MIT的StreaMIT等中看到同样的情况。 收集所有这些DAG转换的语言无关库将每次都节省重新发明轮子。
答案 8 :(得分:0)
让我通过指向Greg记录器 - http://code.google.com/p/greg来通知那些喜欢这个问题的人。它是具有高精度全局时间轴的分布式记录器,我在这个帖子的另一个答案中已经讨论过。
答案 9 :(得分:0)
除了提到的“可视化许多并发多阶段过程的行为”(splot)的工具外,我还写了“tplot”,它适合在日志中显示定量模式。
A large presentation about both tools, with lots of pretty pictures here