公告:网址大全导航目录www.btv85.com为各位站长提供免费收录网站的服务,VIP会员每天提交网站30、文章30免审核,快审服务(10元/站),可自助充值发布。

点击这里在线咨询客服 点击这里在线咨询客服
新站提交
  • 网站:223084
  • 待审:0
  • 小程序:16453
  • 文章:25975
  • 会员:239

今天BTV导航网的小编为你讲一下集群技术在七牛云存储中的应用案例分享相关的内容。

分享人介绍:王团结,七牛数据平台工程师,主要负责数据平台的设计研发工作。关注大数据处理,高性能系统服务,关注Hadoop、Flume、Kafka、Spark等离线、分布式计算技术。

下为讨论实录
数据平台在大部分公司属于支撑性平台,做的不好立刻会被吐槽,这点和运维部门很像。所以在技术选型上优先考虑现成的工具,快速出成果,没必要去担心有技术负担。早期,我们走过弯路,认为没多少工作量,收集存储和计算都自己研发,发现是吃力不讨好。去年上半年开始,我们全面拥抱开源工具,搭建自己的数据平台。

数据平台设计架构
20151227114046250.jpg (450×421)

公司的主要数据来源是散落在各个业务服务器上的半结构化的日志(系统日志、程序日志、访问日志、审计日志等)。大家有没考虑过为什么需要日志?日志是最原始的数据记录,如果不是日志,肯定会有信息上的丢失。说个简单的例子,需求是统计nginx上每个域名的的流量,这个完全可以通过一个简单的nginx模块去完成,但是当我们需要统计不同来源的流量时就法做了。所以需要原始的完整的日志。

有种手法是业务程序把日志通过网络直接发送出去,这并不可取,因为网络和接收端并不完全可靠,当出问题时会对业务造成影响或者日志丢失。对业务侵入最小最自然的方式是把日志落到本地硬盘上。

Agent设计需求

每台机器上会有一个agent去同步这些日志,这是个典型的队列模型,业务进程在不断的push,agent在不停的pop。agent需要有记忆功能,用来保存同步的位置(offset),这样才尽可能保证数据准确性,但不可能做到完全准确。由于发送数据和保存offset是两个动作,不具有事务性,不可避免的会出现数据不一致性情况,通常是发送成功后保存offset,那么在agent异常退出或机器断电时可能会造成多余的数据。

agent需要足够轻,这主要体现在运维和逻辑两个方面。agent在每台机器上都会部署,运维成本、接入成本是需要考虑的。agent不应该有解析日志、过滤、统计等动作,这些逻辑应该给数据消费者。倘若agent有较多的逻辑,那它是不可完成的,不可避免的经常会有升级变更动作。

数据收集流程

数据收集这块的技术选择,agent 是用go自己研发的,消息中间件kafka,数据传输工具flume。说到数据收集经常有人拿flume和kafka做比较,我看来这两者定位是不同的,flume更倾向于数据传输本身,kakfa是典型的消息中间件用于解耦生产者消费者。

具体架构上,agent并没把数据直接发送到kafka,在kafka前面有层由flume构成的forward。这样做有两个原因

1. kafka的api对非jvm系的语言支持很不友好,forward对外提供更加通用的http接口

2. forward层可以做路由、kafka topic和kafka partition key等逻辑,进一步减少agent端的逻辑

forward层不含状态,完全可以做到水平扩展,不用担心成为瓶颈。出于高可用考虑,forward通常不止一个实例,这会带来日志顺序问题,agent 按一定规则(round-robin、failover等)来选择forward实例,即使kafka partition key一样,由于forward层的存在,最终落入kafka的数据顺序和 agent发送的顺序可能会不一样。我们对乱序是容忍的,因为产生日志的业务基本是分布式的,保证单台机器的日志顺序意义不大。如果业务对顺序性有要求,那得把数据直接发到kafka,并选择好partition key,kafka只能保证 partition级的顺序性。

