前言

注:本思维模型系列文章已被infoq采纳并推荐至首页:https://www.infoq.cn/article/JjycubQz3YTBgozaZ4G9

日拱一卒,功不唐捐,一个知识领域里的 “道 法 术 器” 这四个境界需要从 微观、中观以及宏观 三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计36式》,讲诉分布式系统里最重要的三十六个的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。

“兵者,国之大事,死生之地,存亡之道,不可不察也”,这句话对企业来讲,兵即产品,国即企业,察即研究探讨,产品关系到企业的存亡,所以不可以不慎重地加以研究探讨。

我们知道一个产品的成功不只是技术的成功,它还包括商业、创新、管理、资本、运营以及销售等的成功。当打造一个产品的时候,通常来说工程人员往往会比较关注技术层面的东西: 方案、功能、难点、亮点以及如何实现等,深度有余但高度与广度往往不足 。一般有点经验的工程人员都可以从点或线的层面考虑一个产品的实现,但往往缺乏从面及体的层面看待一个产品的能力。

因此,如果说技术思维是架构师的一根DNA螺旋线,那么产品思维、创新思维以及商业思维等就是架构师的另外一根DNA螺旋线,只有两根DNA螺旋线俱全才能有机会进化出新物种。

动机

人的知识与能力可以从“时空”这两个角度进行评价,其可分为四个维度:深度、广度、高度以及跨度。空间角度指的是深度、广度、高度,时间角度指的是跨度。深度靠专研,广度靠学习,高度靠抽象,而跨度靠长久地积累经验。这四个维度组合成了一个人的知识与能力的时空度。

万事万物逃脱不出“不易、简易、变易”这三个层次,金庸先生的《天龙八部》里少林寺有72技,其每一技又千变万化,想要样样精通,今生无望,然而练就“小无相功”却可以以这功法催动不同的“技”,甚至可以比原版更具威力,以“不易 简易”之功施展“变易”之术。那么对于技术开发人员来说技术也是“变易”的,更新快,领域多,复杂度高,样样精通也是今生无望,那么需要的就是找出适合自己的“功”,技术思维模型、产品思维模型、创新思维模型、商业思维模型就是这样的“功”。

因此本系列文章提出了技术、产品、创新与商业这四个思维模型,这一系列文章不是为了解决具体的某个分布式系统设计里的难题,它提出了一种思维框架,从技术、产品、创新以及商业的角度,给工程人员以一种系统性的分析分布式系统设计难题的模型,这也是一种系统思维的体现。

商业思维模型

IBM有个商业战略思维模型叫做”五看三定“, 经过很多家企业的验证,表示效果很好。这里扩充”五看三定“思维模型为“五看三定六要素”思维模型,作为产品的商业模式思维模型。”五看三定六要素“即:五看:看趋势、看市场、看对手、看自己、看机会,三定:定目标、定策略、定执行,六要素:客户、产品、供给、盈利、创新及风险。

商业思维模型

五看

1,五看,首先要看的是趋势,属于宏观的范畴,行业趋势、行业风向,国家政策,经济周期,技术趋势,资源方向等,从而判断出正确的资源投入方向;

2,接着看市场,看看市场需求在哪里?客户的真实需求在哪里?客户愿意买单的点在哪里?产品与市场的最佳适配点在哪里?从而输出正确的客户目标;

3,再看对手,可以从三个方面进行看对手:

  • 赚得到钱,如果有对手已经验证过了这个市场可以获取高额利润,那么就可以确定这个方向的正确性;

  • 赚不到钱,如果对手正在介入的市场领域属于赚不到钱的领域,那么自己去做赚不到钱的概率也一样非常的大,现在新介入的话就需要非常非常的谨慎;-

  • 没有对手,如果是一个没有对手的领域,要么是新开拓的市场空白机会,要么根本就是没有真实的客户需求的伪需求市场,这也是需要非常谨慎介入方向。

4,看完对手就要看自己,看自己说的是,看看自己的优势在哪里,劣势在哪里,有什么关键资源能力,自己能做什么不能做什么,介入这个市场领域的话,对比其他对手有什么优势胜出,如果没有胜出优势就需要谨慎介入。

5,最后看机会,判断真机会的依据是:行业趋势正确,有真实的客户需求,对手有钱赚,自己团队有优势,那么这样的机会输出点就是”真机会“。

三定

五看后就要三定,看好机会后,需要定目标,定策略以及定执行。

1,首先定好需要达到的市场目标,比如3年利润1个小目标(1亿¥);

2,然后开始着手制定如何达到这个目标的策略,比如:1)分解这个目标,1年到什么阶段、2年到什么阶段、3年到什么阶段等;2)是先单点突破最佳盈利点,再以此为树干长出树枝?还是借助资源优势全面铺开?

3,再就是定执行,定策略是如何做的范畴,而定执行是让谁做,什么时候做出来的问题,属于生成资料、生成工具分配的范畴。

六要素

”五看三定“分析完后,更进一步需要进行商业模型六要素的分析[2]。

1,客户,客户指的是市场定位,是想赚谁的钱、不想赚谁的钱的问题,是客户是谁、又不是谁的问题,是客户如何取舍的问题。

2,产品,产品指的是打算用什么东西去赚钱,是卖产品还是卖服务,是提供的满客户需求的价值是什么又不是什么的问题。

3,供应,供应指的是如何生产出好产品以及怎么样把产品卖出去。如何打造与市场最佳适配的产品?如何保证技术与产品的最佳适配,如何交付出这样的好产品?然后又准备怎么把这样的产品卖出去?渠道在哪? 价格怎么定义?然后自己又有哪些强力的资源优势?这也是产品成败的一个非常关键的点。

4,盈利,盈利讲的是如何赚钱的问题,是做产品?还是做平台?或者做生态?然后又怎么保证可以持续地赚钱?做产品离钱近,一手交钱一手交货;做平台,投入大、但是空间也大;做生态,投入巨大、周期长,但是如果成了,那么收益也巨大。

5,创新,创新指的是以上四点如何创新,如何持续的创新,可以从寻找差异化入手,也可以从先同质化模仿再处处差异化创新入手,可以是 ”更好“,也可以是”不同“,还可以是”新生“。

6,风险,风险指的是风险管理,居安思危,失败风险是否在可承受的范围之内?以上五点的风险在哪里,方方面面是否都考虑周全?

依据以上近乎穷举的系统分析法,可以发现,为物联网以及IT运维市场专门设计一个存储系统是值得投入的一个机会点。

小结

本系列文章讲述了四个思维模型: “技术思维模型、创新思维模型、商业思维模型以及产品思维模型”,再结合分布式流存储做了简单的举例分析。本文讲述”商业思维模型“,日拱一卒,功不唐捐,分享是最好的学习,与其跟随不如创新,希望这几个思维模型对大家有用。另作者能力与认知都有限,”我讲的,可能都是错的“[1],欢迎大家拍砖留念。

作者简介

常平,中科大硕,DELL EMC 资深首席工程师,主要从事分布式产品的交付、架构设计以及开发工作。

版权申明

本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh

在遵循署名、非商业使用(以获利为准)以及禁止演绎的前提下可以自由阅读、分享、转发、复制、分发等。

参考资料

[1]《第二曲线创新》 李善友

[2]《如何在一分钟内用5个问题讲清你的商业模式》 中欧商业评论,关苏哲

[3] Pravega.io

前言

注:本思维模型系列文章已被infoq采纳并推荐至首页:https://www.infoq.cn/article/JjycubQz3YTBgozaZ4G9

日拱一卒,功不唐捐,一个知识领域里的 “道 法 术 器” 这四个境界需要从 微观、中观以及宏观 三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计36式》,讲诉分布式系统里最重要的三十六个的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。

“兵者,国之大事,死生之地,存亡之道,不可不察也”,这句话对企业来讲,兵即产品,国即企业,察即研究探讨,产品关系到企业的存亡,所以不可以不慎重地加以研究探讨。

