array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 五:大数据架构回顾-LambdaPlus架构 - 天戈朱 - 爱码网
tgzhu

   Blink阿里云 Apache Flink 基础上深度改进的实时计算平台,Blink旨在将流处理和批处理统一,实现了全新的 Flink SQL 技术栈,在功能上,Blink支持现在标准 SQL 几乎所有的语法和语义,在性能上,Blink也比社区Flink更加强大。自 2019 年 1 月起,阿里巴巴逐步将内部维护的 Blink 回馈给 Flink 开源社区,Flink 1.9.0 是阿里内部版本 Blink 合并入 Flink 后的首次发版,Flink 1.10 版本可以看作一个比较重要的里程碑式版本,至此,Blink 全部功能都已经进入 Flink,包括 Blink 中比较关键的设计和通用的优化。

   为了实现流批处理一体化,Blink采用的将流处理视为批处理的一种特殊形式。因此在内部维持了若干张张流表。通过缓存时间进行约束,限定在一个时间段内的数据组成的表,从而将实时流转为微批处理。理论上只要把时间窗口开的足够大,Flink的流表可以存下上百日的数据,从而保证微批处理的“微”足够大可以替换掉离线处理数据。但这样做存在几个问题:

  • Flink的流表是放在内存中,不做持久化处理的。一旦任务发生异常,内存数据丢失,Flink是需要回溯上游消息流,从而转为Kappa的结构。
  • 数据窗口开的越大,内存成本越高。受限于成本,对大量数据处理仍然有可支持的物理空间上限。
  • 下游接收的通常都是处理结果,对于内存中的流表数据是无法直接访问的。这样无形中增加了开发成本。

Lambda plus 是基于 Tablestore 和 Blink 打造的云上存在可以复用、简化的大数据架构

  •   表格存储(Tablestore):是阿里云自研的 NoSQL 多模型数据库,提供PB级结构化数据存储、千万TPS以及毫秒级延迟的服务能力,表格存储提供了通道服务(TunnelService)支持用户以按序、流式地方式消费写入表格存储的存量数据和实时数据,同时表格存储还提供了多元索引功能,支持用户对结果视图进行实时查询和分析。 

 

Lambda plus大数据架构


 

Lambda batch层:

  • Tablestore 直接作为 master dataset,支持用户直读,配合 Tablestore 多元索引,用户的线上服务直读、ad-hoc 查询 master dataset 并将结果返回给用户;
  • blink 批处理任务向 Tablestore 下推SQL的查询条件,直读 Tablestore master dataset,计算 batch view,并将 batch view 重新写回 Tablestore;

Streaming层:

  • blink 流处理任务通过表格存储 TunnelService API 直读 master dataset 中的实时数据,持续产生 stream view
  • Kappa 架构的 backfill 任务,可以通过建立全量类型数据通道,流式消费 master dataset 的存量数据,从新计算;

Serving层:

  • 为存储 batch view 和 stream view 的 Tablestore 结果表建立全局二级索引和多元索引,业务可以低延迟、ad-hoc方式查询;

 

Lambda plus的数据链路


 

 

问题:Query 时 Batch view 与 Real-time View 的溶合问题?

 

原Lambda架构在数据写入、存储、对接计算组件以及展示层面临的挑战

  • 写入层上,Lambda 没有对数据写入进行抽象,而是将双写流批系统的一致性问题反推给了写入数据的上层应用;
  • 存储上,以HDFS为代表的 master dataset 不支持数据更新,持续更新的数据源只能以定期拷贝全量snapshot到HDFS的方式保持数据更新,数据延迟和成本比较大;
  • 计算逻辑需要分别在流批框架中实现和运行,而在类似Storm的流计算框架和Hadoop MR的批处理框架做job开发、调试、问题调查都是比较复杂的;
  • 结果视图需要支持低延迟的查询分析,通常还需要将数据派生到列存分析系统,并保证成本可控;

针对上述原Lambda架构上述的技术问题,Lambda plus的解决思路:

  • 针对数据写入的问题,Lambda plus 数据只需要写入表格存储,Blink 流计算框架通过通道服务API直读表格存储的实时数据,不需要用户双写队列或者自己实现数据同步;
  • 存储上,Lambda plus 直接使用表格存储作为 master dataset,表格存储支持用户tp系统低延迟读写更新,同时也提供了索引功能 ad-hoc 查询分析,数据利用率高,容量型表格存储实例也可以保证数据存储成本可控;
  • 计算上,Lambda plus 利用 blink 流批一体计算引擎,统一流批代码
  • 展示层,表格存储提供了多元索引和全局二级索引功能,用户可以根据解决视图的查询需求和存储体量,合理选择索引方式;

总结,表格存储实现了batch view、master dataset 直接查询、stream view 的功能全集,Blink实现流批统一,Tablestore 加 blink 的 Lambda plus 模式可以明显简化 Lambda 架构的组件数量,降低搭建和运维难度,拓展用户数据价值。

 

Lambda plus的适用场景


 基于 Tablestore 和 Blink 的 Lambda plus 架构,适用于基于分布式NoSQL数据库存储数据的大数据分析场景,如IOT、时序数据、爬虫数据、用户行为日志数据存储等,数据量以TB级为主。典型的业务场景如:大数据舆情分析系统

示例图解二:

  •  

     

     

参考资料


分类:

技术点:

相关文章: