由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 系统设计的基本素养
相关主题
古德霸放个带细节设计的方案吧好虫,看看你的东东有没有问题?
请问如何实时处理Analog信号呀?node来势凶猛,已经完胜Ruby了
为什么我看不懂下面的code,是不是水平还不够?春运网站架构之争 MapReduce vs MPI
一道bit operator面试题铁道部的订票系统我的解决想法
新手请教:C++ decrement loop从工程角度再比较一下春运火车票的2个方案
[C++] 入门级问题 increment and decrement operators说说魏老师犯的几个常识性错误。
请问C++返回值和返回引用区别【C++】请问这样有没有memory leak?多谢
本版现在主题就是战啊。。。提高12306的关键在于大数据和筹划
相关话题的讨论汇总
话题: 瓶颈话题: 妥协话题: 不是话题: 12306话题: 分座
进入Programming版参与讨论
1 (共1页)
b*******g
发帖数: 603
1
不过八个字,合理分析,小心求证。
需求分析是最基本的,并非所有的需求都是合理,或者都可以满足的。一个好的架构师
,要能够快速地从需求中找出系统的瓶颈,要保证所有不易扩展部分的瓶颈都在常识范
围之下。当做不到的时候就要有所妥协,有些需求可以妥协,有些不能妥协,需要妥协
的部分要跟需求方反复商量重新制定规范。这就是为什么要主动妥协,而不是被动妥协
。一个竞标,你没有这个技术实力,可以不做。但是没用脑子拍胸脯就上了,到时候做
不出来,小则自己被炒,大则公司破产。
具体到12306这个例子上,有新闻说第一分钟的平均订单数达到了27万/秒,基于这个数
据单秒峰值1M/秒其实偏低,但是考虑到用户可以接受一点延迟,还算合理。注意是订
单数,不是票数。12306允许订联程票,允许单个订单最多5张票。这整个是密不可分的
一个事务操作。如果我从广州回长春,只能到北京,我不如不走。如果我走的了,我家
人走不了,不如不走。这些都是常识,数据库101级别的常识。再接下来,老弱病残没
法抗大包换车厢,所以单车次都不换座,这也是基本常识。
所有上面的这些东西,都是没法妥协的。这时候一个有经验的架构师,就会从经验意识
到票子产生竞争,数据库是瓶颈,分票是个复杂处理,没法全部实时处理。所以只有两
种取舍而已。要吗丢
弃一部分订单,要吗放弃实时处理。所幸单子虽然多,但票子有限,只要缓冲订单就行
。如果是无限的供给,无限的需求,那就要分票分库处理。根据数据的特性,制定不同
的策略,恰恰是系统设计的难点。
接下来就是小心求证的部分,这个延迟是否会太大,导致用户体验不佳。从12306分时
放票,加上常规数据库每秒5k-10k的估计,不进一步优化这个延迟大约2-3分钟,各种
不可预知因素留点余量也不过10分钟。个人认为可以接受,但是必须跟甲方再商量。而
且这样的架构,如果峰值不大,比如每秒1万,同样是实时系统没有压力。
魏老师这样的,是真正的半路出家的程序猿。对系统设计完全没有经验,连需求都没想
清楚,就上来就拍胸脯要百万次没压力。对基本的transaction是什么完全没有概念。
decrement/increment不是transaction已经闹了个大笑话。正常人错了好歹理解学习一
下吧,没两天又认为一张票就是一个transaction。就为了满足他那百万次的牛皮,那
是满地里耍赖皮。你要真让他设计了这个系统,12个月工期,10个月好不容易他那宇宙
第一的抢票服务器没有功能性问题了。一上量挂了怎么办?不怎么办,一样就是12306
现在我死给你看的结果。
牛逼哄哄地在这里折腾分座算法也不知道有什么用,分座算法根本不是这个系统的瓶颈
。3个月之前,我用了一分钟,就想清楚分座算法至少是个O(N)的问题,对实时性会有
很大影响。一旦不追求实时,这个问题迎刃而解。因为延迟取决于有效票的总张数,一
次订5张也好,1张也好,不会提高延迟。真要搞算法,jobhunting版那些科班出身的
new grad比魏老师强得不是一点半点。真追求最优,我不会悬赏100万让全社会来竞争
,在这里算破头有用吗?
说到底,人贵有自知之明。外行的东西,胡乱评论就有丢人的风险。拍胸脯要求做违反
常识的东西,就是民科找死的节奏。
n*****t
发帖数: 22014
2
一大堆的错误亏你能码那么多字,别的不说,哪个老师教你的优化分座是 ON?