我们知道一个产品的成功不只是技术的成功,它还包括商业、创新、管理、资本、运营以及销售等的成功。当打造一个产品的时候,通常来说工程人员往往会比较关注技术层面的东西: 方案、功能、难点、亮点以及如何实现等,深度有余但高度与广度往往不足 。一般有点经验的工程人员都可以从点或线的层面考虑一个产品的实现,但往往缺乏从面及体的层面看待一个产品的能力。

因此,如果说技术思维是架构师的一根DNA螺旋线,那么产品思维、创新思维以及商业思维等就是架构师的另外一根DNA螺旋线,只有两根DNA螺旋线俱全才能有机会进化出新物种。

动机

人的知识与能力可以从“时空”这两个角度进行评价,其可分为四个维度:深度、广度、高度以及跨度。空间角度指的是深度、广度、高度,时间角度指的是跨度。深度靠专研,广度靠学习,高度靠抽象,而跨度靠长久地积累经验。这四个维度组合成了一个人的知识与能力的时空度。

万事万物逃脱不出“不易、简易、变易”这三个层次,金庸先生的《天龙八部》里少林寺有72技,其每一技又千变万化,想要样样精通,今生无望,然而练就“小无相功”却可以以这功法催动不同的“技”,甚至可以比原版更具威力,以“不易 简易”之功施展“变易”之术。那么对于技术开发人员来说技术也是“变易”的,更新快,领域多,复杂度高,样样精通也是今生无望,那么需要的就是找出适合自己的“功”,技术思维模型、产品思维模型、创新思维模型、商业思维模型就是这样的“功”。

因此本系列文章提出了技术、产品、创新与商业这四个思维模型,这一系列文章不是为了解决具体的某个分布式系统设计里的难题,它提出了一种思维框架,从技术、产品、创新以及商业的角度,给工程人员以一种系统性的分析分布式系统设计难题的模型,这也是一种系统思维的体现。

创新思维模型

受李善友老师的《第二曲线创新》的启发,这里提出“奇点破界”创新思维模型,如下图:

创新思维模型

创新三重境:”更好、不同、新生“

  • 更好,指的是市场是明确存在需求的,但是提供的新产品在质量、功能、渠道、价格等方面比原有产品更具优势,是用更好的体验来满足客户的真需求;

  • 不同,指的是差异化竞争,”与其更好不如不同”[1],不同不只是技术面的不同,而是处处差异化不同,理念、技术、渠道,运营,销售等处处差异化竞争;

  • 新生,指的是 从0到1,从无到有的创造一个新物种,是指用凭空创造出一个新产品来满足客户需求,这种形态的产品要么是颠覆式的创造带来巨大的商业上的成功,要么就是没有真实客户需求的新事物,商业上完全失败。

这里,分布式流存储采用的是“更好与不同”这两个产品创新方法论,组合原有的技术开拓出新产品,规避风险,满足客户真实的需求。

奇点破界

物理学认为宇宙从无到有始于一个点,这个点叫做“奇点”,它积聚了形成现有宇宙中所有物质的势能,当这一个点的能量平衡被破坏后,宇宙大爆炸发生,从而生成我们现在的宇宙。如果把宇宙比作我们的产品,奇点就是这个产品赖以出现与存在的关键点,“奇点破界”创新思维模型的理论依据是奇点创新三部曲:“破坏,外延,重生”,即:

1,破坏,找到产品奇点并加以破坏。产品缺点不是奇点,奇点是产品赖以出现与存在的点,找到它,然后破坏它,类似于使得宇宙奇点能量失去平衡;

2,外延,产品奇点下移,产品边界外延,类似于宇宙大爆炸从而造成宇宙边界外延;

3,重生,重构产品奇点,形成新的产品体系,类似于新宇宙的形成。

以分布式流存储的创新为例,这里只涉及技术面的创新,销售、渠道、运营、管理、商业模式等方面的创新不在本文范围。可以知道的是目前市面上的分布式流存储的最大竞争对手是Kafka,对其应用奇点创新思维模型的步骤有:

1, 破坏,找出产品奇点,然后破坏它的奇点。例如,我们知道Kafka的赖以依存的关键点有:提供消息服务语义;分布式的;依赖于代理中心的横向扩展以及依赖于分区的数据冗余;依据初代版本时间点的硬件特性进行软件的设计;

2,外延,产品奇点下移,破界,新的产品边界外延。针对以上Kafka的四条关键点,提出分布式流存储的新奇点:提供存储语义服务而不是消息语义;依据云原生、微服务的理念进行产品架构,扩展分布式系统外延;软件定义,抽象1层存储与2层存储,平衡高性能与无限扩容的问题;抓住技术进步的福利,依据当前最新的硬件特性进行产品软件设计;

3, 重生,最后更新的、更具有技术竞争力的、针对流式数据而实现的新产品”分布式流存储“诞生。

这一套创新思维模型的关键点在于找出原有的产品赖以出现以及存在的“奇点”,然后破界重生。

小结

本系列文章讲述了四个思维模型: “技术思维模型、创新思维模型、商业思维模型以及产品思维模型”,再结合分布式流存储做了简单的举例分析。本文讲述”创新思维模型“,日拱一卒,功不唐捐,分享是最好的学习,与其跟随不如创新,希望这几个思维模型对大家有用。另作者能力与认知都有限,”我讲的,可能都是错的“[1],欢迎大家拍砖留念。

作者简介

常平,中科大硕,DELL EMC 资深首席工程师,主要从事分布式产品的交付、架构设计以及开发工作。

版权申明

本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh

在遵循署名、非商业使用(以获利为准)以及禁止演绎的前提下可以自由阅读、分享、转发、复制、分发等。

参考资料

[1]《第二曲线创新》 李善友

[2]《如何在一分钟内用5个问题讲清你的商业模式》 中欧商业评论,关苏哲

[3] Pravega.io

前言

注:本思维模型系列文章已被infoq采纳并推荐至首页:https://www.infoq.cn/article/JjycubQz3YTBgozaZ4G9

日拱一卒,功不唐捐,一个知识领域里的 “道 法 术 器” 这四个境界需要从 微观、中观以及宏观 三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计36式》,讲诉分布式系统里最重要的三十六个的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。

“兵者,国之大事,死生之地,存亡之道,不可不察也”,这句话对企业来讲,兵即产品,国即企业,察即研究探讨,产品关系到企业的存亡,所以不可以不慎重地加以研究探讨。

我们知道一个产品的成功不只是技术的成功,它还包括商业、创新、管理、资本、运营以及销售等的成功。当打造一个产品的时候,通常来说工程人员往往会比较关注技术层面的东西: 方案、功能、难点、亮点以及如何实现等,深度有余但高度与广度往往不足 。一般有点经验的工程人员都可以从点或线的层面考虑一个产品的实现,但往往缺乏从面及体的层面看待一个产品的能力。

因此,如果说技术思维是架构师的一根DNA螺旋线,那么产品思维、创新思维以及商业思维等就是架构师的另外一根DNA螺旋线,只有两根DNA螺旋线俱全才能有机会进化出新物种。

动机

人的知识与能力可以从“时空”这两个角度进行评价,其可分为四个维度:深度、广度、高度以及跨度。空间角度指的是深度、广度、高度,时间角度指的是跨度。深度靠专研,广度靠学习,高度靠抽象,而跨度靠长久地积累经验。这四个维度组合成了一个人的知识与能力的时空度。

万事万物逃脱不出“不易、简易、变易”这三个层次,金庸先生的《天龙八部》里少林寺有72技,其每一技又千变万化,想要样样精通,今生无望,然而练就“小无相功”却可以以这功法催动不同的“技”,甚至可以比原版更具威力,以“不易 简易”之功施展“变易”之术。那么对于技术开发人员来说技术也是“变易”的,更新快,领域多,复杂度高,样样精通也是今生无望,那么需要的就是找出适合自己的“功”,技术思维模型、产品思维模型、创新思维模型、商业思维模型就是这样的“功”。

因此本系列文章提出了技术、产品、创新与商业这四个思维模型,这一系列文章不是为了解决具体的某个分布式系统设计里的难题,它提出了一种思维框架,从技术、产品、创新以及商业的角度,给工程人员以一种系统性的分析分布式系统设计难题的模型,这也是一种系统思维的体现。

技术思维模型

技术思维模型很多,适合自己的才是最好的,这里提出“火箭技术思维模型”以抛砖引玉,如下图:

技术思维模型

火箭思维

在这个技术思维模型里,产品被看作一个圆,技术是一个三角形火箭,它包括“势 道 法 术 器 界”这六个要素。其中技术只是产品当中的一个子集,在产品圆内还有企业文化、企业制度以及组织关系,这也是影响产品的几个非常重要的因素。

在这个技术思维模型中的火箭也体现了一种产品开发思维,开发产品的时候应该先确定好大概的方向(趋势),这时并不需要非常精确但是方向一定要对,然后发射(开工),在过程中不断矫正迭代更新,使得短期目标与长期目标相符合,在这个火箭模型中每一级都都是上一级的动力,一级一级地推动,直至最终命中目标(产品满足市场需求,从而获取商业上的成功)。

技术与产品匹配(TPF: Technology-Product Fit)

在做产品的时候第一步讲的是产品需要与市场匹配 (PMF: Product-Market Fit),找出与市场匹配的产品,然后进行最小可行性验证(MVP: Minimal Viable Product)。同样在做技术的时候,技术需要与产品匹配,这里提出一个新的概念TPF:Technology-Product Fit, 即技术与产品匹配。在技术思维模型里,当技术三角大于产品圆时,技术领先与产品需求,当技术三角小于圆时,技术落后于产品需求,但技术三角的三个点与圆刚好相交时,技术与产品达到最佳匹配,匹配合适度的评判标准是看是否符合下面的“五看三定六要素”的商业思维模型里的输出。

“势、道、法、术、器、界“ 六元组

狭义上的技术通常指的是技能属于“术”的范畴,而广义的技术则是市场趋势、自己的优势与劣势、产品设计理念、工程方法论、技术技能、工程工具以及约束限制这几个方面的组合体,抽象成工程哲学即“势、道、法、术、器、界”这六个字 ,简称技术思维六元组。

势:时势,是市场趋势、是产品定位同时也是自我的优势与劣势

“天时、地利、人和”,打造的产品必须符合市场趋势、准确定位客户需求,同时也要看看自己团队的优势与劣势。例如:依据市场的趋势判断,未来IOT 以及 IT运维市场是处于快速增长状态的,这可以成为为这两个市场提供数据存储服务的决策支持。同时,也要看清自我团队的优势与劣势,是否有能力打造这样的产品。

道:本质,是“不变”的范畴,是一个产品的灵魂、设计理念以及价值观

“能工摹其形,巧匠摄其魂”,代码本身是没有灵魂、没有设计理念、没有价值观的,由打造它的人铸其形而赋其神。如同雕塑与画画一般,好的匠人与宗师可以赋予作品以灵魂。同样的产品由不同的人打造,不同的设计理念体现了不同的产品灵魂,这跟打造它的人相关、也跟企业制度、企业文化、组织结构等相关。

分布式流存储从工程哲学以及设计理念的角度定义了自己的产品灵魂,工程哲学体现在“Best of Breed” 即“最佳物种”这句话,专门为物联网以及日志场景下的流式数据而设计,产品与市场适配,技术与产品适配。而它的设计理念又涵盖了:可度量化的高质量,云原生、微服务架构,软件定义存储,资源自动伸缩,消除数据冗余,数据无限存储,开箱即用,安全等。

法:方法论,是”简变“的范畴,是工程的套路方法

方法论体现在产品的设计原则、产品创新、产品交付以及功能与非功能特性的定义。 分布式流存储的设计原则是最佳物种的工程哲学方法论以及以客户为中心的设计理念,产品创新依据是 ”奇点创新“三部曲:破坏、下移、重生,这一点在”奇点创新思维模型”这一章里会讲述。产品交付依从“持续交付2.0” ,探索环与验证环互补互利、互为驱动。功能特性:分布式流存储系统的核心功能就一个:提供分布式流存储服务,而非功能特性可以一分为二:质量与约束。

术:技能,是”易变”的范畴,狭义上的技术,通常指的就是这一点

术,指的是技术上的设计方案与实现,在产品里占据了最大的一块版图。分布式流存储里的术可分为:

  • 架构视图:通常架构可以分为场景、物理、逻辑、数据处理以及开发这五个架构视图。分布式流存储最为朴素的数据处理架构视图即为抽象缓存与2层存储资源为流资源,实时性的读和写都在缓存里,数据恢复采用分布式日志系统,而长期存储采用了2层分布式文件存储系统,这也是分布式流存储最重要的一个设计理念。

  • 控制面:分布式流存储的控制面最重要的两个工作就是:流管理与集群管理。流管理负责流的抽象、流的生命周期管理,而集群管理体现在集群状态管理以及集群的可服务管理。

  • 数据面:数据面最重要的职责是数据“段“的抽象与管理:创建、删除、修改、使用。

  • 高级企业特性:分布式流存储也提供了多租户、安全、监控告警、事务、读群组、状态同步器以及保序等企业级特性。

器:工具,也是”易变”的范畴, “工欲善其事,必先利其器”

工具的使用对人类的进化起到至关重要的作用,生产工具是人类进步的一大要素,用好“器”可以事半功倍。在分布式流存储里采用的器可分为:

  • 构建与运维工具:k8s、Docker, 部署,版本回滚、升级、发布,监控、告警等组件;

  • 测试验证工具:集成测试的Jenkins, 单元测试的 Mock , 以及A/B测试的方法论等;

  • 此外企业平台提供的资源支持也可以属于器的范畴。

界:是约束,也是限制

技术思维模型里的三角形的三条边代表着“界” ,是技术边界也是技术约束与技术限制,对市场来说它是技术壁垒,对产品来说它是法律法规、是功能约束,对团队来说它是资源约束、是自我能力约束。分布式流存储的最大的技术优势也是最大的技术约束就是它是为 物联网、IT日志这样的数据格式而设计的,不是所有的数据类型存储都适用。

小结

本系列文章讲述了四个思维模型: “技术思维模型、创新思维模型、商业思维模型以及产品思维模型”,再结合分布式流存储做了简单的举例分析。本文讲述”技术思维模型“,日拱一卒,功不唐捐,分享是最好的学习,与其跟随不如创新,希望这几个思维模型对大家有用。另作者能力与认知都有限,”我讲的,可能都是错的“[1],欢迎大家拍砖留念。

作者简介

常平,中科大硕,DELL EMC 资深首席工程师,主要从事分布式产品的交付、架构设计以及开发工作。

版权申明

本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh

在遵循署名、非商业使用(以获利为准)以及禁止演绎的前提下可以自由阅读、分享、转发、复制、分发等。

参考资料

[1]《第二曲线创新》 李善友

[2]《如何在一分钟内用5个问题讲清你的商业模式》 中欧商业评论,关苏哲

[3] Pravega.io

产品思维奇点图

理解技术、产品与商业是产品架构师的基本职责,架构思维、产品思维与商业思维是架构师的底层思维,就个人领悟来说技术与产品是其实不分家的,二者互补互利。

这里先放出一张我自己用的产品思维图(如下),接下来会写一篇文章详细解读这个产品思维模型,这张图我称之为产品思维奇点图,结合了“第一性原理”、“奇点理论”以及中国古朴的哲学,口诀是“四点一线五元组”。

