标签: reliability

如何最好地将我的应用程序与不可靠的数据库隔离?

我有一个 Java SOAP 数据服务,它位于 Sybase 数据库之上,由于我无法控制的原因,该数据库的性能不可靠。该数据库是供应商包的一部分,已由内部团队修改,大多数问题是由一天中某些时间的响应时间缓慢引起的。

SOAP 服务向计算网格提供数据,当我请求数据时,我需要响应时间既快又一致。该服务提供基本的CRUD功能,但读写比例约为100:1。

将自己与数据库不可靠的性能隔离开来并确保 SOAP 服务快速可靠的最佳策略是什么?

java database sybase soap reliability

5
推荐指数
1
解决办法
421
查看次数

C# 中的冗余、可靠性和容错 - 哪里可以找到示例?

我想学习如何在 .net 中创建真正强大的应用程序 - 具有容错能力并且能够承受意外情况的应用程序。我在哪里可以找到有关此主题的文献/指南?到目前为止,我的运气并不好。

c# redundancy reliability

5
推荐指数
1
解决办法
4080
查看次数

可靠(耐用)的分布式日志引擎

试图找到分布式系统的商业日志框架.此框架必须允许远程服务器上的.NET应用程序记录消息,然后可以在中央位置收集消息.如果可能,中央位置应将消息存储在SQL Server数据库中.

要求:

  1. 能够启动远程服务器上的消息记录,即使网络中断阻止立即将消息分派到中央位置.
  2. 将消息分派到中央位置应由运行.NET应用程序的进程以外的进程处理,以防止ASP.NET应用程序或Web服务的性能下降.
  3. 确保最终将消息传递到中心位置.例如,如果远程服务器在网络没有响应的时间段结束时重新启动,则在恢复远程服务器和正常网络条件时仍应传送已记录的消息.

.net logging distributed reliability unreliable-connection

5
推荐指数
1
解决办法
1580
查看次数

在C#中可靠的udp

互联网上有几篇有关如何使udp可靠的文章。我无法在C#上找到一个。所以也许我可以实现我的算法。

通过互联网研究,我认为udp有两个问题:


  1. 它不能确保所有数据都能到达目的地。
  2. 数据可能以不同的顺序到达目的地
  3. 也许还有第三个问题,我想让它可靠

如果您有兴趣知道为什么我要使udp可靠,为什么为什么不使用tcp,请看这个问题。相信我,我一直在尝试tcp穿孔。

无论如何,也许已经有了一个可以与c#一起使用的库,这将使我能够做到这一点。因为我已经注意到能够找到一个库,所以我一直在考虑以下算法:


“想象一下有计算机A和计算机B,而计算机A是将文件发送到计算机B的计算机”;

这是我一直在想的步骤:


1)计算机A打开文件进行读取,假设它是5000字节。这意味着计算机A将必须向计算机B发送5000字节,以确保没有字节丢失且顺序正确。


2)计算机A获取文件的前500个字节,并获取这些字节的哈希值。因此,现在计算机A有两件事,即这500个字节的哈希以及这些字节。(哈希将是一种有效的算法,例如md5,以确保以正确的顺序接收到数据。即md5(1,2,3)!= md5(2,1,3))


3)将前500个字节的哈希图像成像为kj82lkdi930fi1。


4)计算机B应该正在监听哈希和字节。


5)计算机A将哈希发送到计算机B,并且它也发送了500个字节。一旦发送,它就开始等待答复。


6)计算机B现在应该接收哈希和字节。计算机b对接收到的字节执行相同的算法md5。如果该结果等于收到的哈希,则它用{1,1,1,1,1,1,1}回复给A,否则它用{2,2,2,2,2,2,2,2}来回复


6.5)假设计算机B以正确的顺序获取了数据,因此它答复{1,1,1,1,1,},它还将哈希码保存在内存或数组中。


7)计算机A应该等待响应,以便发送下一个500字节。假设它收到{1,1,1}。因为它接收到1,所以知道它可以继续发送下一个500字节,并使用这500字节的新哈希码发送。


8)计算机A发送下一个500字节及其哈希码。


9)假设计算机B未接收到数据,因此它不会回复给A。计算机B仍将等待字节和哈希


8)由于计算机A在合理的时间内没有收到1,1,1,1,1或2,2,2,2,2,因此A将发送相同的字节并再次进行散列处理时间。


9)假设计算机B接收到哈希和字节,但字节接收顺序不同。当计算机B在那些字节上计算哈希时,该哈希将与接收到的哈希不匹配。结果,它将以{2,2,2,2,2,2,2}回复


10)如果计算机A收到2,2,2,2,2,2,则它将发送相同的字节和散列。如果由于某种原因未收到2,2,2,2,2,则它将在一段时间后发送相同的字节和哈希值。假设计算机A收到2,2,2,2,2


11)计算机A第3次发送相同的字节和哈希。


12)计算机B按正确的顺序接收哈希和字节。结果,它会回复1,1,1,1,1,1并将先前的哈希保存在内存中。(回想步骤6.5)


13)假装计算机A没有收到来自B的1,1,1,1响应。然后它将第四次发送相同的字节。


14)计算机B检查哈希,如果它等于接受的最后一个哈希,则它再次答复1,1,1,1,而不将那些字节写入文件。


15)算法继续进行,直到文件被传输为止。


我的意思是,显然我还需要添加其他一些东西给该算法,例如让计算机B知道何时完成传输。也许检查更多错误。如果计算机A长时间断开连接会发生什么情况。但是主要协议将类似于我所描述的协议。

那么您认为我应该开始实现此算法吗?我应该增加并每次发送更多字节。我的意思是发送1000而不是500?互联网上有很多文章向您介绍了几种技术,但是很少有文章为您提供所需语言的实用示例。在这种情况下,我需要在C#中使用它。

networking udp reliability file-transfer

5
推荐指数
1
解决办法
3890
查看次数

如何在JVM控制台应用程序中处理^ C?

当一个JVM-ran(实际上用Scala编写,但我倾向于相信Groovy,Clojure或纯Java的解决方案几乎相同)我的控制台程序被用户按下Ctrl+ C(或由系统关闭序列,我不知道程序是否有任何差异),如何确保应用程序修改的外部资源(数据库,文件,Web服务抽象资源)保留在可预测的非逻辑腐败的国家?

java console jvm scala reliability

5
推荐指数
2
解决办法
190
查看次数

修改内置.NET集合int.MaxValue次数和更多 - 潜在的溢出错误

回到过去,.NET Reflector是免费的,我用它来填充.NET框架代码.我注意到.NET 2.0中的大多数集合(我相信这也适用于当前版本)使用以下机制来识别循环期间的集合修改:

public class SomeCollection<T>
{
    internal int version = 0;

    // code skipped for brevity

    public void Add(T item)
    {
        version++;

        // add item logic ...
    }

    public IEnumerator<T> GetEnumerator()
    {
         return new SomeCollectionEnumerator<T>(this);
    }
}

public class SomeCollectionEnumerator<T> : IEnumerator<T>
{
     private SomeCollection<T> collection;
     private int version;

     public SomeCollectionEnumerator(SomeCollection<T> collection)
     {
         this.version = collection.version;
         this.collection = collection;
     }

     public bool MoveNext()
     {
         if (this.version != this.collection.version)
         {
             // collection was modified while iterated over
             throw SomeException(...);
         } …
Run Code Online (Sandbox Code Playgroud)

.net c# iteration reliability

5
推荐指数
1
解决办法
109
查看次数

芹菜中有错误队列

如果任务执行失败,芹菜有什么方法可以自动将其放入另一个队列中。

例如,如果任务在队列中运行x,则在出现异常时将其排入另一个名为的队列error_x

编辑:

目前我正在使用celery==3.0.13django 1.4、Rabbitmq 作为代理。

有时任务会失败。芹菜有没有办法将消息添加到错误队列并稍后处理。

芹菜任务失败时的问题是我无权访问消息队列名称。所以我不能使用self.retry重试将其放入不同的错误队列。

python reliability celery

5
推荐指数
1
解决办法
2111
查看次数

CPU会犯错误吗?

想象一下,一台普通计算机不间断地密集工作 5 年。CPU 始终以 100% 的速度工作,并不断读取和写入内存。计算机真的不会犯一个错误吗?

architecture memory cpu reliability

5
推荐指数
1
解决办法
725
查看次数

在C++中使用enum进行整数位操作可靠/安全吗?

考虑以下(简化)代码:

enum eTestMode
{
    TM_BASIC        = 1,    // 1 << 0
    TM_ADV_1        = 1 << 1,
    TM_ADV_2        = 1 << 2
};

...

int m_iTestMode;    // a "bit field"

bool isSet( eTestMode tsm )
{ 
    return ( (m_iTestMode & tsm) == tsm );
}

void setTestMode( eTestMode tsm )
{
    m_iTestMode |= tsm;
}
Run Code Online (Sandbox Code Playgroud)

这是可靠,安全和/或良好的做法吗?或者除了使用const int而不是enum之外,还有更好的方法来实现我想做的事情吗?我更喜欢枚举,但代码可靠性比可读性更重要.

c++ enums bit-manipulation reliability

4
推荐指数
1
解决办法
516
查看次数

如果UDP数据包在线上,我保证在应用层得到它们吗?

首先,我感谢UDP不是一个可靠的协议,我不能保证通过网络接收数据包.

但是,如果数据包确实到达我的机器,我保证在应用程序级别接收它,或者网络堆栈是否可以将其丢弃而不受惩罚?

我问的原因是我偶尔会丢失数据包,即使我知道它们在线上(简单的EtherCAT总线,所以数据包总是循环回来).

c# windows udp reliability ethercat

4
推荐指数
1
解决办法
377
查看次数