缓存服务器

【转】Spark History Server 架构原理介绍

时间秒杀一切 提交于 2019-12-05 18:22:08
【From】 https://blog.csdn.net/u013332124/article/details/88350345 Spark History Server 是spark内置的一个http服务,通过sbin/sbin/start-history-server.sh启动。History Server启动后,会监听一个端口,同时启动两个定时任务线程,分别用来解析eventLog日志文件和清理过期的eventLog日志文件。 Spark History Server启动后,我们可以直接在浏览器输入 http://ip:port 访问。一般默认端口是18080 一、eventLog日志文件以及相关参数 eventLog日志文件介绍 eventLog需要将配置spark.eventLog.enabled设置为true来开启,默认是关闭的。 开启这个配置后,当我们提交spark job到集群中运行时,之后spark job在运行过程中会不断的一些运行信息写到相关的日志文件中。具体的eventLog存放目录由配置spark.eventLog.dir决定的。 Spark job在运行中,会调用EventLoggingListener#logEvent()来输出eventLog内容。spark代码中定义了各种类型的事件,一旦某个事件触发,就会构造一个类型的Event

redis作为缓存, 缓存击穿,缓存雪崩,缓存穿透

我怕爱的太早我们不能终老 提交于 2019-12-05 17:44:10
  在实际项目中,MySQL数据库服务器有时会位于另外一台主机,需要通过网络来访问数据库;即使应用程序与MySQL数据库在同一个主机中,访问MySQL也涉及到磁盘IO操作(MySQL也有一些数据预读技术,能够减少磁盘IO读写,此部分后续继续研究),总之,直接从MySQL中读取数据不如直接从内存中读取数据来的效率高。   为了提高数据库访问效率,人们采用了各种各样的方法,其中方法之一就是使用一个给予内存的缓存系统放置在数据库和应用程序之间。   在查找数据的时候,首先从内存中查找,如果找到则使用,如果没有找到,那么再真正访问数据库。这种方法在一些场景下(例如:频繁查找相同数据)能够提高系统的整体效率。   采用redis nosql数据库作为Mysql数据库的缓存,在查找的时候,首先查找redis缓存,如果找到则返回结果;如果在redis中没有找到,那么查找Mysql数据库,找到的话则返回结果并且更新redis;如果没有找到则返回空。对于写入的情况,直接写入mysql数据库。 缓存穿透   缓存穿透,是指查询一个数据库一定不存在的数据。   正常的使用缓存流程大致是,数据查询先进行缓存查询,如果key不存在或者key已经过期,再对数据库进行查询,并把查询到的对象,放进缓存。如果数据库查询对象为空,则不放进缓存。 想象一下这个情况,如果传入的参数为-1,会是怎么样?这个-1

【转】Redis相关

China☆狼群 提交于 2019-12-05 16:27:16
1. 什么是redis? Redis 是一个使用 C 语言写成的,开源的基于内存的高性能key-value数据库。 Redis的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等多种数据结构组成。 回到顶部 2. Redis的特性 速度快 速度快的原因: - Redis所有数据都放在内存中 - Redis是C语言实现 - Redis使用了单线程的架构,预防了多线程可能产生的竞争问题 基于键值对的数据结构服务器 Redis中的值不仅可以是字符串,Redis的值可以是由string(字符串)、hash(哈希)、list(列表)、set(集合)、zset(有序集合)、Bitmaps(位图)等多种数据结构组成,便于许多应用场景的开发并且提高了开发效率。 丰富的共鞥 提供了键过期功能,可以用来实现缓存 提供了发布/订阅功能,可以用来实现消息系统 支持Lua脚本功能,可以利用Lua创造出新的Redis命令 提供了简单的事务功能,能在一定程度上保证事务特性 提供了流水线(Pipeline)功能,减少了网络开销 简单稳定 客户端语言多 持久化 RDB(快照) AOF(日志的形式) 4.0版本开始支持RDB和AOF混用的方式聊进行持久化 主从复制 高可用和分布式 高可用实现:Redis Sentinel 分布式实现

【转】Redis常见面试题

狂风中的少年 提交于 2019-12-05 16:26:10
介绍:Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。 传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP 定理。 Github 源码:https://github.com/antirez/redis Redis 官网:https://redis.io/ Redis支持的数据类型? String字符串: 格式: set key value string类型是二进制安全的。意思是redis的string可以包含任何数据。比如jpg图片或者序列化的对象 。 string类型是Redis最基本的数据类型,一个键最大能存储512MB。 Hash(哈希) 格式: hmset name key1 value1 key2 value2 Redis hash 是一个键值(key=>value)对集合。 Redis hash是一个string类型的field和value的映射表,hash特别适合用于存储对象。 List(列表) Redis 列表是简单的字符串列表,按照插入顺序排序。你可以添加一个元素到列表的头部(左边)或者尾部(右边) 格式:

nodejs

梦想与她 提交于 2019-12-05 16:11:22
进程是操作系统分配资源和调度任务的基本单位 操作系统分配资源 -> 由进程到线程 进程是操作系统分配资源的最小单位 线程是进程中的工作单元 nodejs 单进程 单线程 某个操作如果需要大量消耗cup的情况下 后续的操作都需要等待。 nodejs : 单线程 非阻塞I/O 优点: 节约内存 节约上下文切换的时间 锁的问题 ,并发资源的处理( java里面的概念 并发的时候对资源加锁限制其他进程对其的访问 ) 缺点 : 一个线程崩了整个程序就挂了 多线程是如何实现的? 并不是真正在同一时间节点执行多个任务,而是通过非常快速的切换时间片来实现的。 浏览器里的UI线程跟js线程是公用一个线程的 webworker 不能改变js 单线程的本质 完全受主线程的控制 不能操作dom 堆heep 栈 stack 堆里面存 对象 栈里面存 变量 http请求是单独的线程 异步任务是成功后才方放到任务队列的 nodejs中的事件循环 LIBUV是 nodejs 中的异步I/O库 线程池加同步io 模拟异步io 什么叫同步和异步 ? 同步和异步关注的是消息的通知机制 去餐馆点饮料有 立马给你 ->同步 点餐没有 花时间做 -> 异步 什么叫阻塞和非阻塞? 等待取餐的时候什么都不做 阻塞 等待取餐时候看玩儿游戏 非阻塞 阻塞和非阻塞是 程序在等待结果时的状态 同步和异步取决于被调用者

【架构】秒杀系统 ~ 优化之路

眉间皱痕 提交于 2019-12-05 15:43:53
来源:W3CSCHOOL 架构师之路 一、秒杀业务为什么难做 1)im系统,例如qq或者微博,每个人都读自己的数据(好友列表、群列表、个人信息); 2)微博系统,每个人读你关注的人的数据,一个人读多个人的数据; 3)秒杀系统,库存只有一份,所有人会在集中的时间读和写这些数据,多个人读一个数据。 例如:小米手机每周二的秒杀,可能手机只有1万部,但瞬时进入的流量可能是几百几千万。 又例如:12306抢票,票是有限的,库存一份,瞬时流量非常多,都读相同的库存。 读写冲突,锁非常严重,这是秒杀业务难的地方 。那我们怎么优化秒杀业务的架构呢? 二、优化方向 优化方向有两个(今天就讲这两个点): (1) 将请求尽量拦截在系统上游 ( 不要让锁冲突落到数据库上去)。传统秒杀系统之所以挂,请求都压倒了后端数据层,数据读写锁冲突严重,并发高响应慢,几乎所有请求都超时,流量虽大,下单成功的有效流量甚小。以12306为例,一趟火车其实只有2000张票,200w个人来买,基本没有人能买成功,请求有效率为0。 (2) 充分利用缓存 ,秒杀买票,这是一个典型的读多写少的应用场景,大部分请求是车次查询,票查询,下单和支付才是写请求。一趟火车其实只有2000张票,200w个人来买,最多2000个人下单成功,其他人都是查询库存,写比例只有0.1%,读比例占99.9%,非常适合使用缓存来优化。好,后续讲讲怎么个

HTTP状态码详解

早过忘川 提交于 2019-12-05 15:32:21
HTTP状态码详解 通知:1XX 1XX系列响应代码仅在与HTTP服务器沟通时使用。 100 Continue 客户端应当继续发送请求。这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝。客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应。服务器必须在请求完成后向客户端发送一个最终响应。 101 Switching Protocols 服务器已经理解了客户端的请求,并将通过Upgrade 消息头通知客户端采用不同的协议来完成这个请求。在发送完这个响应最后的空行后,服务器将会切换到在Upgrade 消息头中定义的那些协议。   只有在切换新的协议更有好处的时候才应该采取类似措施。例如,切换到新的HTTP 版本比旧版本更有优势,或者切换到一个实时且同步的协议以传送利用此类特性的资源。 102 Processing 由WebDAV(RFC 2518)扩展的状态码,代表处理将被继续执行。 成功:2XX 2XX系列响应代码表明操作成功了。 200 OK 请求已成功,请求所希望的响应头或数据体将随此响应返回。 201 Created 请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。假如需要的资源无法及时建立的话,应当返回 '202 Accepted'。 202 Accepted 服务器已接受请求