四点分为“产品定位点、价值点、业务点以及奇点”,一线是指“能力线”,五元组是指 “势、道、法、术、器”,对应产品的“趋势、优势、劣势”,“本质、灵魂、规律、价值”,“方法论”,“技能”,“工具”。

产品架构奇点图

本文为《下一个分布式存储系统,为万物互联的智能世界而发》升级版。

导言

纵观人类历史,各种技术变革都是以人类活动为中心,然后发明各种工具。石器时代,原始人发明了石器以及用火从而提升了生活品质和社会文明。现代社会,人类为了解决各种寂寞空虚冷吃穿住用行、生理和心理上的各种需求从而发明了各种社交空间、社交工具、网络购物、生活服务APP等,为了更好的服务这些应用场景,挖掘这些场景所生产的数据的价值,从而有了今天的各种大数据技术。

在互联网时代,数据主要来源于网页、APP以及一些相应的日志系统,而在万物互联的世界,数据还可以来源于有各种传感器、工业设备、监控设备、检测设备、智能家居、自动驾驶等。大数据的四个特征:数据量、时效性、多样性、价值密度在万物互联的场景下被进一步的深化,这就意味着商业成本以及技术成本的增加。

理论奠定技术的基础,业务驱使技术的变革。在万物互联的智能时代,我们有一个愿景: 能够将万物互联下生成的海量原始数据转化为可用的信息以及行为决策,并且这个转换的时间差需要能够接近于零。通过现有技术的组合,技术人员打造了工业物联网平台从而希望能达成这个愿景。

动机

现有的工业物联网大数据处理平台很多是基于开源的技术“D-I-Y”而来,它是一个”DIY“系统,往往为了一个功能而引入一个复杂的组件,这就容易造成平台只关注功能而忽略“质量与约束”,在复杂之上堆积复杂,致使客户商业成本、技术成本以及运维成本高昂。

从商业角度来说,在构建物联网大数据处理平台的时候,大家都用的开源的技术,构建出来的平台同质化严重,那么有个问题需要回答的就是:“大家都用的同样的开源技术,客户凭什么需要买单你的?”

从产品的角度来看,一个好的产品既能“顶天”,还能“立地”,它除了能有自己独到的灵魂与创新,还能将自己扎根于用户,替客户解决实际的生产问题,而不是又给客户带来新的问题。然而现有的工业物联网大数据处理平台除了给客户解决了一部分的生产问题,但是又引入了新的问题:成本高昂以及平台质量还往往难以达标。

新的技术不仅可以来源于已有技术的组合与进化,还可以来自于对现有现象的理解与征服。因此,出于对现有的工业物联网平台的理解以及降低客户的商业成本、技术成本以及运维成本的目的,这里提出了重构工业物联网大数据平台存储栈的理念。

工业物联网平台

如下图所示,通常一个工业物联网平台是以 “云-管-端”三部分组成的,类似x86服务器主板南桥北桥的叫法,工业物联网平台也是如此,在“管”的左边跟外设传感器之类打交道的地方我们称之为“南向”,跟数据处理相关“管”的右边我们称之为“北向”。南向由各种传感器以及SCADA/PLC/HMI组成,负责数据的采集,然后数据再经过RTU、DTU、网关或路由传输到云端的工业大数据处理平台进行处理,从而完成监控、告警、预测性维护、分析等功能。

工业物联网平台

流数据/时序数据

如下表所示,工业物联网平台南向传感器采集的数据,具有时间属性并且自带标签与数值,每条数据代表一个监测指标并且反应数值的变化,同时这些数据又随时间延续而无限增长,因此被称之为流数据或时序数据。

时序数据

南向采集数据的设备虽然多种多样,然而本质上它们的数据格式是一样的,都由“timestamp,tags,metrics”这三部分组成。数据格式看上去是很简单的,但是对于数据处理系统来说复杂度的来源在于:

  1. 数据自带时间戳具有时间有效性,这意味着数据处理的实时性;
  2. 数据都是小数据,这意味着数据存储系统需要对此进行专门的高性能设计;
  3. 数据随时间延续而无限增长,这意味着数据的无限性;
  4. 数据到达的速度有快有慢、负载有高有低,这意味着灵活又细粒度的资源弹性需求;
  5. 数据有序、无序、持久化以及复杂的传输环境而又要保证数据处理结果的唯一正确性。

这是几个特性转换成存储技术的语义对应着: 实时性、高性能、无限性、可伸缩性以及恰好一次:持久化、有序、一致性以及事务。 存储的视角来说,每种类型的数据都有其原生的属性和需求,对应有最佳的适用场景以及最合适的存储系统。那么目前又有哪种存储系统最适合用于 “流数据”呢?正如当前技术条件下最适合 “流数据”计算的是类似Flink这样的分布式流计算应用,最适合“流数据”的我们认为应当是专门针对流数据而设计的分布式流存储系统。

工业大数据处理

工业物联网平台北向负责大数据的处理,万物互联场景下无限量的数据给数据处理技术带来巨大的挑战与压力,不同的应用场景意味着不同的数据处理要求与复杂度,要把这些不同的甚至矛盾的数据处理要求都很好的综合在一个大数据处理系统里,对现有的大数据处理技术来说是个非常大的挑战,比如无人车的处理要求毫秒甚至纳秒级的数据处理实时性、而有些工业设备数据只需要分析历史数据,要让一个大数据处理系统既能能处理历史数据又能提供毫秒级甚至纳秒级的实时性处理能力还能应对各种不同格式不同传输场景的数据,而且每种数据处理都能达到这些应用场景原生指标的处理需求,相信这样的场景对工程技术人员来说是个很大的挑战。为了解决上述问题,按照现有的成熟的技术能力,通常开发人员采用类似Lambda架构(如下图)这样的大数据处理平台组合了各种复杂的中间件来达成这个数据处理的目标。

Lambda架构

Lambda架构即支持批处理也支持实时处理,能应对数据的多样性、具有容错功能、复杂性分离、能处理流式数据也能处理历史数据等优点,但是缺点也很明显:批处理一套独立的数据处理路径,实时处理又一套数据处理路径,然后还要合并结果再输出展示,同时系统里同样的数据存在存储多份的问题,比如同样的数据在Elasticsearch里有、HDFS里有、ceph里有、Kafka里也有,除了这些甚至还存在其他一些复杂的存储组件,而且同样的数据还都是多份冗余的,因此存储成本太高太过于复杂。Lambda架构里为了提供一个功能却引入一个组件,在复杂之上堆积复杂,存储成本、开发与运维成本都太过于复杂。

那么应当如何解决Lambda架构带来的这些缺点?以数据流向为核心重构大数据处理平台是一个比较好的方案,它具体包括数据的采集、聚合、传输、处理、展示等。依据这种设计理念我们可以推出一个端到端的原生的流式大数据处理平台:原生的流式计算加上一个原生的流式存储并且可以平衡商业成本与技术成本。

流式计算可以采用Flink,然而并没有发现当前有合适的流式存储可以使用,因此,综合思考万物互联场景下的数据处理场景也需要一个原生的分布式流存储系统,重构Lambda架构里的存储栈,使得分布式流计算加上分布式流存储即为原生的流式大数据处理系统,同时还能很好的平衡商业成本与技术成本之间的关系。

设计思路

数据中台

通常数据中台的目标是:“治理与聚合数据,将数据抽象封装成服务提供给前台业务使用”,因此,数据的治理、聚合以及抽象是数据中台的关键点。当前的大数据处理平台,不管是Kappa架构还是lambda架构,数据的存储都是多组件化、多份化的。比如同样的数据在Kafka里有、在HDFS里有、在Elasticsearch里又有,有些用户还使用了更多的存储中间件,而且这些数据还是多份冗余的。这一方面增加了数据的存储成本,另一方面也降低了数据的可信性、可靠性、合规性,给数据标准化以及数据的重复利用带来了困难,不利于数据的分享、合规、降低成本以及安全可靠地支持业务和决策。因此需要对数据进行治理、聚合以及抽象。通过使用分布式流存储,大数据处理平台的架构可以进化成”分布式流计算+ 分布式流存储“这样的原生流式数据处理平台架构,这也体现了“数据中台”的理念。

