自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(25)
  • 收藏
  • 关注

转载 七.Hystrix Timeout机制

因为在一个复杂的系统里,可能你的依赖接口的性能很不稳定,有时候2ms,200ms,2s,如果你不对各种依赖接口的调用做超时的控制来给你的服务提供安全保护措施,那么很可能你的服务就被依赖服务的性能给拖死了,大量的接口调用很慢,大量线程就卡死了。(1)execution.isolation.thread.timeoutInMilliseconds  手动设置timeout时长,一个c...

2018-09-24 20:08:00 244

转载 六.Hystrix断路器

断路器工作原理1、如果经过断路器的流量超过了一定的阈值,HystrixCommandProperties.circuitBreakerRequestVolumeThreshold()  举个例子,比如要求在10s内,经过断路器的流量必须达到20个(需要设置),这个时候Hystrix会开启断路器;如果在10s内,经过断路器的流量才10个,那么根本不会去判断要不要断路。2、如果断...

2018-09-24 19:51:00 166

转载 五.Hystrix请求缓存(request cache)

1.在一个请求执行之前,都必须先初始化一个request contextHystrixRequestContext context = HystrixRequestContext.initializeContext();然后在请求结束之后,需要关闭request contextcontext.shutdown();一般来说,在java web来的应用中,都...

2018-09-24 19:19:00 139

转载 四.Hystrix执行流程

一.执行流程  1.首先,tomcat接收访问请求,开启调用线程调用依赖服务。  2.在调用依赖服务之前,创建command  3.在执行command之前,查找hystrix的request cache,如果缓存有数据,直接返回,否则执行command调用依赖服务返回数据  4.断路器统计成功次数、异常次数,如果打开了断路设置,直接降级  5.如果没打开断路设置,判...

2018-09-24 18:36:00 134

转载 三.Hystrix资源隔离

1.Hystrix资源隔离的策略 线程池隔离  线程隔离技术不是去控制类似tomcat这种web容器的请求线程,它是控制的是tomcat内部的执行线程,线程池满后,可以保证的是,tomcat的执行线程不会因为依赖服务的延迟或故障被卡死,使tomcat的执行线程最多损失这个线程池的线程数量,tomcat的其他线程不会卡死,会立即返回做其他的事情。  整个流程就是:  to...

2018-09-24 16:23:00 151

转载 二.Hystrix开发实践入门

1.pom.xml<dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</artifactId> <version>1.5.12</version></dep...

2018-09-24 14:27:00 99

转载 一.走进Hystrix

hystrix介绍  Hystrix 供分布式系统使用,提供延迟和容错功能,隔离远程系统、访问和第三方程序库的访问点,防止级联失败,保证复杂的分布系统在面临不可避免的失败时,仍能有其弹性。hystrix历史  hystrix,高可用性保障的一个框架,是Netflix公司API团队从2011年开始做一些提升系统可用性和稳定性的工作,Hystrix就是从那时候开始发展出来的。时...

2018-09-20 00:51:00 82

转载 Scala条件控制与循环

