专栏首页小勇DW3亿级流量场景下,大型缓存架构的虚拟机环境搭建[2]

亿级流量场景下,大型缓存架构的虚拟机环境搭建[2]

承接之前的博:亿级流量场景下,大型缓存架构的虚拟机环境搭建

续写本博客:

************** start:

  接下来,我们是要讲解商品详情页缓存架构,缓存预热和解决方案,缓存预热可能导致整个系统崩溃的问题以及解决方案;

  缓存--->热: 预热;热数据

  解决方案中和架构设计中,会引入大数据的实时计算技术---> storm;

  为什么引入这storm,必须是storm吗,我们后面面去讲解那个解决方案的时候再说;

为什么引入storm:

  因为一些热点数据相关的一些实时处理方案,比如快速预热,热点数据的实时感知以及快速降级,都会用到storm,

因为我们可能需要实时的去计算出热点缓存数据,实时计算,亿级流量,高并发,大量的请求处理。这个时候你要做一些实时计算,

那么必须涉及到分布式一些技术,分布式技术才能处理高并发,大量的请求,目前在计算的领域,最成熟的大数据技术就是storm;storm分布式的大数据实时计算技术/系统;

  java工程师跟storm之间的关系是什么呢?

大公司的java工程师都会用到一些大数据的技术:比如:storm,hbase,zookeeper,或者hive,spark等。

  Storm: 实时缓存热点数据统计--->缓存预热,缓存热点数据自动降级;

  Hive:Hadoop生态栈中做数据仓库的系统,高并发访问下,海量请求日志的批量统计分析,日报,月报,周报,接口调用情况等;比如有一些公司将海量的请求日志达到hive里边

做离线分析,然后反过来优化自己的系统。

  Spark:离线批量数据处理,比如从DB中一次性批量处理几亿的数据,清洗和处理后写入Redis中提供后续系统使用;大型互联网公司的用户相关数据等。

  zookeeper:分布式协调,分布式锁。分布式选举-->高可用HA架构,轻量级元数据存储。

  HBase:海量数据的在线存储和简单查询,替代mysql的分库分表,提供更好的伸缩性。

 storm,说句实话,在做热数据这块,如果要做复杂的热数据的统计和分析,亿流量,高并发的场景下,我还真觉得,最合适的技术就是storm,没有其他

缓存架构,热数据先关的架构设计,热数据相关的架构中最重要的唯一的可选技术。

************************入门介绍*********************************

storm的特点是什么?

(1)支撑各种实时类的项目场景:实时处理消息以及更新数据库,基于最基础的实时计算语义和API(实时数据处理领域);对实时的数据流持续的进行查询或计算,同时将最新的计算结果持续的推送给客户端展示,同样基于最基础的实时计算语义和API(实时数据分析领域);对耗时的查询进行并行化,基于DRPC,即分布式RPC调用,单表30天数据,并行化,每个进程查询一天数据,最后组装结果

storm做各种实时类的项目都ok

(2)高度的可伸缩性:如果要扩容,直接加机器,调整storm计算作业的并行度就可以了,storm会自动部署更多的进程和线程到其他的机器上去,无缝快速扩容

扩容起来,超方便

(3)数据不丢失的保证:storm的消息可靠机制开启后,可以保证一条数据都不丢

数据不丢失,也不重复计算

(4)超强的健壮性:从历史经验来看,storm比hadoop、spark等大数据类系统,健壮的多的多,因为元数据全部放zookeeper,不在内存中,随便挂都不要紧

特别的健壮,稳定性和可用性很高

(5)使用的便捷性:核心语义非常的简单,开发起来效率很高

用起来很简单,开发API还是很简单的

二、Storm的集群架构以及核心概念

1、Storm的集群架构

Nimbus,Supervisor,ZooKeeper,Worker,Executor,Task

2、Storm的核心概念

Topology,Spout,Bolt,Tuple,Stream

拓扑:务虚的一个概念

Spout:数据源的一个代码组件,就是我们可以实现一个spout接口,写一个java类,在这个spout代码中,我们可以自己尝试去数据源获取数据,比如说从kafka中消费数据

bolt:一个业务处理的代码组件,spout会将数据传送给bolt,各种bolt还可以串联成一个计算链条,java类实现了一个bolt接口,一堆spout+bolt,就会组成一个topology,就是一个拓扑,实时计算作业,spout+bolt,一个拓扑涵盖数据源获取/生产+数据处理的所有的代码逻辑,topology

tuple:就是一条数据,每条数据都会被封装在tuple中,在多个spout和bolt之间传递

stream:就是一个流,务虚的一个概念,抽象的概念,源源不断过来的tuple,就组成了一条数据流

 什么是并行度?什么是流分组?

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • java错误-java.lang.NoClassDefFoundError: org/aspectj/util/PartialOrder$PartialComparable

    升级本地的aspectjweaver的版本。我们之前的是1.8.0,使用jdk8报错。升级aspectjweaver为1.8.13版本就好了。

    挑战者
  • 聊聊flink的ConnectionManager

    flink-release-1.7.2/flink-runtime/src/main/java/org/apache/flink/runtime/io/netw...

    codecraft
  • 笔记——安卓消息机制Handler(十六)

    1、定义:Android的消息机制主要是指Handler的运行机制,Handler并不是专门用于更新UI的,它只是常被开发者用来更新UI,是同一个进程中线程间的...

    紫兮木溪
  • Hook技术

    当调用Activity的startActivity方法时,最后会调用 mInstrumentation的execStartActivity方法来完成Activi...

    用户1205080
  • ServiceFramework作为Java Web框架都有哪些不错的设计

    最近需要开发一个纯API的项目,mlsql-cluster,从无到有,到最后完整的proxy功能开发完毕,只花了四个小时不到,自己不尽小感叹了一把 Servic...

    用户2936994
  • 使用ArrayList时代码内部发生了什么(jdk1.7)?

    ArrayList(这里的ArrayList是基于jdk1.7)是在项目中经常使用的集合类,例如我们从数据库中查询出一组数据。这篇文章不去剖析它的继承和实现,只...

    云枭
  • 为什么C语言不会过时?

    来源:赵岩老师的个人网站:http://zhaoyan.website/blog/index.php/2017/07/15/future/

    帅地
  • JavaScript-For 循环和 While 循环

    一个for循环会一直重复执行,直到指定的循环条件为fasle。 JavaScript的for循环和Java与C的for循环是很相似的。

    WEBING
  • 使用Spring的@Async创建异步方法

    在开发系统的过程中,通常会考虑到系统的性能问题,提升系统性能的一个重要思想就是“串行”改“并行”。说起“并行”自然离不开“异步”,今天我们就来聊聊如何使用Spr...

    小忽悠
  • Netty 之 AbstractChannel 和 AbstractNioChannel 源码分析

    channel 是 netty 网络 IO 操作抽象出来的一个接口,主要功能有:网络IO的读写,客户端发起连接、主动关闭连接,链路关闭,获取通信双方的网络地址等...

    java404

扫码关注云+社区

领取腾讯云代金券