惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
aimingoo的专栏
aimingoo的专栏
C
Check Point Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
Docker
N
Netflix TechBlog - Medium
罗磊的独立博客
F
Full Disclosure
I
InfoQ
酷 壳 – CoolShell
酷 壳 – CoolShell
T
Tailwind CSS Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The Register - Security
The Register - Security
The GitHub Blog
The GitHub Blog
U
Unit 42
Microsoft Security Blog
Microsoft Security Blog
Webroot Blog
Webroot Blog
Apple Machine Learning Research
Apple Machine Learning Research
T
Threatpost
博客园 - 【当耐特】
C
Cybersecurity and Infrastructure Security Agency CISA
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog
T
Threat Research - Cisco Blogs
Y
Y Combinator Blog
P
Proofpoint News Feed
B
Blog RSS Feed
G
GRAHAM CLULEY
Last Week in AI
Last Week in AI
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Cisco Talos Blog
Cisco Talos Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
P
Palo Alto Networks Blog
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
P
Privacy & Cybersecurity Law Blog
Know Your Adversary
Know Your Adversary
I
Intezer
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
L
LangChain Blog
B
Blog
雷峰网
雷峰网
K
Kaspersky official blog
S
Secure Thoughts
Security Latest
Security Latest
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
Security @ Cisco Blogs
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org

犀利豆的博客

《SRE google 运维解密》读书笔记 (六) 《SRE google 运维解密》读书笔记 (五) 《SRE google 运维解密》读书笔记 (四) 《SRE google 运维解密》读书笔记 (三) 《SRE google 运维解密》读书笔记 (二) 《SRE google 运维解密》读书笔记 (一) 2021 总结 终于有一个 Java 可以用的微信机器人了 Vertx入门到实战—实现钉钉机器人内网穿透代理 钉钉机器人回调内网穿透代理--使用篇 周末补习(一)trie 树 那些有趣的代码(三)--勤俭持家的 ArrayList 那些有趣的代码(二)--偏不听父母话的 Tomcat 类加载器 那些有趣的代码(一)--有点萌的 Tomcat 的线程池 从需求第三定律说起--为什么知乎的回答质量下降了 如何利用 Spring Hibernate 高级特性设计实现一个权限系统 居然有人能忘记吃饭?写个微信机器人提醒他 我的2018年总结 从 LongAdder 中窥见并发组件的设计思路 徒手撸框架--实现 RPC 远程调用 我的写作工具链 Java 渲染 docx 文件,并生成 pdf 加水印 撸码的福音--变量名生成器的实现 Raft 协议学习笔记 dubbo 源码学习(一)开篇 Redis 命令的执行过程 Redis 中的事件驱动模型 Redis 数据库、键过期的实现 Redis 的基础数据结构(三)对象 Redis 的基础数据结构(二) 整数集合、跳跃表、压缩列表 Redis 的基础数据结构(一) 可变字符串、链表、字典 线程池 execute() 的工作逻辑 JAVA 中的 CAS 徒手撸框架--高并发环境下的请求合并 徒手撸框架--实现Aop 徒手撸框架--实现IoC 2017个人总结 最近遇到的几个问题集合 Redis RedLock 完美的分布式锁么? JAVA 8入门(二)流 JAVA 8入门(一)Lambda表达式 有道 Alfred Workflow 威力加强版 Kafka实现原理笔记 Netty-Apns接入实现 Future研究 Hystrix入门研究 Redis实现分布式锁
《交易系统:更新与跨越》读后笔记
Zhengxin Diao · 2017-10-25 · via 犀利豆的博客

十一假期,本来想找一本股票相关书读一读。机缘巧合就找到了这本武剑锋博士写的《交易系统》。这本书主要讲了上海证券交易系统在技术管理、架构设计、应用调优、切换部署、运行维护等方面的经验和教训。成书的时间大概是在2010年,交易系统的上线时间大概在2008年,聚现在已经接近十年了,但是书中介绍的很多开发时候的原则和思路放在今天来看也有很大的价值可以学习。同时,这也是一本介绍大型系统开发的简要过程的参考书目。

本书涉及了不少的证券相关知识,涉及证券知识的章节我就略读做了解。对剩下的关于大型系统的设计,管理,架构,优化相关的章节进行了精读,记录相关笔记供自己回顾和思考。

大型系统的管理

团队管理:

将整个系统自上而下的分割为多个松耦合的且相对独立的系统,这样来避免出现整个系统级的问题,遇到问题分而治之。在系统初期设计系统时隐藏细节实现,提前发现系统总体架构上的缺陷,提前修正。各个独立的小系统可用分别的启动,评审,开发测试。
配合系统分制的结构,人员也分解为小团队。团队目标一致,团队内的文档,设计,代码均是公开的,团队成员都是知晓的。

系统的设计和开发过程中,团队成员在有纪律和规则的前提下进行发散和创新。团队中应该有一个人来确保,讨论以后收敛结论,保证团队“有序”和“规则”。无限的发散只会带来大量内耗。

项目质量

这一部分,没有什么争议,对于测试的重要性,应该已经是开发人员公认的公理。

保证测试时间。

测试范畴推广,作者指出,不但要对代码进行测试,还需要对文档,设计提前测试。

纠错优于创新。

面向変更

看完作者这一部分的描写,简直不能同意更多。

这一章的第一个小标题就是“为了将来丢弃而现在建设”。大型系统的开发不是一蹴而就的,很多系统的初版都是不太能令人满意的,所以不断的重构是一直贯穿到系统的生命周期之中的。作者所谓的“为了将来丢弃而现在建设”,就是开发过程中准备在将来用更高效的和更易于扩展的代码来替代目前正在编写的模块。
重构的过程中,要有精确定义的需求为指导。否则重构结果并不乐观。
系统的不断演进和需求不断的增加,会导致系统代码混乱,“熵”不断增加。重构就是为了减少系统的“熵”。
系统的不断开发中,会产生“死代码”,需要及时去除。重构中要考虑去除复制张贴的代码,并把这些代码抽象为公共库。

需求的变更是常态,开发中不应该抗拒和讨厌,对变更进行管理。开发过程中应该为变更做好准备。但是一个系统不能“广泛参数化”。平衡度也很关键。

系统架构

系统设计目标

在设计开始前应当估计系统的极限,留有一定的安全余量,进行开发。

在大型系统设计中,一直性是重要的考量,有的时候可以牺牲不规则的特性和改进,保证一致性。同时应当保证一致性的文档应该落地。

高内聚低耦合,这个原则应该是我们初学编程就一直强调的原则,我们应该保证模块之间的正交性质。保证低耦合,我们应该做的就是强制接口定义,隐藏实现细节,不使用公共的数据结构。所谓高内聚是指一个模块只实现一个功能。高内聚的软件易于维护和改进。

系统应当适当的进行“过度设计”,提升系统的灵活性。

使用“打包”提升系统的吞吐量。一个是“时间片”,定时进行打包操作一次请求。二是收集足够多的的处理请求后打包处理。在系统优化的过程中,一个是优化算法的实现,二是使用空间换时间的。

高可用的设计,使用“持久化”和“冗余”提升系统的高可靠性。

系统的高扩展性,通过以下方式提升:

  • 按照功能划分模块独立部署
  • 按照负载划分系统
  • 避免分布式事务
  • 在模块间使用异步处理

系统设计原则

系统分层设计,系统设计成金字塔型,越核心的测系统,设备接入越少,关系越简单,可靠性越高。

故障隔离设计。

无单点。

消息驱动模型的设计:

  • 前台发消息无ack重发
  • 后台消息处理需要幂等
  • 消息在每个界定啊都被存储并加标记

其实这个设计,很类似Kafka的实现。

调优原则

先将单机的能力提升,再水平扩展

对大量访问的数据,使用内存方式提高速度(现在看来就是使用缓存),结合磁盘“持久化”。

优化核心算法。

使用异步I/O。

传输压缩,打包和流控技术。

后记

这本书,提出的一些系统设计和开发原则,现在看来大部分已经在我接触过的的系统中大量的使用。可见系统的基本设计原则,经过快十年的发展也没有太大的变化。十年前的一些原则已经有很多成熟的技术实现了。大型系统的开发逐渐变得容易,系统的设计人员可以将更多的精力来组合各个成熟实现,快速搭建系统。推荐这本书给大家,感受大型系统构建的各个方面细节,开阔视野。