[吐糟向][感悟向]说说呆在金融行业 IT 这几年

2015-09-05 16:21:45 +08:00
 miemiekurisu
在金融行业 IT 呆着也到了 8 个年头,职位也上到架构师级了,吐点糟吧,说说我眼中的印象。

[印象一] 封闭,极端封闭。
这是个极端封闭的行业, N 年来应用架构方案只有有限几种: struts , spring MVC ; EJB, spring ; hibernate , mybatis 。数据库方案屈指可数: MS sqlserver, DB2, oracle.
有很大一部分是由于行业的极端需求决定的,对新技术的应用都非常谨慎。
不过现在也开始有些转变,部分公司的外围系统开始出现一些 hadoop , node.js 之类的新兴技术框架。
其实我个人对此的观点是,应用架构都是领域驱动的,技术是一码事,新技术未必适合这个领域。片面追求技术是危险的。
不过有很多明显可以提高生产力的技术却没有得到应用,就有点让人觉得不可理解,这个印象三里会讲到。

[印象二] 不差钱,买买买。
所有东西都是“买买买”,从应用到维保。
我完全理解“专业的事情要交给专业人士处理”这种观点,并且认为这是种正确观点。
但是我不觉得光花钱就可以买来专业。

[印象三] 一些反思
这部分想说说曾经经手的几个项目,和一些反思,就当是回顾总结吧。
普通的应用项目,我觉得都不值一提, Java 的企业应用基本就那么回事吧,体现在对技术框架本身和业务理解上。

1. 某 DW/BI 项目
这个项目比较有意思,当时 Global 对这个 local 的项目并不是很感冒,所以没有资源支持,所以基本上一个人担纲设计到开发的所有任务,而且还没有预算。
项目的主要问题有 4:
数据源复杂: 公司运作了几十年,各种数据源都会有, AS400 , Oracle , MS SQLServer, Excel, Access, Txt ( CSV )……
数据是有时限的: 有一堆特定数据是需要在特定时间导出的,简而言之,过了这个村,就没这店了。
没有数据内涵的 support: 其实这是最难的,给你一堆英文首字母组成的表名和列头,跟乱码有什么区别……对吧……
数据量大:这个是所有像样一点的 DW/BI 项目都会遇到的问题
所以当时做了这样的设计:
ETL 用了著名的 Spoon ,当时还叫 Kettle 。解决了复杂数据源问题。作为一个成熟的开源 ETL 工具,几乎完美的解决了多数据源问题(说几乎是因为我始终没能解决 AS400 的双字节乱码问题,最后是通过开发插件处理二进制流,部分解决的)。
定时抽取问题是 shell 脚本配合 cron 解决的,利用系统级定时调度器也是 spoon 官方推荐的方案。
数据内涵完全是靠表数据和业务数据逆向出来的,此过程之痛苦真难以用笔墨形容……一边对照业务流程操作,一边对比 spoon 增量更新数据,花了差不多两个月把大约 200 张表和业务的逻辑勾稽搞清楚了。
数据量大本来不是问题,但是当 global 对项目不怎么感冒,而且对应用管理严格的时候就成了个问题。不能在服务器上架设 policy 以外的数据库,开源数据库统统阵亡,因此可选的数据库只有 2 种( MS SQLSERVER, oracle, 其实…… access 如果算数据库的话可以认为是 3 种),而 Oracle 的 license 不够,所以就只能选择 SQL server 。实话实说,巨硬产品相对来说还是比较靠谱的,最后把仓库架在了 SQL server 的多节点负载均衡上(别跟我说巨硬有 DW 专用组件,那个没买),当然其中使用了各种不愿再回想起来的奇技淫巧。
报表展现层其实有诸多选择,当时考虑的是开源项目中比较成熟的 Jasper Report 。开始用 Eclipse BIRT ,那玩意只能说是“勉强可用”。 BI 部分,在 DW 上架上了 SpangoBI, 但是只用了其中一小部分功能( MDX 及其展现)。
当时报表和多维分析时效是 T+1 的,后来想想,既然有时间戳增量更新,其实可以做到 T+0 ,如果把数据模型细分,可以做到准实时,只不过当时没这样的要求罢了。
项目前后大约折腾了 3 个多月,主要时间还是花在逆向表数据上。
反思一下的话,如果用 PostgreSQL 性能应该更好些,可以避免很多奇技淫巧的坑。总的来说,没留下什么坑,也不怎么需要维护。不过前面所说的“封闭”,可见一斑。

