架构操练Kata:金融风险系统

(译自Simon Brown的Software Architecture for Developers II;译者:伍斌)
背景
一家办公室设在伦敦、纽约和新加坡的全球投资银行,与其他银行(交易对手)进行金融产品交易(买卖)。当股票市场的股价上涨或下跌时,银行要么赚钱要么赔钱。在每个工作日结束时,银行需要通过对所持有的交易数据进行一些计算,以了解他们所面临的风险(例如赔了多少钱)。该银行现拥有“交易数据系统”(TDS)和“参考数据系统”(RDS),但需要一个新的“风险系统”。

  • 交易数据系统
    “交易数据系统”存储了银行所有交易数据。在纽约每天工作日(下午5点,即新加坡次日早上6点)结束时,该系统会生成并导出基于文件的XML交易数据。导出数据包括银行当天进行的每笔交易的以下信息:

    • 交易ID
    • 日期
    • 以美元计的当前交易价值
    • 交易对手ID
  • 参考数据系统
    “参考数据系统”维护银行所需的所有参考数据。这包括交易对手的信息。交易对手可以指一个人或一家银行。“参考数据系统”也可以导出基于文件的XML参考数据,并且包括关于每个交易对手的基本信息。一个新的面向全公司的“参考数据系统”将在未来3个月内完成,目前的“参考数据系统”最终将被替代。

功能要求
新的“风险系统”的功能要求如下。
1.从“交易数据系统”导入交易数据。
2.从“参考数据系统”导入交易对手数据。
3.将两组数据结合在一起,用交易对手方的信息丰富交易数据。
4.对于每个交易对手,计算银行所面临的风险。
5.生成可导入Microsoft Excel的报告,其中包含银行已知的所有交易对手的风险数据。
6.在新加坡的下一个交易日(上午9点)开始之前将报告分发给商业用户。
7.为部分业务用户提供配置和维护风险计算所使用的外部参数的方法。

非功能性要求
新“风险系统”的非功能性要求如下:

  • 性能
    • 风险报告必须在新加坡的下一个工作日上午9点之前生成(即3小时之内生成)。
  • 可伸缩性
    • 该系统必须能够应对未来5年的贸易量。
    • 目前每次“交易数据系统”导出约5,000笔交易,预计每天还会增加10笔交易。
    • 目前“参考数据系统”交易对手导出约20,000名交易对手,未来增长可忽略不计。
    • 全世界有40-50个需要访问报告的商业用户。
  • 可用性
    • 风险报告应该全天候为用户提供,但可以容忍少量停机时间(每天不到30分钟)。
  • 故障转移
    • 对于所有系统组件都可进行手动故障转移,前提是可以实现上述可用性目标。
  • 安全
    • 该系统必须遵循银行政策,该政策规定系统访问仅限于经过认证和授权的用户。
    • 报告只能分发给授权用户。
    • 只有授权用户中的一部分人被允许修改风险计算中所使用的参数。
    • 没有实现单一登录的要求(例如与Active Directory,LDAP等的集成),当然如果有会更好。
    • 所有对系统和报告的访问将在银行全球内部网络的范围内进行。
  • 审计
    • 以下事件必须记录在系统审计日志中:
      • 报告的生成。
      • 风险计算参数的修改。
    • 用于调整计算风险的输入参数必须有理由说明。
  • 容错和弹性
    • 如果可能的话,系统应该采取适当的步骤来从错误中恢复;所有的错误都应该被记录。
    • 如果某个交易对手的风险计算发生错误,那么应该将错误记录下来,并继续进行余下交易对手的风险计算。
  • 国际化和本地化
    • 所有用户界面仅以英文显示。
    • 所有报告将仅以英文呈现。
    • 所有交易价值和风险数据将仅以美元呈现。
  • 监控和管理
    • 在下列情况下,应将“简单网络管理协议”(SNMP)陷阱发送给银行的中央监控服务:
      • 系统组件发生致命错误时;
      • 新加坡时间上午9点之前还没有生成报告时
  • 数据保留和归档
    • 风险计算过程中使用的输入文件必须保留1年。
  • 互操作性
    • 与现有数据系统的接口应符合并使用现有的数据格式。

