如何找出一个架构中不合理的地方?
持续更新中...
要解决的问题:
当别人问你,某个架构设计的优缺点, 希望你针对缺点如何优化时, 我们应该怎么分析呢?
我只谈分析思路, 并且只分析如何找出缺点 - 规避完缺点, 剩下的都是优点???
1.请先搞清楚整个架构包括哪些部分
2.搞清楚各个部分是做什么的, 搞清楚了之后, 我们就知道有没有模块之间包含了重复的功能
思路一: 看各模块是不是符合单一职责. 如果有几个模块拥有相同的功能, 则需要考虑下, 这样就找到了一个可优化的点
3.搞清楚各个部分后,需要看每个部分是不是有单点,这涉及到系统的可用性
思路二: 看有无单点. 如果有, 请优化.
4.排除完单点, 我们要关注下, 我们关注下扩展性. 主要是关注业务层和数据层.
首先想想哪些东西会导致系统扩展性差?
假设老板让我们做个新需求, 如果我们通过复制旧代码, 再稍微改改逻辑就可以实现, 那这种扩展还是能接受的, 也比较容易做.
改动越少, 比如纯粹的复制拷贝, 那我们扩展的越快, 巴不得它可以自动扩展. 这样我们什么也不用改. 准确的说, 不是没有改动或者改动少就是好扩展的,
应该是说没有人工参与改动, 或者需要人工去修改的地方很少. 而且对于重复的改动, 人工是不应该参与的. 人要做创造性的东西, 重复的都应该交给机器去做.
所以一个容易扩展的系统, 扩展时所需要涉及的人工改动应该是很少,甚至不需要人去参与.
因此能不能应对变化就是一个考量点
扩展性 - 应对变化的能力, 能力是怎么体现的? 更高更快更强 - 扩缩容快, 安全无风险
思路三: 每个模块当处理能力不够时, 怎么扩展, 是不是可以自动扩缩容, 当功能改动时, 怎么roll out这些功能出去的, 能不能canary, 能不能做A/B testing
思路四: 模块的状态问题, 状态是怎么维护的, 怎么应对变化, 是否存在不能应变, 或者需要改动映射关系, 迁移数据的情况? 当出现这些情况时, 是机器帮你解决还是人工解决, 解决的时间要多久
独立扩展
思路五: 是否能够独立扩展, 有没有耦合性比较高的, 在某个系统变动时, 有没有可能出现系统之间不兼容的情况?系统部署和变更是, 是不是有顺序上的要求, 比如必须升级A, 再升级B, 这些也是可以优化的点.
故障隔离 - 评定一个故障的严重程度, 可以看故障的影响范围, 影响时间, 影响的业务重要程度
思路六: 故障可定会出, 只是出现时我们希望能控制影响范围, 尽可能的缩短故障时间, 故障产生的原因有很多,人为操作, 或者程序bug, 或者设计缺陷等等...
如果架构中存在一旦某个模块发生故障, 就会影响所有用户, 那这个模块就是最重要的, 要具备最高的可用性, 那针对这个模块的容灾方案, 扩缩容, 监控告警都得做到万无一失.
或者就是把这种高风险的模块, 复制多个出来, 每个只负责一小部分, 他们中任何一个出问题时, 不至于影响到所有人, 就像鸡蛋不能都放在一个篮子里. 多放几个篮子呗.
待续...