★ 发自iPhone App: ChineseWeb 8.6

【在 b*******g 的大作中提到】
: 不过八个字,合理分析,小心求证。
: 需求分析是最基本的,并非所有的需求都是合理,或者都可以满足的。一个好的架构师
: ,要能够快速地从需求中找出系统的瓶颈,要保证所有不易扩展部分的瓶颈都在常识范
: 围之下。当做不到的时候就要有所妥协,有些需求可以妥协,有些不能妥协,需要妥协
: 的部分要跟需求方反复商量重新制定规范。这就是为什么要主动妥协,而不是被动妥协
: 。一个竞标,你没有这个技术实力,可以不做。但是没用脑子拍胸脯就上了,到时候做
: 不出来,小则自己被炒,大则公司破产。
: 具体到12306这个例子上,有新闻说第一分钟的平均订单数达到了27万/秒,基于这个数
: 据单秒峰值1M/秒其实偏低,但是考虑到用户可以接受一点延迟,还算合理。注意是订
: 单数,不是票数。12306允许订联程票,允许单个订单最多5张票。这整个是密不可分的

b*******g
发帖数: 603
3
单次操作是至少O(N),常数级的优化存在但O级别的优化在worst case不存在,就是个
常识而已。
一个复杂系统,在一个不是瓶颈的地方低头猛算cpu cycle的,都是最低级的程序猿。

【在 n*****t 的大作中提到】
: 一大堆的错误亏你能码那么多字,别的不说,哪个老师教你的优化分座是 ON?
:
: ★ 发自iPhone App: ChineseWeb 8.6

t**********1
发帖数: 550
4
亏你码了这么多字。
我的意见。公平不公平,各位网友说了算。
http://www.mitbbs.com/article_t/Programming/31318637.html

【在 b*******g 的大作中提到】
: 不过八个字,合理分析,小心求证。
: 需求分析是最基本的,并非所有的需求都是合理,或者都可以满足的。一个好的架构师
: ,要能够快速地从需求中找出系统的瓶颈,要保证所有不易扩展部分的瓶颈都在常识范
: 围之下。当做不到的时候就要有所妥协,有些需求可以妥协,有些不能妥协,需要妥协
: 的部分要跟需求方反复商量重新制定规范。这就是为什么要主动妥协,而不是被动妥协
: 。一个竞标,你没有这个技术实力,可以不做。但是没用脑子拍胸脯就上了,到时候做
: 不出来,小则自己被炒,大则公司破产。
: 具体到12306这个例子上,有新闻说第一分钟的平均订单数达到了27万/秒,基于这个数
: 据单秒峰值1M/秒其实偏低,但是考虑到用户可以接受一点延迟,还算合理。注意是订
: 单数,不是票数。12306允许订联程票,允许单个订单最多5张票。这整个是密不可分的

n*****t
发帖数: 22014
5
单次车余票的组合是固定的,完全可以查表,你再想想

【在 b*******g 的大作中提到】
: 单次操作是至少O(N),常数级的优化存在但O级别的优化在worst case不存在,就是个
: 常识而已。
: 一个复杂系统,在一个不是瓶颈的地方低头猛算cpu cycle的,都是最低级的程序猿。

b*******g
发帖数: 603
6
实时当然好,但是做不到的时候,你是让老弱病残抗大包,还是等2-3分钟,根本是一
个不需要争的问题。
b*******g
发帖数: 603
7
我说了,不是瓶颈的地方你使劲优化,根本没用。

【在 n*****t 的大作中提到】
: 单次车余票的组合是固定的,完全可以查表,你再想想
n*****t
发帖数: 22014
8
抢票不是瓶颈还有什么是瓶颈啊?都不是瓶颈你异步干啥,直接堆机器不就完事了?

【在 b*******g 的大作中提到】
: 我说了,不是瓶颈的地方你使劲优化,根本没用。
b*******g
发帖数: 603
9
像你这样的单机在IO上就要挂,都没到抢票这一步,信不信由你。反正吹牛逼被打脸的
又不是我。
人贵有自知之明。

【在 n*****t 的大作中提到】
: 抢票不是瓶颈还有什么是瓶颈啊?都不是瓶颈你异步干啥,直接堆机器不就完事了?
n*****t
发帖数: 22014
10
操,单机 IO 能做到啥样都有数据,你是不是一点概念都没啊?
既然你认定 IO 都无法过,那还要求这个哪个干啥,直接发 5M requests 堆死老魏得
了,还算个屁啊