流原生架构

依据 “流原生” 的架构设计哲学以及数据中台的理念,这里提出”分布式流计算+ 分布式流存储“这样的原生流式工业大数据处理平台的架构理念,不同于Lambda架构与Kappa架构,流原生架构最主要的工作是对数据进行了治理、聚合与抽象,使得工业大数据平台的计算层通过统一的数据API接口调用底层的流存储系统。如下图所示,Spark,Flink以及检索系统等都调用统一的流存储接口,从而减少了平台复杂度以及降低数据存储成本和运维成本。

流原生架构

算子编排

工业大数据处理平台虽然很复杂,然而抽象到最后就一个简单的数学公式:“Y = F(X)”,输入数据x,经过F算子计算再输出结果Y,数学表达式并不复杂,如同质能方程E=mc²,但是从理论到落地还有一个浩大的工程,Y=F(x)其复杂度主要来源于:

  1. 每个数据算子都认为是一个Y=F(x),需要对无数个这样的算子进行高性能的计算,算子无限性;

  2. 需要对无限个随时可能乱序的Y=F(x)算子进行编排、组合、拆分,算子编排。

  3. 需要对无限个Y=F(x)算子的中间结果进行持久化、保序,以及保证计算结果的正确性,算子结果确定性;

因此需要一个专门的数据处理架构来解决这些复杂度。

流式架构

如上图所示,“流原生”的Flink计算加上“流原生”的存储管道组成了“流原生”的大数据处理平台。数据从分布式流存储输入经过map算子计算,输出中间计算结果到分布式流存储里,数据又从分布式流存储里读入到Filter算子里,再经过计算,中间结果放到了分布式流存储里,再最后的计算结果经过Apply算子的计算放到了目的地的分布式流存储里。这个过程体现了算子编排和管道式编程的设计哲学,在这里分布式流存储起了大数据处理平台里的管道的作用。

分布式流存储

分布式流存储的产品定位是给万物互联这样的应用场景服务的,从技术角度来看它具有自身的特点,正如标题里提到的三个关键词: “分布式”、“流”、“存储”。首先是分布式的,它具有分布式系统本身所具有的一切能力,接着表示是专门给流式数据设计和实现的,最后的存储表示的是一个原生的存储解决方案,它讲究数据的 可靠性、持久化、一致性、资源隔离等,它从 存储的视角处理流数据。分布式流存储针对 “流数据” 的自身属性以及相应的特殊的业务需求场景做了专门的设计与实现,下面从 命名空间、业务场景、无限性、可伸缩性、恰好一次、字节流、数据管道、租户隔离、海量小文件的角度依据 最佳实践原则 讲述了为什么需要专门设计和实现一个流式存储系统。

命名空间

通常,块存储系统以分区、目录、文件,文件存储系统以目录、文件,以及对象存储以租户、桶、对象来定义数据的存储路径以及命名空间,而流存储系统则以范围(scope)、流(stream)、段(segment)、事件(event)来描述数据的存储路径以及命名空间。

类型 命名空间
块存储 分区、目录、文件
文件存储 目录、文件
对象存储 租户、桶、对象
流存储 范围、流、段、事件

在流存储系统里,如下图所示,数据的组织形式被抽象成范围、流、段和事件,范围由流组成,流由段组成,段由事件组成,事件由字节(bytes)组成。

流的组成

业务场景

在自动驾驶的场景里采用分布式流存储,我们可以这样处理自动驾驶的数据:给每一辆无人车定义一个1TB存储空间的范围,车上的每个传感器都归属于一个流,传感器上报的事件都在段内持久化。再假设每辆车都有1000个传感器(实际情况只多不少),那么10万辆车就需要定义1亿个流,可以想象要进行这种规模的隔离也就只有这种专门针对流数据而设计的流存储系统能够支持。

在工业厂房的场景下,还可以这样定义工业设备的数据:给一个厂房里的每台设备定义一个范围,每台设备里的每个传感器都对应一个流,传感器上传的事件数据保存在流内的段里,这样就很方便的对工业设备进行了大规模的租户数据隔离。

因此,以“范围、流、段、事件”的方式很方便的进行了大规模的租户隔离保证了用户信息安全同时又进行了存储资源配额的隔离。

数据无限性

无限性是分布式流存储最为重要的设计原则。从流数据的角度来看,数据是大量、快速、连续而又无限的,这就给流存储系统的设计与实现带来极大的困难,无限的数据使得存储系统必须能支持连续且无限规模的数据流,光这一点就对存储系统的可扩展性要求非常的高,同时还要求存储系统能够根据到达的数据量动态而又优雅地进行扩容与缩容。从技术与成本的角度来看,数据无限性意味着冷热数据分离,长期不用的数据淘汰到长期存储系统里,热点数据需要缓存,同时还需要能支持历史数据的读取与实时数据的读取与写入。

可伸缩性

可伸缩性也是分布式流存储最为重要的设计原则之一,而且流存储里的可伸缩性要求还是自动化的资源细粒度的可伸缩。通常,在云原生的场景下,资源的缩放是以主机、虚机或容器为单位的,这样的缩放对流存储来说粒度太大。在流存储的场景下需要能够以数据的“流段”为单位,比如一个流段2MB,那么就需要能支持一次自动扩容或缩容2MB的存储空间。另外在流存储里还要求写入与读取对数据子集的操作是解耦分离的,并且写入与读取二者之间跟数据流段还要有一个合理的平衡。

恰好一次

恰好一次也是分布式流存储最为重要的设计原则之一,恰好一次意味着数据的可持久化、有序、一致性以及事务性的支持。持久性意味着一旦得到确认,即使存储组件发生故障,写入的数据也不会丢失。有序意味着读客户端将严格按照写入的顺序处理数据。一致性意味着所有的读客户端即使面对存储故障、网络故障也都会看到相同的有序数据视图。事务性写入对于保证Flink这样的计算应用处理结果的完全正确是非常必要的。

字节流

分布式流存储里采用字节流的格式组织数据而不是像消息系统里采用消息报文的方式,这意味着接口的通用性。二进制的字节流是与数据格式无关的,字节流可以组成事件封装在分布式存储的流段里。而消息系统里数据是消息头消息体的格式封装的,在兼容性上不如字节流。

数据管道

在存储界通常喜欢用跑车、卡车、渡轮来比喻块存储、文件存储以及对象存储,打个比方来说块存储类似跑车:极快、极稳、装的人少、成本高;文件存储类似卡车:快、稳、装的人比跑车多,但是没跑车那么快;对象存储类似渡轮:可以装非常多的货,讲究量大、成本低;那么分布式流存储像什么呢? 在我们的定义里它就像管道:数据如同流水一般流过管道,又快又稳源源不断而又永无止境

租户隔离

分布式流存储从一开始设计的时候就将”租户隔离“作为其基本特性进行实现,”隔离“是分布式流存储的最基本的特性之一,在分布式流存储里租户隔离不只是租户B绝对不能看的到租户A的任何信息这样的信息安全层面的隔离,它支持范围、流、段、事件层面的隔离还将支持的租户规模作为设计的目标之一,在分布式流存储里单集群需要能支持千万量级起的租户数,另外还有资源、命名、可视空间、权限以及服务质量层面的隔离。

海量小文件

对巨量小文件的支持是分布式流存储的设计原则之一。正如前面提到的,万物互联下的海量数据来源于传感器,而传感器上传的数据都是类似温度、地理位置、告警信息这样的几个字节几个字节的小数据,这就意味着在万物互联的场景下会有巨量的小数据上传,而且90%以上的数据操作行为都是写入。为了保证数据写入的性能以及可靠性、正确性、持久性以及保证介质的使用寿命降低成本,这也需要存储系统针对这种业务场景进行专门的设计。

在分布式流存储里每个事件第一步是被仅附加写入一个缓存的段内进行封装的,在段达到一定的尺寸(比如64MB)后会被封闭不再写入,这时再将整个段写入下一级的持久化存储里。通过这样的设计,实现小数据在缓存里封装成大块的数据,再将大块数据写入持久化存储设备的方式保证了存储系统整体的性能。

小结

电影《一代宗师》里提到习武之人有三个境界:“见自己,见天地,见众生”。做技术做产品也同样如是,“三见”如同一体三面不可分割,认知上从关注自己到关注格局创新,再扎根到用户当中替用户解决有价值的实际问题。现有的工业物联网大数据处理平台有创新也有替客户解决了部分工业数据处理的难题,但是还是属于一个”DIY“的系统,离产品化还有距离,因此需要我们继续扎根下去替客户解决新的实际问题。

综上所述,在万物互联的智能世界里,为了实现将海量数据近实时转化成信息和决策的愿景,除了流式计算应用还需要一个流式存储系统,未来已来,已有开源的分布式流存储系统正走在这条路上。另本文仅为作者愚见,与任何组织机构无关,作者能力也很有限,如有不足之处欢迎留言批评指正。

问题思考

最后给大家留一个思考题:如果让你来设计一个工业物联网平台产品,你会如何定义它的产品灵魂?

作者简介

常平,中科大硕,10年+数据相关经验,主要工作背景为分布式系统、存储、缓存、微服务、云计算以及工业物联网大数据,现就职于DELL EMC。个人技术博客:https://changping.me

版权申明

本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh ,可以自由阅读、分享、转发、复制、分发等,限制是需署名、非商业使用(以获利为准)以及禁止演绎。

如果说互联网和云计算使得对象存储在存储市场上与块存储、文件存储三分天下,相应的业务需求直接奠定了对象存储与块存储、文件存储并列存储江湖一哥的地位,那么接下来也许我们需要为下一场数据变革的大事做好准备 – 万物互联这样的商业场景将给数据存储带来极大的商业挑战和技术挑战。

万物互联下的数据

纵观人类历史,各种技术变革都是以人类活动为中心,然后发明各种工具。石器时代,原始人发明了石器以及用火从而提升了生活品质和社会文明。现代社会,人类为了解决各种寂寞空虚冷吃穿住用行、生理和心理上的各种需求从而发明了各种社交空间、社交工具、网络购物、生活服务APP等,为了更好的服务这些应用场景,挖掘这些场景所生产的数据的价值,从而有了今天的各种大数据技术。

在互联网时代,数据主要来源于网页、APP以及一些相应的日志系统,而在万物互联的世界,数据还可以来源于有各种传感器、工业设备、监控设备、检测设备、智能家居、自动驾驶等。大数据的四个特征:数据量、时效性、多样性、价值密度在万物互联的场景下被进一步的深化,这就意味着商业成本以及技术成本的增加。

理论奠定技术的基础,业务驱使技术的变革。在万物互联的智能时代,我们有一个愿景: 能够将万物互联下生成的海量原始数据转化为可用的信息以及行为决策,并且这个转换的时间差需要能够接近于零。而需要实现这个愿景,从技术角度来看,需要有计算层面的解决方案也需要有存储层面的,如今在计算层面已经有Flink、Spark等这类成熟的分布式计算应用,然而在存储层面还没有。

流数据与流存储

在万物互联的场景下,各种传感器以及设备生成的数据有其原生的属性,这种数据自带时间戳、实时性要求高,而且是 “流数据”

首先流数据在百度百科里是这样被定义的:

流数据是一组顺序、大量、快速、连续到达的数据序列,一般情况下,数据流可被视为一个随时间延续而无限增长的动态数据集合。应用于网络监控、传感器网络、航空航天、气象测控和金融服务等领域。

从数据的生产与传输场景来看流数据具有几个与众不同的带有破坏性的特性:

  1. 数据随时间延续而无限增长,这意味着数据的无限性;
  2. 数据到达的速度有快有慢、负载有高有低,这意味着灵活又细粒度的资源弹性需求;
  3. 数据有序、无序、持久化以及复杂的传输环境而又要保证数据处理结果的唯一正确性。

这是三个特性转换成存储技术的语义对应着: 无限性、可伸缩性以及恰好一次:持久化、有序、一致性以及事务。

存储的视角来说,每种类型的数据都有其原生的属性和需求,对应有最佳的适用场景以及最合适的存储系统。跑在数据库里的数据对实时性和可靠性要求非常的高,因此适合采用块存储系统。文件共享场景下需要向用户共享文件,多个用户可以共享读取一个文件,因此适合采用文件存储系统。而互联网网页与APP里的文件、图像、视频可以看作一个个的数据对象又需要租户隔离以及无限扩展,因此又非常适合采用对象存储系统。那么目前又有哪种存储系统最适合用于 “流数据”呢?

正如当前技术条件下最适合 “流数据”计算的是类似Flink这样的分布式流计算应用,最适合“流数据”的应当是分布式流存储系统。

分布式流存储系统

产品定位

分布式流存储系统的产品定位是给万物互联这样的应用场景服务的,从技术角度来看它具有自身的特点,正如标题里提到的三个关键词: “分布式”、“流”、“存储”。首先是分布式的,它具有分布式系统本身所具有的一切能力,接着表示是专门给流式数据设计和实现的,最后的存储表示的是一个原生的存储解决方案,它讲究数据的 可靠性、持久化、一致性、资源隔离等,它从 存储的视角处理流数据。分布式流存储针对 “流数据” 的自身属性以及相应的特殊的业务需求场景做了专门的设计与实现,下面从 命名空间、业务场景、无限性、可伸缩性、恰好一次、字节流、数据管道、租户隔离、海量小文件、数据治理、流式架构的角度依据 最佳实践原则 讲述了为什么需要专门设计和实现一个流式存储系统。

命名空间

通常,块存储系统以分区、目录、文件,文件存储系统以目录、文件,以及对象存储以租户、桶、对象来定义数据的存储路径以及命名空间,而流存储系统则以范围(scope)、流(stream)、段(segment)、事件(event)来描述数据的存储路径以及命名空间。

类型 命名空间
块存储 分区、目录、文件
文件存储 目录、文件
对象存储 租户、桶、对象
流存储 范围、流、段、事件

在流存储系统里,如下图所示,数据的组织形式被抽象成范围、流、段和事件,范围由流组成,流由段组成,段由事件组成,事件由字节(bytes)组成。

流的组成

业务场景

可穿戴设备、自动驾驶与工业厂房

可以想象一下这样的业务场景:某个商家销售了几千万个智能手表,这些智能手表可以记录每个用户每天走了多少步,同时还可以分析过往的历史数据,用柱状图给用户展示历史数据,如下图所示:

步数分析

考虑到信息安全,用户A是不能看到用户B的数据的,那么就需要按智能手表为单位进行租户隔离,这种的场景下就有几千万个租户,同时每个租户还有自己的存储空间配额,比如给每个智能手表分配5GB 存储空间。光是这样的租户隔离场景,依据最佳实践的系统设计原则,不管是块存储系统、文件存储系统、对象存储系统还是Kafka这样的消息系统,按他们本身的隔离特性以及支持的租户规模都是难以在单个系统里支持这样的租户隔离场景。但是用流存储来实现就很方便,比如以智能手表的业务场景为例:

  • 默认分配5GB存储空间给一个智能手表,然后定义一个智能手表类型的命名空间用于与其他智能设备进行隔离,给每个智能手表分配一个流,每个智能手表上报的字节数据以事件为单位存储在流内的段里。
  • 也可以这样来定义:给每个智能手表分配一个5GB 存储空间的命名空间,手表里的每个传感器都对应一个流,每个传感器以事件为单位上报字节数据存储到流的段里。

