第三章:服务设计原则

1.简介
1)标准化服务合约原则
服务合约原则指的是为服务建立标准化服务合约,通过标准化服务合约来规范限定我们的服务设计(逻辑依赖于合约,技术依赖于合约),从而抑制了服务在未来时间的演化。比如说服务的逻辑修改,服务的技术改变。
读者也许会疑问抑制了服务的演化究竟有什么好处?我们可以从思考问题的角度出发:
1.服务是否能随便变更服务的功能?(逻辑)
2.服务的功能变更、技术变更是否会影响其他依赖于该服务的服务?(服务耦合)
3.服务能否更好的被重用组合?(服务的易变性)

从上面几个问题,可以得出服务应该是非易变的,不管是技术设计上还是服务的功能逻辑上。
所以我们需要设定服务合约:
别名 描述
功能合约 通过为该服务的功能(逻辑)定义统一的描述语言,而该服务的逻辑必须依赖于合约所描述来实现(不允许有偏差)。功能合约同时也有利于服务开发者对服务的可发现性。
技术合约 技术合约指的是服务的通讯协议,服务的输入输出参数的数据模型。

2)服务松散耦合原则
服务松散耦合指的是服务与服务间的耦合性。耦合性太强,那么则限制了服务的演化能力。比如服务的功能粒度,如果功能粒度过高,则限制了服务的演化能力,如果功能粒度过低,那么则导致服务被大量的服务所依赖,依然被限制了服务的演化能力,且一旦演化则所需的考虑情况更加复杂。所以耦合性是一个值得注意的平衡点。
主要表现为两方面:
1.服务功能的粒度(这需要分析该服务的依赖关系与被依赖关系,服务组合的上下文关系)
2.服务输入输出参数的粒度

3)服务抽象原则(信息隐藏、元数据抽象)
通常人的思维都是由他自身的认知来决定的,而认知的根本来源是信息。通过对信息的认知,我们才能更好的评估事物的价值。所以通过隐藏一些服务信息,提升服务使用的灵活性,的使得我们的服务能在将来更好的演化,而不会影响已使用该服务的用户(用户根据所发布的服务信息来使用服务)。

4)服务可复用性原则
服务可复用原则是作为服务设计原则中最基本的一个原则,复用性也是服务化的根本。
当一段代码只需要把一个目标场景所使用时,由于它专注于一组特定的需求,所以我们认为这段代码的使用范围是有限且可预测的,程序的设计、开发、测试都将会比较简单。
但是当一段代码需要考虑被多个目标场景所使用时,它自身所要考虑的业务上下文也变得多且复杂。直接导致程序的设计、开发、测试都变得复杂困难了。
由于服务被多少目标场景所复用是由业务模型决定的,在考虑服务可复用性时,需要着重分析整个企业的业务领域,且定制企业的业务模型,分析各个业务模型之间的关系。才能更好的做到服务的复用性。

5)服务自治原则
当一个服务的逻辑单元由自身的领域边界内所控制,不受其他外界条件的影响(外界条件带有不可预测性),且运行环境是自身可控,完全自给自足时,我们认为这个服务是自治的。服务的自治性理论上来说应该是逻辑单和数据都是孤立(不依赖其他外界条件才能完成自身逻辑和不被其他服务直接访问数据)。

自治性原则带来的好处则是由于服务的逻辑单元是自给自足,完全由自身把控,不受外界不可预测条件因素的影响。所以服务也会相对应的稳定。
领域会衍生出许多逻辑单元,这些逻辑单元就是服务。我们可以通过领域分析得到领域间的关系和领域内的各种逻辑单元,然后根据领域为边界来划分服务的边界。通过领域内自治来完成服务自治。领域内再细分服务模型,如实体服务和组合服务。实体服务则是完全服务自治的,它不受任何外界条件影响,甚至不受自身领域内的其他服务的影响。而组合是由领域边界内的服务所组合而成,它的自治性依赖于被组合服务的自治性,所以也叫组合自治。一个服务如果依赖的服务越多,那么则认为这个服务的可靠性越差。因为你不知道你所依赖的这些服务什么时候会给你带来变化。
自治也分为三种:
1.实体服务的自治(完全自治)
2.组合自治(依赖于被组合服务的自治性)
3.领域自治(在领域内实现完全自治)

6)服务无状态性原则
由于服务的无状态性,服务的消费者在消费服务时候,不需要携带额外的状态。所以服务的无状态性能提高服务消费者和提供者的伸缩性和能被更好的复用。

7)服务可发现性原则
服务的可发现性非常重要,因为服务是被用来复用的,如果在服务设计过程中,并不能发现一个已经存在的服务,而需要重新建立个同样逻辑单元的服务会导致服务冗余(可能会一个逻辑单元有多个重复)。从而也使得企业的服务架构膨胀、错综杂乱。
服务的可发现性分为两种:
1.设计时发现(人)
设计时发现指的是服务设计人员和研发人员在研发一个新的服务时,可以通过搜索服务仓库的元数据信息,查看服务仓库是否已拥有存在的服务,没有则重新开发。
2.运行时发现(程序)
运行时发现指的是服务的消费者可以通过服务注册中心查找特定服务的接口的调用地址,从而进行调用。

8)服务可组合性原则
服务可组合性和服务可复用性很相似,服务可组合性其实也潜在的要求了服务具备可复用性,可以认为可复用性是一种广义上的服务化架构根本,而组合性是具体的一个可复用性的形式。
如果某个事物能被分解,那么它也应该可以被重新组合。分解通常是由于分解能带来好处,比如分解后每个小部分都得到很大的受益。如可以被重新组合为不一样的整体。

积木通常是立方的木头或塑料固体玩具,一般在每一表面装饰着字母或图画,容许进行不同的排列或进行建筑活动积木有各种样式,可开发儿童智力,可拼成房子,各种动物等。
如果是一个已被固化的整体的玩具,那么它不具备重新组装性。那就不会被孩子自由的重新组合成新玩具了。
服务可组合性也一样,通过把一个具体的业务流程分解为各个单独的逻辑单元(服务)。服务的设计者则可以服用、组合这些逻辑单元为一个新的服务。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值