对一次架构设计的总结和反思

存储架构 2018-10-14 阅读原文

最近做了一次架构(流程)的设计,简单来说,是设计一个流程,提供相应的API,方便其他程序员将业务逻辑逐步迁移到另一套框架。在完成这次设计的过程中,还是有许多经验、教训,值得思考和记录。其实,这些经验总结,可能在其他地方看到过,也听别人分享过,不过只是“夫子言之,于我心有戚戚焉”,只有当自己亲身经历过,才会更加深刻。

本文地址: https://www.cnblogs.com/xybaby/p/9763030.html

简单就是美

zen of python 中提到 Simple is better than complex.

google bigtable 论文中也提到 The most important lesson we learned is the value of simple designs.

具体回到这次设计,由于这些流程都是异步的,且要保证一定的原子性,所以当交互的流程越多,需要维护的状态也会增多,出问题的概率也越大,这样在中途失败的情况回滚也会更麻烦。在最初版的设计中,流程图差不多有一页A4纸,通过缩减不必要的流程,最终方案流程图不到半页A4纸,最主要的是,这个流程维护起来更容易,出错的概率更低。

当然,流程的简化其实会在某些异常情况下有最终的业务有一定的影响,这其实也是要考虑性价比。

奥卡姆剃刀原理:如无必要,勿增实体。

多跟人讨论

虽然这个工作主要由我负责,但我发现经常与人讨论还是很有用的,不管讨论的对象是老手、还是小白。

如果是有相关经验的老手,往往能一针见血的指出问题所在,比如上面提到的流程简化,就是老手指出来的。如果对方对整个设计比较感兴趣,会问一些为什么,这些为什么其实能帮助自己思考,因为很多时候,自己并没有思考过为什么。即使对方不太明白我在干啥,在描述、解释一个细节的时候也常常会有茅塞顿开的感觉,与小黄鸭调试法异曲同工之妙。

用数据说话,而不是脑补

这一点其实与第一点相关,流程简化之后,某些情况下部分用户会受到影响,这个产品经理的第一反应是不能接受的。但为了处理这部分异常情况就会使流程变得复杂,技术这边觉得性价比低。最后的方案是埋点测试,数据表明会影响的玩家比例很小,PM也就接受了简化后的流程。

Talk is cheap,show me the DATA!

与使用者沟通,尽早给出可体验的原型

这套流程主要是给项目内的其他程序使用,刚开始的时候只与核心程序讨论,而且是泛泛的讨论,导致流程并不完全符合实际情况。

接口设计追求One Take

接口很重要,一旦交付使用,就很难在修改。

这一点是呈上的,由于开始的流程设计无法满足某些业务场景,导致需要修改一些API,但前一版本的API已经在代码中使用,为了修改这些API,需要去与相应程序沟通,大家集中替换、测试。幸好这些接口都还在内部系统使用,不涉及到线上业务,否则要修改起来就很困难了。

好的接口

easy to use,hard to misuse,来自 How to Design a Good API and Why it Matters

呈上,在流程中,会有一些默认的action,默认的参数,设计的原则是,这些默认值最多是代码不能正常工作,而绝对不能默默地以错误的方式工作。

流程图 状态机帮助思考与讨论

在这次设计中,经常对着流程图、状态机发呆,发现还是很有用,可以帮助理清思路,发现异常。跟他人讨论的时候,流程图也比口头描述直观很多。

墨菲定律

每一步都要有异常应对,有if 那么就应该对应 else,即使只是打一个日志。

在一个复杂的流程系统中,状态的自愈非常重要,这样即使出现一些异常,也能正常工作

总结了感触最深的几点,不是很系统。

博客园-原创精华区

责编内容by:博客园-原创精华区阅读原文】。感谢您的支持!

您可能感兴趣的

How Gusto Processes Billions Of Dollars In Annual ... Background ZenPayroll is on a mission to help small business owners succeed by providing a simple and intuitive way to...
Level up your React architecture with MVVM Level up your React architecture with MVVM Have you ever opened a project and l...
Internet Information Services—Server Software With... For the last couple of weeks I’ve been talking about server software, specifically in regards to how each handles HT...
How does it work? Kubernetes: Episode 1 – Kubernet... Hey everybody, TL;DR I hacked something together in order to create a Kubernetes cluster on CoreOS (or Container L...
Android开发架构模型(十)建模@用图形来表达... 用什么图形 答案就是 UML类图。 为什么要用图形 当我们要读懂Android底层框架的源码及三方框架的源码时,里面涉及到多层的抽象、继承等,如果仅仅是文字来表达,往往达不到很好的理解效果,如果这时候能够画张图、并且你能够很好的...