【并发那些事】可见性问题的万恶之源

删除回忆录丶 提交于 2019-12-05 15:18:36
【并发那些事】可见性问题的万恶之源 硬件工程师为均衡 CPU 与 缓存之间的速度差异,特意加的 CPU 缓存,竟然在多核的场景下阴差阳错的成为了并发可见性问题的万恶之源!( 本文过长,如果不是特别无聊,看到这里就可以了 ) 前言 还记得那些年,你写的那些多线程 BUG 吗?明明只想得到个 1 + 1 = 2 的预期,结果他有时候得到 1,有时候得到 3,但偏偏有时候他也会返回正确的 2。明明在本地运行的好好的,一上线一堆诡异的 BUG。你一遍一遍的检查代码,一行一行 debug,结果无功而返。 变量为何突然变异?代码为何乱序运行?条件为何形同虚设?欢迎收看今天的《走进科学》之半夜。。。哦,不对,欢迎阅读今天的《并发那些事》之可见性问题的万恶之源。就像上面说的,我们在写并发程序时,经常会出现超出我们认识与直觉的问题,而按我们的以往的经验,很难去察觉到他的问题所在。而又因为我们不了解他发生的诱因,即使我们按照书上的方案解决了,但是下次还是会出现。所以本文的主旨并不是解决问题的术,而是解决问题的道。一起来探究多线程问题的根源。 首先揭开谜底,大多数并发问题的发生都是这三个问题导致的, 可见性问题、原子性问题、有序性问题 。那么又是什么导致这三个问题的出现呢?本文将一步步解析可见性问题出现的原因。 核心矛盾 众所周知,电脑由很多的部件组成。其中最最最重要的有三个,它们分别是 CPU 、内存

node 中的可读 可写流

家住魔仙堡 提交于 2019-12-05 15:04:39
在 node 中流是最核心的一部分, 也是相对较难的一部分, node 中大量的 api 都与 流相关,通过一些学习, 对流的概念稍稍的了解了一点, 本文将梳理一下自己的理解,不对之处还望指正。 stream 流是一组有序的,有起点和终点的字节数据传输手段, 它不关心文件的整体内容,只关注是否从文件中读到了数据,以及读到数据之后的处理。 node 中的很多对象都实现了流。 比如 HTTP 服务器中的 request 和 response 对象都是流, node 的 api process.stdin process.stdout 等 node 中 有四种基本的流类型 Readable 可读流,用来读取数据 Writeable 可写流, 用来写入数据 Duplex 可读可写的流(双工流) Transform 在读写过程中可以修改和变换数据的 Duplex 流 除了以上四种基本的流类型之外, 在 node 环境中我们还可以自定义流 本文将阐述 可读流 与 可写流 的一些基础概念: 可读流 (createReadStream) 创建一个可读流 fs.createReadStream(path, [options]); path: 读取文件的路径 options: flags 打开文件要做的操作, 默认为 'r ' encoding 默认为 null start 开始读取的索引位置 end

redis的使用(下)

妖精的绣舞 提交于 2019-12-05 13:47:34
Jedis的使用?   Jedis就是redis提供的Java客户端工具(在Java代码中,直接通过jedis就可以操作redis数据库)   加载jedis依赖   连接redis服务器(创建jedis对象;相当于jdbc的connection、mybatis的sqlsession)   通过jedis对象中的方法完成redis的操作(jedis对象中的方法名和redis中的命令名是一样)   把jedis封装成工具类:获取jedis对象;关闭jedis对象      序列化:     把Java对象转换成字节数据/json串     通过commons-lang3提供的工具类/json解析工具   反序列化     把字节数组/json串转换为Java对象 redis作为缓存服务器   A:缓存     缓存就是一个内存区域     缓存:把sql语句执行之后的结果存储在内存中;如果发送同样的sql语句获取数据,就直接从缓存中获取数据,而不去操作数据库     缓存中不适应存储笔记重要的事务:比如财务     缓存:是为了提高检索效率     程序一旦执行了增删改操作,就会把缓存清空==》防止脏读          mybaitis中提供了缓存支持       一级缓存:sqlSession级别的缓存:用同一个sqlSession对象,执行多次相同的查询操作