跨机房收集要点

多机房的情形,通过上述流程,先把数据汇到本地机房kafka 集群,然后汇聚到核心机房的kafka,最终供消费者使用。由于kafka的mirror对网络不友好,这里我们选择更加的简单的flume去完成跨机房的数据传送。

flume在不同的数据源传输数据还是比较灵活的,但有几个点需要注意

1. memory-channel效率高但可能有丢数据的风险,file-channel安全性高但性能不高。我们是用memory-channel,但把capacity设置的足够小,使内存中的数据尽可能少,在意外重启和断电时丢的数据很少。个人比较排斥file-channel,效率是一方面,另一个是对flume的期望是数据传输,引入file-channel时,它的角色会向存储转变,这在整个流程中是不合适的。通常flume的sink端是kafka和hdfs这种可用性和扩张性比较好的系统,不用担心数据拥堵问题。

2. 默认的http souce 没有设置线程池,有性能问题,如果有用到,需要自己修改代码。

3. 单sink速度跟不上时,需要多个sink。像跨机房数据传输网络延迟高单rpc sink吞吐上不去和hdfs sink效率不高情形,我们在一个channel后会配十多个sink。

Kafka使用要点

kafka在性能和扩展性很不错,以下几个点需要注意下

1. topic的划分,大topic对生产者有利且维护成本低,小topic对消费者比较友好。如果是完全不相关的相关数据源且topic数不是发散的,优先考虑分topic。

2. kafka的并行单位是partition,partition数目直接关系整体的吞吐量,但parition数并不是越大越高,3个partition就能吃满一块普通硬盘io了。所以partition数是由数据规模决定,最终还是需要硬盘来抗。

3. partition key选择不当,可能会造成数据倾斜。在对数据有顺序性要求才需使用partition key。kafka的producer sdk在没指定partition key时,在一定时间内只会往一个partition写数据,这种情况下当producer数少于partition数也会造成数据倾斜,可以提高producer数目来解决这个问题。

数据到kafka后,一路数据同步到hdfs,用于离线统计。另一路用于实时计算。由于今天时间有限,接下来只能和大家分享下实时计算的一些经验

实时计算我们选择的spark streaming。我们目前只有统计需求,没迭代计算的需求,所以spark streaming使用比较保守,从kakfa读数据统计完落入mongo中,中间状态数据很少。带来的好处是系统吞吐量很大,但几乎没遇到内存相关问题

spark streaming对存储计算结果的db tps要求较高。比如有10w个域名需要统计流量,batch interval为10s,每个域名有4个相关统计项,算下来平均是4w tps,考虑到峰值可能更高,固态硬盘上的mongo也只能抗1w tps,后续我们会考虑用redis来抗这么高的tps

有外部状态的task逻辑上不可重入的,当开启speculation参数时候,可能会造成计算的结果不准确。说个简单的例子

这是个把计算结果存入mongo的task

这个任务,如果被重做了,会造成落入mongo的结果比实际多。
20151227114455283.jpg (600×135)

有状态的对象生命周期不好管理,这种对象不可能做到每个task都去new一个。我们的策略是一个jvm内一个对象,同时在代码层面做好并发控制。类似下面。
20151227114511881.jpg (600×381)

在spark 1.3的后版本,引入了 kafka direct api试图来解决数据准确性问题,使用direct在一定程序能缓解准确性问题,但不可避免还会有一致性问题。为什么这样说呢?direct api 把kafka consumer offset的管理暴露出来(以前是异步存入zookeeper),当保存计算结果和保存offset在一个事务里,才能保证准确。

这个事务有两种手段做到,一是用mysql这种支持事务的数据库保存计算结果offset,一是自己实现两阶段提交。这两种方法在流式计算里实现的成本都很大。

其次direct api 还有性能问题,因为它到计算的时候才实际从kafka读数据,这对整体吞吐有很大影响。

