免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yulihua49
打印 上一主题 下一主题

[算法] 交易并行度设计 [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
11 [报告]
发表于 2015-08-17 15:29 |只看该作者
回复 10# yulihua49

我这边的逻辑相对简单。

但是要求性能,也是线上数据,需要实时分析,然后做出各种实时相应,由于来的数据都是洗干净了的,所以容错方面还好处理。

并行方面,我用的是牛刀杀鸡策略,每个分析引擎都单独做一个小的Server。

跟你那边的复杂程度比不了,你那边对性能和容错什么的要求都比较高。


   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
12 [报告]
发表于 2015-08-17 15:46 |只看该作者
fender0107401 发表于 2015-08-17 15:29
回复 10# yulihua49

我这边的逻辑相对简单。

好的。。。。。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
13 [报告]
发表于 2015-08-17 20:38 |只看该作者
我感觉我这边最大的便利条件是所有过来的数据都是很干净的,没有不规范的,所以不用考虑太多意外情况。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
14 [报告]
发表于 2015-08-18 14:59 |只看该作者
本帖最后由 yulihua49 于 2015-08-18 15:04 编辑
cokeboL 发表于 2015-08-17 15:08
回复 6# yulihua49
如果用go的话,可能就不存在这几个问题了

不可能。这与语言无关,纯粹是架构问题,如何进行并行处理的问题。
你前边说顺序处理,这就别提了,不满足需求。

这里讨论的是如何进行map-reduce的问题。

单点同步map,还是多点异步map。后者性能不见得好,还有reduce困难,交易完整性管理困难。

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
15 [报告]
发表于 2015-08-18 17:11 |只看该作者
回复 14# yulihua49


    我的意思是:

    如果同一客户同步处理,golang很容易写成池,每个客户一个单独的 goroutine处理,goroutine里面是顺序的,golang官方宣称百万个goroutine都问题不大,这是顺序的好处,不会像传统的进程、线程池那样资源罩不住

    如果要把业务拆分,golang可以容易地把不同的子业务各开一个goroutine,如果这些子业务有一个结束顺序,比如ABCD四个业务,B要等A,C要等B,D要等C,ABC各自的goroutine执行本业务代码之后写入一个channel,
    BCD各自的goroutine执行本业务代码之后读取ABC结束的写入,最后到D那等到C的结束,所有子业务就结束了,B、C当然要先读前面的结束了再写
    语言层面解决了并发,不需要花过多心思在并发、异步的架构上

论坛徽章:
36
子鼠
日期:2013-08-28 22:23:29黄金圣斗士
日期:2015-12-01 11:37:51程序设计版块每日发帖之星
日期:2015-12-14 06:20:00CU十四周年纪念徽章
日期:2015-12-22 16:50:40IT运维版块每日发帖之星
日期:2016-01-25 06:20:0015-16赛季CBA联赛之深圳
日期:2016-01-27 10:31:172016猴年福章徽章
日期:2016-02-18 15:30:3415-16赛季CBA联赛之福建
日期:2016-04-07 11:25:2215-16赛季CBA联赛之青岛
日期:2016-04-29 18:02:5915-16赛季CBA联赛之北控
日期:2016-06-20 17:38:50技术图书徽章
日期:2016-07-19 13:54:03程序设计版块每日发帖之星
日期:2016-08-21 06:20:00
16 [报告]
发表于 2015-08-18 17:14 |只看该作者
回复 14# yulihua49


    c/c++,异步并发和同步的性能对比,并发,或者异步回调、锁、队列的开销

    golang,goroutine、channel的开销比较小,对于性能纠结的点是不同的

论坛徽章:
0
17 [报告]
发表于 2015-08-18 18:01 |只看该作者
搞了个AIX迁移到云平台的项目,深有感触啊
并行度
每个交易都会有很多步骤,步骤在不同节点上执行,这里的并行度划分没有个准信,但是可以评估其所需要的资源。
比如一个并行需要一份资源,而这台机器只有十份资源,则将并行度设为八较为合适,剩余的要用于监控运维等。
这里提到的资源是资源集合,最常见的是CPU 内存 磁盘 网络,评估资源时需要按照最缺的(或者说瓶颈)来评估。
如果强计算型,需要按照CPU评估,大部分情况下是磁盘读写评估,也有些时候是内存资源问题,不过现在内存便宜这个缓解了不少。
同异步
通常的情况是同步编程简单,但是较耗资源,异步编程复杂,但是效率高。当然这只是表象,实际的原因是同步在大部分情况下,需要等待,异步不需要等待,逐个处理就行。
问题就在于很多东西从业务(可能是业务逻辑,也可能是体验需要)角度来说,是同步的,为了提高效率,程序这个层面需要采用异步,这种情况下就是用异步来实现同步,无非就是同步损耗由谁来承担。
粒度划分
这个说说实际的感受吧,我们项目需要从AIX集群迁移到云平台,可以把五到十个步骤放在一台AIX上,但是在云平台上必须分散在不同机器上。
这就涉及到拆分,交互,异常情况处理,从开发角度看,工作量大了好几倍,而且云平台异常停机这种情况要求业务不能停。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
18 [报告]
发表于 2015-08-18 21:43 |只看该作者
本帖最后由 yulihua49 于 2015-08-18 21:57 编辑
gavenwei 发表于 2015-08-18 18:01
搞了个AIX迁移到云平台的项目,深有感触啊
并行度
每个交易都会有很多步骤,步骤在不同节点上执行,这里的并 ...

可以把资源用到十分。如果需要其他任务,时间会挤出来的,这点UNIX做的非常好,比LINUX和WINDOWS都强的多。

如果是linux,把超线程打开,系统用到50%,实际上就是100%了,余下的能力用于其他任务抢占。

例如,4核8线程,可以看到8个逻辑CPU。你用到400%就可以了。你会发现,与800%比,处理性能是一样的。
别的任务挤进去还是很容易的。到800%就有点费劲了。超线程,对于处理能力没有任何好处,对于任务抢占还是有点用的,在非抢占操作系统中。

在UNIX上,一个进程用到100%,它的优先级就自动下降,其他任务非常容易挤进去,抢一些CPU来。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
19 [报告]
发表于 2015-08-18 22:06 |只看该作者
cokeboL 发表于 2015-08-18 17:14
回复 14# yulihua49


那就是我前边说的,要进行架构试验。建立各种不同架构的demo评估各自的优势。

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
20 [报告]
发表于 2015-08-18 23:23 |只看该作者
回复 18# yulihua49

你说的这是Hyper threading惹的祸,和Linux还是Unix没关系,即便你用Solaris还是一样。

话说Hyper threading本来是给桌面电脑准备的技术,在服务器上还是关掉吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP