《低功耗蓝牙开发权威指南》——2.11节范式

2.11 范式
最成功的技术常围绕不同的范式而设计,低功耗蓝牙也不例外。低功耗蓝牙技术使用两个主要的架构范式:客户端–服务器架构和面向服务的架构。

2.11.1 客户端–服务器架构
在客户端–服务器架构中,客户端通过网络向服务器发送请求,服务器回复响应。这是互联网背后的主要范式,无疑也是有史以来发布的最成功的网络技术。
举个例子,当你在Web浏览器中键入一个URL地址时,它首先发送地址到DNS服务器。DNS服务器将已分配给该名称的对应的IP地址返回。然后,客户端通过超文本传输协议(HTTP)向服务器发送请求,一旦连接确立,请求服务器发送所要求的资源。接着服务器回复适当的资源,通常是一个包含了标记信息(HTML)的文本文件,告诉浏览器如何显示信息。
该文件还可以包含一些URL供客户端获取资源,如图片或其他页面。这些额外的链接被视为HTML页面彼此链接成一个巨大的Web网络的真正原因,也正是因为这样,才有了Web页面和Web服务器的说法。
关于服务器和客户端的分工问题,二者有明确的区分。服务器通常以结构化形式保存信息,可以说,这些信息正是服务器存在的真正原因。信息可以是任何形式的数据,比如当前夏威夷科纳区的天气,下一班从首尔市区到机场的火车的时刻表,或只是一群朋友间的闲谈。另一方面,客户端没有任何数据,只是将请求发送到服务器。一旦从服务器收到答复,就可以执行指定的任务,例如为用户显示信息或发送通知,告诉他们认识的某人刚在推特上发了些东西。
客户端–服务器架构的主要优点是将客户端和服务器二者划分开来。当系统的不同部分位于不同的设备上时,这种划分必不可少。将其中一部分作为服务器而另一部分作为客户端,系统中二者的关系随之确定下来。
这种架构的主要优点是便于扩展。除了能够访问资源的URL,客户端不需要知道任何东西。客户端的数量也可以十分庞大,一些互联网的网站每天可能收到来自数百万客户的请求。服务器并不真正关心这些客户端是谁或来自何处,它只是对每一个请求做出响应。
该服务器架构亦可进行拓展。用一台机器每天响应数百万的请求可能导致过载甚至服务失效。解决的办法是使用许多相同的、有权访问相同信息的服务器。还有个办法是将同一个域名解析成不同的IP地址告诉不同的客户端,使负载均匀地分布在各服务器之上。这就是所谓的负载均衡。