2. 某数据分析项目
这个项目就更有意思了。项目详情不能透露,大体上是找麦肯锡做的咨询,花费是千万级的(不差钱,买买买)。
神奇的地方在于,麦肯锡给了 2 张无法实施的纸就拿走了千万。两张纸的模型精度是多少呢? 据说α=0.3 。看到这里估计有童鞋要喷老血了,这不是只比瞎蒙高那么一点么…… 好吧,项目还真就跟着这个比瞎蒙高一点的模型走下去了,看起来也像成功了……至于是不是真的成功那只有用的人自己知道了。
这个项目可反思的东西就多了。
建模方面看的话,觉得建模方法本身就有些问题。对于达到 TB 规模,变量超过几千的数据,我的感觉是传统的统计方法有一部分不再适用,并不是说统计没有用,而是方法需要转变。
这种情况下,我更倾向于先进行无监督聚类,再通过一定程度的抽样即可将现有数据都打上分类。模型生成方法更倾向于 AdaBoost 或者随机森林,速度快,精度也不低。
实际上有偷偷试过几下,裸数据聚类并分类生成的模型( AdaBoost )预测准确率大概在 76.4%左右,调整一下应该能上 80%。
不过呢,这事情有点微妙,你总不能说那千万都白花了吧。
架构方面看(……当然不是我搭的,当然,如果是我搭的糟点也许会更多也不一定),采用传统的 SAS+Java+Oracle 真是充满了糟点。完全可以采用 ETL+hadoop+RHadoop (对不起我是用 R 的,也许有更好更快的方案,比如 spark )。 首先,对一个没有遗留系统的项目,没有看出采用 SAS 的必要性;其次, Oracle procedure 处理的效率跟 hadoop 和相关组件根本不在一个数量级上。

(待续了)
15550 次点击
所在节点    职场话题
79 条回复
minvacai
2015-09-05 16:32:47 +08:00
坐等后续
dbdd
2015-09-05 17:10:35 +08:00
关注后续
flynngao
2015-09-05 17:10:49 +08:00
终于看到一些养分
zartouch
2015-09-05 17:22:22 +08:00
同在金融行业,看到 lz 发帖我也说下我的感受。

买买买是真的,就算开源的东西,比如 cassandra 数据库也一定是用 Datastax 这样的商业版。这玩意一定要有人背锅才可能会去用。

还有感觉一点各种事情都要走流程申请,包括之前升级 intellij 14 申请了快 3 周才下来,升级 chrome 也要 1 周多,还有各种封网站上不去,包括 google groups ,简直我去了。。。

但是技术的话我觉得看项目,不管我之前呆过的基础设施平台项目用的 cassandra ,, nodejs, redis, java 用的 7 也不算老。况且那时候是 1 年多以前了。我们收集日志数据分析也有用 hadoop 虽然我没有参加那部分工作。

现在的股票衍生品交易系统后端语言 scala 2.11 ,数据库是 mongo ,使用的框架比如 reactjs, vertx, akka ,以及使用 event driven 模型构架在互联网来说都比较新了。

我的感觉是有些很新的技术实际用起来坑是很多的,再更注重业务和稳定的传统金融行业其实并不是特别好的事情。很多新的特性看起来挺美好,但很多时候你要自己想办法造轮子填坑效率其实并不会更高。
WildCat
2015-09-05 17:56:32 +08:00
@miemiekurisu
@zartouch

楼主好, 4 楼层主好。自己是金融类专业(专业名太渣就不说了)的学生,以后也想从事类似专业,所以想请教两位前辈几个基础性的问题:
1. 计算机基础是否重要?看到楼主说到算法,这方面需要补充到什么水平?其他计算机基础知识有什么推荐吗?
2. 数学基础的重要性如何?楼主介绍的“某数据分析项目”中有提到模型是其他公司做的,那么对自己的数学基础有多高的要求呢?
3. 接触的应用层开源项目问题。由于编程一直仅仅属于自己的兴趣,接触的东西都比较“互联网化”: iOS 、 Android 、 Rails 、 Python 。 Python 方面对 SciPy 、 NumPy 接触也不多。看到楼主说用到的是“ struts , spring MVC ; EJB, spring ; hibernate , mybatis ”之流,不知对于我这样的大约 3 年后工作(可能读个英硕)的学生来说,学生时代应该接触项目有什么推荐?
4. 由于自己金融知识学得还是比较基础,对于问题 3 中推荐的开源项目,能否提几个可以应用的场景(想法)?
5. 大公司是否看重学术水平?如果有发表过 SCI 论文是否可以加分?

感谢。
wy315700
2015-09-05 18:03:00 +08:00
金融,包括工控,对 IT 的要求就是,稳定
你可以不是最新技术,可以很难用,可以很卡,但是,你不能丢数据,不能崩溃。
很多新技术看起来好,但是没有经过行业的证明,,谁也不敢用。

13 年的时候,一家银行因为 DB2 的内存管理问题造成了不能取钱,还有一个在升级的时候遇到问题,只能回滚, DB2 这种软件在升级的时候发现问题可以回滚,但是现在看起来一些先进的技术,升级的时候遇到问题能回滚吗,,,
phoenixlzx
2015-09-05 18:04:01 +08:00
咩咩在群里被我们吐槽终于受不鸟来讲故事了 www
jadetang
2015-09-05 18:15:50 +08:00
@wy315700 你说的是宇宙行吧。当时我正在宇宙行做开发,那个事情蛮大,最后变成一个三级问题了。
leeoo
2015-09-05 19:03:22 +08:00
我干金融 IT 快三年了, LZ 说的很多和我公司一样,我是投行相关的业务。以下是一些吐槽。
生产环境上的数据库都是 Sybase, DB2, SQL Server 和 Oracle ,目前 Sybase 基本快淘汰了, Oracle 是主力。(去年换了个大老板,我们 Credit 部门也开始搞起 Code Review ,一键 build+deploy 之类的,终于看到有人在 Dev 服务器上装上 Postgres, SQLite 和 MySQL ,只不过仅仅限于一些项目组里的临时构建系统使用,正式 build 系统还是换成 Oracle 了。)

不管是 PC 还是 Server 安装软件都得填写申请,而且需要经过各级各种 Boss 批准。
(若是 PC 上的软件, Boss 批准了但是 TI 执行时不一定会给你装申请的版本,比如我最近因为项目升级到了 JDK1.8 所以为了支持 Java 8 的新特性填了装 Eclipse 4.4.2 的 ticket ,谁知 TI 还是给我装了 Eclipse 4.3.0 ,无语!找到 TI 他说软件库里没有这个版本,我把软件仓库系统里可用的 eclipse 4.4.2 截图给他,他说他们自己内部的软件仓库里没有,没法给我安装 - -!最后扯了很久就以别的同事机器上的 eclipse 4.3.2 做 mirror 给我装了,勉强支持 Java 8 新特性。。)

很多项目里喜欢拿别以前旧项目里的 jar 包用,也不仔细分析下到底适合不适合用。觉得是 Weblogic 之类的商业产品用上没报错就行了,连一些 core service 之类的都这样引用,搞得现在一些项目里出现严重的 jar 包冲突问题。大多数项目用的 Ant ,很少用到 Maven ,导致 jar 包到处拷贝,版本库上也到处是 jar 包, checkout 个项目可以去喝杯茶。

另外大多数系统还是用的 CVS 管理源码版本, SVN 也不多, Git 就一两个比较新的跟大数据计算处理相关的用到了。。
miemiekurisu
2015-09-05 19:03:32 +08:00
@zartouch ……你们可能偏金融交易,变化比较快。银行保险业变化非常慢。还是那句话,技术因为需要才需要,很多新技术坑确实不少,但是片面追求稳定而抛弃一些成熟的新技术,无视效率低下也很令人惆怅啊(望天
zartouch
2015-09-05 19:04:08 +08:00
@WildCat

1. 这个不用问,做哪行基础肯定重要的。计算机基础的话,你不是计算机专业的可以找 coursera , 网易公开课什么的先看看。挑感兴趣的深入就好。如果只是像混个职位,任何大公司看待应届生,都并不需要马上能产出的人,而是看着基础和潜力。

2. 这个看你做啥了,一般应用层开发不重要,不过很多核心库类,高频交易系统是需要的。当然基础是要懂的。

3. 你的知识广度你现在不用担心太多,好好学好学校的基础知识,思维方式,解决问题的能力,沟通能力比你担心的那些所谓的框架知识更需要你去提升。那些东西到现在我有大半都没接触过,但如果只是去用用的话,不过是去查查官方文档,照葫芦画瓢的事情。

4. 我去银行的时候,完全不具备金融知识,程序员肯定是计算机知识为主要考核内容,金融知识你会是优势,不会也可以进去慢慢学,金融类开发业务知识很重要,但是学生时代不用担心太多。问题 3 的那些框架在一般企业级,互联网公司用的也挺多,属于 java 项目的常用框架,在金融里也没啥不同。

5. 可能有的研发岗位看重,不过大多数企业的开发岗位来说没有太大意义,还不如实习经历,当然这是一般情况,毕竟你本科也不太可能有太高质量的学术论文发表,如果真有,其实说明你更时候混学术界
miemiekurisu
2015-09-05 19:05:21 +08:00
@wy315700 这种时候 DB2 , Oracle 是恰当的,领域需求如此。
WildCat
2015-09-05 19:08:24 +08:00
@zartouch 感谢!
“不过很多核心库类,高频交易系统是需要的”能否举几个例子?谢谢!
wy315700
2015-09-05 19:32:15 +08:00
@miemiekurisu
对的,,开源软件,达不到那么高的安全性要求的其实,,,
Shared
2015-09-05 19:35:30 +08:00
@wy315700 [Citation needed]
zartouch
2015-09-05 20:01:48 +08:00
@WildCat

比如说自动交易策略,虽然 quant 会把逻辑写好,但很多时候写的很烂,是需要程序员优化的。再比如交易系统中获取价格数据的模块是需要高频率低延迟的。

高频交易就是指比如证劵交易,获利手法比如通过短暂的价格变化可以用来套利。

上面某些专有名词不做解释了,我希望你还是自己 google ,包括你问这个问题其实也可以 google 比如高频交易系统有哪些,或者 wiki 得到。获取知识的能力还是要有的, google is friend :)
miemiekurisu
2015-09-05 20:02:02 +08:00
@WildCat 看你想怎样……混个稳定的话怎样都可以,有学习能力的话随便跟着项目混 2 个月就能上手了。
问题 1 的话,我不是计算机科班出身,没法回答你。很多东西都是工作以后学的。
问题 2 的话……我是数学系出身的,也没法客观回答你。但是就我的经验来说,数学的学习对于逻辑思考能力,抽象能力和设计能力是非常有帮助的。毕竟无论的业务流程还是系统,都必须合乎逻辑。
问题 3 ,技术框架的使用是领域驱动的,而且很多情况下受技术外因素影响。举个例子,设计业务系统,即使我用 python 花两个月就可以上线,也只会考虑传统的 Java 框架,即使要花 6 个月。因为 python 找人难且贵。多数提到的开源框架,学生时代我都没接触过。
问题 4 ,我的感觉……都是做中学。当然,了解一些没什么不好。而且特定领域,例如精算,量投等等相关开发工作都需要比较专业的业务知识。
问题 5 是学术向的,不过很多比较大的公司会有 researcher 的职位。
miemiekurisu
2015-09-05 20:04:28 +08:00
@wy315700 额………这看方案,以及出事以后涉及谁背锅的问题
miemiekurisu
2015-09-05 20:17:17 +08:00
@leeoo …………你们正处在旧石器时代……自从我搭了个 jenkins 之后我们公司刚部分脱离新石器时代……
WildCat
2015-09-05 20:28:38 +08:00
@zartouch
@miemiekurisu

十分感谢!

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

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

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

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

© 2021 V2EX