NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

MapReduce 框架 Yarn、Web 增量更新算法、面向查询服务——架构周报

  • 2014-02-12
  • 本文字数:2810 字

    阅读完需:约 9 分钟

本期的架构周报主要关注 MapReduce 框架 Yarn、HBase 写数据过程分析、用增量更新算法为 web 应用节省流量以及.NET 应用架构设计中如何进行面向查询服务的参数化查询设计等。

技术选型

MapReduce 框架 Yarn 分析

博文“ Yarn 详解”总结了 MapReduce 框架 Yarn 的产生背景,与之前框架的优势对比,以及运行机制。

Yarn 是一个分布式的资源管理系统,用以提高分布式的集群环境下的资源利用率,这些资源包括内存、IO、网络、磁盘等。其产生的原因是为了解决原 MapReduce 框架的不足。最初 MapReduce 的 committer 们还可以周期性的在已有的代码上进行修改,可是随着代码的增加以及原 MapReduce 框架设计的不足,在原 MapReduce 框架上进行修改变得越来越困难,所以 MapReduce 的 committer 们决定从架构上重新设计 MapReduce, 使下一代的 MapReduce(MRv2/Yarn) 框架具有更好的扩展性、可用性、可靠性、向后兼容性和更高的资源利用率以及能支持除了 MapReduce 计算框架外的更多的计算框架。Yarn/MRv2 最基本的想法是将原 JobTracker 主要的资源管理和 job 调度 / 监视功能分开作为两个单独的守护进程。有一个全局的 ResourceManager(RM) 和每个 Application 有一个 ApplicationMaster(AM),Application 相当于 map-reduce job 或者 DAG jobs。ResourceManager 和 NodeManager(NM) 组成了基本的数据计算框架。ResourceManager 协调集群的资源利用,任何 client 或者运行着的 applicatitonMaster 想要运行 job 或者 task 都得向 RM 申请一定的资源。ApplicatonMaster 是一个框架特殊的库,对于 MapReduce 框架而言有它自己的 AM 实现,用户也可以实现自己的 AM,在运行的时候,AM 会与 NM 一起来启动和监视 tasks。

有关 Yarn 框架的实现原理,读者可以查看较早之前的一篇文章“ Hadoop 新 MapReduce 框架 Yarn ”。

用增量更新算法为 web 应用节省流量

文章主要讲解如何利用 HTML5 的localstorage 和增量更新算法实现JavaScript 的本地化,并在版本更新的时候基本做到修改多少内容就下载多少内容,为网站和用户节省90% 以上的JavaScript 流量,尤其适合快速迭代开发的手机网站使用。

传统的 JavaScript 资源存放方式一般就是通过 CDN 方式存放,缓存方面通过增加 maxage、Last-Modified,etag 等方式依靠 HTTP Cache 相关协议进行缓存。这种方式的问题主要是缓存命中率不是很高,另外在快速迭代的产品中,由于代码经常需要修改,虽然很多时候只是修改很小的一部分内容,但是还是需要用户全量下载整个 JavaScript 文件,造成流量上的耗费。除了传统方式的存放和加载 JavaScript,HTML5 给我们提供了另一种 JavaScript 资源缓存的方式,即 HTML5 的离线存储或 application cache. 通过给 manifest 头文件定义资源的本地存放方式,我们可以完全实现静态数据本地存储,减少了大量网络请求,减少网络流量。但是这种方式同时也有他致命的缺点:appcache 机制定义了在更新离线存储版本的时候,用户的首次进入页面并不会启用最新的资源文件,而是由一个后台程序先把资源下载到本地,用户需要刷新或者再次进入页面时才会启用新的资源文件,当然这个问题可以通过监听离线缓存的更新完成时间,在更新完成的时候程序去刷新页面以启用新的静态资源,但是这个方式带来了一个致命的不佳的用户体验,就是用户进来后会看到浏览器自己刷新了一下页面,对一些网站来说这显然不能接受。对于引入了离线存储的页面,是没有办法去掉离线存储的,这给一些首页是动态页面的网站造成了极大的困扰。一些灰度发布的策略无法很好的实施。

架构技巧

面向查询服务的参数化查询设计

博文以.NET 应用架构设计为前提,通过运用”关注点分离“通用设计思想来对查询服务在服务端的强耦合进行分解,将强耦合从服务端迁移出来通过策略性的配置将关注点放入各自的客户端,从而有效的解决服务不再臃肿的问题。

按照作者的案例,有一个SOA 商品(Item)查询接口,这个接口很通用,主要用来支撑日常很多其他系统的大量关于Item 的查询,尤其是在高峰期间该服务的压力是很大的;我们站在SOA 的角度看这个接口,这个通用的接口解决了众多的查询业务,确实不错,但是我们切换一下角度,站在每一个调用接口的访问端看似乎并不是很满意或者说牺牲了部分性能上的代价,因为我们无法干净利落的只获取当前这个业务点需要的数据项,这个Item 服务接口所返回的数据项必须同时满足所有调用它的业务点,哪怕这次调用我只需要用到Item 的三分之一的数据字段都不行,每次都会把不需要的字段都查询出来,不管是返回的性能、查询的性能,其实都是可以通过调整设计来避免的。

以往我们的思路都是集中在服务端,常规做法都是提供了一个能够容纳。所有查询客户端需求的数据实体,客户端可选择的余地很有限,无法只获取自己所需要的几个数据项,甚至各个业务点在不同的情况下都有可能需要两到三个数据返回实体;总而言之,面向数据查询的服务接口如果要向着SOA 方向发展那就必须包含SOA 设计上的相关原则,如这里的面向查询为主的服务设计其实就是缺少SOA 原则中的”服务应具有策略性“一原则。