2.11.2 面向服务的架构
客户端–服务器架构之上的进一步抽象是面向服务的范式。这是一个将服务器中的信息组织成服务的模型。该服务可以被发现、进行交互或用做已知的语义。这意味着该服务具有确定的行为,在给定相同的条件时,总会产生同样的结果。
这种范式是最成功的互联网系统的基础,如SOAP、REST、COBRA、RPC、Web服务等。
为了更好地说明这一点,一种方法是把它与现实世界的例子相结合。假设有一个包裹需要尽快交付给另一家公司,你可能会做的第一件事是打电话给快递公司安排取件,然后支付服务费。关键在于,你总是知道接下来会发生什么,快递公司始终遵循一套默认的行为:无论哪天给他们一个包裹,他们所做的事情都完全一样—把它及时地快递到目的地。这项服务具有预先确定的行为和已知的语义,并产生可预测的结果。
上述例子里有一个有趣的地方,你和快递公司的两个不同的人打了交道:接电话并接受业务请求的人以及上门取件的快递司机。此外,也许你并未意识到,其实还有一个处理财务账款的人。三人提供的子服务相互结合,形成了快递公司的主营服务。
这些子服务也是通用的,它们可以用于许多不同类型的公司。比如财务事务处理几乎能以同样的方式应用到各家公司。类似地,利用电话的方式在某个地方装货且在另一个地方卸货的服务也可以被应用于出租车公司。
这一切要运转,每个环节都必须遵循一套规则和惯例,下面将对此进行详细介绍。
1. 正式合约
一个服务之所以被视为服务,是因为其在公开的功能以及如何工作两个方面提供了正规的描述。例如,快递公司的司机穿着公司制服,驾驶公司车辆,并愉快地迎接客户。他会在不同地点之间快速、安全地驾驶车辆,将包裹完好无损地送达。任何违反这些规则的行为将被视作违反了客户与快递公司之间的合约。因此,大多数快递公司也要求客户首先同意这种正式合约,然后才去取包裹。
正式合约的一个好处在于,一个服务的实例很容易被另一个服务的实例所代替。只要两个服务的实例具有相同的功能和行为,这种情况就有可能发生。例如一个财务人员离开了公司,公司应该很容易找到一个知晓相同做账规则的替代者。
在低功耗蓝牙中,这些正式合约位于服务规范之中,并为蓝牙SIG所采用。这些规范也有相应的测试规范,以确保实施行为的有效性。
2. 松耦合
在面向对象的软件中,单独的系统组件是指被设计成无边界效应的独立对象。那些发生在组件之间的相互作用可以被明确地定义和测试。
将依赖关系减少到最低限度,使修改服务的实现时不会带来意想不到的边界效应,从而降低风险。从这一点出发可以得到一个合理的推论,即应当将正式合约及其实现这二者分离开来。这样,只要正式合约不被破坏或修改,实现就可以根据需要随意变换。
打个比方,快递公司可以增加更多的司机,把一个司机完成所有工作的局面变成很多司机在城市的一小块区域内取件、运回分拣中心、再发送到目的地,而这些工作可能由不同的司机完成。从客户的角度来看,该服务依然如故,包裹仍然按照预期被收走而后送达,但实现的过程却是完全不同的。注意,这里并未改变财务服务或订单服务。
3. 抽象化
服务抽象是十分重要的设计原则,如果违背该原则可能造成严重的后果。假如不利用抽象化,而让客户端掌握服务的所有实现细节,那么客户端使用该服务的方式将会严重制约服务的演化。
知识总是多多益善,这虽然是个常识,但在面向服务的体系结构下,客户端对服务的实现知识了解得越少越好。太多的知识会让客户端与某种具体的实现发生关联,从而妨碍服务的重用或是重新设计。一旦服务的实现发生变化,客户端有可能崩溃。
为了确保遵循该原则,服务公开的状态应当尽可能少。此外,只应规定服务行为的外在表现。
4. 可重用性
可重用性的概念多年来一直是面向对象方法所期望的设计目标。但是,真正意义上的可重用性是令服务适用于多种不同应用的一种能力。如果未经认真思考,设计的服务往往仅能完成某一种工作。而在良好的设计方案中,服务可以与具体的实现过程相互独立。这意味着该服务能够在其他应用程序中快速、轻松地获得重用。
蓝牙技术联盟为应对这一挑战设立了一个工作组,该工作组的唯一工作就是找寻通用的功能,对其需求进行抽象以实现有效的重用。
5. 无状态
为了让众多客户端支持服务扩展,服务器不能保存任何客户端的状态数据。服务器或许可以定义一个服务用来记住客户端已经告诉它们的所有信息,使客户端在后续请求时不必重复这些信息。但该方法的问题在于,这些信息占用了大量的内存,且依赖于客户端和服务器二者之间同步的共享状态信息。这将导致服务器完全依赖客户端的正确操作,而这样的假设无疑站不住脚。
因此,无状态的设计目标是删除客户端和服务器之间所有的交互状态。虽然仍然有一些状态信息存储在服务器上,但是它们均为服务器状态,而非客户端状态。这意味着,无论任何客户端在任何时间发送任何请求,服务器都将以完全相同的方式响应相同的请求,而不管请求来自哪个客户端。
6. 可组合性
上面提及的各种目标意味着,服务应该被设计得小而简单,然而现实世界从来都不是那么简单。现实世界中的服务是复杂的。要解决这个明显的矛盾冲突,面向服务的体系结构鼓励聚合较小的服务,以实现更高级的服务接口。
这一设计目标鼓励服务间相互组合。例如,快递公司的服务是由三个独立的服务组成的,这些单独的服务只要围绕既定目标,就可以合并成一个快递公司。同样,一些服务可以结合在一起组成出租车公司或商务汽车租赁服务。尽管实现不尽相同—送货车、家用车、行政豪华轿车,但本质上是相同的服务。
7. 自治
为了重用和组合服务,服务本身必须是可靠的。基于系统内其他组件构造的服务在执行请求处理的可靠性上无疑要比对所有事情实施完全控制的服务更差。
自治的服务可以独立执行任务,而不管在其周边发生的情况。这些服务要在其他应用程序中实现重用将会非常容易。非自治服务可能会带来许多额外的支撑服务,并且可能与其他服务相冲突。
例如,快递公司的司机们按照规定自主活动,完成包裹收集和递送。即使办公室那边出了岔子,他们仍能继续独立地工作。

  1. 可发现性
    最后,要想使用服务就必须能够发现服务。乍看上去似乎显而易见,但其实服务发现能力在移动自组织网络中是必不可少的。没有服务发现,所有服务必须采用静态编程,复杂、繁琐而且容易出错。
    可发现性通常是通过一个单独的、与服务交互的协议来实现的。比方说,要找到快递公司,人们应当使用电话簿或在互联网上搜索,绝不会是随机拨打电话号码并希望接通的是个快递公司。
    低功耗蓝牙采用不同的方法:使用同一个协议实现服务发现以及服务交互。该协议称为“属性协议”,服务可发现性在其规范中被称为“通用属性规范”。这二者都将在第10章中进行介绍。
