在创建调解策略时,将 WSRR 用作策略编写点和将 WebSphere® DataPower® 用作策略执行点的实施详细信息。
WSRR 可以用于编写所有 SOA 策略,包括 SLA(服务级别协议)策略、调解策略、监控策略、定制策略和其他将在以后支持的策略域。使用业务空间用户界面,您可以在 WSRR 中创建、更新或删除策略文档。策略文档可以包含为特定策略域指定大量策略的策略表达式。或者,可以创建策略文档,以用于组装其他文档中的现有策略。可以使用策略标识来引用个别策略,在将策略添加到文档时可以指定策略标识。 策略表达式表示策略的声明,相当于 WS-Policy 文档中的 <wsp:Policy> 元素。
要在 Business Space 中创建调解策略,请参阅编写新策略。
服务级别协议 (SLA) 应来自于业务需求,即服务提供的服务质量必须满足指定标准。设计服务时,创建功能性需求以指导服务采用的逻辑。在该服务的分析和设计中,应同时指定非功能性需求,从而指定预计服务将提供的服务质量。例如,企业可能具有一项服务:提供信息以对客户互联网查询做出响应。目标是在 3 秒内返回响应。在端到端事务工程中,确定此服务必须在 2 秒内返回其信息,以便满足企业非功能性需求。
当未满足 SLA 时,我们可以编写将对服务性能实施运行时检查的策略,并采取操作,以便保障服务满足其 SLA。例如,我们可能具有一个通常能够在 2 秒内提供服务响应(95% 的情况)的服务主端点。SOA 架构设计师在另一台服务器上创建次要端点,这通常是针对主端点停运而用作热备用,但当主端点无法满足事务负载时,也可以被授权用于处理溢出流量。当必需满足 SLA 时,我们可以编写策略,用于检查服务响应时间和重新路由流量。
通过运行时策略维护 SLA 的另一个示例是,服务对具有各种消费者且每个消费者具有不同级别优先级的事务做出响应的情况。 例如,我们可能有“gold”和“bronze”客户,但只保障“gold”客户的特定服务质量。 在本示例中,我们可以检查客户是否为“gold”客户,然后重新路由至次要端点,而继续以较慢的响应速度处理“bronze”客户。企业决定,由于“bronze”客户不能提供足够的收入增长额,从而牺牲响应时间以满足“gold”客户的 SLA。
在第三个示例中,我们可能遇到一种情况,服务将尽其所能,但当它确定处于超负荷时,它将对低优先级客户服务的消息采取排队甚至拒绝措施。其中一个例子是,当客户请求的批处理例程突然占满系统。为了保证服务质量,我们可以创建仅在办公时间有效的运行时策略,在此期间将拒绝所有批处理请求。
通常,调解策略允许在提供给服务器(提供者)之前,验证和转换客户机(消费者)的入局消息。
策略支持此类消息验证和转换。 可以仅为提供者服务、特定消费者/提供者对或提供者服务的匿名消费者指定策略。针对匿名客户的策略提供一种用于定义缺省策略的方式,此缺省策略仅适用于未应用任何其他策略的消费者。使用此功能将为不标识自己的无赖消费者指定策略。这样此类消费者服务就可以拒绝其事务。这可以有助于防止充当消费者的黑客尝试使用事务占满系统以降低提供者服务质量的拒绝服务攻击。
可以进行调解断言,这使运行时策略能够控制服务的 SLA、从消费者到提供者的消息转换,或验证消费者消息的消息模式。
SLA 策略条件(调解策略的特殊类型)实际上允许具有条件的典型 if-then-else 结构,然后根据条件求值情况来执行一组操作。指定条件为可选。如果未指定任何条件,那么它就相当于逻辑条件求值为 True,并将相应地执行任何指定的操作。
如果指定了条件,那么条件必须包含布尔表达式和/或调度规范。
调度
如果指定,那么调度标识策略生效时间。根据本地策略执行点对指定的日期和时间求值,使用的时区是该策略执行点的时区。如果未指定任何调度,那么策略在从策略编写点下载到策略执行点就开始执行,并一直继续。
调度可定义一个可选的开始日期和一个可选的停止日期、一个可选的每日期限以及一个可选的工作日列表。例如,可以定义调度有效期自 2012 年 10 月 1 日到 2012 年 10 月 30 日,在星期三和星期天从早上 8 点到下午 5 点。
调解策略条件表达式
条件表达式是指定布尔表达式的非重复元素(如果指定)。
表达式包含三个必需的参数(Attribute、Operator 和 Value)以及一个可选的 Interval 和 Limit。如果对 Attribute 和 Value 应用 Operator 以及 Interval 和 Limit(适当情况下),求值为 True,那么表达式求值为 True。限制元素仅与 HighLow 和 TokenBucket 运算符一起使用。如果未指定,那么 Limit 的值为 0。如果未指定 Interval,那么缺省值为 60 秒。
属性 | 描述和类型 |
---|---|
ErrorCount | 此监视时间间隔期间检测到的故障数。 |
MessageCount | 监视时间间隔内拦截的实际消息数。 |
InternalLatency | 内部等待时间(处理时间,秒)。 |
BackendLatency | 设备到服务器等待时间(秒)。 |
TotalLatency | 后端和内部等待时间之和(秒)。 |
运算符 | 含义 |
---|---|
GreaterThan | 一个简单的数字算法,当属性大于定义的值时,为 True。 |
LessThan | 一个简单的数字算法,当属性小于定义的值时,为 True。 |
TokenBucket | 一种基于速率并允许脉冲串传输的算法。
算法包含最大容量为限制令牌数的存储区。每个时间间隔之间以固定比率的值令牌填满存储区,而对于每个属性单元,除去令牌。当存储区中没有令牌时,该算法求值为 True,否则,求值为 False。这里有个示例可以帮助说明此算法:假设限制=100,值=5,时间间隔=1 秒,属性=MessageCount。
|
HighLow | 一个算法,当属性达到指定为值的高阈值时,求值为 True,在属性达到指定为限制的低阈值之前,继续求值为 True。 |
当 wsme:Operator 为 HighLow 时,这定义低阈值,而 wsme:Value 定义高阈值。指定的阈值应该低于 wsme:Value 的值。当未指定时,缺省限制为 0。
当 wsme:Operator 为 TokenBucket 时,这定义脉冲串传输的最大大小,或存储区中令牌的最大数,而值指定每个时间间隔令牌数填满存储区的速率。当未指定时,缺省限制为 0,TokenBucket 相当于 GreaterThan 操作。
值 | 描述 |
---|---|
SOAPBody | 验证 SOAP 主体元素的内容,而不对 SOAP 故障进行特殊处理。(缺省值) |
SOAPBodyOrDetails | 对于 SOAP 故障,验证详细信息元素的内容,否则验证主体元素的内容。 |
SOAPEnvelope | 验证包括信封在内的整个 SOAP 消息。 |
SOAPIgnoreFaults | 如果消息是 SOAP 故障,那么不进行任何验证,否则验证 SOAP 主体元素的内容。 |