1.if表达式  if表达式的定义:在Scala中,if表达式是有值的,就是if或者else中最后一行语句返回的值。  例如,val age = 30; if (age > 18) 1 else 0  可以将if表达式赋予一个变量,例如,val isAdult = if (age > 18) 1 else 0  另外一种写法,var isAdult = -1; if(ag...

2018-09-10 18:04:00 62

转载 Scala基础语法

1.Scala与Java的关系  Scala与Java的关系非常紧密,因为Scala是基于Java虚拟机,也就是JVM的一门编程语言。所有Scala的代码,都需要经过编译为字节码,然后交由Java虚拟机来运行,所以Scala和Java是可以无缝互操作的。Scala可以任意调用Java的代码。2.变量声明   声明val常量:可以声明val变量来存放表达式的计算结果。   ...

2018-09-10 17:46:00 60

转载 Storm计算网站UV(去重计算模式)

(1)UVTopologyimport java.util.HashMap;import java.util.Map; import backtype.storm.Config;import backtype.storm.LocalCluster;import backtype.storm.topology.TopologyBuilder;import b...

2018-09-10 15:10:00 338

转载 Storm计算网站PV

1.统计PV的流程图2.Storm代码模拟数据源:import java.io.File;import java.io.IOException;import java.util.Collection;import java.util.List;import java.util.Map; import org.apache.co...

2018-09-07 11:07:00 131

转载 storm的并行度和流分组

1.流分组 stream grouping就是用来定义一个stream应该如果分配给Bolts上面的多个task2.流分组策略 storm里面有6种类型的stream grouping。 (1).Shuffle Grouping 轮询,平均分配。随机派发stream里面的tuple,保证每个bolt接收到的tu...

2018-09-07 11:06:00 160

转载 storm简介、原理、概念

1.什么是storm Storm是Twitter开源的分布式实时大数据处理框架,被业界称为实时版Hadoop。随着越来越多的场景对Hadoop的MapReduce高延迟无法容忍,比如网站统计、推荐系统、预警系统、金融系统(高频交易、股票)等等,大数据实时处理解决方案(流计算)的应用日趋广泛,目前已是分布式技术领域最新爆发点,而Storm更是流计算技术中的佼佼者和主流。...

2018-09-07 11:05:00 155

转载 基于nginx+lua+redis实现的多级缓存架构存取的控制逻辑

分发层nginx,lua应用,会将商品id,商品店铺id,都转发到后端的应用nginx,在应用层nginx做如下操作:1、应用nginx的lua脚本接收到请求2、获取请求参数中的商品id,以及商品店铺id3、根据商品id和商品店铺id,在nginx本地缓存中尝试获取数据4、如果在nginx本地缓存中没有获取到数据,那么就到redis分布式缓存中获取数据,如果获取到了数据,还要设置到ngi...

2018-09-07 11:04:00 297

转载 基于“分发层+应用层”双层nginx架构提升缓存命中率方案

1.nginx缓存命中率低在生产环境中,通常会部署多个nginx来提升系统的负载能力,如果nginx开启了本地缓存,对于请求A浏览商品详情页,第一次请求打在了nginxA上,拿到了数据缓存到nginxA本地,第二次请求就有可能打在nginxB上,这就造成nginx的缓存命中率很低的问题。2.如何提升缓存命中率采用分发层+应用层,双层nginx,分发层nginx,负责流量分发的逻辑和策略,...

2018-09-07 11:02:00 153

转载 高并发场景下缓存+数据库双写不一致问题分析和解决方案设计

一:业务场景---库存系统库存可能会修改,每次修改都要去更新这个缓存(redis)数据; 每次库存的数据在缓存中一旦过期,或者是被清理掉了,前端的nginx服务都会发送请求给库存服务,去获取相应的数据实际上的处理流程没有这么的简单,这里,其实就涉及到了一个问题,数据库与缓存双写,数据不一致的问题我们的缓存模式采用cache aside pattern,所以对于修改库存,我...

2018-09-07 11:02:00 390

转载 基于Nginx+Redis+jvm堆缓存的多级缓存架构设计

1、多级缓存架构采用三级缓存:nginx本地缓存+redis分布式缓存+tomcat堆缓存的多级缓存架构2.缓存中的数据分为两种(1).时效性要求非常高的数据:库存、价格等 一般来说,显示的库存,都是时效性要求会相对高一些,因为随着商品的不断的交易,库存会不断的变化。当然,我们就希望当库存变化的时候,尽可能更快将库存显示到页面上去,而不是说等了很长时间,库存才反...

2018-09-07 11:01:00 394

转载 主从DB与cache一致性

本文来自---58的沈剑大神(https://www.cnblogs.com/codeon/p/8287591.html)本文主要讨论这么几个问题:(1)数据库主从延时为何会导致缓存数据不一致(2)优化思路与方案一、需求缘起  上一篇《缓存架构设计细节二三事》中有一个小优化点,在只有主库时,通过“串行化”的思路可以解决缓存与数据库中数据不一致。引发大家热烈讨论的点是“在主从同步,读写分离...

2018-09-07 11:00:00 201

转载 Cache Aside Pattern(缓存模式)

本文来自-----58沈剑大神的文章本文主要讨论这么几个问题:(1)“缓存与数据库”需求缘起(2)“淘汰缓存”还是“更新缓存”(3)缓存和数据库的操作时序一、需求缘起  场景介绍  缓存是一种提高系统读性能的常见技术,对于读多写少的应用场景,我们经常使用缓存来进行优化。例如对于用户的余额信息表account(uid, money),业务上的需求是:  (1)查询用户的余额,SELECT ...

2018-09-07 10:59:00 256

转载 Redis主从架构、读写分离

1.redis replication的核心机制(1).redis采用异步方式复制数据到slave节点,不过redis 2.8开始,slave node会周期性地确认自己每次复制的数据量(2).一个master node是可以配置多个slave node的(3).slave node也可以连接其他的slave node(4).slave node做复制的时候,是不会阻止 ...

2018-09-07 10:58:00 88

转载 Redis的LRU缓存清除算法以及相关配置使用

场景:  如果你不断的写入数据,当数据写入的量超过了redis能承受的范围之后,该怎么办?redis是会在数据达到一定程度之后,超过了一个最大的限度之后,就会将数据进行一定的清理,从内存中清理掉一些数据,只有清理掉一些数据之后,才能将新的数据写入内存中1、LRU算法概述  redis默认情况下就是使用LRU策略的,因为内存是有限的,但是如果你不断地往redis里面写入数据,那肯定是没法存...

2018-09-07 10:58:00 305

转载 Redis数据持久化、数据备份、数据的故障恢复

1.redis持久化的意义----redis故障恢复  在实际的生产环境中,很可能会遇到redis突然挂掉的情况,比如redis的进程死掉了、电缆被施工队挖了(支付宝例子)等等,总之一定会遇到各种奇葩的现象导致redis死掉,这时候放在redis内存中的数据就会全部丢失,这些数据可能服务很多的系统或者服务,当然,我们可以重新启动redis,重启之后,如果redis没有持久化,redis中...

2018-09-07 10:56:00 112

转载 缓存冷启动问题

缓存冷启动:  1.新系统第一次上线,此时在缓存里可能是没有数据的  2.系统在线上稳定运行着,但是突然间重要的redis缓存全盘崩溃了,而且不幸的是,数据全都无法找回来  系统第一次上线启动,系统在redis故障的情况下重新启动,对于一个流量很大的系统来说,在高并发的场景下,大量的请求很容易击穿数据库。缓存预热(采用storm、kafka)  由于缓存冷启动,...

2018-09-07 10:51:00 281

转载 深入理解java中的线程池

线程池中各个参数的含义corePoolSize:核心池的大小,这个参数跟线程池的实现原理有非常大的关系。**在创建了线程池后,默认情况下,线程池中并没有任何线程,而是等待有任务到来才创建线程去执行任务**,除非调用了prestartAllCoreThreads()或者prestartCoreThread()方法,从这2个方法的名字就可以看出,是预创建线程的意思,即在没有任...

2018-09-06 17:04:00 72

转载 java中的并发工具类(CountDownLatch 、CyclicBarrier )

1.等待多线程完成的CountDownLatch   CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,起到线程之间的通信(而不是用作互斥的作用)。CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所...

2018-09-06 16:18:00 82

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除