异步处理如何保证可靠性?

左大神在这 2009-12-21 01:41:42
项目做多了,发现在通信行业,证券行业,以及一些特殊行业,特殊领域,对系统的性能要求非常高,单条数据的处理甚至可以到纳秒,这个时候我们一般采取异步处理的方式解决问题。但是异步处理带给程序使用者的好处时,相应及时,很短时间的等待,然后可靠性的保证方面却需要一些措施处理,比如处理失败怎么办,处理不好,影响系统功能的质量。开贴讨论,希望大家各抒己见。每个人可以发表自己的观点,但记得尊重别人的观点,求同存异,言语措辞上相互尊重。
...全文
739 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
huabing84 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 shunzi19860518 的回复:]
有得必有失,异步处理加快了速度,但降低了可靠性。
[/Quote]
如果是逻辑上的要求,那必须要异步了,不然操作数据就有问题了。
baby1986 2009-12-24
  • 打赏
  • 举报
回复
Ajax应算作异步处理的一个典范!
现在最令我担忧的是系统的并行处理问题,我的系统可以牺牲一些性能,甚至不用考虑性能,
但系统中到处都存在着并行计算的陷阱!
楼主能说说这方面的宝贵意见吗?
左大神在这 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 shunzi19860518 的回复:]
有得必有失,异步处理加快了速度,但降低了可靠性。
[/Quote]
其实异步处理,保证可靠性,不是百分百的保证,也没有系统能做到这个,只是我们尽量提升其可靠性而已。
左大神在这 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 shunzi19860518 的回复:]
有得必有失,异步处理加快了速度,但降低了可靠性。
[/Quote]
其实异步处理,保证可靠性,不是百分百的保证,也没有系统能做到这个,只是我们尽量提升其可靠性而已。
一头头 2009-12-22
  • 打赏
  • 举报
回复
非实时java 无法确定处理时间 也无法保证异步的可靠

个人觉得java在这个方面很弱 或者可以参考RTS real-time java
shunzi19860518 2009-12-22
  • 打赏
  • 举报
回复
有得必有失,异步处理加快了速度,但降低了可靠性。
树成 2009-12-22
  • 打赏
  • 举报
回复
异步与同步是对立的,而产生他们的是多线程或者多进程。
异步的好处就是提高设备使用率,从而在宏观上提升程序运行效率,但是弊端就是容易出现冲突操作和数据脏读。
同步则刚好相反,同步是一种降低设备使用率,在宏观上降低了程序的运行效率,而且很多系统或者是运行环境在处理同步的时候为了维持同步的有效性也会付出许多格外的系统资源开支,对性能影响相当大。但是同步保证了程序运行的正确性与数据的完整性。
关于异步与同步的问题,其实就是一个多线程或者多进程的问题,对于多线程就复杂了,这里只讨论一下这两者。
其实同步异步问题一直是多线程处理机制中的难点,对于一个系统而言,必须要保证系统的效率,又要保证运行的正确性,所以要对系统运行进行分析才能够确定哪些地方是应该异步操作,而哪些地方是应该同步操作的。
对于有大量访问,但是数据与程序运行彼此互相不干扰,或者对数据完整要求不严格则用异步,对于只有少量访问但是要求数据绝对正确完整,则使用同步访问。
对于有大量访问而数据要求完整性也相当高的地方,那么这个就只能仔细分析内部模块的每一行代码,哪一块是造成冲突以及在异步环境下会破坏数据完整性的地方用同步锁起来,或者什么时机有可能造成冲突的地方,在那个时机进行同步,其它时间异步。对于这种分析,你需要对多线程的运行有深刻理解以及对业务模块深入的分析才能做出的,这是一个相当难的工作,也是迄今为止广大程序都头痛的问题。
wenjjing2lianee 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 chuan122345 的回复:]
一般异步处理都是需要 很强的错误处理机制以及数据恢复机制,来保证可靠性
[/Quote]

支持
左大神在这 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 shine333 的回复:]
说到“云计算”,IMHO,这个名字的商业意味 > 技术含义
[/Quote]
同意,到处都充满商业味
amdgaming 2009-12-22
  • 打赏
  • 举报
回复

为了提高效率,异步处理确实不错,但是 有的 东东 还是需要同步的,这个时候,可能要对 数据库进行频繁的
对写,文件进行io处理。等等都是非常 耗时的,关键 还是 找到 平衡点。。。。

楼主 你觉得 呢?
shine333 2009-12-22
  • 打赏
  • 举报
回复
说到“云计算”,IMHO,这个名字的商业意味 > 技术含义
hxpandjava 2009-12-22
  • 打赏
  • 举报
回复
同意chuan122345的观点,如果发生了异常那也是通信层面的异常,如连接池枯竭,超时,这与系统的配置有关。
左大神在这 2009-12-22
  • 打赏
  • 举报
回复
一般异步处理都是需要 很强的错误处理机制以及数据恢复机制,来保证可靠性
左大神在这 2009-12-22
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 weihthchk 的回复:]
和异步处理相关的,有一个思考方向:
如果同步处理数据时有不可忍受的性能问题,就要在能容忍的范围内放弃数据的一部分正确性。
实例没有,只有一个其他方面和这个思路类似的例子:
网站有大量的数据,在查询时需要分页。如果计数并算出页数,则造成表扫描,产生不可容忍的性能以至于可用性问题。这时给出“估算”的页数或者不给页数,可能是更好的选择,虽然没有了这部分数据的准确性。
[/Quote]
说实话,不是很赞成你的观点,异步处理其实对质量,数据的正确性要求跟同步处理其实是一样的,只是比同步处理效率高。如果不能保证数据的正确性,那样的异步处理基本上没有什么价值。
mikehuhu 2009-12-22
  • 打赏
  • 举报
回复
出错几率和出错后损失会影响到效率,这得和具体应用情形有点关系了,就像排序方法对大数据和小数据效率不同有关。
不知道谁有现成的葫芦,大家参考下~~吼吼
weihthchk 2009-12-22
  • 打赏
  • 举报
回复
和异步处理相关的,有一个思考方向:
如果同步处理数据时有不可忍受的性能问题,就要在能容忍的范围内放弃数据的一部分正确性。
实例没有,只有一个其他方面和这个思路类似的例子:
网站有大量的数据,在查询时需要分页。如果计数并算出页数,则造成表扫描,产生不可容忍的性能以至于可用性问题。这时给出“估算”的页数或者不给页数,可能是更好的选择,虽然没有了这部分数据的准确性。
左大神在这 2009-12-22
  • 打赏
  • 举报
回复
其实就是想讨论下错误处理机制,或错误处理策略,谁有比较好的方案,一起分享下。
crazylaa 2009-12-21
  • 打赏
  • 举报
回复
异步处理都要求有完美的错误处理机制,做到对可提交,错可回滚。甚至连日志(包括数据库日志和文件日志)都要求和业务数据一样的保存期限。这样做到出错时可以追根溯源,打官司也不怕,哈哈。

顶个。
左大神在这 2009-12-21
  • 打赏
  • 举报
回复
呵呵,云计算这个话题太大了,还是帖子的主题范围比较小,容易出方案。
左大神在这 2009-12-21
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 nihaozhangchao 的回复:]
分步式,云计算。虚拟化的出现更多的是为了速度和安全。
可能是未来发展的趋势。
[/Quote]
呵呵,买了本云计算的书籍,刚看。
发现理论上对并行计算,网格计算,分布式计算,云计算。区分的太模糊,可能没有实践过的人,都可能认为这些计算方式都是并行计算。有时间研究下。
加载更多回复(10)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