币安交易平台技术栈首揭秘:什么样的架构体系能挡住全世界的黑客攻击

阅读数:3232 2019 年 10 月 29 日 21:25

币安交易平台技术栈首揭秘:什么样的架构体系能挡住全世界的黑客攻击

运营一家区块链资产交易平台,是一件高回报和高风险并存的事情。作为全球最大交易平台之一,币安为全球 200 多个国家和地区提供服务,同时也受到全世界的黑客的关注。币安两周年时,我列了个问题清单采访他们,币安技术人员如临大敌:“讲技术细节容易使交易平台受到攻击,会有很大风险的!”曾有几百家交易平台因黑客攻击而关闭,所以他们这话一点也没夸张。

币安的创立

币安创始人兼 CEO 赵长鹏,是一位区块链领域里的风云人物。2018 年 2 月,福布斯发布了首个数字货币领域富豪榜。Ripple 创始人 Chris Larsen 以 75-80 亿美元身家排名第一,币安创始人赵长鹏位列第三,身家估值 11-20 亿美元,为前十名中唯一的华人,并登上本期福布斯杂志封面。在此之前,赵长鹏一直是一位标准的程序员。先后为东京股票交易平台和彭博开发交易软件。2013 年之后,因为和比特币布道者走得近,及时的加入当时全世界最大的比特币交易平台 OKCoin 出任 CTO。

随后带了一支资深团队创立币安交易平台。从 2017 年 7 月币安正式成立,到 2018 年 1 月 10 日,仅仅约半年时间,币安在全球注册用户就已经超过了 500 万人,跃升为世界最大的数字货币交易平台之一。

因为币安交易平台以及 BNB 的发布,这位前程序员,在短短的半年里,完成从码农到亿万富豪的转变。

一个月做了别人一年的事情

从发布白皮书到上线,当时币安的这支小团队只花了不到一个月的时间。

币安技术人表示:“当时的感觉就是,币安一个月做了别人一年的事情。”

为了赶上线时间,有很多工作人员连续通宵了一个礼拜,累了就在沙发上椅子上睡一会。

一个完整的交易平台至少包括这几个部分:用户管理、出入金、交易、对账模块、后台管理等。

币安后端主要的系统模块都是基于 Java 技术栈搭建而成。其中交易的核心“撮合系统”,部分使用了 C++。选用 Java 作为基础技术栈,主要是从开发效率和性能进行综合考量,并且 Java 具有最完善的生态和众多优秀的开源项目。历经迭代,币安交易平台的整体架构已经从最初的单体应用演变为基于 spring cloud 的微服务架构,参照领域驱动设计的原则,按照业务域来合理划分服务边界。

币安运行时环境高度依赖 AWS,以 AWS 云环境为基础,并且也进行了一些二次开发。比如币安有一套高度自动化的 CI/CD 系统,整个 pipeline 集成了代码拉取,编译,打包,自动化测试,灰度发布,线上验证,metrics 数据收集,自动回滚等,实现一键部署上线。运行时,基于精细的 metrics 数据收集,依赖 AWS 容器编排机制,可以实现准确的弹性伸缩,保证性能的同时,极大地降低成本。

撮合的性能是交易平台的核心竞争力。对于交易平台来说,引擎的稳定性、实时性和准确性对用户的资金管理非常重要,防止可能因此导致的用户资金损失。尤其是行情来临的时候,需要迅速处理用户的下单请求,获取行情。

币安打造了一套全内存撮合引擎,在该撮合引擎支持下,币安订单处理速度能达到 140 万单 / 秒。一般情况下,从头开始打造一个交易平台 ,如果是基于开源的交易平台软件进行修修补补,1-2 个月上线。如果使用的是数据库撮合,只能支持 1000-2000 个用户,适合小交易平台 。如果是内存撮合的话,大概需要半年的时间,当然这也取决于团队的技术背景和实力。币安使用的是全内存撮合技术,即使是主流的交易平台也很难做到这一点,大部分平台使用的是内存撮合与数据库撮合结合的方式。

币安的全内存撮合引擎使用 memory map file 的技术保证断电不会丢失数据,为了提高性能技术人员重写了很多 Java 的底层类库,去掉同步 lock,去掉很多异常的检查,定制化成撮合引擎专用的类库,并且进行了大量的 JVM 调优。

前端的技术栈,也经历了重大升级,最初使用的是 angular 1.x,并且和后端一起部署,之后也进行了前后端分离,前端使用性能更高的 react 框架。币安的 iOS/Android app 基本都是用原生代码编写的,因为作为交易平台的客户端对性能要求非常高,最近也在将一些性能不敏感的页面比如运营活动改成 hybrid 架构,这样一个 H5 页面 Web/iOS/Android 都可以使用,提高灵活性和开发效率。

黑客环伺

2010 年 7 月 17 日著名比特币交易平台 Mt.gox 成立,一度成长为世界上最大的比特币交易平台 ,承担全球超过 70% 的比特币交易。但不幸的是它在 2011 年因被黑客盗取了 77.5w 枚比特币,经过一系列被盗事件后于 2014 年被迫下线,宣布破产,同时负债约 6 千 4 百万美元。