还可以想象一下这样的业务场景:自动驾驶。采用分布式流存储的话,我们可以这样处理自动驾驶的数据:给每一辆无人车定义一个1TB存储空间的范围,车上的每个传感器都归属于一个流,传感器上报的事件都在段内持久化。再假设每辆车都有1000个传感器(实际情况只多不少),那么10万辆车就需要定义1亿个流,可以想象要进行这种规模的隔离也就只有这种专门针对流数据而设计的流存储系统能够支持。

在工业互联网的场景下,还可以这样定义工业设备的数据:给一个厂房里的每台设备定义一个范围,每台设备里的每个传感器都对应一个流,传感器上传的事件数据保存在流内的段里,这样就很方便的对工业设备进行了大规模的租户数据隔离。

因此,以“范围、流、段、事件”的方式很方便的进行了大规模的租户隔离保证了用户信息安全同时又进行了存储资源配额的隔离。

大数据处理平台

万物互联场景下无限量的数据给数据处理技术带来巨大的挑战与压力,不同的应用场景意味着不同的数据处理要求与复杂度,要把这些不同的甚至矛盾的数据处理要求都很好的综合在一个大数据处理系统里,对现有的大数据处理技术来说是个非常大的挑战,比如无人车的处理要求毫秒甚至纳秒级的数据处理实时性、而有些工业设备数据只需要分析历史数据,要让一个大数据处理系统既能能处理历史数据又能提供毫秒级甚至纳秒级的实时性处理能力还能应对各种不同格式不同传输场景的数据,而且每种数据处理都能达到这些应用场景原生指标的处理需求。相信这样的场景对工程技术人员来说是个很大的挑战。为了解决上述问题,按照现有的成熟的技术能力,通常开发人员采用类似Lambda架构(如下图)这样的大数据处理平台来处理大数据。

Lambda架构

Lambda架构即支持批处理也支持实时处理,能应对数据的多样性、具有容错功能、复杂性分离、能处理流式数据也能处理历史数据等优点,但是缺点也很明显:批处理一套独立的数据处理路径,实时处理又一套数据处理路径,然后还要合并结果再输出展示,同时系统里同样的数据存在存储多份的问题,比如同样的数据在Elasticsearch里有、HDFS里有、ceph里有、Kafka里也有,除了这些甚至还存在其他一些复杂的存储组件,而且同样的数据还都是多份冗余的,因此存储成本太高太过于复杂。Lambda架构里为了提供一个功能却引入一个组件,在复杂之上堆积复杂,存储成本、开发与运维成本都太过于复杂。

那么应当如何解决Lambda架构带来的这些缺点?以数据流向为核心重构大数据处理平台是一个比较好的方案,它具体包括数据的采集、聚合、传输、缓存、持久化、处理、展示等。依据这种设计理念我们可以推出一个端到端的原生的流式大数据处理平台:原生的流式计算加上一个原生的流式存储并且可以平衡商业成本与技术成本。

流式计算可以采用Flink,然而并没有发现当前有合适的流式存储可以使用,如果采用Flink加上传统的文件存储或者块存储、对象存储的方式,也只能认为是半原生的大数据处理平台:计算是原生的流式计算而存储却不是原生的流式存储

因此,综合思考万物互联场景下的数据处理场景也需要一个原生的分布式流存储系统,重构Lambda架构里的存储栈,使得分布式流计算加上分布式流存储即为原生的流式大数据处理系统,同时还能很好的平衡商业成本与技术成本之间的关系。

数据无限性

无限性是分布式流存储最为重要的设计原则。从流数据的角度来看,数据是大量、快速、连续而又无限的,这就给流存储系统的设计与实现带来极大的困难,无限的数据使得存储系统必须能支持连续且无限规模的数据流,光这一点就对存储系统的可扩展性要求非常的高,同时还要求存储系统能够根据到达的数据量动态而又优雅地进行扩容与缩容。从技术与成本的角度来看,数据无限性意味着冷热数据分离,长期不用的数据淘汰到长期存储系统里,热点数据需要缓存,同时还需要能支持历史数据的读取与实时数据的读取与写入。

可伸缩性

可伸缩性也是分布式流存储最为重要的设计原则之一,而且流存储里的可伸缩性要求还是自动化的资源细粒度的可伸缩。通常,在云原生的场景下,资源的缩放是以主机、虚机或容器为单位的,这样的缩放对流存储来说粒度太大。在流存储的场景下需要能够以数据的“流段”为单位,比如一个流段2MB,那么就需要能支持一次自动扩容或缩容2MB的存储空间。另外在流存储里还要求写入与读取对数据子集的操作是解耦分离的,并且写入与读取二者之间跟数据流段还要有一个合理的平衡。

恰好一次

恰好一次也是分布式流存储最为重要的设计原则之一,恰好一次意味着数据的可持久化、有序、一致性以及事务性的支持。持久性意味着一旦得到确认,即使存储组件发生故障,写入的数据也不会丢失。有序意味着读客户端将严格按照写入的顺序处理数据。一致性意味着所有的读客户端即使面对存储故障、网络故障也都会看到相同的有序数据视图。事务性写入对于保证Flink这样的计算应用处理结果的完全正确是非常必要的。

字节流

分布式流存储里采用字节流的格式组织数据而不是像消息系统里采用消息报文的方式,这意味着接口的通用性。二进制的字节流是与数据格式无关的,字节流可以组成事件封装在分布式存储的流段里。而消息系统里数据是消息头消息体的格式封装的,在兼容性上不如字节流。

数据管道

在存储界通常喜欢用跑车、卡车、渡轮来比喻块存储、文件存储以及对象存储,打个比方来说块存储类似跑车:极快、极稳、装的人少、成本高;文件存储类似卡车:快、稳、装的人比跑车多,但是没跑车那么快;对象存储类似渡轮:可以装非常多的货,讲究量大、成本低;那么分布式流存储像什么呢? 在我们的定义里它就像管道:数据如同流水一般流过管道,又快又稳源源不断而又永无止境

租户隔离

分布式流存储从一开始设计的时候就将”租户隔离“作为其基本特性进行实现,”隔离“是分布式流存储的最基本的特性之一,在分布式流存储里租户隔离不只是租户B绝对不能看的到租户A的任何信息这样的信息安全层面的隔离,它支持范围、流、段、事件层面的隔离还将支持的租户规模作为设计的目标之一,在分布式流存储里单集群需要能支持千万量级起的租户数,另外还有资源、命名、可视空间、权限以及服务质量层面的隔离。

海量小文件

对巨量小文件的支持是分布式流存储的设计原则之一。正如前面提到的,万物互联下的海量数据来源于传感器,而传感器上传的数据都是类似温度、地理位置、告警信息这样的几个字节几个字节的小数据,这就意味着在万物互联的场景下会有巨量的小数据上传,而且90%以上的数据操作行为都是写入。为了保证数据写入的性能以及可靠性、正确性、持久性以及保证介质的使用寿命降低成本,这也需要存储系统针对这种业务场景进行专门的设计。

在分布式流存储里每个事件第一步是被仅附加写入一个缓存的段内进行封装的,在段达到一定的尺寸(比如64MB)后会被封闭不再写入,这时再将整个段写入下一级的持久化存储里。通过这样的设计,实现小数据在缓存里封装成大块的数据,再将大块数据写入持久化存储设备的方式保证了存储系统整体的性能。

数据治理

