《为什么一家传统券商选择将交易系统容器化?》要点:
本文介绍了为什么一家传统券商选择将交易系统容器化?,希望对您有用。如果有疑问,可以联系我们。
老司机简介
前一段时间中国银监会在“十三五”规划当中提到银行业应该稳步实施架构迁移并逐步过渡到云计算架构平台,广发证券在这方面做了很长时间的探索.
广发证券于2014年Docker等容器技术尚未盛行之时开始投入容器化技术的研究,并于2015年开始大规模投入应用—成交量六百亿(2015年)规模的金融电商平台、消息推送日均数千万条级别的社会化投顾问答平台以及日均流经交易量峰值近五十亿的交易总线均被容器化;投入生产的容器化云服务包括行情、资讯、消息推送、自选股、统一认证、实时事件处理等.
我们研究和应用云技术的动机,来源于对“黑天鹅”事件的应对.“黑天鹅”这一概念,是在美国学者、风险分析师、前量化交易员、前对冲基金经理塔勒布(Nassim Nicholas Taleb)的《黑天鹅》(The Black Swan – The impact of the highly improbable)一书发表后在全球被得以高度认知.
在发现澳大利亚之前,17世纪之前的欧洲人认为天鹅都是白色的.但随着第一只黑天鹅的出现,这个不可动摇的信念崩溃了.黑天鹅的存在寓意着不可预测的重大稀有事件,它在意料之外并且后果非常严重.
一个黑天鹅事件,具有这三个特点:(1)稀缺、通常史无前例(rarity),(2)影响很极端(extreme impact),(3)虽然它具有意外性,但人的本性促使我们在事后为它的发生找到理由——“事后诸葛亮”,并且或多或少认为它是可解释和可预测的(introspective).IT系统、尤其是资本市场里的交易系统,所发生的各种重大问题,其实是很符合黑天鹅事件的特点的.
塔勒布用“感恩节的火鸡”很形象解释了黑天鹅的概念——直到被宰掉成为感恩节火鸡晚餐前的每一天,火鸡都应该是活的很不错的,它的一生里没有任何过去的经验供它预测到自己未来的结果,而后果是致命的.
一套复杂的IT系统,很有可能就是那只火鸡,例如就个人近年所遭遇的类似事件最典型的两次,一是与某机构对接的技术接口,据称已经存在并稳定使用近10年 – 虽然技术古老但是从未出现问题,然而在过去两年持续创新高的交易量压力之下,问题终究以最无法想象到的方式出现并形成系统性风险(因为对接者不仅一两家);
另一,则是老旧的系统因对市场可交易股票数目作了假设(而从未被发现),某天新股上市数量超过一定值而导致部分交易功能无法正常进行.
这两个例子都符合黑天鹅特征,一是“史无前例” (如果以前发生过,问题早就被处理了),二是可以“事后诸葛亮”(所有IT系统问题,最后不都可以归结为“一个愚蠢的bug” ?因为开发时需求不清楚、因为开发者粗心、因为技术系统所处的生态环境已经发生变化导致原假设无效);
三是“后果严重”(如果技术系统本身是一个广被采购的第三方的商业软件,则整个行业都有受灾可能;如果是自研发的技术,则最起码对交易投资者造成灾难性损失).
事实上,资本市场乃至金融业整体,可能都是黑天鹅最爱光顾的地方.甚至连普罗大众都听过的例子诸如:2010年5月6日的Flash Crash ——在三十分钟内道琼斯指数狂泻近千点、1987年10月19日的Black Monday、国内著名的“乌龙指”事件导致的市场剧动……不一而足.
导致黑天鹅降临的原因,事后分析五花八门,可能是量化交易导致的、可能是市场流动性不足引起的、也可能是市场心理(例如恐慌抛售)触发的……无论何者,IT系统几乎都是最后被压垮的那只骆驼.正如塔勒布文章中提到,高盛在2007年8月的某天突然经历的为平常24倍的交易量,如果到了29倍,系统是否就已经坍塌了?
事实上,在这个日益数字化的世界,本身就高度数字化的证券市场,面临的黑天鹅事件会越来越多,出于但不仅限于以下一些因素:
数字世界,尤其是金融业的数字世界,正好是塔勒布笔下所谓的“极端斯坦”(Extremistan),它完全不受物理世界的规律影响—— 一切极端皆有可能.例如在物理世界常识告诉我们,一个数百斤的超级胖子的体重加到1000人里面比重依然是可以忽略不计的;但在金融世界,一个比尔盖茨级别的富豪的财产数字,富可敌国.
金融IT,正好生存在这么一个“极端斯坦”——这里复杂系统内部充满难以察觉的相互依赖关系和非线性关系,这里概率分布、统计学的“预测”往往不再生效.塔勒布称之为“第四象限”,我们,作为证券交易的IT,刚好在这个象限里谋生.
(塔勒布《黑天鹅》第四象限图)
上述这一切,和云计算有什么关系呢? 我们觉得非常紧密,逻辑如下:
即便到了今天,相信很多企业、机构的机房里的运算资源,依然不是“数目字可管理” – 这本身真是一个讽刺.但直到云技术出现,才解决这个问题.结合云计算的技术,交易系统不再是“your grandmother‘s trading system”.
黑天鹅事件是不可预测的,但是并非不可应对.《黑天鹅》的作者塔勒布,在其另一本有巨大影响力的著作《反脆弱》(Anti-Fragile)里,提到了如何在不确定中获益.这本闪烁着智慧之光的著作,早已超越了金融而进入到政治、经济、宗教、社会学的思考范畴,对IT系统技术架构的设计,同样具有启发意义.
想想,一个经常被黑天鹅事件光顾的交易系统,如果不仅没有坍塌、还随着每一次的考验而技术上变的越来越周全和强壮,这对于任何开发工程师、运维工程师来说,是不是一个梦想成真?
实际上,这个过程对于任何IT工程师而言都是非常熟悉的,因为我们中很多人每天的工作,可能就是在不断的以各种应急手段紧急救援不堪重负的生产系统、或者在线弥补技术缺陷,在这过程中我们发现一个又一个在开发和测试时没有发现的问题、一次又一次推翻自己在开发时的各种假设、不断解决所遭遇到的此前完全没有想象过的场景.如果项目、系统活下来了,显然它变得更加健壮强韧.
只不过,这一切是被动的、低效的、“人肉”的,而且视系统架构和技术而定,变强韧有时是相对容易的、有时则是不可能的 – 正如一艘结构设计有严重缺陷的船,打更多的补丁也总会遇到更大的浪把它打沉.
如果基于《反脆弱》的三元论,也许大部分IT系统大致上可以这么看:
这里所谓的“脆弱”,并不是指系统不可靠、单薄、技术不堪一击,而是指这类系统厌恶变化、厌恶不稳定不可控环境、本身架设在基于各种稳定性假设前提的精巧设计上,无法对抗突如其来的、此前无法循证的事件(黑天鹅),更无法从中自适应和壮大.就这个角度看,证券行业甚至整个金融业里,大部分的系统可能都是脆弱系统.传统IT系统有以下一些常见的技术特点,例如:
然而,以下这些变化是任何IT系统所不喜欢却无法回避的,例如:
于是,传统IT对于这些系统的运维,最佳实践往往不得不这样:
不可否定,这些“套路”在以往的时代可能是最佳实践,也体现了一个IT组织的管理水平.但是毫无疑问,这样研发、运维和管理的系统,是一个典型的“脆弱系统”,它依赖于很多的技术、工具、环境、流程、纪律、管理制度、组织结构,任何一个环节出现问题,都可能导致轻重不一的各种问题.
最重要一点,这样的系统,厌恶变化、喜好稳定,无法在一个“只有变化才是唯一不变”(并且是变化越来越频繁)的世界里强韧存活,更无所谓拥抱变化而生长.
强韧类的技术系统,情况要好的多,起码能“响应”变化(如后文所论述).但是注意,在塔勒布的定义里,“强韧”并非“脆弱”的反面,“强韧系统”只是能相对健壮的对抗更大的压力、更苛刻的环境,它并不能从变化、不确定中获益.
“脆弱”的反面,塔勒布在现有语言里找不到一个合适的词语,所以他发明了一个新概念,“反脆弱”(Anti-Fragile).问题是,接受“变化是一种常态”、拥抱变化并从中获益的“反脆弱”的技术系统,能被构建出来吗?
云计算的出现,有利于帮助IT构建强韧系统,并且让“反脆弱”系统成为可能.其最根本原因在于,云计算本身是机房物理设施数字化的过程,如上文所述,数字世界的黑天鹅 – 微秒、纳秒内发生的极端事件,只能通过数字化手段才能高效解决.
伴随云计算出现的是DCOS(Data Center Operating System)、APM(Application Performance Monitoring)、Infrastructure As Code(基础设施即代码、可编程运维、可编程基础设施……)、DevOps等等技术方案、技术产品、技术理念和方法论.这些都是构建强韧系统的有力武器,而在云计算时代之前,它们严格意义上不曾存在过.
云计算也许是目前为止对于证券交易系统、甚至对于更广义的金融技术系统而言最适合应对黑天鹅的技术手段.监管机构不应该见到“云”字就敏感的与“公有云”、信息安全、交易可监管性等问题联系起来;金融机构则需要与时俱进的学习掌握“云化”的技术手段、架构思维 – 至于系统是运行在公有云、私有云还是混合云,都已经是另一个故事.
云计算,其中一个最基本目的,是计算资源的集合管理与使用.其实IT界在计算资源的集合使用方面,过去20年起码尝试过三次:
云计算和大数据技术出现后,这些技术逐渐变身“事务型内存数据库”、“内存网格”(in-memory data-grid)、“流式计算平台”(stream processing)等,然总体来说变的越来越小众.
无论如何,这些技术在云计算出现前已经帮助华尔街机构掌握了计算资源集合运用、分布式架构的一些理念和思维.而国内证券界甚至金融业IT总体来说,对这类技术是相当陌生的.
就对标华尔街同行的证券业IT而言,可以说基本上错过了上述计算资源集合应用的三个浪潮.云计算兴起后,OpenStack之类的技术在证券IT甚至金融界的成功落地、大规模采用的案例极其罕有(如果有的话).
即便是近年来互联网云服务商兴起,部分金融机构因为试水互联网金融而开始使用公有云,很大程度上使用方式也不过是使用了一些虚拟机运行一些互联网边缘(Edge)服务.
然而这个时代有趣的地方在于,一些新技术的出现可以让“弯道超车”、“后发制人”成为可能 – 上一个阶段错过了一些东西,但是也可能下一个阶段少了很多历史包袱从而可以轻易跳进最新的技术世代.容器,恰好就是这么一种技术 – 假如你能把握的话.
在英语里,“容器”、“集装箱”、“货柜”都是同一个字 – Container.容器技术之于软件业,很有可能可以类比集装箱对运输业的巨大影响.
实际上,确实有人想过把整个机房放在集装箱里,例如2006年Sun Microsystems推出的Project Blackbox——刚好是亚马逊发布AWS的同一年.但这个集装箱是钢铁的、有物理形体的、重量以吨为单位的;而其中的内容,自然也是各种物理的服务器、网络设备、发电机.那一年,可能谁也没有想到,10年后有一种“数字化”的虚拟集装箱大行其道.
技术界不乏认为容器对软件技术产生革命性影响的观点,本人倾向于认同这种观点,因为:
为什么作为金融系统、交易平台的研发者,我们挑容器出现的时候跳进云计算,而在更早阶段虚拟机系列相关技术成熟时却并没有大的投入.
最根本原因在于,作为研发组织,我们从研发视角,基于具体应用场景去持续、积极寻觅能解决强韧性、健壮性问题的解决方案 – 这是一种“Top-Down Thinking”,例如在交易量波动过程中,我们能否有自动化的技术去可靠的应对、实现计算资源的弹性伸缩并且保持超级高效?
有什么技术可以帮助我们解决复杂交易系统发布、升级、打补丁的危险和痛苦?交易故障出现时系统内部防止雪崩效应保持快速响应的“熔断”(circuit-breaker、fail-fast)机制有什么更规范的做法?用现有云计算的理论和技术倒着去套,显然是无解的,因为:
“Bottom-up Thinking”,即从基础设施的可管理、资源充分共享、运维更高效等角度去看问题,是一个典型的“运维”视角或者所谓CIO的视角,这种思考,关注的是TCO(Total Cost of Ownership)——成本的降低(IT在垂直行业一直被认为是一个成本中心 – 在现在这个时代这是一个错误观点,但这是另一篇文章的讨论范围了);可是和核心业务应用非常脱节.
对于一个传统行业尤其是受监管行业的IT而言,技术氛围往往是保守和审慎的,采用云技术这种在互联网界以外还很大程度被认为是“新生事物”的东西,并不是一件容易的事情:在行业繁荣、企业赚钱的时候,公司很可能并不关注运维除了稳定以外的事情 – 包括用虚拟机还是用物理机、能否节省一点成本等等;
在市场不景气、公司亏钱的时候,IT却又需要以非常充分的数据来证明建立或者采用云平台能带来显著的大幅的成本节省效果,但是这往往首先涉及第三方软件的采购、机房的改造… 这本身就是一个巨大障碍.
所以,悲观一点的看,很大一部分传统行业IT,很可能需要等到云技术成熟为新世代IT系统的标配,就像mainframe时代向client-server时代转变、client-server时代向多层架构/web技术时代切换,云技术成为一个主流的、企业决策者不再需要加以思索的事物(“no-brainer”)时,才会顺利进入企业世界.此时,运维的视角也许才能被充分接受.但是,对于以创新为本业的金融科技,那已经太迟.
早期的云技术,从运维视角去看是自然的,因为虚拟化技术最开始是把基础设施数字化的一个进程.容器化技术的出现,改变了这一切.容器天然与应用服务结合的更紧密、天然需要程序员的深度介入,“上帝的归上帝,凯撒的归凯撒”,容器里面的归程序猿(code monkey),容器外面的归运维狗(watchdog)——不一定对,只是作为笑话简单粗暴的类比一下,但想说明的是容器内外的关注点是不一样的、而运维与研发的协同则是深度的.
在Docker刚出现的时候,一直带着前述问题的我们,从其理念已经体会到容器技术对构建一个强韧交易系统的好处.
容器技术的到来,让我们在观念上“弯道超车”:
而比解决运维问题更有趣的,是这几方面:
在证券业,我们不是孤独者.华尔街投行的表率高盛,今年2月份宣布了他们一年内把90%的运算能力容器化的计划.
时至今天,在Docker已经被团队广为接受、被应用到各种业务系统中去的时候,我们从两个方向同时继续推进容器化技术:
在各种标榜“云”的科技公司层出不穷的今天,其实依然还没有任何“黑科技”帮阁下把你的脆弱系统瞬间变成一个强韧系统甚至一个具备反脆弱能力的系统.所以,容器技术也不过是一个也许必要但不充分的有用工具而已.
能否释放云计算的威力,取决于很多因素.到一个公有云上使用几个虚拟机,也算一个小小的进步,毕竟它可能(1)缩短了一些传统企业采购硬件、机器上架等等的周期;(2)帮不擅长互联网技术的传统企业解决一部分“互联网最后一公里”问题.然而,这只不过是使用了一些虚拟化基础服务,如果部署在上面的系统本身是一个脆弱系统,那么它在云上依然是一个脆弱系统.
实现一个强韧甚至反脆弱的技术系统,你首先得有一个恰当的技术架构,而实现这样的技术架构,你首先需要有研发团队 – 不错,个人观点是,在现阶段如果不具备软件研发能力,那么你的组织其实无法真正利用、享受到云技术带来的福利.
怎样的架构才能利用和释放云计算能力?
首先,架构设计需要遵循Reactive(响应式)原则(根据“响应式宣言”):
其次,在技术研发过程中,我们采用一系列的所谓“Cloud-native patterns”(原生,或者说“天然”的云计算架构模式)来实现我们的系统,以便让系统达到Cloud-ready(具备云感知能力 – 借用IBM与Intel相关中文版论文的概念).
此外,“云感知”和上述“响应式”原则,是完全一致的,云感知也关注“故障恢复能力”、“延迟恢复能力”、“扩展的灵活性”.事实上,在一流的金融IT团队里,这些原则、实践要求,从来都是被遵循的,因为金融的应用系统天然需要这些能力.无论是否在云计算时代,这些原则、要求均非常合理.
那么容器化技术在这其中有什么作用呢?实践告诉我们,作用很大.最重要一点是,很多pattern的具体技术实现,可以挪到容器层面去处理.例如Circuit-breaker和Fail-fast这类模式,过去的做法,是各个具体的服务,采用自己的技术工具(例如Node.js的守护进程PM2)和办法,基于开发者自己的理解,各自实现.
容器化的好处,是把复杂系统里一切异构的技术(无论以Go、Java、Python还是Node.js实现)都装载到一个个的标准集装箱里,然后通过调度中心基于各种监控对这些集装箱进行调度处理.也就是说,Cloud-native的架构模式,有不少是可以在容器编排调度与协同的这一层实现的.
南怀瑾在某本著作里举过一个剃头匠悟道的例子 – 无论何种行业,技艺追求到极致可能悟到的道理都是共通的.《黑天鹅》和《反脆弱》的作者塔勒布本人也许算的上是这样的一个触类旁通的好例子 – 由金融而“悟道”于哲学(起码被称之为本世纪有影响力的思想家之一).
IT领域不知道有无类似的人物,诸如面向对象设计、架构设计模式、敏捷开发领域的大师级人物Martin Fowler等,显然是抽象思维特别强的人,能够对复杂的技术世界进行“模式识别”而作出一些深刻思考.
在技术世界里,我们一向强调方法论,可是有时候也需要形成“世界观”、“信仰”.在无数次的项目危机管理、技术故障攻坚、运维救火之后,IT人也许应该对“世间唯一不变的是变化本身”有深刻体会,从而接受“拥抱不确定”的观念.
IT界面对变化与不确定性的态度,这十多年来看也是一个有趣的演变:
敏捷迭代方法解决得了业务需求变更的问题,解决不了系统上线后各种突发性的变化 – 故障的及时解决、版本的迅速更新(业务部门总是迫不及待的)、在线经营的瞬间生效(运营人员分分秒秒催着)…
在一切都嫌慢的“互联网时间”里,运维貌似成为最后掉链的一环,以“稳健”为主导的运维团队与“进取”的研发、运营团队无可避免产生冲突
它是在APM(应用性能监控)、Infrastructure As Code(可编程运维)、Virtualization(虚拟化)、Containerization(容器化)等等这些云计算时代的产物出现后,基于新的技术工具、技术理念而自然产生的.
持续集成(Continuous Integration)、持续交付(Continuous Delivery)、持续运维(Continuous Operation)是DevOps的具体环节和手段,它相当于把一条纯数字化链路上不同的参与者关联到一起 – 无论是开发工程师还是运维工程师,最终都不过是身份稍微差异的Information worker.
DevOps可能不仅仅是个概念、方法论、技术新名词,它是伴随云计算自然发生的.但它的接受与运用,对于传统企业的IT,尤其是“维稳”为主导思想的受监管行业的IT,可能是一种文化冲击.
传统IT甚至是今天的很多技术相对前沿的互联网公司,依然把团队拆分成“运维”、“开发”,在组织结构层面建立相互制衡,以避免开发团队的“冲动冒进”导致生产系统的不稳定,但运维职能往往变成一种“权力”(privilege)- 系统的迭代更新都需要获得运维“审批”,这本身显然就是一个“脆弱系统”,因为对变更是绝不友好的.在技术进步、时代变迁的大环境下,这种过去合理的做法,早晚变成一个将要被颠覆的存在.
无论如何,我们认为割裂的讨论一个高性能运算(HPC)的技术系统(如证券交易系统)的容器化、“云化”是不够的,DevOps是构建“反脆弱”技术系统的方法论(起码到目前为止.也许将来有新的思维出现),也是我们系统能力的天然一部分.
我们从软件研发的视角、证券交易的视角来看待云计算,深感把促进基础设施数字化、运维代码化的容器化技术,运用到交易系统技术中,是天作之合 – 假如运用得当的话,结合机器学习和智能算法,能帮助我们构建一些“反脆弱”的技术方案(既然有能下围棋的阿尔法狗,我们是否也可以开始憧憬懂得自救的运维狗?).
可以看到的潮流脉络是,世界是越来越数字化的、变化是越来越频繁的、而IT是需要拥抱变化的,云计算则只是这个潮流里完全符合趋势而自然出现的技术阶段.
有一天Oracle、SAP、各种著名与非知名的专业软件都把它们自身的产品基于容器来构建(例如一个多进程组成的数据库实例里的进程各自运行在自己的容器中),也许对于行业监管者、企业技术决策者而言,云已经无需概念上的存在,而能被毫无质疑的接受.
但是这一天到来之前,大部分企业也许可以先尝试调整一个对云服务友好的财务制度 – 项目立项的时候,硬件预算按CPU核数、内存量、存储量来报算,有形的物理机器不再作为资产稽核到各条业务线各个项目组,一切物理硬件归IT.制度和文化,往往才是隐形的决定因素,不是吗?
文章出处:InfoQ
转载请注明本页网址:
http://www.vephp.com/jiaocheng/4407.html