Financial Risk System
(Software Architecture for Developers II by Simon Brown)
Background
A global investment bank based in London, New York and Singapore trades (buys and sells) financial products with other banks (counterparties). When share prices on the stock markets move up or down, the bank either makes money or loses it. At the end of the working day, the bank needs to gain a view of how much risk they are exposed to (e.g. of losing money) by running some calculations on the data held about their trades. The bank has an existing Trade Data System (TDS) and Reference Data System (RDS) but need a new Risk System.

  • Trade Data System
    The Trade Data System maintains a store of all trades made by the bank. It is already configured to generate a file-based XML export of trade data at the close of business (5pm) in New York. The export includes the following information for every trade made by the bank:
    • Trade ID
    • Date
    • Current trade value in US dollars
    • Counterparty ID
  • Reference Data System
    The Reference Data System maintains all of the reference data needed by the bank. This includes information about counterparties; each of which represents an individual, a bank, etc. A file-based XML export is also available and includes basic information about each counterparty. A new organisation-wide reference data system is due for completion in the next 3 months, with the current system eventually being decommissioned.

Functional Requirements
The high-level functional requirements for the new Risk System are as follows.

  1. Import trade data from the Trade Data System.”
  2. Import counterparty data from the Reference Data System.
  3. Join the two sets of data together, enriching the trade data with information about the counterparty.
  4. For each counterparty, calculate the risk that the bank is exposed to.
  5. Generate a report that can be imported into Microsoft Excel containing the risk figures for all counterparties known by the bank.
  6. Distribute the report to the business users before the start of the next trading day (9am) in Singapore.
  7. Provide a way for a subset of the business users to configure and maintain the external parameters used by the risk calculations.

Non-functional Requirements
The non-functional requirements for the new Risk System are as follows.

  • Performance
    • Risk reports must be generated before 9am the following business day in Singapore.
  • Scalability
    • The system must be able to cope with trade volumes for the next 5 years.
    • The Trade Data System export includes approximately 5,000 trades now and it is anticipated that there will be an additional 10 trades per day.
    • The Reference Data System counterparty export includes approximately 20,000 counterparties and growth will be negligible.
    • There are 40-50 business users around the world that need access to the report.
  • Availability
    • Risk reports should be available to users 24x7, but a small amount of downtime (less than 30 minutes per day) can be tolerated.
  • Failover
    • Manual failover is sufficient for all system components, provided that the availability targets can be met.
  • Security
    • This system must follow bank policy that states system access is restricted to authenticated and authorised users only.
    • Reports must only be distributed to authorised users.
    • Only a subset of the authorised users are permitted to modify the parameters used in the risk calculations.
    • Although desirable, there are no single sign-on requirements (e.g. integration with Active Directory, LDAP, etc).
    • All access to the system and reports will be within the confines of the bank’s global network.
  • Audit
    • The following events must be recorded in the system audit logs:
      • Report generation.
      • Modification of risk calculation parameters.
    • It must be possible to understand the input data that was used in calculating risk.
  • Fault Tolerance and Resilience
    • The system should take appropriate steps to recover from an error if possible, but all errors should be logged.
    • Errors preventing a counterparty risk calculation being completed should be logged and the process should continue.
  • Internationalization and Localization
    • All user interfaces will be presented in English only.
    • All reports will be presented in English only.
    • All trading values and risk figures will be presented in US dollars only.
  • Monitoring and Management
    • A Simple Network Management Protocol (SNMP) trap should be sent to the bank’s Central Monitoring Service in the following circumstances:
      • When there is a fatal error with a system component.”
      • When reports have not been generated before 9am Singapore time.
  • Data Retention and Archiving
    • Input files used in the risk calculation process must be retained for 1 year.
  • Interoperability
    • Interfaces with existing data systems should conform to and use existing data formats.
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容

  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,312评论 0 10
  • 在潦倒前先让自己适应穷困是一种病,还是古人说的居安思危。 在工作前,我做好了可能充足的准备去接受即将到来的,比乞丐...
    Heyden阅读 239评论 0 0
  • 第一次接触小朋友有点儿措手不及,哭的哭,闹的闹,想妈妈的想妈妈,要爸爸的要爸爸。小朋友每天早上八点入园,...
    Pearl绍群群阅读 1,880评论 0 3
  • 正當街坊鄰里都還沈浸在歡度新年的喜悅氣氛中的時候,一個灰暗的幽靈卻神不知鬼不覺地降臨到了我們生活的家園:先是東北、...
    若水Dewlight阅读 208评论 0 1
  • 没有基础,又想快速的掌握画画技巧,这是大多数业余爱好者的想法: 额,反正又不想当名家,我只是想充实一下,或者把儿时...
    黑桃皇阅读 195评论 2 2