文章目錄
  1. 1. 分析问题
  2. 2. 学习知识

无论是分析问题还是学习知识,都是有规律可循的,遵循这个规律会事半功倍。这个规律,我们就可以称之为方法论。总结起来就是三个关键词:What、How、Why。但是二者不同之处在于三个关键点的组织顺序不一样。

分析问题

方法论:Why -> What -> How

举例来说,现在我们要解决这样一个问题(需求):设计一个消息中间件的主备方案。

问题很明确,但是我们要怎么快速、清晰的分析,并最终解决这个问题呢?让我们根据方法论来一步一步分析。

  1. Why

    我们为什么要做主备方案呢?因为想避免在A主机宕机的场景下,客户端程序依然可以正常的发布和拉取消息。其实Why很简单,但是其却很重要。不分析清楚Why,就失去了驱动力;没有驱动力,你的上级会提供资源支持你解决这个问题吗?下级能够更合理的设计和开发吗?显然不能!

  2. What

    主备方案是为了提升应用的高可用。可是这是比较笼统的一个目标,并不是很清晰,比如究竟要达到什么程度的高可用呢?是要所有功能都要高可用?还是某些功能高可用?确定了这些细节,那么我们就搞清楚了What,也就是我们最终会把这个问题解决到什么程度?是全部解决?还是部分解决?总结起来What的关键如下:

    1. 我们在什么场景下,保证(或提供)什么;
    
    2. 我们在什么场景下,不保证(或不提供)什么。
    

    假设最终我们分析后,确定我们是要保证在任何一台主机宕机的情况下,依然能够正常提供消息的发布和拉取。继续分析,假设本身是集群部署,那么对于发布消息来说,本身就是高可用的,因为A主机不能发布消息,我发布到B、C…主机就可以了。但是对于拉取消息来说,如果底层不是共用存储,一旦A主机宕机,那么其消息就无法拉取,很明显不具备高可用。

    经过上边的分析,那么其实我们就明白了,我们的核心目标是要实现消息拉取功能的高可用性。

  3. How

    搞清楚了What,就要开始动手了。动手之前,需要考虑清楚怎么做。通常来讲,主备方案需要解决两个核心问题:

    1. 故障检测
    
    2. 状态和决策
    

    具体到每一个核心问题究竟要怎么解决?采用什么技术解决?这些都是How要解决的问题。关于主备方案的详细设计过程,参见博文:

学习知识

方法论:What -> How -> Why

人类学习一个技能或者一个知识,总是遵循由浅入深的规律,What -> How -> Why。下边拿我们学习Spring框架的来说。

  1. What

    Spring是什么?它的主要特点是什么?它能帮助我们干什么?知道了这些,你就可以在可以说:我了解Spring。如果你先工作中暂时用不到,认为没必要深入学习,那知道What就够了。将来在做方案决策的时候,就可以进行简单的方案对比。

  2. How

    Spring怎么用于开发?功能怎么搭建?依赖怎么管理?知道了这些,你就可以说:我熟悉Spring,能够独立的应用Spring进行应用开发。

  3. Why

    Spring为什么要采用依赖注入?为什么要采用插件式设计?为什么要配置优先?更深一点,为什么某段代码是这么设计?知道了这些,那么你就可以说:我精通Spring,甚至可以编写类似的MVC框架。

文章目錄
  1. 1. 分析问题
  2. 2. 学习知识