本文是将可视化存储智能解决方案产品化设计。有了这套系统,系统管理员就不再是一个苦逼的角色,天天等着被骂又无计可施。传统存储系统在主机里就体现为一个设备符号,这种体验简直就是反人类。有了这套产品,存储是与业务紧密贴合和适配的,相比“软件定义”这种低逼格的名词,“应用定义”更加贴合实际,有了应用定义,系统管理员会有更多的事情可做、可控、可视,从此就不再是个苦逼角色了。

2.4 产品化及可视化展现

2.4.1 产品化

我们可以看到,应用感知是不可能靠存储系统自己就感知了的,存储没那么智能,不管是SmartMotion、自动存储分层还是QoS,要做到精细化的应用感知就必须依靠主机端的Agent来向存储系统提供对应的信息。所以,对这套产品的架构设计应该是图示的拓扑最合适:


Java 可视化堆内存工具_右键

图2-4-1 拓扑及组件

如图2-4-1所示,所有客户端主机安装应用感知代理组件,其可以通过带外或者带内方式将应用感知信息推送给存储系统,管理软件服务端运行在存储系统内,通过Web网页可在任何机器登陆并作配置。从界面中可以直接看到每个客户机上的应用情况,包括文件/目录、文件系统元数据、各类数据库、邮件系统等常用应用,并可以直接对这些应用进行Motion、Tier、QoS。当然,存储系统也是通过与主机端运行的感知代理组件通信才得到的这些信息,但是给人的感觉就是存储感知了应用。如图2-4-2所示为应用感知代理组件的基本设计组成。比如需要感知Oracle某数据库下的某数据文件,首先这个应用代理必须能够获得该主机Oracle中到底有多少数据库,每个库各自又包含了哪些数据文件,最后需要获取用户指定要进行特别优化的整个库或者个别库文件底层所占用的块列表,然后将这次操作视作一个对象,并把这些块列表保存起来,加上本次操作的信息等,一同打包成一个数据对象,存储在对应该App的数据库中。数据库采用轻量级方案,或者不采用成品数据库而完全自定义格式保存到客户机特定目录里,上述工作由App Adaptor子模块完成;从存储系统获取用户的动作指令,以及将应用信息推送给存储系统的工作,由Communicator子模块完成。


Java 可视化堆内存工具_Java 可视化堆内存工具_02

图2-4-2 应用代理组件的基本组成及控制流


Java 可视化堆内存工具_Java 可视化堆内存工具_03

图2-4-3 主机端直接发起控制流

如图2-4-3所示,因为这套方案致力于应用感知,既然一切都是从应用视角看下去的,那么如果让用户每次都到存储系统GUI里去配置,难免有些不方便。所以,在主机端感知代理处,提供相应的接口,让用户可以直接针对对应的应用、文件等应用对象来做存储方面的调控。比如,对于Windows,嵌入文件右键操作菜单,可以选择将这个文件在布局、分层和QoS三方面做精细化调控。还可以提供一个微型窗口来让用户针对其应用整体调控,比如Oracle所有数据库整体调控,或者某虚拟机整体调控,感知代理会自动分析这些应用底层所占用的数据块信息,并推送给存储系统执行。

如果主机端的应用对象发生了变化,比如扩大、缩小了,或者各种原因被挪动了位置,那么之前的块映射列表就不是那么准了,但这并不影响数据一致性。可以定时扫描并比对,发现变化的地址,然后将变化同步到存储系统里去。

至此有必要给这套应用感知解决方案和产品起个名字——SmartX Insight。X表示无限未知的意思,我们的这个套件里起码已经可以对Motion、QoS和Tier做应用感知了,后续会由更多组件添加进来。Insight表示“看透”和“端到端”的意思,看透一样事物,就意味着游刃有余胸有成竹,让存储看透应用,或者换个角度说让应用的信息穿透存储。

技术、产品形态、架构描述完毕了。这是定义和设计一款产品的必须步骤。对于一个产品经理来讲,并不是拿着几分第三方机构骗钱的报告,堆几个数字,然后得出结构“NAS增长80%”就完事了的,这个纯粹是扯蛋。作为纯粹的产品经理,你不但要负责从创意->思路展现->技术实现->产品形态->概念包装->材料制作这条路径,还需要负责项目立项->精确传递产品信息给研发->与研发架构师确立最终架构->实际开发遇到问题最终决策->亲自参与测试体验并把关质量->产品GA这条路。所以最理想的情况是产品经理与项目经理合二为一,否则各怀鬼胎,产品出来也可能是个四不像的调和各方利益的怪胎。产品经理追求产品的完美,项目经理则恨不得这项目不费一兵一将马上结束,这个矛盾是始终存在的。 产品经理是产品他爸,负责生;项目经理是产品他妈,负责 产,如果两个人同床异梦,那要小心了。

2.4.2 可视化展现

下一步便是配置界面的设计。界面的设计也得由产品经理发起和把关,因为产品是你设计规划的,只要你还算是个靠谱的产品经理,怎么展现你说了算,当然,如果你认为界面与你的产品无关,应该是研发人员的事情,那证明你不是个纯粹的产品经理,后续可以向拿着垃圾报告堆数字这条路发展。产品再好技术再牛,这是里子,里子好是前提,面子上也够吸引人,这才是最理想的状况,虽然有时候徒有其表的事物也能生存的较好,但这就是另一码事了,不与其同道。要吸引用户,就要打破常规,拿着陈年的烂糠当令箭的大有人在。让这些思想顽固者做出吸引人的界面是不可能的,此时恨不得自己会Flash,会Photoshop,会HTML5,会Java,十项全能。

人的创意是无限的,就看谁YY能力强。如果能够像 像指挥战场一样指挥全局数据,让用户有一种强烈的掌控感、大局感和代入感。进入总指挥台,感受到的不是需要做那千篇一律流程化的配置,而是产生一种运筹帷幄决胜千里的感觉。有一点需要铭记的是,用户永远都是从上往下看的,也就是从IO路径的源头看下去到IO路径的终点,谁让用户看得远,最好能一眼望到底看透,就爽,如果看不到底看不透,那就不爽。整个指挥台是一个可视化可操纵的集合体,对各种流程 端到端可视化展现。比如当操作SmartMotion的时候,就像在指挥一只大部队调动,当有选择性的将某块数据提升到SSD的时候,应该有一种从憋屈的坦克装甲车出来直接进入战斗机一样的感觉。这要求界面中加入一些动态元素。在充分YY之后,提出如下大方面需求:

该模块主界面为一张战场全局布局图,并动态更新。

点击每个元素可进入该元素的子布局图。

所有布局图显示数据温度气象以及是否被占用。

资源可以被任意迁移、形变。

可对任何区域透视从而得知是哪个主机哪个应用在使用这片区域。

动态的展示数据的Tier和Motion动作和进度。

总体上要有RTS游戏那样得设计观。由于缺乏UI技能,最终只能使用PPT来制作界面示意图。几张典型样例界面如下。如图2-11所示为SmartX Insight的主控制台全局气象视图,图中每个方格代表系统内的一块磁盘。


Java 可视化堆内存工具_数据_04

图2-4-4 全局物理气象视图

在全局气象视图中,用户可以:

右键可以定位该磁盘的物理位置,比如某控制器某通道某扩展柜某槽位。

右键可以定位该磁盘所承载的数据对象,比如逻辑卷、应用、目录/文件、虚拟机等,但是这些对象都必须是之前经过主动调控从而在存储系统中存在缓存记录的那些。

右键可以选择将该磁盘上的数据做布局、Tier、QoS方面的变更。比如用户看到某个方格内的温度已经是最极限了,证明访问非常频繁而且响应速度很慢,那么用户可以直接在该方格上点右键,然后选择要么先尝试进行SmartMotion操作,将该热点区域包含的条带分散到更多磁盘上,要么直接选择鸟枪换炮,透明迁移到SSD,或者选择提高其IO访问优先级。

也可以圈选对应的区域,然后将其拖动到其他区域,比如将某些热区拖动到冷区,此时系统自动完成迁移动作。迁移进行时会在该图上做动态展示目的及进度。如图2-4-5所示。


Java 可视化堆内存工具_存储系统_05

图2-4-5 全局物理气象视图

当用户选择了一种调控之后,比如选择了SmartMotion,弹出对话框让其设置数据重分布的模式,比如可选系统自动,或者手动选择需要重新分布到的磁盘,可以使用列表的形式但是不直观,最直观的是让用户在整个气象图上圈选(比如用鼠标拖动等形式)那些相对较冷色区的区域,然后系统自动根据被圈的区域判断这些区域中的磁盘的物理位置并作数据迁移操作。另外要选择数据迁移开始的时间,是立即还是定时。

可以设置系统定时对气象图拍照留底,比如每个月抓一张,或者每天抓一张。在界面上可以通过按钮来观看气象的变迁图,可以手动一页一页的翻看,也可以快速播放。作为一个运筹帷幄的指挥官,有时候需要具有历史观,回放历史,利用惯性来判断后续的情况。


Java 可视化堆内存工具_Java 可视化堆内存工具_06

图2-4-6 全局资源布局逻辑视图

将主控制台切换到资源布局视图之后,整个视图由物理展现方式改变为逻辑展现方式,如图2-4-6所示。这里相比气象视图来说会有种水落石出的感觉。图示是一个8节点16控制器的集群SAN存储系统。这张图的灵感来源于蜘蛛网,不过是一个经过仔细布局的蜘蛛网,这里只是示意图,不追求美观。8个长方形色块表示8个节点,围成一个圈,这个圈内部,有4个套圈,中心的圈表示CPU利用率,由于有8个节点,每个节点占据这个圈的1/8扇区,用色块在圈的半径方向上的高度来表示每个节点的CPU利用率,同样,缓存命中率、缓存使用率、磁盘繁忙程度、空间使用率、带宽使用率、IOPS、时延等等IO参数,都可以在这些圈里展现出来,但是受限于空间,考虑只提供四个圈,可以通过设置将上面这些参数任选4个展示在界面中。这些参数在界面中是动态刷新的,比如后台可以是5秒一次,但是前台可以做成平滑的动画形式加强用户体验。如图2-4-7所示,左侧为Powerpoint制作的原始图,右侧为美工之后的图。


Java 可视化堆内存工具_右键_07

图2-4-7 各种运行时数据实时监控套圈图

在节点外圈,就是各种逻辑资源(逻辑卷、文件、虚拟机、整个应用等)的分布了,比如最左侧那个逻辑资源其数据跨越了3个节点,而有些逻辑资源其数据只分布在一个节点上,还有些跨越了所有节点,也就是表现为一个环形了。这种差异化的布局方式,要么是SmartMotion之后的结果,要么就是在创建该资源时人为选择了所跨越的物理资源。SmartMotion不仅可以在单节点的所有磁盘之间Mo数据,还可以跨越多个节点之间Mo数据,道理也都是一样的,比如承载媒体流的逻辑资源,就没有必要让其跨所有节点,一个节点就够了,这也是图中有多个只跨1个节点的逻辑资源。一个大系统内可能有几百个逻辑资源,受限于界面空间,只能放少数几个,所以也需要提供配置,可以让用户选择将哪些逻辑资源展示在控制台主界面上,并且可以随时增删改。

在全局资源布局逻辑视图中,用户可以:

右键可以定位该逻辑资源在全局物理气象图中的分布点,并以闪动方式显示。

右键可以定位该逻辑卷所承载的应用、虚拟机、文件目录等应用信息,但必须是之前经过细粒度调控在存储系统内有缓存记录的那些应用对象。

右键可以选择将该逻辑资源做布局、Tier、QoS方面的变更。比如用户感觉某应用性能开始变差,那么就可以将承载该应用的逻辑卷进行布局、分层和QoS变更。用户可以直接在该逻辑资源图形上点右键,然后选择要么先尝试进行SmartMotion操作,将该逻辑卷重新追加均衡到其他节点上,至于将数据均衡到哪些节点,用户可以根据内圈的CPU利用率、缓存命中率、磁盘繁忙程度等参数来判断,比如该业务的IO非常细碎,那么对CPU耗费就会很大,此时就需要避免均衡到CPU利用率已经很高的那些节点上;同理,如果该业务属于带宽吞吐量型,那么就避免均衡到那些通道带宽已经耗费差不多了的节点上。在内圈实时展现这些参数的目的不单是为了好看,还确实好用。

用户除了用右键菜单调控资源之外,还可以使用拖动方式来调控。这相当于让用户像摆积木一样,重新摆放逻辑资源。拖动时,逻辑资源会按照圆周方向动态的增长或者收缩。

可以设定将哪些逻辑资源展示在主界面,不仅可以展示逻辑卷,还可以展示应用对象,比如某个数据库里的某个库,因为存储系统可以通过主机端感知代理来获知一台主机上的包括文件、所支持的应用、虚拟机等数据对象,用户点选这些要展示的对象,存储系统会请求感知代理将这些对象占用的底层块列表推送过来,然后分析这些列表就可以得知该应用对象在存储系统内的物理分布状况,从而显示在主界面。

可以设置系统定时对逻辑布局图拍照留底,以便回放参考。


Java 可视化堆内存工具_数据_08

图2-4-8 套圈图各部件和目的

主界面的这个设计虽然没有强烈的战场指挥感,这完全是个人缺乏技能,再加上思维没有足够开阔导致,看看那些游戏设计师,他们在这方面才更加专业。

在主控制台全局视图的逻辑视图模式下,点击集群内的任何一个节点,便会进入该节点的节点视图,如图2-4-9所示,节点视图展示的是逻辑资源在该节点内部的硬盘上的布局。同样也分为气象视图和资源布局逻辑视图。操作方式类似,不再敖述。


Java 可视化堆内存工具_存储系统_09

图2-4-9 节点视图

再来看一下应用感知部分的展示方式。整个界面是用一个入口和页面完成所有感知调控动作。主机端的感知代理与存储系统是有连接的,所以存储界面中可以看到所有安装了感知代理的主机,点击每台主机,存储向代理拉取该主机上所支持的可调控的应用列表,点击每个应用,则会出现该应用的子对象,比如对于数据库系统,就是各数据库,对于邮件系统,就是各个邮箱以及数据文件等。当然也可以在主机端自定义应用,比如你想调控一下QQ这个应用,也不是办不到。首先你需要把QQ的数据文件保存到存储系统对应的逻辑卷上,然后定义你自创的对象,比如我的QQ号是122567712,那么我就可以定义一个名为“冬瓜”的对象,选择这个对象对应的文件或者目录,比如是D:\Tencent\users\122567712这个目录,然后创建生成该对象。当在SmartXInsight配置界面中选中了“冬瓜”对象之后,点击“查看布局”,存储系统便会告知感知代理推送该对象的存储块列表,然后生成布局图,在页面下半部分显示。如图2-4-10所示。


Java 可视化堆内存工具_Java 可视化堆内存工具_10

图2-4-10 应用感知气象视图

在得到了该对象的布局信息之后,我们就可以根据当前该对象所体现出来的性能,结合气象图和逻辑布局图,来判断应该对该对象做什么样的调控以及进行配置操作。比如如果冬瓜头感觉使用QQ时候非常卡,那么此时可以在界面中直接右键选择“冬瓜”应用对象,然后选择对其进行SmartMotion、Tier或者QoS调控。或者不打算对整个应用对象做调控,而是想更加精细化的调控,则可以首先查看其物理气象视图布局以及逻辑视图布局,然后在界面下半部分圈选要调控的那些区域,比如假设该对象只有一小部分处于极热区域,其他处于冷区,那可以说明正是这一小部分区域温度太高导致性能差,那么就可以针对这一小部分数据进行调控了。界面左下角显示的是该对象在系统全局范围的分布状态,点击对应的节点,则可以看到该对象在该节点上分布的布局状态。图例中该对象分布于4个节点,当先选中的是右上那个节点,界面右下部分显示的相应也就是右上节点的布局图。


Java 可视化堆内存工具_存储系统_11

图2-4-11 应用感知逻辑视图