2012 年 9 月,当时的全球第四大美元交易平台 Bitfloor 的服务器被黑客入侵,并被盗走了 24,000 个比特币(当时价值约 25 万美元)。遭遇了毁灭性打击的创始人 Roman Shtylman 在次年 4 月决定关闭 Bitfloor,并向客户退还存款。

交易平台被盗事件层出不穷,曾有几百家交易平台因黑客攻击而关闭。黑客会全年无休的盯着这些小金库,曾有交易平台老板说道:”自从开了交易平台,再也睡不好觉了,常年处于焦虑之中。”

币安每年都要收到数以亿计的网络攻击。

2019 年 5 月,币安被黑客攻击,大约 7000 个比特币被提走。这些资产全部是币安钱包中的资产,损失由币安 SAFU 基金全部覆盖,用户的资产没有受到任何损失。

币安技术人员告诉我们:“事实上在过去 2 年,我们已经成功阻止了数百次的大型 APT 攻击。“

由于行业的特殊性,安全是加密货币交易平台的核心竞争力之一,币安的安全体系建设主要有全生命周期的安全开发、零信任基础安全、风控体系进一步完善以及数据安全保护等几个方面。

具体来说,有:

  1. 使用最顶级的代码扫描软件,部署并实施“全生命周期”的安全开发。旨在从需求、设计、编码、测试以及上线各关键环节尽早地将安全风险规避在萌芽之中。比如产品需求有合规性风险识别,技术架构设计时通过威胁建模来辅助完成安全架构设计,编码过程及完成时有人工和工具协同的代码安全审计以发现语言、逻辑等层面的安全弱点。
  2. 引入专业的安全渗透测试团队来做上线前的模拟渗透。针对业务逻辑缺陷,不只是依赖于安全团队的安全测试,同时也培养功能测试团队逐步具有业务类安全测试的能力。因为功能测试团队往往是研发大团队当中最了解业务及业务的技术实现细节的,也更容易发现产品的业务弱点。
  3. 引入人工智能识别系统,在用户行为轨迹上做了大量基于算法的投入。机器学习 24 小时全天候分析用户行为,一旦发现一些异常情况将立刻报警。

一个完善的安全防护体系包含全生命周期的安全开发、安全运维、办公网络安全以及安全意识培训等四大部分。在网络层面的零信任安全框架上,业界比较成功的案例是互联网巨头 Google,他们曾耗费 6 年时间发展了零信任的安全框架,被称为 BeyondCorp。零信任架构下,仅有可信且被授权设备才可以接入币安网络。在安全基础建设方面,币安已经落地零信任架构 2.0,且 3.0 设计已经完成,并逐步形成非 IT 网络安全管理领域的零信任企业安全文化,比如:即便 A 员工是 B 员工的 BOSS,当 A 员工试图向 B 员工索要针对某个应用访问特权时,依然需要走严格的安全审计流程才可能获得。

同时数据进行冷热备份,遵照 ISO27001:2013 的备份策略实施,对于敏感 (帐号) 数据实时加密备份,同时不定期举办灾备演练验证备份可靠性和灾备机制可顺利接管系统。国际互联网巨头 Amazon/Cisco/Apple 都深根了这样的流程,甚至变成企业文化。

怎么维护一家 TOP1 流量的交易平台?

目前,币安用户达到千万级,DAU 峰值在 100 万以上,成交额峰值 100 亿美金。

区块链交易平台的用户操作非常频繁,特别是出现大行情的时候,几秒内的瞬时峰值可以达到 10~30 倍,这对系统健壮性要求非常高。币安设置了专门的压测工程师,也在构建完善压测平台,目前压力测试覆盖了所有关键路径和核心模块。在每个技术人都需要对自己负责的功能的负载能力给出合理评估,如果没有足够信心或者无法满足线上要求,需要主动的与压测工程师以及架构师讨论,进行验证和修改。

除了业务开发,币安上线后也设置了一个小组专注于架构升级、性能提升、安全加强,这些对于交易平台来说至关重要。作为交易平台的开发,始终得关注稳定性,性能,安全。

架构升级能够提高开发的效率,进行各种自动化测试 / 部署,比如 CI/CD,进行线上各种服务的划分治理,动态扩容 / 缩容,诊断问题,全链路追踪性能提升方面。比如虽然币安的撮合引擎已达到 140 万单 / 秒,但币安还一直在持续升级撮合引擎并完成编程语言迭代。以前用 Java 语言,现在已经升级为 Rust 语言,保证安全始终是币安的重心。

同时不断优化用户体验,每个 UI 人都希望自己做的界面简单、直观、易懂,操作一个功能需要的点击越少越好。尽可能把很多事情在后台做掉,币安技术人表示:“我们越复杂,对于客户会越简单”。

如果有对交易平台技术感兴趣的同学,欢迎发邮件到 hr@binance.com

评论

发布
用户头像
rust 牛逼
2019 年 10 月 30 日 11:03
回复
用户头像
很想知道7000个btc怎么丢的
2019 年 10 月 29 日 22:01
回复
没有更多了