读书好好工作

《架构即未来》&《架构真经》读书笔记

2019-02-02  本文已影响373人  maquewy

写在前面

时节如流,转瞬间2018已经过去,之前太忙于奔跑,一直说的读书笔记整理,也搁置了4个多月。回顾这一年给我惊喜很多的书有很多,后面会专门整理下。计划从这两本架构相关的书开始,惊喜的其实并不是书中有什么高深的套路,而是一种思维的冲击,用DD大神的话总结就是

《架构即未来》&《架构真经》 其实就是道与术的较量,道看似浅显却很高深,术看似实用却受限于道。

架构之道

架构之道在于人

可扩展性的关键是人

组织的重要性

人是系统扩展中最重要的因素,那么如何把人组织起来完成工作也就同样重要。

规模过大团队生产率低下的原因:两个极端,因为高级工程师没有足够精力指导导致新人上手慢,反过来如果高级工程师花费大量时间指导新人,那么会导致老人效率低下。

可扩展性和可用性失败的共同原因是责任不清。

最好的架构、需求和设计源于自组织的团队

架构之术

大道至简

避免过度设计

在设计中要警惕复杂的解决方案

在这一块儿的感触还是比较深的,订单导出的早期跑的比较快,没有清楚自己的定位复用底层详情能力,而开始疯狂造轮子,为了获取一个字段而专门设计了一个client,然后再设计一个组件来专门做这两个数据聚合,由于都是并发取,发现新增的一个字段会导致老的导出出问题,用这种非常复杂的设计去获取一个字段。而换个角度,详情把字段能力补齐,而导出复用能力,会来的更加方便,维护起来架构也异常简单,过度设计的成本很高。

方案中带有扩展DID

设计方案时候,要想的远些,比如应对是现有流量的10倍流量时候,这套设计是否会出现重大问题,而真正部署的时候如果是无状态的可以动态扩展的最好,比如核心应用最少要预留五倍容量。

三次简化方案

帕累托原则: 收益的80%来自于20%的工作

分而治之

AKF扩展立方体

这里重点介绍下AKF扩展立方体,受益匪浅。之前组内分享了下订单搜索冷热数据分离的分片维度及依据,这个订单搜索的AKF架构演进之路,后面会专门整理出来。


AKF扩展立方体

水平扩展

配置 网络 服务器 数据库 存储 节点互连 总成本
单数据中心 100% 100% 100% 100% 0 100%
冷热双数据中心 200% 200% 200% 200% 1 200%
双活双数据中心 200% 200% 200% 200% 1 200%
三活三数据中心 150% 150% 150% 200% 3 ~166%

先利其器

适当使用数据库

马斯诺锤子:当你只有一个锤子时,任何东西看起来都像个钉子

前车之鉴

失败乃成功之母

抓住每个机会,尤其是失败的机会,学习经验并吸取教训,不断的从错误和成功中学习。
最好的经验来自于失败的错误,而不是成功。

之前订单搜索和订单详情都有两个经典设计失败案例,一直说要整理下,还没有整理出来,看到这段话时候很触动。两次设计失败都是为了追求通用性,复用性,所以将不同功能集于一身,成为一个万能接口,导致功能支持起来后期比较吃力。举个例子订单搜索支持通用搜索(非订单搜索),而早期入参是按订单搜索维度设计,所以导致通用个搜索入参特别不友好。早期订单详情支持实时+非实时一起,而发现实时的可返回字段远远少于非实时字段,实时非实时对应支持的扩展组件也不尽相同,不得不重构抽离。

有备无患

用“泳道”隔离故障

避免系统串联

这个比较常见的雪崩源头都是系统串联,其中一环发生问题,不断导致上游出问题,而上游显得很被动,串联组件受多重失败乘法效应的影响。减少以串联形式连接的组件数量。

启用和禁用功能

限流降级的重要性,最大程度的保证应用不被其他应用拖垮。核心依赖的跑不了。

超然物外

力求无状态

有状态会限制可扩展性,降低可用性并增加成本

异步通信

尽可能异步通信

尽可能优先考虑异步通信而不是同步通信,异步通信可以削峰解耦,极大程度的避免耦合。同时同步调用使得整个程序停下来等待响应,它捆绑的所有服务和层,进而导致连锁性延迟或故障。

思考数据价值

海量订单下的数据价值显得格外重要,一些无用的垃圾信息或者不重要信息占据昂贵的存储资源上,同时需要提供这种久远历史的查询,对整个系统的意义显得格外低下,之前超过6个月的物流详细信息进行了删除并引导到对应物流公司网址查,后来据说要保留下来以提供查询。还有就是6年前订单也要跟现有订单一起查,体会不到这个看似无比强大的能力背后带来的价值和整个系统架构为了实现该功能所付出的代价,也许站的角度不同,不被感知。

画蛇添足

避免写入后立即验证刚写入的数据

比较典型的场景是消息推送后反查,系统发送消息比如通知该订单已经支付,然后马上过来再查下确认下是否真的变成已支付。这种对实时性要求很高,只能引导去查实时数据库,造成很大浪费,理论上消息体中的信息就可以直接拿到,所见即所信,当然有的说消息推送的只是部分信息,需要来查全信息,那这种更倾向于推送的时候把信息退全,避免被动即时拉取。

意犹未尽

梯级存储策略

将存储成本与数据价值匹配,包括删除价值低于存储成本的数据,并非所有的数据对业务都有相似的价值,事实上,随着时间的推移,数据的价值经常下降。因此不应该用单一的存储解决方案以同样的成本存储所有的数据。

RFM价值 Recency 指问题中数据多久前被访问过 Frequency 数据多久被访问一次 Monetization 数据的业务价值

分类处理不同负载

通过分区和故障隔离,处理独特的工作负载,以最大限度的提高整体可用性、可扩展性和成本收益

完善监控

把必须监控应用作为一条架构原则,看看整体监控策略确保可以回答

附上完整思维导图


架构即未来.png 架构真经.png
上一篇 下一篇

猜你喜欢

热点阅读