二、微服务思想

2.1核心思想

相比于建造建筑物,在软件中我们会面临大量的需求变更,使用的工具和技术也具有多样性。

我们创造的东西并不是在某个时间点之后就不再变化了,甚至发布到生产环境之后,软件还能继续演化。

因此,必须改变那种从一开始就要设计出完美程序的想法,相反的,更应该设计出一个合理的框架,在这个框架下可以慢慢演化出正确的系统,并且一旦我们学到了更多知识,应该可以很容易的应用到系统中。

我们不应该过多的关注每个区域内发生的事情,而应该多关注区域之间的事情。

担心服务之间的交互,胜于过多关注各个服务内部发生的事情。

2.2目标、原则和实践

基于要达到的目标去定义一些原则和实践,对做设计来说非常有好处,不会偏离初衷。

目标

目标的层次一般都很高,通常也不会涉及技术层面,一般在公司或者部门层面指定。这些目标可以是“提高研发效率”或者“提升代码质量”。这些都是你的组织前进的方向,所以需要确保技术层面的选择能够与之一致。

原则

为了和更大的目标保持一致,我们会制定一些具体的规则,并称之为原则,它不是一成不变的。

一般来讲,原则最好不要超过10个,或者能够写在一块白板上,不然大家会很难记住。而且原则越多,他们发生重叠的冲突得可能性就越大。

扫描二维码关注公众号,回复: 985595 查看本文章

实践

通过相应的实践来保证原则能够得到实施,这些实践能指导我们如何完成任务。实践应该巩固原则。

2.3规约标准

在微服务可以完成上述目标的同时,我们还需要识别出各个服务需要遵守的通用规则。

当我们在考虑一个更大的全景图时,图中应是许多系统由很多很小的但是有自治生命周期的组件构成,而且这些组件之间有着紧密的关联。所以在优化单个服务自治性的同时,也要兼顾全局。

我们应该清楚的定义出一个好服务应有的属性:

Ø   监控:能够清晰地描绘出跨服务系统的健康状态,各个服务以同样的方式报告健康状态与监控数据;

Ø   接口:选用少数几种明确的接口技术有助于新消费者的集成,不仅仅是技术和协议,要细化到规范(描述URL使用动词还是名词,如何处理资源分页,如何处理不同版本的API);

Ø   安全性:必须保证每个服务都可以应对下游服务的错误请求(使用断路器、使用自己的连接池,返回码也应该遵守一定的规则);

2.4组织管理

在开发软件的过程中,除了应该多思考墨菲定律,也要思考康威定律。

就如何做事情达成共识是一个好主意。但是,确保人们按照这个共识来做事情就没那么容易了。某些标准或许会成为开发人员的负担。有效的两种方式是:

范例:编写文档是有用的,但是开发人员更喜欢可以查看和运行的代码;

服务代码模板:针对自己的架构裁剪出一个代码服务模板,不但可以提高开发速度,还可以保证服务质量;

创建服务代码模板不是某个中心化工具的则指,也不是架构团队的职责。应该通过合作的方式定义出这些实践,所以你的团队也需要负责更新这个模板(内部开源的方式能够很好地完成这项工作)。

作为技术领导人来说,更重要的事情是帮助你的队友成长,并保证他们可以积极地参与到愿景的实现和调整中来,当这些人得到足够的锻炼之后,就可以更他们更多的责任,从而帮助他们逐步达成自己的职业目标,同时通过分担职责也可以防止某一个人的负担过重。

伟大的软件来自于伟大的人。如果你只担心技术问题,那么恐怕你看到的问题远远不及一半。

2.5小结

主要总结了在设计系统时,尤其是使用微服务设计系统时的一些思想、做法、标准和管理,并无落实到具体技术上。

在微服务系统中,设计者需要做更多的决定,因此,能更好的平衡这些决定带来的利弊是非常关键的。

接下来会从技术的角度来看如何设计微服务。

猜你喜欢

转载自my.oschina.net/u/2450666/blog/1817026