【在 b*******g 的大作中提到】
: 像你这样的单机在IO上就要挂,都没到抢票这一步,信不信由你。反正吹牛逼被打脸的
: 又不是我。
: 人贵有自知之明。

相关主题
[C++] 入门级问题 increment and decrement operators好虫,看看你的东东有没有问题?
请问C++返回值和返回引用区别node来势凶猛,已经完胜Ruby了
本版现在主题就是战啊。。。春运网站架构之争 MapReduce vs MPI
进入Programming版参与讨论
b*******g
发帖数: 603
11
光看spec没用的,你以为是helloworld。都是要做操作的。

【在 n*****t 的大作中提到】
: 操,单机 IO 能做到啥样都有数据,你是不是一点概念都没啊?
: 既然你认定 IO 都无法过,那还要求这个哪个干啥,直接发 5M requests 堆死老魏得
: 了,还算个屁啊

t**********1
发帖数: 550
12
光说不练不行。
再说练还是我练。
只不过要你要一点脸而已。还是为你好。

【在 b*******g 的大作中提到】
: 光看spec没用的,你以为是helloworld。都是要做操作的。
b*******g
发帖数: 603
13
我没吹牛,我丢不了脸。您老就不一样了,宇宙第一的算法连基本要求都满足不了。哈
哈。

【在 t**********1 的大作中提到】
: 光说不练不行。
: 再说练还是我练。
: 只不过要你要一点脸而已。还是为你好。

n*****t
发帖数: 22014
14
你是不是最这些基本信息一点概念没有啊?

【在 b*******g 的大作中提到】
: 光看spec没用的,你以为是helloworld。都是要做操作的。
b*******g
发帖数: 603
15
我的经验来自于实战,不是硬件的spec或者paper。这就是我们的区别。

【在 n*****t 的大作中提到】
: 你是不是最这些基本信息一点概念没有啊?
n*****t
发帖数: 22014
16
你有 OS 的实战经验不?没有跑一下别人的测试程序

【在 b*******g 的大作中提到】
: 我的经验来自于实战,不是硬件的spec或者paper。这就是我们的区别。
b*******g
发帖数: 603
17
我没有,但12306是个网站,你套OS的结果就像魏老师那样。

【在 n*****t 的大作中提到】
: 你有 OS 的实战经验不?没有跑一下别人的测试程序
n*****t
发帖数: 22014
18
IO 性能是网站?

【在 b*******g 的大作中提到】
: 我没有,但12306是个网站,你套OS的结果就像魏老师那样。
b*******g
发帖数: 603
19
说的就是网站的瓶颈,一般都在于数据库IO。像你们这样做到CPU bound,实在是不入
流。

【在 n*****t 的大作中提到】
: IO 性能是网站?
n*****t
发帖数: 22014
20
由 jvm 决定还是 os?

【在 b*******g 的大作中提到】
: 说的就是网站的瓶颈,一般都在于数据库IO。像你们这样做到CPU bound,实在是不入
: 流。

相关主题
铁道部的订票系统我的解决想法【C++】请问这样有没有memory leak?多谢
从工程角度再比较一下春运火车票的2个方案提高12306的关键在于大数据和筹划
说说魏老师犯的几个常识性错误。goodbug又丢人了
进入Programming版参与讨论
n******1
发帖数: 3756
21
我觉得可能大家的理解不同
表面看好像是分票的瓶颈,但实际上,如果只是把票分给用户,那是很简单的过程,再
慢也不会很慢
但是因为分票只要涉及支付等环节,交易需要确认,也有很多的查询,这些查询也要接
近实时,否则用户不满意,所以既不需要实时,也需要实时,还有临时取消的等等操作
,所以才复杂
按我想法,还不如搞一个类似彩票池的东西,在某个特定时间之前,大家都可以登记某
个车次的,不管快慢,售票关闭后统一抽签,不过因为人的自私性,大家可能登记多张
票,到时候拿到最优的就退掉其他的,这里怎么回收退票也是问题,而且交易一旦完成
,还要涉及退款
说来说去,网站其实是用户体验问题

【在 n*****t 的大作中提到】
: 抢票不是瓶颈还有什么是瓶颈啊?都不是瓶颈你异步干啥,直接堆机器不就完事了?
b*******g
发帖数: 603
22
缓冲池是必需的,至于抽签也好,排队也好,无非是不同策略。