时间: 2024-08-31 23:18:03

《低功耗蓝牙开发权威指南》——2.11节范式的相关文章

《低功耗蓝牙开发权威指南》——3.4节协议栈划分

3.4 协议栈划分构建一个低功耗蓝牙产品可能使用多种不同的协议栈划分方案.标准规范定义了一种协议栈划分的方法,即使用主机控制器接口分隔主机和控制器这两部分.即便如此,我们也可以使用许多不同的方案. 3.4.1 单芯片解决方案单芯片解决方案可能是低功耗蓝牙里最简单的协议栈划分方案,如图3-6所示.图中其实并未划分协议栈,产品的所有部分都装在一个芯片上.该芯片包括控制器.主机软件和应用程序.这是低功耗产品的极简方案,只需要一个电源.一根天线.一些连接按钮或灯泡的硬件接口,以及一些额外的分立元件. 不

《低功耗蓝牙开发权威指南》——1.2节设计目标

1.2 设计目标评论一种技术,一个首先浮现的问题是设计者是如何优化该技术的.大多数技术通常具有一定的适用性,也会有一两项显著的优势.而了解这些优势对于加深对该技术的理解将大有裨益.对于低功耗蓝牙而言,答案非常简单.它的设计目标就是实现最低的能耗.蓝牙SIG的一个独特之处在于该组织制定并控制从物理层到应用程序的所有层次.SIG在一个合作.开放.由商业驱动的标准化模式下运行,在过去的十多年间不断优化无线规范的制定流程,使得蓝牙规范在发布之后不但可以立即使用,而且具有互通性.鲁棒性以及极高的质量.在设

《低功耗蓝牙开发权威指南》——1.3节术语

1.3 术语和许多高技术领域一样,在低功耗蓝牙方面工作的人们用他们自己的语言来描述一些技术特征和规范.本节列举了那些具有特殊意义的术语,并给出了解释.自适应跳频(Adaptive Frequency Hopping,AFH) 一种使用某个频率子集的技术,使设备可以避免其他非自适应技术使用该频率(比如Wi-Fi接入点).体系结构(architecture) 低功耗蓝牙的设计方案.频段(band) 参看无线频段(radio band).跳频(frequency hopping) 两个设备之间使用多个

《低功耗蓝牙开发权威指南》——2.6节凡事皆有状态