要分享的就这些了,最后秀下我们线上的规模。flume + kafka + spark 8台高配机器,日均500亿条数据,峰值 80w tps。
20151227114526454.jpg (600×184)

通过对集群技术在七牛云存储中的应用案例分享的详细介绍,希望对你有所帮助,我们提供了更多和集群技术在七牛云存储中的应用案例分享类似的相关内容推荐,可以你更全面的帮助你解决问题。我们BTV85网址导航还提供网址收录服务,你可以注册提交你的网站信息,帮你引导搜索引擎蜘蛛,同时还有网站SEO优化交流微信群,里面很多SEO高手和大咖,加友链,可以免费进群。

集群技术在七牛云存储中的应用案例分享同类内容推荐:
  • 隐秘的档案末日抉择过关攻略分享

    隐秘的档案末日抉择是最新上线的关卡,这一关丧尸来了,妈妈被丧尸抓住,大家要做出正确选择。下面为大家带来隐秘 2023-08-04

  • 汉字找茬王帮他们完成合影攻略分享

    汉字找茬王帮他们完成合影怎么过?这一关是毕业合影,图中有三个人,大家要帮他们整理好形象才能拍照。下面为大家 2023-08-04

  • 文字来找茬石榴姐逆袭攻略分享

    文字来找茬石榴姐逆袭怎么过?这一关快递了一件礼服,大家需要帮石榴姐减肥成功穿上。相信很多玩家不清楚文字来 2023-08-04

  • 霓虹深渊无限黑海狂潮玩法攻略分享

    霓虹深渊无限黑海狂潮是新上线的多人肉鸽割草玩法,特工们将潜深入漆黑永寂之海,与特工小队背水一战。下面为大 2023-08-04

  • 隐秘的档案恐怖故事会攻略分享

    隐秘的档案恐怖故事会是一关解密关卡,主角受到邀请参加故事会,需要讲一个恐怖故事。以下是隐秘的档案恐怖故事 2023-08-03

  • 晴空双子氪金攻略分享

    晴空双子怎么氪金最划算?晴空双子是最新上线的二次元手游,开服期间有许多福利礼包,大家需要有选择性的购买。下 2023-08-03

  • 摇光录乱世公主无双塔通关阵容分享

    摇光录乱世公主无双塔共有月之幻境、日之幻境、星之幻境三种类型,敌人分别对应为月、日、星三种属性。下面为 2023-08-03

  • 文字玩出花生死救援3过关攻略分享

    文字玩出花生死救援3怎么过?这一关车辆停在了断桥上,非常危险,大家需要减少重量拯救所有人。下面为大家带来文 2023-08-03

  • 疯狂爆梗王考古通关攻略分享

    疯狂爆梗王考古是一个剧情关卡,三个人去探险考古,遇到了危险的事,大家需要做出正确选择。下面为大家带来疯狂爆 2023-08-03

  • 灵光文明礼包码大全分享

    灵光文明最新礼包码是什么?灵光文明是一款放置类割草游戏,核心玩法为养成+策略,每个角色各有特点。以下是灵光 2023-07-04

  •   admin

    注册时间:

    网站:0 个   小程序:0 个  文章:0 篇

    • 223084

      网站

    • 16453

      小程序

    • 25975

      文章

    • 239

      会员

    赶快注册账号,推广您的网站吧!
    热门网站
    最新入驻小程序

    小朋友猜谜语2021-05-24

    小朋友猜谜语是一款学习教育类的

    球比分2021-05-24

    球比分是一款体育运动类的小程序

    匠人名片2021-05-24

    匠人名片是一款交友社交类的小程

    知晴2021-05-24

    知晴是一款生活服务类的小程序应

    优惠券查询工具2021-05-24

    优惠券查询工具是一款其他工具类

    成语词典汉字拼音故事大全字典2021-05-24

    成语词典汉字拼音故事大全字典是