【在 n******1 的大作中提到】
: 我觉得可能大家的理解不同
: 表面看好像是分票的瓶颈,但实际上,如果只是把票分给用户,那是很简单的过程,再
: 慢也不会很慢
: 但是因为分票只要涉及支付等环节,交易需要确认,也有很多的查询,这些查询也要接
: 近实时,否则用户不满意,所以既不需要实时,也需要实时,还有临时取消的等等操作
: ,所以才复杂
: 按我想法,还不如搞一个类似彩票池的东西,在某个特定时间之前,大家都可以登记某
: 个车次的,不管快慢,售票关闭后统一抽签,不过因为人的自私性,大家可能登记多张
: 票,到时候拿到最优的就退掉其他的,这里怎么回收退票也是问题,而且交易一旦完成
: ,还要涉及退款

n*****t
发帖数: 22014
23
其他不是瓶颈的部分都可以分布,只要堆机器就能增强体验,有些绕不过去的只好攻关
,而不是神马异步批处理这种。
现在争论焦点,是到底实时处理行不行,所以要测关键节点的性能。

【在 n******1 的大作中提到】
: 我觉得可能大家的理解不同
: 表面看好像是分票的瓶颈,但实际上,如果只是把票分给用户,那是很简单的过程,再
: 慢也不会很慢
: 但是因为分票只要涉及支付等环节,交易需要确认,也有很多的查询,这些查询也要接
: 近实时,否则用户不满意,所以既不需要实时,也需要实时,还有临时取消的等等操作
: ,所以才复杂
: 按我想法,还不如搞一个类似彩票池的东西,在某个特定时间之前,大家都可以登记某
: 个车次的,不管快慢,售票关闭后统一抽签,不过因为人的自私性,大家可能登记多张
: 票,到时候拿到最优的就退掉其他的,这里怎么回收退票也是问题,而且交易一旦完成
: ,还要涉及退款

z*******3
发帖数: 13709
24
实时只要你给钱就能做
这个digua不是给了你正确答案么?
非要这么严苛要求下去,最后成本会很高
做了干嘛?还不如上来就分布式
四平八稳,这正是做server sdie软件需要的素质
老魏那种做client side的,就知道快
就跟国足一样,踢球又不是田径,光快有用么?
又不是只有这一个指标,目标是进球
一样的,server side目标是让尽可能多的人买到票,不出错
而不是多快搞定,这又不是比赛
老中高考一样的思维方式应该改一改

【在 n*****t 的大作中提到】
: 其他不是瓶颈的部分都可以分布,只要堆机器就能增强体验,有些绕不过去的只好攻关
: ,而不是神马异步批处理这种。
: 现在争论焦点,是到底实时处理行不行,所以要测关键节点的性能。

n*****t
发帖数: 22014
25
几台 16 core 做中心节点狠花钱吗?几千块的网卡很贵吗?铁道部花不起这钱?能不
能少扯淡啊

【在 z*******3 的大作中提到】
: 实时只要你给钱就能做
: 这个digua不是给了你正确答案么?
: 非要这么严苛要求下去,最后成本会很高
: 做了干嘛?还不如上来就分布式
: 四平八稳,这正是做server sdie软件需要的素质
: 老魏那种做client side的,就知道快
: 就跟国足一样,踢球又不是田径,光快有用么?
: 又不是只有这一个指标,目标是进球
: 一样的,server side目标是让尽可能多的人买到票,不出错
: 而不是多快搞定,这又不是比赛

1 (共1页)
进入Programming版参与讨论
相关主题
提高12306的关键在于大数据和筹划新手请教:C++ decrement loop
goodbug又丢人了[C++] 入门级问题 increment and decrement operators
操!本版连interlocked指令都没有懂的?请问C++返回值和返回引用区别
我来写个老魏的详细实现方案。(更新了缺点)本版现在主题就是战啊。。。
古德霸放个带细节设计的方案吧好虫,看看你的东东有没有问题?
请问如何实时处理Analog信号呀?node来势凶猛,已经完胜Ruby了
为什么我看不懂下面的code,是不是水平还不够?春运网站架构之争 MapReduce vs MPI
一道bit operator面试题铁道部的订票系统我的解决想法
相关话题的讨论汇总
话题: 瓶颈话题: 妥协话题: 不是话题: 12306话题: 分座