微服务设计

读书时间:

2018

微服务的主要好处:

1、技术异构型
在一个由多个相互协作的系统中,可以在不同的服务中使用最适合该服务的技术。
微服务可以帮助我们更快的采用新技术。

2、弹性

3、扩展
庞大的单块服务只能作为一个整体进行扩展。即使系统中只有一小部分存在性能问题,也需要对整个服务进行扩展。

4、简化部署
在有几百万行代码行的单块应用程序中,即使只修改一行代码,也需要重新部署整个应用程序才能够发布该变更。这种部署影响很大、风险很高,因此相关干系人不敢轻易做部署。

5、与组织结构相匹配

6、可组合型

7、对可替代性的优化

很多人把城市比作生物,因为城市会时不时地发生变化。当居民对城市的使用方式有所变化,或者收到外力的影响时,城市就会相应地演化。城市规划师应该尽量去预期可能发生的变化,但是也需要明白一个事实:尝试直接对各个方面进行控制往往不会奏效。

建设团队

对于一个胸痛技术愿景的主要负责人来说,执行愿景不仅仅等同于做技术决定,和你一起工作的那些自然会做这些决定。对于技术领导人来说,更重要的事情是帮助你的队友成长,帮助他们理解这个愿景,并保证他们可以积极地参与到愿景的实现和调整中来。

微服务架构本身能够提供一种很好的形式。在单块系统中,人们为某些事情负责的机会非常有限,而在微服务架构中存在多个自治的代码库,每个代码库都有着自己独立的生命周期,这就给更多人提供了对单个服务负责的机会,而当这些人在单个服务上面得到足够锻炼之后,就可以给他们更多的责任,从而帮助他们逐步达成自己的职业目标,同时通过分担职责也可以防止某一个人的负担过重。

我坚定地相信,伟大的软件来自于伟大的人。所以如果你只是担心技术问题,那么恐怕你看到的问题远远不及一半。

消息队列使用的bug

系统运行起来,感觉很棒。但是在某一次发布后,我们遇到了一个很令人讨厌的问题。我们的消费者不停的崩溃、不停的崩溃、不停的崩溃。
最终我们发现了问题所在。代码中存在一个bug,某一种特定请求会导致工作者崩溃。我们当时使用了事务处理队列(类似rabbitmq的持久化),如果在处理过程中崩溃,那么这个消息是不会被消费掉的,然后其他的消费者就会来消费这个消息,然后又崩溃…… 灾难性故障转移的一个典型例子。

处了代码中的bug外,我们还忘了设置一个作业最大重试次数。所以后面不但修复了bug本身,还设置了这个最大重试次数。但是我们也意识到需要又一种方法来查看甚至是重发这些有问题的消息。所以最后实现了一个消息医院(或者叫死信队列),所有失败的消息都会被发送到这里。