程序开发时,你是否会实现无理或不切实际的要求

2016-09-03 18:12:37 +08:00
 auser
C 语言从零独立开发服务端软件。网络编程范畴,多进程和多线程共同配合完成功能(有进程间通信的数据),主要和核心逻辑都在多线程的进程里。程序实现了线程安全的 socket 文件描述符的引用计数(两种方式,类比 shared/weak ptr )等复杂的功能。实现了配置热更新、多线程日志模块的重复日志内容消除、非重要数据统计等功能。整个程序用到了多个红黑树实例,这些数据结构每秒有上万次更新,需要做到线程安全的增删改查。偶尔还有遍历这些数据结构的功能。

最要事情重复下:最核心的数据都在红黑树里和引用计数的资源池里保存着,红黑树每秒上万次查询和更新(按照 50 万次每秒查询的要求讲吧,目前线上运行的实际情况最低要求是 18 万无压力,所以大家如果给解决方案,比如说保存数据到 redis ,要考虑下性能要求),引用计数部分每秒会变更 N 多次。它们需要做到线程安全,因为不仅有多个线程会使用它们,还会有控制模块删除它们。

对于这样一个程序,如果合作方的领导不听你解释,一再要求程序实现程序任意时刻挂掉后能自主恢复继续运行,根据上文描述,你是否会实现这个功能?

强调这个功能的原因是因为之前他们的第三方合作经历,让他们觉得这个功能很有必要。我拒绝的原因是实现这个功能会极大地增加各个模块的实现难度和复杂度,最终会严重影响性能(我就不说怎么吐槽我说因为性能不做 XX 功能的给我评价的原话了)。或者说,即便能做,那么多数据的一致性问题不说,我认为很难做到原子性备份。而且做这个功能,会极大延长工期。

或者讲你遇到这个事情会怎么处理?目前结果是,程序上线后,没有挂过一次。但是指责了我不做 XX 功能的行为。
1102 次点击
所在节点    问与答
3 条回复
rrfeng
2016-09-03 19:20:19 +08:00
无非两种:强数据完整性和非强数据完整性。

如果是前者,那么你不能放弃这个自主恢复的功能,否则一切都变成浮云了。

目前没挂过,不代表以后不会挂。即便是你的程序一点 bug 也没有,系统还会宕机,机房还会断电,淹水,雷劈。

如果是后者,直接说服领导不就行了?
coderluan
2016-09-03 22:35:03 +08:00
该拒绝肯定得拒绝,但是拒绝也是有技巧的。
直接和对方说做不到,肯定是不妥的。
因为对方会提这个需求,就是不懂技术或者懂但是认为有可能。
所以一定要从可能性上说明对方,可能性主要就是两个方面:
一个是时间上的,说明这个项目的工作量和估计时间,表示现在时间不够,你可以加班加点的做,但是最终能不能赶上不敢保证。
第二是性能上的,这个需要你具体的估算一些带宽算一些负载,说明目前做不到,最好再给出个一定可行的方案,然后让对方做选择。
做到上边说的才能说是专业,而且一般人也都能接受这些理由,即使他还让你做,但是也都做好了失败的心理准备。

如果对方根本不听你的解释,剩下的只是尽人事以听天命而已,事后如果被追究或者甩锅,那样可以想想后路了。

之前我就做过一个项目, CTO 使用了错误的性能估计方法(脱离 cpu 架构只算主频)大大低估了项目难度,然后我们写了一些 demo 和 benchmark ,让对方相信了我们的结论,最后项目两个部分只成功了一个,另一个多用了一倍时间,累成狗屎肯定的了,但是并没有受到什么职责反而拿了不少奖励。
taresky
2016-09-03 22:44:42 +08:00
对方领导不听解释,非要你做,这点完全可以啊。

谁决定、谁负责。

非得让你实现的人,他要为工期延误、性能不佳负全部责任。你要做的把所有沟通内容通过邮件保存,并且告知你的专业意见,最终让他决定。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/303695

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX