跳转至

开篇词 如何成为金融级人才?

你好,我是任杰。从今天开始,我将带你深入探索分布式金融系统架构。

说起金融,这是一块硬骨头,我甚至觉得,金融系统是架构界的珠穆朗玛峰,登峰不易,但是一旦攀登上来了,就会发现这边风景独好。

我这么说,也不仅仅是因为自己在金融领域摸爬滚打了十几年,亲身体验了所以盲目自信,这几乎也是一种共识。

我还记得很多年前大学软件工程课上,老师介绍过几个最复杂的软件系统,有军用软件、操作系统,还有金融行业的软件。

军用软件的复杂度在于需要实时处理武器信号,操作系统的复杂度在于需要在功能的多样性和效率之间做一个良好的平衡,而金融软件的复杂度在于如何在软件系统的演进过程中保持并证明系统的正确性。

金融软件这么复杂,那它独特的魅力又在哪儿呢?

这就得从08年金融危机前夜的时候聊了,那会儿我刚刚毕业,阴差阳错地进入摩根士丹利做了一名程序员,一呆就是近十年。

这期间,我目睹了华尔街金融公司由盛转衰的过程。盈利压力迫使公司对系统做了大刀阔斧地升级,我也有幸全程参与了这个改造过程,了解了金融公司大部分的系统和几乎所有金融产品。

之后我便从面向企业的金融业务转向了面向大众的普惠金融。这期间我担任过很多角色。作为机构用户,我对接过第三方支付系统;在蚂蚁金服亲身了解过成熟的第三方支付系统;在eBay呢,我带着团队从头实验了一个更好的第三方支付系统。

这十多年来,我每天都在解决金融系统大大小小的各种问题,同时,我也在这件又复杂又困难的事情中获得了极大的成就感。在这个过程中,我渐渐地把零碎庞杂的知识和经验都串联了起来,形成了自己的一套体系。

正是因为这些经历,最近几年,身边越来越多的朋友找到我,他们的金融系统也希望通过重构来解决历史遗留问题,但是踩坑不断,希望我能给一些系统的经验。这样的交流多了,我发现,金融软件似乎已经成了某种行业标准,现在大家都在谈“金融级软件”和“金融级人才”了。

那到底什么是金融级软件呢?怎样才能成为金融级人才呢?

首先,我们得知道金融软件要解决的核心问题是什么?没错,就是钱!钱一旦处理错了,那可就是真金白银的损失,所以任何一家金融机构对系统错误都是零容忍的。

这样的特殊性,使得金融级软件系统区别于很多其它的大型软件系统,它对正确性以及速度都提出了更高的要求。

那面对这样的金融级软件,金融级人才又需要怎样的能力呢?

假如你现在是一个金融系统的负责人,你需要在系统正确性和吞吐量之间做个选择。很显然你会毫不犹豫地选择正确性。

但是如果有人告诉你,系统吞吐量出现了问题,用户可能就转不了钱了,这样会造成恶意挤兑,从而形成恶性群体性事件。那么你又该如何选择呢?你很有可能会进退维谷,在两难之间犹豫。

其实这个例子就反映了我们对金融软件质量的要求。衡量软件质量有很多种不同角度,一般的软件我们会选择在矛盾中取舍,但是金融软件则要求我们尽可能在所有的地方都做到最好。

这种在矛盾中同时追求极致的要求,就是对金融级人才最大的挑战。这也是你进阶资深架构师乃至公司技术决策者的必经之路。

如果你想同时改善两个相互矛盾的需求,比如我们前面说的系统正确性和吞吐量,就需要付出巨大的代价。这个代价不仅仅是指开发成本或者运营成本,还包括了你的思考成本。你不仅仅要在有限的资源下,思考如何调和各种矛盾的需求,还要考虑怎么保证未来系统迭代之后,还能坚守现在的系统承诺。

这就考验到金融级人才的一个核心能力——透过现象看本质。了解了本质,也就能推演出事物发展的规律,从而把握先机,未雨绸缪。

总结一下,金融级系统需要滴水不漏,而金融级人才要求见微知著。

这门课是怎么设计的?

我们这门课的目的就是带你实现金融级架构,帮助你成为金融级人才。

我是从对事和对人这两个角度来设计课程的。

对事的角度比较简单。我希望你能在学完所有课程之后,对金融行业需要怎样的系统建立一个比较全面的认识,知道系统里都包括哪些重要组成部分,以及每个部分的技术挑战点在哪里,常见的技术解决方案都有哪些。

最重要的是,你会掌握金融软件架构的整体思路,知道都有可能出现哪些矛盾,以及出现这些矛盾的时候你都有哪些选择。

对人的角度比较困难,也是我个人的一些期许。在这短短的二十多讲里,我会带你初步了解金融业务为什么会有这么多分类,金融软件究竟解决的是什么业务问题,金融软件系统是怎么一步步发展到现在这个样子的。还有最重要的一点,我会为你剖析上述问题的本质究竟是什么。

为了帮助你循序渐进地学习,我把这个专栏分为3大部分。

第一部分,金融与业务系统。

这部分我们将围绕常见的金融业务生态及其系统架构需求进行讲解,重点包括第三方支付、交易所、券商、银行和投资银行等等。搞懂了这些金融机构和业务的特点,我们还要总结共性和技术逻辑,给你分析如何利用领域驱动设计的思想来更好地解决金融软件的复杂度问题。

第二部分,系统的正确性保障。

了解了金融业务以后,我们就可以对金融软件质量提出要求了。这部分我们重点学习如何保证金融系统架构的正确性,具体包括业务处理的正确性以及数据处理的正确性,它们是金融系统的必选项。最后,我还会讲到系统优化,让你在保证系统高正确性的同时,也能合理追求速度。

第三部分,分布式正确性及高可用。

针对复杂系统一定是重在实践的,所以这部分我会以分布式系统环境为背景,重点讨论分布式一致性的存在条件、分布式共识算法、分布式的事件溯源架构、分布式数据方案的设计原理以及数据系统的实时动态分库等等。

这部分的每节课都是线上环境中会遇到的关键问题。学习难度逐渐升级,结合实际案例,寻找问题本质,落地前面所学。另外,我还会分享一个金融领域绕不开的话题——容灾,重点讲解跨机房实时容灾以及如何提高系统稳定性。

好了,关于课程设计我就交代到这里。我真的希望能够和你在课程里相遇,我们一起死磕金融系统。课程的内容确实覆盖广、难度也不低,课程里讲解方案、思路的内容会比较容易一些,而深入原理的部分会有一定挑战性。所以我也先给你一些学习小窍门。

如果原理讲解的内容,你学起来感觉很吃力,建议你可以先通读一下,对整体思路有一个认识以后,再深入学习难点部分。如果你想对金融架构的理解更上一层楼,就绕不开这爬坡的过程,这也是我自己学习的一点经验。当然了,有什么问题你可以通过留言反馈给我,我们一同交流探讨。总之,我希望你碰到困难不要放弃。

最后,我想和你说几句我的心里话,也是我这几年一直在思考的事儿。

金融行业属于国之重器。但是,金融软件和很多其它行业专用软件一样,一直以来都处在国外垄断、国内追赶的过程。

这些年,金融改革和开放步伐也越来越快了,我们既会碰到国内日益增长的金融需求,也会碰到国外成熟金融系统的降维打击。这个行业太需要人才了,如果你有兴趣加入,那么这大概是一个最好的时代,和一百多年前一样,我们可以师夷长技以制夷,从容应对,大展身手。

好了,事虽难做则必成,就让我们开始金融系统的探索之旅吧。最后的最后,送给你一句话,作为我们的开课寄语。

金融系统是一条通往软件工程巅峰的少有人走的路,坚持下去,最终一定能会当凌绝顶,一览众山小。