为什么以往一直没有暴露出这个问题呢,是因为以往都是在本地直接调用“查询引擎”,如:SQLSERVER,在“查询引擎”的最后一层就是应用程序,而应用程序中可以编写很多彼此类似的查询方法,每个方法可能只有一两个字段的差异性,或者通过“企业应用架构模式—查询对象模式来将不同的方法合在一起通过一个可以调整查询字段的对象来配置本次需要的查询字段;由于现在我们已将查询服务化,就不太可能再去为了所有客户端在去适应性的去扩充类似没有太大价值的接口,但是客户端又需要将自己所需要的查询字段让服务知道,所以这里的解决方案可以称为面向SOA 的“企业应用架构模式—查询对象模式”。

HBase 写数据过程分析

除了使用 HBase,深入了解和分析 HBase 的实现原理也是非常有效的,既可以加深对 HBase 的理解和运用,又可以借鉴其出色的设计方法。该博文以HBase0.94.12 为基础,从Client 和Server 端两个角度分析了写数据过程。

比如,对于写操作,HBase 内部就是多线程,线程数量与批量提交的数据涉及的region 个数相同,通常情况下不需要再自己写多线程代码,自己写的多线程代码主要是解决数据到HTable 的put 这个过程中的性能问题,数据进入put 的缓存,当达到writeBufferSize 设定的大小后才会真正发起写操作(如果不是自己控制flush),这个过程的线程数与这批数据涉及的region 个数相同,会并行写入所有相关region,一般不会出现性能问题,当涉及的region 个数过多时会导致创建过多的线程,消耗大量的内存,甚至会出现线程把内存耗尽而导致OutOfMemory 的情况,比较理想的写入场景是调大writeBufferSize,并且一次写入适量的不同regionserver 的region,这样可以充分把写压力分摊到多个服务器。

欢迎读者朋友推荐或者投稿架构相关的文章,联系邮箱为 editors@cn.infoq.com ,标题请注明“架构专栏”。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2014-02-12 03:032410
用户头像

发布了 501 篇内容, 共 248.4 次阅读, 收获喜欢 57 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试学习笔记丨性能测试体系

测试人

软件测试

技术解读 | KunDB助力头部金融机构关键系统的Oracle国产替代

星环科技

oracle 大数据 科技 大模型

大数据处理流程包括哪些环节

悦数图数据库

大数据处理流程

“研学测”好帮手,三步带你安装体验TDH社区开发版

星环科技

大数据 信创 科技 大模型

星环科技基于第五代英特尔®至强®可扩展处理器的分布式向量数据库解决方案重磅发布

星环科技

大数据 信创 科技 大模型

聚道云软件连接器1月新增应用/产品更新合集

聚道云软件连接器

功能更新

Python 变量?对象?引用?赋值?一个例子解释清楚

EquatorCoco

Python 前端 变量 对象 开发语言

指标平台详解(下):第三代指标平台实现了哪些突破?

Aloudata

BI ETL 指标中台; 指标中台

实力认可!TDengine 在“2023 年度金猿季”两大榜单中脱颖而出

TDengine

tdengine 时序数据库

程序员手把手教你参与开源!拿捏!

快乐非自愿限量之名

开源 程序员 面试

Footprint 的卓越资金流数据揭示加密货币的神秘叙事

Footprint Analytics

区块链 数据分析 加密货币

AppLink让你的电商运营财务管理自动化

RestCloud

零代码 APPlink 自动化集成

实现钉钉与宁波银行对接,助力企业实现财务智能化

聚道云软件连接器

案例分享

百度安全入选2023年移动互联网APP产品安全漏洞治理十大优秀案例

百度安全

万字图解 | 深入揭秘TCP工作原理

云舒编程

三次握手 TCP协议 TCP四次挥手 MSL 滑动窗口

新书上线 | 《使用 NGINX 部署和保护 Kubernetes Ingress Controller》中文版

NGINX开源社区

nginx Kubernetes API NGINX Ingress Controller NGINX Service Mesh

第三届“新科技 星力量” 科技实践案例评选【获奖名单】揭晓

星环科技

大数据 科技 大模型 获奖

【第七在线】数字化转型:智能商品计划管理的核心要素

第七在线

软件测试学习笔记丨JMeter使用代理录制脚本

测试人

软件测试

软件测试学习笔记丨Grafana安装

测试人

软件测试

亚马逊云科技在中国推出数字孪生服务Amazon IoT TwinMaker

财见

一分钟了解Wireshark的数据包

小齐写代码

产品解读 | 新一代湖仓集存储,多模型统一架构,高效挖掘数据价值

星环科技

大数据 信创 科技 大模型

这一年我们上线的运维自动化系统

37丫37

DevOps 运维 自动化 工具 开发.

图像处理-Java-指定大小压缩

alexgaoyh

Java 图像处理 图像压缩 压缩算法 指定大小

全面升级!Apache HugeGraph 1.2.0版本发布

百度安全

(保姆级)服务器-Zabbix6.0使用Python脚本实现带图片的邮箱的报警

不在线第一只蜗牛

Python 运维 服务器

英特尔实现3D先进封装技术的大规模量产

E科讯

近6成金融机构的选择!华为云GaussDB加快金融核心系统转型

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

有了这张微积分知识地图,你可能会爱上高数!

博文视点Broadview

探索技术的无限可能-云原生计算2023年度奖项

字节跳动云原生计算

大数据 云原生

MapReduce框架Yarn、Web增量更新算法、面向查询服务——架构周报_架构_崔康_InfoQ精选文章