当前位置: 首页 > 科技观察

“软件教父”又开启整理模式!

时间:2023-03-16 10:41:17 科技观察

马丁·福勒是谁?正如我在上一篇文章中所写的,他是《重构》、《分析模式》、《企业应用架构模式》、《领域特定语言》等一系列知名书籍的作者,他很少谈论操作系统、数据库、互联网等底层的东西,很少听他讲高并发和海量用户,也没有开发过什么知名软件,却被奉为软件开发的“教父”。如果软件是分层的,他其实生活在顶层:这一层挤满了很多程序员,因为越往下,路越难走。必须耐得住寂寞,经得起诱惑,对某一领域有着极其深刻的研究。但MartinFowler之所以能够在应用层做主,是因为他有一项特殊的能力:他善于将一些软件开发实践总结成“概念”。显然,这需要大量的抽象。MartinFowler最著名的作品可能就是《重构》了。他对软件编程中各种修改代码的方法进行了抽象、归纳和命名,影响了世界上每一位开发者。他还有一本书,名叫《企业应用架构模式》,MartinFowler分门别类地总结了企业应用开发中的一些最佳实践。比如领域逻辑模式方面的“事务脚本”、“表模块”、“领域模型”、“服务层”等。说说ORM的“单表继承”、“类表继承”、“活动记录”等等。MartinFowler绝对是在应用层开发的程序员的楷模!前天浏览MartinFowler的个人网站(https://martinfowler.com/)时,发现了这样一个宝藏:《分布式系统模式模式》(PatternsofDistributedSystems)。不由得乐了:看来MartinFowler也没闲着,又开始整理模型了。这次更加宏观,直接进入了分布式系统!但仔细一看,却有些失望。不是马丁福勒自己干的!是由一位名叫UnmeshJoshi的ThoughtWorks顾问撰写,MartinFowler在模式方面提供了一些指导和帮助。这两天看完,觉得质量还是挺高的。比如文章开头我讲了分布式系统的几个常见问题:进程崩溃、网络延迟、进程挂起、时钟异步,进而导致分布式系统。如何解决这些问题值得商榷。比如非常经典的Write-AheadLog模式,可以用来解决进程崩溃时的数据持久化问题:先把数据作为命令放入持久化的日志文件中,这样即使KVStore进程崩溃了,也可以仍然可以从从日志中恢复数据访问。人们很清楚程序员的交流语言是代码,所以马上给出简单的代码片段帮助理解细节,真是贴心。classKVStore...publicKVStore(Configconfig){this.config=config;this.wal=WriteAheadLog.openWAL(config);this.applyLog();}publicvoidapplyLog(){ListwalEntries=wal.readAll();applyEntries(walEntries);}privatevoidapplyEntries(ListwalEntries){for(WALEntrywalEntry:walEntries){Commandcommand=反序列化(walEntry);if(commandinstanceofSetValueCommand){SetValueCommandsetValueCommand=(SetValueCommand)command;kv.put(setValueCommand.key,setValueCommand.value);}}}publicvoidinitialiseFromSnapshot(SnapShotsnapShot){kv.putAll(snapShot.deserializeState());}现在整理出来的分布式系统模型有这些:为什么要给大家推荐这个资料?因为网上很多关于分布式理论的文章都是干巴巴的,看了一页就想放弃了。网上也有很多源码分析的文章,着重贴代码,纠结细节,看得人一头雾水。UnmeshJoshi的分布式系统模式很好地平衡了理论和代码细节。如果你是刚入行的新手,看这些东西可能有点吃力,因为你需要有分布式系统的基础,不妨先收藏起来,以后再看。如果你是经验丰富的老手,我强烈建议你去看一看,观察这些高手是如何从各种复杂的场景中提取出共同的模式。一定会让你受益匪浅。你可能会有这样的感受:我怎么没想到这样的工作?当然,这是一本英文资料,会有一定的障碍,但是你看完就知道,没有用到高深的词汇。我列几句给大家感受下:进程随时都可能崩溃。由于硬件故障或软件故障。一个进程崩溃的方式有很多种。它可以被系统管理员拿下来进行日常维护。它可以在做一些文件IO时被杀死,因为磁盘已满并且异常没有得到妥善处理。这并不难,对吧?试试看,阅读英文资料也是一项重要的技能。链接在此:https://martinfowler.com/articles/patterns-of-distributed-systems/【本文为专栏作家“刘欣”原创稿件,转载请通过作者微信获取授权公众号coderising】点此查看该作者更多好文