09 2018 档案

摘要:因为在一个复杂的系统里,可能你的依赖接口的性能很不稳定,有时候2ms,200ms,2s,如果你不对各种依赖接口的调用做超时的控制来给你的服务提供安全保护措施,那么很可能你的服务就被依赖服务的性能给拖死了,大量的接口调用很慢,大量线程就卡死了。 (1)execution.isolation.threa 阅读全文
posted @ 2018-09-24 20:08 大虾张三丰 阅读(3341) 评论(0) 推荐(1)
摘要:断路器工作原理 1、如果经过断路器的流量超过了一定的阈值,HystrixCommandProperties.circuitBreakerRequestVolumeThreshold() 举个例子,比如要求在10s内,经过断路器的流量必须达到20个(需要设置),这个时候Hystrix会开启断路器;如果 阅读全文
posted @ 2018-09-24 19:51 大虾张三丰 阅读(656) 评论(0) 推荐(0)
摘要:1.在一个请求执行之前,都必须先初始化一个request context 然后在请求结束之后,需要关闭request context 一般来说,在java web来的应用中,都是通过filter过滤器来实现的 filter: command: controller中: 阅读全文
posted @ 2018-09-24 19:19 大虾张三丰 阅读(529) 评论(0) 推荐(0)
摘要:一.执行流程 1.首先,tomcat接收访问请求,开启调用线程调用依赖服务。 2.在调用依赖服务之前,创建command 3.在执行command之前,查找hystrix的request cache,如果缓存有数据,直接返回,否则执行command调用依赖服务返回数据 4.断路器统计成功次数、异常次 阅读全文
posted @ 2018-09-24 18:36 大虾张三丰 阅读(230) 评论(0) 推荐(0)
摘要:1.Hystrix资源隔离的策略 线程池隔离 线程隔离技术不是去控制类似tomcat这种web容器的请求线程,它是控制的是tomcat内部的执行线程,线程池满后,可以保证的是,tomcat的执行线程不会因为依赖服务的延迟或故障被卡死,使tomcat的执行线程最多损失这个线程池的线程数量,tomcat 阅读全文
posted @ 2018-09-24 16:23 大虾张三丰 阅读(670) 评论(0) 推荐(0)
摘要:1.pom.xml 2、将商品服务接口进行command封装 hystrix进行资源隔离其实就是提供了一个抽象,叫做command,也就是说,如果要把对某一个依赖服务的所有调用请求,全部隔离在同一份资源池内;对这个依赖服务的所有调用请求,全部走这个资源池内的资源,不会去用其他的资源了,这个就叫做资源 阅读全文
posted @ 2018-09-24 14:27 大虾张三丰 阅读(383) 评论(0) 推荐(0)
摘要:hystrix介绍 Hystrix 供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。 hystrix历史 hystrix,高可用性保障的一个框架,是Netflix公司API团队从2011年开始做一些 阅读全文
posted @ 2018-09-20 00:51 大虾张三丰 阅读(216) 评论(0) 推荐(0)
摘要:1.if表达式 if表达式的定义:在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值。 例如,val age = 30; if (age > 18) 1 else 0 可以将if表达式赋予一个变量,例如,val isAdult = if (age > 18) 1 else 阅读全文
posted @ 2018-09-10 18:04 大虾张三丰 阅读(482) 评论(0) 推荐(0)
摘要:1.Scala与Java的关系 Scala与Java的关系非常紧密,因为Scala是基于Java虚拟机,也就是JVM的一门编程语言。所有Scala的代码,都需要经过编译为字节码,然后交由Java虚拟机来运行,所以Scala和Java是可以无缝互操作的。Scala可以任意调用Java的代码。 2.变量 阅读全文
posted @ 2018-09-10 17:46 大虾张三丰 阅读(197) 评论(0) 推荐(0)
摘要:(1)UVTopology (2)SourceSpout模拟数据 (3)UVFmtBolt 为一级bolt,进行格式转换 (4)UVDeepVisitBolt 二级bolt ,多线程统计每个访客对应的pv数 (5)UVSumBolt 三级bolt,单线程汇总pv和uv数据,并保存hbase 阅读全文
posted @ 2018-09-10 15:10 大虾张三丰 阅读(867) 评论(0) 推荐(0)
摘要:1.统计PV的流程图 2.Storm代码 模拟数据源: 一级bolt: 二级bolt: PVTopology主程序 阅读全文
posted @ 2018-09-07 11:07 大虾张三丰 阅读(231) 评论(0) 推荐(0)
摘要:1.流分组 stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个task 2.流分组策略 storm里面有6种类型的stream grouping。 (1).Shuffle Grouping 轮询,平均分配。随机派发stream里面的tuple,保证每个bol 阅读全文
posted @ 2018-09-07 11:06 大虾张三丰 阅读(205) 评论(0) 推荐(0)
摘要:1.什么是storm Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是 阅读全文
posted @ 2018-09-07 11:05 大虾张三丰 阅读(1378) 评论(0) 推荐(0)
摘要:分发层nginx,lua应用,会将商品id,商品店铺id,都转发到后端的应用nginx,在应用层nginx做如下操作:1、应用nginx的lua脚本接收到请求2、获取请求参数中的商品id,以及商品店铺id3、根据商品id和商品店铺id,在nginx本地缓存中尝试获取数据4、如果在nginx本地缓存中 阅读全文
posted @ 2018-09-07 11:04 大虾张三丰 阅读(729) 评论(0) 推荐(0)
摘要:一:业务场景 库存系统 二:数据库与缓存双写不一致问题分析 三:为什么高并发场景下,缓存会出现这个问题 四:数据库与缓存双写不一致问题的解决方案 五:高并发的场景下,该解决方案要注意的问题 (1)读请求长时阻塞 由于读请求进行了非常轻度的异步化,所以一定要注意读超时的问题,每个读请求必须在超时时间范 阅读全文
posted @ 2018-09-07 11:02 大虾张三丰 阅读(1765) 评论(0) 推荐(1)
摘要:1.nginx缓存命中率低在生产环境中,通常会部署多个nginx来提升系统的负载能力,如果nginx开启了本地缓存,对于请求A浏览商品详情页,第一次请求打在了nginxA上,拿到了数据缓存到nginxA本地,第二次请求就有可能打在nginxB上,这就造成nginx的缓存命中率很低的问题。2.如何提升 阅读全文
posted @ 2018-09-07 11:02 大虾张三丰 阅读(468) 评论(0) 推荐(0)
摘要:1、多级缓存架构 2.缓存中的数据分为两种 3.多级缓存架构的工作流程 4.多级缓存架构中每一层的意义 阅读全文
posted @ 2018-09-07 11:01 大虾张三丰 阅读(1719) 评论(0) 推荐(0)
摘要:本文来自 58的沈剑大神(https://www.cnblogs.com/codeon/p/8287591.html)本文主要讨论这么几个问题:(1)数据库主从延时为何会导致缓存数据不一致(2)优化思路与方案一、需求缘起 上一篇《缓存架构设计细节二三事》中有一个小优化点,在只有主库时,通过“串行化” 阅读全文
posted @ 2018-09-07 11:00 大虾张三丰 阅读(228) 评论(0) 推荐(0)
摘要:本文来自 58沈剑大神的文章本文主要讨论这么几个问题:(1)“缓存与数据库”需求缘起(2)“淘汰缓存”还是“更新缓存”(3)缓存和数据库的操作时序一、需求缘起 场景介绍 缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。例如对于用户的余额信息表account(u 阅读全文
posted @ 2018-09-07 10:59 大虾张三丰 阅读(5266) 评论(5) 推荐(0)
摘要:1.redis replication的核心机制 2.master持久化对于主从架构的安全保障的意义 3.Redis主从架构的核心原理 4.主从复制的断点续传 5.无磁盘化复制(增量复制的策略) 6.过期key处理 7.复制的完整流程 8.数据同步相关的核心机制(指的就是第一次slave连接msat 阅读全文
posted @ 2018-09-07 10:58 大虾张三丰 阅读(996) 评论(0) 推荐(1)
摘要:场景: 如果你不断的写入数据,当数据写入的量超过了redis能承受的范围之后,该怎么办?redis是会在数据达到一定程度之后,超过了一个最大的限度之后,就会将数据进行一定的清理,从内存中清理掉一些数据,只有清理掉一些数据之后,才能将新的数据写入内存中1、LRU算法概述 redis默认情况下就是使用L 阅读全文
posted @ 2018-09-07 10:58 大虾张三丰 阅读(1400) 评论(1) 推荐(0)
摘要:1.redis持久化的意义 redis故障恢复 在实际的生产环境中,很可能会遇到redis突然挂掉的情况,比如redis的进程死掉了、电缆被施工队挖了(支付宝例子)等等,总之一定会遇到各种奇葩的现象导致redis死掉,这时候放在redis内存中的数据就会全部丢失,这些数据可能服务很多的系统或者服务, 阅读全文
posted @ 2018-09-07 10:56 大虾张三丰 阅读(1291) 评论(0) 推荐(0)
摘要:缓存冷启动: 1.新系统第一次上线,此时在缓存里可能是没有数据的 2.系统在线上稳定运行着,但是突然间重要的redis缓存全盘崩溃了,而且不幸的是,数据全都无法找回来 系统第一次上线启动,系统在redis故障的情况下重新启动,对于一个流量很大的系统来说,在高并发的场景下,大量的请求很容易击穿数据库。 阅读全文
posted @ 2018-09-07 10:51 大虾张三丰 阅读(763) 评论(0) 推荐(1)
摘要:线程池中各个参数的含义 corePoolSize: 核心池的大小,这个参数跟线程池的实现原理有非常大的关系。**在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务**,除非调用了prestartAllCoreThreads()或者prestartCoreTh 阅读全文
posted @ 2018-09-06 17:04 大虾张三丰 阅读(173) 评论(0) 推荐(0)
摘要:1.等待多线程完成的CountDownLatch CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程 阅读全文
posted @ 2018-09-06 16:18 大虾张三丰 阅读(171) 评论(0) 推荐(0)