《企业级编程与控制理论》的主题是关于反馈控制技术的,但是没有多少编程人员(包括其他有关人员)了解这方面的知识。这是很遗憾的,因为反馈控制技术的产生是为了解决软件工程师们很熟悉的问题,特别是与企业系统打交道的工程师们需要了解。反馈控制是一种技术,旨在确保大型复杂系统能够稳定地运行,甚至在有外部干扰的情况下也不会受到影响,确保有效地使用有限的资源。
如果你正在寻找这样一种系统:当数据中心的数据流量出现大的跳跃时,需要增加服务器的数量,而在这个突发事件过去之后需要减少服务器的数量,那么《企业级编程与控制理论》将为你提供很好的解决方案。
《企业级编程与控制理论》包含四个部分和一个附录。第Ⅰ部分“基础篇”讲述了为什么需要反馈控制,反馈系统和企业级编程的关系,系统的动态特性,控制器,识别输入输出信号灯。第Ⅱ部分“实践篇”回顾了理论,介绍了测量传递韩澍,PID控制调整,实现以及通用的反馈架构。第Ⅲ部分“案例研究篇”包含控制系统模拟、高速缓存命中率、广告推送、扩展服务器、队列控制、冷却风扇速度、控制游戏引擎的内存消耗等内容。第Ⅳ部分再次回到理论,帮助读者建立实践与理论的联系,掌握控制理论在企业级编程中的实际应用。
《企业级编程与控制理论》适合具有一定编程基础并关注性能提升的读者阅读。
第2章 反馈系统
在前一章中使用的方法是基于反馈原理,它的基本概念可以简单地描述如下:
反馈原理:持续地将实际输出和它的期望参照值进行比较,然后对系统输入进行调整,以减少实际输出和参照值之间的偏差。
换句话说,如果输出值高于参照值,就对输入进行矫正以引导输出降低;如果输出值低于参照值,就对输入进行矫正以提高输出值。
反馈概念的基本思路是“把系统输出引导回来”,用它来计算输入值,这就产生了通用的反馈或闭环式结构(图2-1)。和它相对应的是前馈或者开环式结构(图2-2),开环结构不考虑系统的输出。
图2-1 反馈环路的结构:系统的输出被返回与参照值做比较,以便计算出系统新的输入
图2-2 开环式(或前馈式)布局的结构:系统输入直接从参照值计算得到而不考虑系统输出
反馈是在前一个输出的基础上计算下一个输入值,这表明反馈是一种叠加的解决方案。每一个控制行动仅仅是为了使系统更加接近期望值,使它向正确的方向更迈近一步。我们不去完全消除参照值和输出值之间的差距,而是重复执行少量减少偏差的步骤,逐渐缩小偏差。
在讨论任何迭代方案时,自然会提出三个问题。
迭代会收敛吗?(或者 迭代会发散吗?)
它能多快收敛?(如果它一定会收敛)
它会收敛到什么值?(它会收敛到所期望的解决方案还是不同的结果?)
系统和信号
在这本书里,我们将考虑服务于各种目标的不同系统。这些系统所具有的共同特点是,所有系统都依赖于结构或者调节参数,以影响系统的行为。要想得到行为的信息,我们需要跟踪和观察不同的监视指标。在大多数情况下,希望系统能够满足或者超过事先定义的服务质量指标。因而,控制问题就是调节一组设置参数,以便被监视的指标落在服务质量范围之内。
只要考虑控制问题,配置参数就是我们可以直接影响和操纵的变量,有的时候这些变量被称为操作变量或者简单称为(控制)输入。被监视的指标是我们想要影响的变量,有时称为“过程变量”或者“控制输出”,把输入和输出放在一起就构成了控制信号。
术语“输入”和“输出”分别对应于被操作和被跟踪的数量,它们非常简便,我们将会经常使用。但是请记住,这些术语的目的只是与控制问题有关,和系统的功能“输入”和“输出”没有任何关系。如果一旦发现定义不清楚,请在“输入”和“输出”的位置上分别使用“可配置参数”和“跟踪指标”。
大部分情况下,我们只考虑一个控制输入和一个控制输出的系统,所以只有一个单独的可设置的参数,它可以用来影响单一的跟踪指标。虽然这看上去好像是极端的情况,但是它包括了很多种类的系统。(处理具有多个输入或输出的系统在原理上讲也是可能的,但是它会带来严重的实际问题。)
我们从企业编程和软件工程资料里,选出一些系统和它们的输入及输出,列举如下。
高速缓存
跟踪的指标是命中率,可设置的参数是缓存量(缓存器能存储条目的最大数量)。
服务器群
跟踪的指标是反应滞后时间,可设置的参数是在线服务器的数量。
队列系统
跟踪的指标是等待时间,可设置的参数是服务于排队的工作(worker)的数量。
图形库
跟踪的指标是占用的全部存储量,可设置的数量是分辨率。
其他的例子如下。
房间或容器的加热
跟踪的指标是屋子的温度或者容器的温度,可设置的量是提供的热量(对于炉子上的锅,可调节量是旋转盘上的刻度)。
CPU冷却器
跟踪的指标是CPU温度,可调节的量是加在风扇上的电压。
汽车的巡航控制
跟踪的指标是汽车的速度,可调节的量是加速器的设置。
销售情况
跟踪的指标是销售掉的条目数量,可调节的量是每件东西的价格。
跟踪误差和矫正行动
反馈原理要求过程输出不断地和参照值(通常称为“设定值”)进行比较,实际过程输出和设定值之间的偏差就是跟踪误差:
跟踪误差 = 设定值 - 输出值
图2-1控制器的工作原理就是基于跟踪误差来计算矫正行动。如果跟踪误差是正值(意味着过程输出过低),那么控制器必须产生新的控制输入来提高过程的输出,反之亦然。
请注意,控制器在没有系统及系统行为的具体信息时,就可以做反馈控制,控制器主要需要了解过程的方向性:为了提高输出值,是需要增加或是减少输入值吗?两种情况都会出现:提高加热设备的动力将会导致温度的增加,但是增加冷柜的电能将导致温度的降低!
一旦控制行动的方向决定后,控制器必须选择矫正的幅度。我们将在下一节讨论更多这方面的情况。
稳定性、性能和准确性
反馈循环的引入可能会使原来稳定的系统变得不稳定。问题通常是由不断的过度补偿造成的,矫正行动所产生的结果变得太大了。现在考虑高速缓存的情况(前面列出的例子),假设命中率最初低于期望值,要增加命中率,我们需要扩大缓存量。但是多大合适呢?如果我们将缓存量增加得太大,那么命中率最后将会比期望值高,因此在下一个时间步骤,缓存量将会减少,以此类推。系统会产生控制波动,在不同的设置环境下会迅速和疯狂地切换(图2-3)。
我们不期望看到控制波动,想象一下如果你的汽车巡航控制出现了这种情况!但是事情会变得更糟糕:如果每个过度矫正或矫正不足将导致更大的补偿行动,波动的幅度就会随时间而增加,使得已经不稳定的系统会变得更加不稳定了,没过多久就会出现严重问题(或者崩溃)。在控制循环中要不惜一切代价避免这种不稳定的现象出现。
与此相反的问题是太慢或者太懒惰的行为。如果我们过分小心,采取过小的控制行动,该系统对于干扰会反应迟钝,跟踪误差将持续很长一段时间(图2-3)。虽然缓慢行动没有系统不稳定那样危险,但是这样的缓慢反应也是不能令人满意的。要取得最快的反应效果,我们需要采取最大的控制行动,同时不会使系统变得不稳定。
设计精良的控制系统应该展现出好的性能,这就意味着它能够迅速对变化做出反应,使得被跟踪的指标与参照指标之间的偏差不会延续下去。典型的控制系统反应时间描述了系统能够多快对变化产生反应,它同时定义了系统所能控制的最快可能干扰的上限。
在稳定的状态下,控制系统的质量是用准确性来衡量的,用准确性来跟踪给定的参照值。反馈控制系统的行为通常是用稳定性、性能和准确性来评估的。
我们现在可以重述关于迭代系统收敛的三个问题,用控制理论术语描述如下。
图2-3?展示了找到高速缓存的最佳容量,以取得所需的命中率。上图显示了对于不同的增益,初始误差会导致不同的迭代;下图显示了对应不同控制增益的命中率的演变。太大的矫正会导致振荡行为,太小的矫正导致不佳的结果
稳定性
该系统稳定吗?它能够处理变化而不会产生过度波动吗?是否确保波动的幅度不会随着时间而积累,只会迅速减弱吗?
性能
该系统能够多快对变化产生反应?对于给定的应用代码它能够反应足够快吗?(飞机的自动驾驶需要比船舶的自动驾驶反应快很多)。
准确性
系统是否足够准确地跟踪指定的参照值?
结论是不能同时兼顾所有这些目标?特别是反馈系统的设计经常涉及稳定性和性能之间的平衡,因为反应太快的系统有可能产生波动。这取决于给定的情况,设计师必须做出选择,重点应该放在哪里。
通常做出许多小的快速调整比起偶尔的做出几个大的调整要更好一些。采取很多小的步骤,可以更快地执行矫正行动,不给系统有机会产生与参照值之间的明显差异。如果不经常采取调整行动,偏差的幅度将会变大,这就意味着过度补偿的机会将会增加,而且不稳定性所带来的风险也会增加。
设定值
反馈系统的目的是要跟踪参照值或者设定值。这种参照值的存在是必须的,没有参照值就不可能有反馈控制。
另一方面要注意以下细节:对于跟踪的指标很明显会有一个期望值,我们要知道跟踪它的原因,而且必须知道在反馈控制中设定值的具体限制含义。
从结构上看,反馈循环将使其输出尽可能准确地达到给定的参照值,即设定值。顺便指出,标准的反馈循环不适用于有一定数值范围的指标,对于许多应用代码来说这种要求太苛刻,反馈系统需要额外的设置来支持浮动范围控制(示例参见第18章)。
同时要注意要反馈控制与任何形式的最优化不要混淆。反馈控制试图复制设定值,而不是要在一套给定条件下取得“最佳”或者“最优化”的输出。如前所述,反馈系统也许是整体优化方案的重要组成部分:如果有一个整体优化计划,它要求系统应该有什么样的输出值,那么反馈控制就是提交或执行这个计划的合适工具。但是,反馈控制本身没有能力确定最佳的计划或者设置。
有时还会遇到其他的挑战。比如反馈原理的自动调节性质要求,系统输出可能超过设定值。只要输出落在设定值的任意一侧,反馈系统就能够从其中的一个方向采取恢复行动。但是当设定值的数值处在系统能够达到的范围的边缘,跟踪误差变为零,此时不会执行反馈控制。考虑缓存的例子,如果我们想要命中率(作为跟踪的指标)达到100%,实际的命中率永远不可能大于设定值,它不可能通过减少缓存的尺寸来达到目的。(在第15章中,我们将看到类似的情况,可以采取一些临时的措施)
不确定性和变化
很明显,反馈系统比直截了当的前馈系统要复杂很多,因为前馈系统不涉及反馈。反馈循环的设计要求在许多不同的属性上做平衡,有的时候要做出艰难的取舍。同时,反馈系统把不稳定的风险引入到原来稳定的系统中,因而需要额外的措施来防止“崩溃”。考虑到这么多的挑战,人们会问,在什么情况下反馈系统值得考虑,为什么?答案是反馈系统能够提供一种取得稳定行为的方法,甚至在出现不确定性和变化的状态时也能达到稳定。
我们并不清楚结构参数(控制输入)如何影响被跟踪指标(控制输出)的行为。再次思考高速缓存的例子:增加缓存的大小肯定会增加命中率,但是增加多少合适?有多少缓存量才能够保证特定的命中率?这些都是难以回答的问题,答案在很大程度上依赖于缓存访问模式的性质。(在某些时间段里有多少不相同的条目被查询过)。忽略输入和输出之间的关系会导致不确定性。即使我们能够准确地描绘出,在特殊的时间段里输入和输出的关系,系统还是会受到变化的影响:访问模式会(一定会)随着时间改变,不同的条目被访问。被访问条目的分布在早上和下午有可能不同,以此类推。
反馈是处理这些不确定性和变化形式的合理机制。如果其中一个因素缺失,将没有必要考虑反馈:如果我们准确知道缓存大小将如何影响到命中率,并且如果知道访问模式不会受到变化的影响,那么我们不需要反馈循环。相反,我们可以简单地选择大小合适的缓存,就这样任务完成了。但是我们会如此幸运吗?
坦率地讲,这样的情况确实存在,大部分情况是在封闭的环境下(不会受到变化影响),而且有清晰的定义和熟悉的规则(因而避免了不确定性)。例如,计算机代码具有最大的确定性!不需要反馈控制。
但是说到计算机系统情况就不一样了。只要几个部分相互动作,就有可能会出现随机性、不确定性和变化。一旦我们考虑到人的因素,事情就会变得相当混乱,肯定会出现突发的不确定性,变化将是常态,因此有反馈控制的必要。
……
目录
第Ⅰ部分 基础篇
第1章 为什么需要反馈 3
实际的例子 4
希望最好的情况 5
建立控制 7
累加偏差 7
小结 8
模拟程序 9
第2章 反馈系统 13
系统和信号 14
跟踪误差和矫正行动 15
稳定性、性能和准确性 16
设定值 18
不确定性和变化 19
反馈和前馈 19
反馈和企业系统 20
模拟代码 20
第3章 系统动态特性 23
滞后和延迟 23
强制反应和自然反应 25
瞬时响应和稳态响应 25
物理世界和虚拟世界的动态特性 26
动态特性和记忆 27
反馈循环的滞后和延迟的重要性 28
避免延迟 29
理论和实践 30
模拟代码 30
第4章 控制器 33
方框图 34
开关控制 34
比例控制 35
为什么比例控制还不够 35
积分控制 36
积分控制改变动态特性 37
积分控制可以产生恒定的偏移量 37
微分控制 38
微分控制的问题 39
三项PID控制器 39
模拟代码 40
第5章 识别输入输出信号 41
控制的输入和输出 41
输入/输出关系的方向性 42
例子 43
热控制1:加热 43
高速缓存 45
服务器扩展 46
通过动态标价控制供需关系 48
热控制2:冷却 50
选择控制信号的标准 51
用于控制输入 51
用于控制输出 51
关于多维系统的注释 52
第6章 回顾和展望 55
反馈概念 55
迭代 55
过程知识 55
避免不稳定性 56
设定值 56
控制,不是最优化 56
第Ⅱ部分 实践篇
第7章 理论预习 59
频率表示 59
传递函数 59
方框图代数 60
PID控制器 60
传递函数的极点 61
过程模型 62
第8章 测量传递函数 63
静态输入/输出关系:过程特征 63
实际考虑 64
阶梯输入的动态反应:过程反应曲线 65
实践方面 66
过程模型 66
自我调节过程 67
累积过程 68
带有振荡的自我调节过程 70
非最小相位系统 71
系统识别的其他方法 72
第9章 PID 控制调整 73
调整的目的 73
控制器参数变化的一般影响 75
齐格勒·尼科尔斯调整方法 76
半分析调整方法 77
实践方面 78
仔细研究控制器调整公式 79
第10章 实现问题 81
执行器饱和与积分器暂停 81
防止积分器暂停 82
设定值变化和积分器预加载 82
平滑微分项影响 83
选择抽样间隔 83
PID控制器的替代形式 84
增量形式 85
误差反馈与输出反馈 85
通用线性数字控制器 86
非线性控制器 87
误差平方和间隙控制器 87
模拟浮点输出 88
分类输出 88
第11章 通用反馈架构 91
改变运行条件:增益调度 92
轻度非线性系统的增益调度 93
强干扰:前馈 93
快-慢动态特性:嵌套或“级联”控制 94
具有延迟的系统:史密斯预报器 95
第Ⅲ部分 案例研究篇
第12章 通过模拟探索控制系统 99
案例研究 99
建模时间 100
控制时间 101
模拟时间 101
模拟框架 102
组件 103
对象和系统 103
控制器 103
执行器和过滤器 105
标准循环的便利函数 106
产生图形输出 108
第13章 案例研究:高速缓存命中率 109
定义组件 109
制造缺陷引起的缓存失效 111
测量系统特性 112
控制器调整 114
模拟代码 116
第14章 案例研究:广告推送 121
...
第15章 案例研究:扩展服务器 131
...
第16章 案例研究:等待队列的控制 141
...
第17章 案例研究:冷却风扇速度 149
...
第18章 案例研究:控制游戏引擎内存消耗 157
...
第19章 案例研究的总结 165
...
第Ⅳ部分 理论篇
第20章 传递函数 171
...
第21章 方框图代数和反馈公式 179
...
第22章 PID 控制器 185
...
第23章 极点和零点 189
...
第24章 根轨迹技术 197
...
第25章 频率响应和波特图 207
...
第26章 本书主题拓展 215
...
附 录
附录A 词汇表 223
附录B 用Gnuplot绘制图形 233
附录C 复数 237
附录D 深入阅读 241
温馨提示:请使用泸西县图书馆的读者帐号和密码进行登录