当前的大数据处理平台,不管是Kappa架构还是lambda架构,数据的存储都是多组件化、多份化的。比如同样的数据在Kafka里有、在HDFS里有、在Elasticsearch里又有,有些用户还使用了更多的存储中间件,而且这些数据还是多份冗余的。这一方面增加了数据的存储成本,另一方面也降低了数据的可信性、可靠性、合规性,给数据标准化以及数据的重复利用带来了困难,不利于数据的分享、合规、降低成本以及安全可靠地支持业务和决策。数据治理也是分布式流存储的基本设计原则之一,通过使用分布式流存储,大数据处理平台的架构可以进化成”分布式流计算+ 分布式流存储“这样的原生流式数据处理平台架构。

流式架构

下图体现了”分布式流计算+ 分布式流存储“这样的原生流式大数据处理平台的架构理念。

流式架构

这个架构体现了 “流原生”(stream native)式 的设计哲学,“流原生”的计算加上“流原生”的存储管道组成了“流原生”的大数据处理平台。数据从分布式流存储输入经过map算子计算,输出中间计算结果到分布式流存储里,数据又从分布式流存储里读入到Filter算子里,再经过计算,中间结果放到了分布式流存储里,再最后的计算结果经过聚合算子的计算放到了目的地的分布式流存储里。这个过程体现了算子编排和管道式编程的设计哲学,在这里分布式流存储起了大数据处理平台里的管道的作用。

同时,在分布式流存储里数据的存储单位是流段,当输入的数据速率或者负载增加时,流段就会自动扩容,通过流协议联动,流计算应用的算子也相应扩容。相应的,如果输入的数据速率或负载降低,流段就自动收缩,通过流协议联动,流计算应用的算子也相应的缩容,所有这些行为都是自动完成的,无需人工干预,这种行为体现了分布式流存储的细粒度可伸缩性。

小结

综上所述,在万物互联的智能世界里,为了实现将海量数据近实时转化成信息和决策的愿景,除了流式计算应用还需要一个流式存储系统,未来已来,已有开源的分布式流存储系统正走在这条路上。另本文仅为作者愚见,与任何组织机构无关,作者能力也很有限,如有不足之处欢迎留言批评指正。

问题思考

最后给大家留一个思考题:如果让你来设计一个分布式流存储产品,你会如何定义它的产品灵魂?

作者简介

常平,中科大硕,10年+数据相关经验,主要工作背景为分布式系统、存储、缓存、微服务、云计算以及大数据,现就职于DELL EMC。个人技术博客:https://changping.me

版权申明

本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh ,可以自由阅读、分享、转发、复制、分发等,限制是需署名、非商业使用(以获利为准)以及禁止演绎。

导读

日拱一卒,功不唐捐,分享是最好的学习,一个知识领域里的 “道 法 术 器” 这四个境界需要从 微观、中观以及宏观 三个角度来把握。微观是实践,中观讲套路,宏观靠领悟。本系列文章我把它命名为《分布式系统架构设计三十六式》,讲诉分布式系统里最重要的三十六个虚数的中观套路,而微服务的本质也是分布式,因此搞明白这三十六个最重要的知识点也就同时能搞明白微服务。

实现一个分布式系统通常会面临三大难题: 故障传播性、业务拆分与聚合以及分布式事务 。本系列中的服务治理章节主要是为了解决故障传播性的难题,它包括: 隔离、熔断、降级、限流、容错以及资源管控-系统自适应算法 ,本文将讲述服务治理里的 “系统自适应模式” 模式。

动机

分布式系统的灵魂 :从产品思维的角度来看,好的产品都是有自己灵魂的。比如微信的产品灵魂被定位成“善良”,善有大善、上善、小善。《道德经》有言:“上善若水,水善利万物而不争,处众人之所恶(wù),故几于道。”,水善利万物而不与万物争,水无处不在,万物感觉不到水的存在又离不开水,不争故天下莫能与之争。每种好的产品背后都隐藏着自己的设计哲学,有自己的灵魂。而一个分布式系统的灵魂又应该怎么定义呢?认知层次不同,对分布式系统的理解也不同,度量一个分布式系统的灵魂,在我看来可以采用分布式系统的SLO图形指标来表达。好的分布式系统SLO指标也是很有规律很漂亮的,如下图所示,左图波形上跳下串,很明显不如右边波形来的漂亮。

系统抖动

波形上跳下串带来的后果是什么呢?想象一下在高速路开车的场景,如果一辆车一会快,一会慢,后面的车会发生什么事?这样开车是很容易出事故的,而开得很稳的车出故障的概率就较小。波形上跳下串,说明该系统里头没有解决好资源竞用性以及服务治理的问题。

可靠性与高性能的平衡 :我们知道要让一个水管里的水流的又快又多,一是给水管灌满水,二是水管通畅同时保证不炸裂水管。同样的道理,在分布式系统里要让系统跑出最好的性能和最可靠的效果,一方面压榨整个系统的资源,另一方面又要保证系统不出故障,在系统不出故障的前提下,尽量榨尽系统资源。

因此为了解决以上问题,这里提出了系统自适应模式。

系统自适应模式设计思路

资源平衡

服务治理与其说是分布式下的套路,不如说是控制论下的套路,其本质是资源的细粒度管控,精巧的平衡整个系统里的资源竞用,从而保证分布式系统对外提供高质量的服务。如下图《一根羽毛的力量》所示,其将平衡的思想用到极致,我们也希望在分布式系统里体现有限资源下的平衡。

 图片来源于网络版权归原作者所有

我们将平衡的思想融入分布式系统,在系统健康的前提下,极致的压榨系统的能力(capacity),同时又保证不会主动造成系统故障,如果发现系统内部出现故障,又会自动调整下发的压力,这就是系统自适应保护。

最佳衡量指标

如何确定最佳的衡量指标?通常比较的原始情况下,是以工作负载比如1分钟、5分钟、15分钟的CPU负载作为系统衡量指标,但是这并不大正确。比如假设 CPU load > 2 就 触发一个系统保护,如果这个 时候系统的CPU load是在下降的,它虽然此时刻大于2, 但是趋势却是下降,因此没必要触发系统保护。还有就是干扰性,比如 按 1分钟负载&& 5分钟负载&&15分钟负载,全都是满足大于2的条件就触发系统保护。但是实际上,也许 5分钟负载是不大于2的,因此这个条件就不成立,并不会触发系统过载保护, 这种行为我称之为负载干扰性。

参考水管的流量算法只依赖于管的截面大小以及流速,我们定义系统的自适应算法依赖的参数为系统入口处的 QPS或TPS ,以及请求的返回时间(RT),这里我将这个公式定义为 System Balance Capacity = QPS * RT。

最佳值

如上图,最好的情况就是即满足 最大的QPS 又满足最小的RT,通过一个时间窗口计算QPS 和 RT ,自适应调整整个系统。

系统自适应算法

下图表示了一个自适应算法,造成系统负载过高以及故障传播的因素很多,比如不合适的线程数、TPS或QPS过大、返回时间过长都有可能,通过合适的算法可以自动调整下发的压力从而保持系统的内部资源平衡。

自适应算法

通过采用系统自适应算法在系统的入口处,实时采集QPS/TPS 以及RT, 然后跟最佳样本值进行比较,依据调节系数进行计算,再调节发送的请求量,发送请求后又采集造成的影响,再反馈在系统入口处。其中,样本值可以在系统启动时按动态采样的方式计算,逐渐增加QPS ,当发现时延发生转折时,我们就确定这个转折点为分布式系统自适应最佳平衡点,记下该值作为当前样本。

小结

本文讲诉了服务治理里的 “系统自适应”模式,在前一篇《分布式系统架构设计三十六式之服务治理-5F容错模式》里讲诉了分布式系统服务治理的容错模式。另作者能力与认知都有限,欢迎大家拍砖留念。

作者简介

常平,中科大硕,10年+数据相关经验,主要工作背景为分布式系统、存储、缓存、微服务、云计算以及大数据,现就职于DELL EMC。个人技术博客:https://changping.me

版权申明

本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh ,可以自由阅读、分享、转发、复制、分发等,限制是需署名、非商业使用(以获利为准)以及禁止演绎。