2.6 凡事皆有状态低功耗蓝牙背后有个基本的概念:任何事物都有状态.状态可以是任何东西:当前的温度.设备里电池的状态.设备名称或是对测量温度的地点的描述.它通过属性服务器上的属性协议对外公开.状态并不局限于"可读"状态,还包括"可写"状态.比如有一台可以设置温度的自动调温器,另一台设备在判断房间应升温或降温之后,可对其进行设置.既然可以公开各种状态,自然也可以公开状态机的状态.通过使用显式的状态机属性值,设备可以清楚地提供其当前的状态.这为客户端随时断开连接提供了可

《低功耗蓝牙开发权威指南》——3.2节主机

3.2 主机 主机是蓝牙世界的无名英雄.主机包含复用层.协议和用来实现许多有用而且有趣的过程.主机构建于主机控制器接口的上层部分,其上为逻辑链路控制和适配协议(L2CAP),一个复用层.在它上面是系统的两个基本构建块:安全管理器(用于处理所有认证和安全连接等事务)以及属性协议(用于公开设备上的状态数据).属性协议之上为通用属性规范,定义属性协议是如何实现可重用的服务的,而这些服务公开了设备的标准特性.最后,通用访问规范定义了设备如何以一种可交互方式找到对方并与之连接. 主机并未对其上层接口做明确

《低功耗蓝牙开发权威指南》——2.1节纽扣电池

2.1 纽扣电池 纽扣电池是低功耗蓝牙的主要设计目标.这类电池(见图2-1)在使用时有非常严格的限制.图中的电池型号为CR2032,标签上的"CR"表示这是一个3V锂二氧化锰电池,"20"表示该电池直径为20mm,"32"表示高为3.2mm.除图中所示的型号外,其他的一些电池尺寸也很常见. 对于这类小型电池而言,各品牌的电池所能存储的最大能量非常接近.一个典型的CR2032的额定容量在3V时为230mAh,如果换一个场景可能更好理解-这些能量仅够

《低功耗蓝牙开发权威指南》——2.3节昂贵的内存

2.3 昂贵的内存众所周知,一台电脑的内存越多,通常而言价格就越贵.然而,计算机内每一个比特内存不仅费钱,还费能量.内存通常需要动态刷新-每隔一小段时间芯片中的内容便要刷新一次.这种动态刷新需要能量,而设备装备的内存越多也就需要更多的能量来为其供电.因此,整个低功耗蓝牙设计在每一层都考虑了降低内存的数量.例如,在链路层保持较短分组有助于减少无线电发送和接收数据包时对内存的要求.例如,属性协议层不需要处理任何长度大于23字节的数据报文,在状态转换时也不要求存储任何状态信息.所有这些都降低了对内存的

《低功耗蓝牙开发权威指南》——1.1节设备类型

1.1 设备类型低功耗蓝牙技术可以构建两种类型的设备:双模设备和单模设备.双模设备既支持经典蓝牙又支持低功耗蓝牙.单模设备只支持低功耗蓝牙.当然,还有第三种类型-仅支持经典蓝牙的设备.由于双模设备支持经典蓝牙,所以能与现有的数以亿计的蓝牙设备通信.双模设备是一类新的设备,要求为主机和控制器分别提供新的软件和硬件(包括固件).因此,现有的经典蓝牙控制器或主机无法通过升级实现低功耗蓝牙.不过,大部分的双模控制器只是简单地替换了经典蓝牙的控制器的某些部分,这使得手机.电脑和其他设备的设计人员能够较快地

《低功耗蓝牙开发权威指南》——2.2节时间即能量

2.2 时间即能量时间即能量是贯穿低功耗蓝牙设计的另一个基本概念.一旦无线电开始工作它便需使用能量,哪怕只是检查是否需要发送或者接收.因此,减少必要操作的执行时间变得十分重要.许多关键而重复的操作必须通过一定的措施实现优化,包括鲁棒地发现设备.连接设备和发送数据.减少这些活动所需的时间,能耗得以减少,从而延长了电池寿命.鲁棒的设备发现要求至少有两个设备:其中之一用于寻找其他设备,其他一个或多个设备则处于可发现状态.在低功耗蓝牙中,一个设备如果想被发现就必须每隔几秒发送三次短消息:而如果它想发现打