自动策略部分,不仅要体现根据时间触发的用户自定义策略,而且要做到真正的智能自动,也就是系统可以根据当前的资源利用情况,智能的做动态SmartMotion、Tier和QoS。可以从时间触发、性能触发和空间触发三个维度来设置,设置分四步走,第一步选择要调控“什么”,第二步选择“什么时机”触发调控,第三步选择“如何”调控,第四步选择防抖动措施。如图2-4-12和2-4-13所示为基于时间的自动策略设置,首先新建一条策略,然后在该策略第一步中可以同时选择多个调控对象,第二步是选择触发时间(没什么特殊的地方所以不贴图了)。


Java 可视化堆内存工具_存储系统_12

图2-4-12 基于时间触发的自动策略

第三步选择如何具体调控措施,这里给出“固定场景”和“高级设置”两条路可选,选择固定场景,那么系统会按照一刀切的形式用写死的参数来做调控,比如OLTP就直接保证该卷跨越最大磁盘数,最高的Tier层级以及QoS。Media和OLAP则是另一套参数。高级模式里就是纯手控模式,可以调节包括将对应资源跨越多少节点,每节点跨越多少比例的磁盘,以及所处层级和QoS级别。


Java 可视化堆内存工具_Java 可视化堆内存工具_13

图2-4-13 基于时间触发的自动策略

在基于性能的配置步骤下,其他与基于时间的类似,唯独“When”不一样,比如图2-4-14所示,可以从IOPS、带宽、时延三个唯独来设置触发阀值。“How”部分同上文。


Java 可视化堆内存工具_右键_14

图2-4-14 基于性能触发的自动策略

防抖动措施是为了防止自动触发的触发源来回抖动,比如设置“当时延超过25ms之后”,那么如果时延一会超过25ms,一会又低于25ms,此时系统就抽风了。如图2-4-15所示为防抖配置参数。


Java 可视化堆内存工具_右键_15

图2-4-15 自动策略防抖动设置

任务监控部分没什么特殊之处了,就是所有已创建的调控任务汇总的监控界面,可以暂停、继续、删除。分析建议部分主要是系统对一段时间以内的运行参数,比如每个应用对象的时延、IOPS等进行记录和统计报表作图,最后动态给出建议,比如有些对象占用了较多资源但是却没最大化利用,从而冲突了别人,系统尝试自动发现这些冲突,然后计算出什么样的布局才是最优的,然后生成操作建议推送给管理员。系统设置部分就是配置各个应用主机的IP地址和认证信息,以及界面展示元素的样式等,数据保留周期等等。

最后,在主机端,我们要实现画龙点睛的一笔。如图2-4-16所示。对于Windows,可以感知代理层序可以注册到文件/目录属性页里添加一个Tab页,以及在系统文件/目录右键菜单中集成对应的入口,进入这个Tab页或者入口,可以直接针对该文件的存储属性进行调控。所有这些调控动作,都会被传递给感知代理,然后进行块映射操作,最后将指令和数据块列表推送给存储系统执行该动作。其中,可以控制系统只对这个文件/目录所占用的空间进行压缩处理,而不是整盘压缩,因为什么类型的文件好压,底层是不知道的,如果此时用户给出明确要求,比如这个目录中存放的是大量的文本文件,那么用户可以直接在界面中勾选压缩,底层系统即可只对这些区域压缩,而当需要快速访问这些数据时候,用户又可以主动勾选解压缩,那么系统底层变对应的将这些数据块在后台进行解压操作。


Java 可视化堆内存工具_数据_16

图2-4-16 主机端直接调控

对于非文件/目录,感知代理提供一个微型窗口,直接将所支持的应用、虚拟机以及文件系统元数据展示出来,并直接在这个窗口对这些应用对象进行存储调控,比如SmartMotion、Tier、QoS,以及后续可以加入更多的细粒度调控措施比如压缩/解压、去重等。如图2-4-17所示。


Java 可视化堆内存工具_存储系统_17

图2-4-17 主机端直接调控非文件/目录类应用对象

有了这套系统,系统管理员将会有前所未有的控制存储的体验,手动自动一体,应用定义,有一种如同策略游戏一般的全局观和控制感,可视化。这才是存储系统的灵魂,反观有些厂商,只注重硬件设计,而对软件毫无idea,看到硬件就像打了鸡血一样,硬件再牛还不是一台x86服务器变变样子?脑残至极,可笑可悲。