精选留言(15)
  • Jerry Wu 👍(38) 💬(5)

    在前东家那儿,我就是做第三方支付和交易的。对接第三方支付公司,把这些公司的支付接口封装成自己的产品。 举个例子,我司在支付宝、微信各开一个账户,都申请开通转账接口,这样就有两个转账接口了。 接下来,我就把这两个转账接口再次封装,变成一个统一的转账接口。下游用户只要对接我这个接口,就可以同时用支付宝、微信的转账了。 当然,我封装这个接口也不是白干的,你每转账一次,我就多收一点手续费。 老师,我这样算敲开金融的大门了吗😂感觉就是个中间商

    2020-12-21

  • 黑山老妖 👍(24) 💬(1)

    除了CFA以外,国内也有其它一些重要的证,比如CPA、基金从业资格、证券资格从业考试等等。这些考下来,就不需要做技术开发了。

    2021-01-03

  • 木木夕Ace 👍(17) 💬(1)

    处理和钱有关的业务慌的一批

    2020-12-21

  • WideBook 👍(12) 💬(1)

    老师您好,看到这门课的时候,感觉如获至宝!我有个职业规划的问题想咨询一下。我是一名Java开发工程师,个人对金融也比较有兴趣,所以近期打算进入互联网金融行业从事开发工作。同时为了弥补金融领域知识的空白,准备考CFA,以考证的方式督促自己学习,同时获得更多的业务知识,提升金融领域的资质。这是短期也就是2021年的规划。长远的话希望用5年时间在技术和业务两方面更精进,然后转型金融行业技术管理人员。这是个人一点想法,希望能得到老师的指点。

    2020-12-29

  • 楼下小黑哥 👍(8) 💬(2)

    一看到这个专栏,立刻下手了,终于看到有分享偏业务方向的专栏了。 我个人是一名从事支付行业后台开发,之前刚接触的支付的什么都不懂,很多不知道怎么实现。 后面加入一家支付公司,从渠道对接开始,慢慢了解收单系统,才知道有些业务原来是这么实现的。 这一路上我发现支付业务很多东西其实做过的人都觉得不难,但是没做过,不了解的人就会觉得很难。 而网上其实有很少有这类知识的分享,所以对于刚接触的同学来说可能真的就比较困难。 老师这门课程我觉得正好可以弥补这方面的空缺,跟着老师学完这门课程,加深行业知识。

    2020-12-24

  • Geek_9c3134 👍(6) 💬(3)

    老师 能推荐金融系统的相关书籍或者资料吗 还有如何搭建第三方支付 需要什么 如果有源码参考更好

    2020-12-21

  • STW_wyf 👍(5) 💬(1)

    老师,可否涉及一下后台大数据量批处理设计方案呢?

    2020-12-21

  • Monday 👍(4) 💬(1)

    我来了,大哥 算是在金融行业第四年了。。

    2020-12-22

  • Kyle Liu 👍(3) 💬(1)

    正在做和支付相关的事情,非常期待老师的课程

    2020-12-23

  • JianXu 👍(3) 💬(1)

    非常期待任老师的后续更新!我也借这个机会能够系统的学习一下我司的支付核心系统。更重要的是现象背后任老师的思考,那些更加本质的做系统和带人的经验。

    2020-12-21

  • 上帝打草稿 👍(1) 💬(1)

    今天收到了光大银行信用卡中心的面试邀请,其实很没底儿,因为属于自己的业务盲区,想到之前在极客收藏的这个专题,果断拍了,临阵磨枪吧!精读3天,希望对面试有帮助,很想进入这块领域?

    2021-07-18

  • 小鸭子 👍(1) 💬(2)

    首先感谢老师开这门课,真的对我很有帮助!请教老师一下,我们公司属于什么支付?我们这家公司是和银联还有银行合作的,主要客户是第三方支付公司,包括蚂蚁还有京东,做一些代付和代收业务,一般对外,我们都称自己是银联,像是银联的服务商,不知道是属于那种类型的公司?

    2020-12-24

  • 江世民 👍(0) 💬(1)

    老师好,我是20年刚毕业,在某大行的软件开发中心做贷款业务线,真的是感觉金融业务的复杂度一点不低于技术的复杂度,工作半年下来还是感觉只摸到了门边。然而我现在困惑的是,银行里做技术架构的和做业务的是分开的,很难有机会全面地锻炼到技术架构能力

    2021-01-05

  • 李俊超 👍(0) 💬(1)

    终于等到您

    2020-12-22

  • gopher 👍(0) 💬(1)

    做了很多年清结算,思考较少,希望这次能系统学习一下,谢谢

    2020-12-22