golang之context介绍

[TOC]一、Context作用context.Context是Go中定义的一个接口类型,从1.7版本中开始引入。其主要作用是在一次请求经过的所有协程或函数间传递取消信号及共享数据,以达到父协程对子协程的管理和控制的目的。需要注意的是context.Context的作用范围是一次请求的生命周期,即随着请求的产生而产生,随着本次请求的结束而结束。二、基本数据结构在context包中,context.Context的定义实际上是一个接口类型,该接口定义了获取上下文的Deadline的函数,根据key获取value值的函数、还有获取done通道的函数。type Context interfac...

GO 2024-01-26 PM 104℃ 0条

go并发之channel底层实现原理

[TOC]前言在开始本章节之前还是要反复唠叨一句话:Go channel设计模式是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。如果不理解的可以看之前的文章,本章节不再过多赘述。一、核心数据结构1.1 hchanGo语言channel是first-class的,意味着它可以被存储到变量中,可以作为参数传递给函数,也可以作为函数的返回值返回。作为Go语言的核心特征之一,虽然channel看上去很高端,但是其实channel仅仅就是一个数据结构而已,结构体定义如下:type hchan struct { qcount uint ...

GO 2024-01-19 PM 129℃ 0条

go并发之channel

[TOC]一、channel的发送与接收特性Go 语言中最常见的、也是经常被人提及的设计模式就是:不要通过共享内存的方式进行通信,而是应该通过通信的方式共享内存。在很多主流的编程语言中,多个线程传递数据的方式一般都是共享内存,为了解决线程竞争,我们需要限制同一时间能够读写这些变量的线程数量,然而这与 Go 语言鼓励的设计并不相同。下面是多线程之间使用共享内存实现传递数据图示。虽然我们在 Go 语言中也能使用共享内存加互斥锁进行通信,但是 Go 语言提供了一种不同的并发模型,即通信顺序进程(Communicating sequential processes,CSP)。Goroutine ...

GO 2024-01-18 PM 120℃ 0条

HBase过滤器介绍

[TOC]前言本次使用的是 HBase 2.5.5 版本,同时本篇是基于上一篇: Hbase之JavaAPI详细介绍的基础上整理的,如果需要运行演示,请先阅读上一篇内容。一、HBase过滤器简介HBase 提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predicate push down)。这样可以保证过滤掉的数据不会被传送到客户端,从而减轻网络传输和客户端处理的压力。二、过滤器基础2.1 Filter接口和FilterBase抽象类Filter 接口中定义了过滤器的基本方法,Fil...

大数据 2023-09-13 PM 637℃ 1条

Hbase之JavaAPI详细介绍

[TOC]前言HBase本身是基于Java开发的,因此,也提供了一整套的Java API开发接口,整个接口方法非常完善,包括命名空间管理、表级管理、列族级管理、数据(增删改查、导入、导出)、集群调度、状态监测、集群优化等。一、常用java API介绍主要的Hbase API类和数据模型之间的的对应的关系1.1 Adminorg.apache.hadoop.hbase.client.Admin说明:Admin为Java接口类型,不可以直接用该接口实例化一个对象,而是必须调用Connection.getAdmin()方法,返回一个Admin的子对象,然后用这个Admin接口来操作返回的子对象...

大数据 2023-09-06 PM 563℃ 0条

IDEA编译运行Spark源码

前言环境准备IDEA 2022.3Scala 2.12.15maven 3.6.3JDK 1.8一、下载Spark源码1.1 官网地址Spark官网地址:https://spark.apache.org/downloads.html本次下载的源码版本为:Spark 3.2.31.2 下载之前版本Spark1.3 选择Spark 3.2.3版本下载地址:https://archive.apache.org/dist/spark/1.4 下载源码文件选择下载的源码文件spark-3.2.3.tgz1.5 将源码文件解压到对应目录二、IDEA插件安装编译Spark源码需要安装Scala和ant...

大数据 2023-04-04 PM 2518℃ 2条

05.Sentinel热点key限流和系统规则

[TOC]一、概述官网地址:热点参数限流何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的Top K数据,并对其访问进行限制。比如:商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制热点参数限制会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限制。热点参数限流可以看作是一种特殊的流量控制,仅对包含热点参数的资源调用生效。Sentinel 利用 LRU 策略统计最近最常访问的热点参数,结合令牌桶算法来进行参数级别的流控。热点参数限流支持集群模式。...

Java 2023-01-17 PM 1842℃ 0条

04.Sentinel降级规则

[TOC]前言本文档针对 Sentinel 1.8.0 及以上版本。1.8.0 版本对熔断降级特性进行了全新的改进升级。官网地址:熔断降级一、概述除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方API等。例如,支付的时候,可能需要远程调用银联提供的 API;查询某个商品的价格,可能需要进行数据库查询。然而,这个被依赖服务的稳定性是不能保证的。如果依赖的服务出现了不稳定的情况,请求的响应时间变长,那么调用服务的方法的响应时间也会变长,线程会产生堆积,最终可能耗尽业务自身的线程池,服务...

Java 2023-01-17 PM 1324℃ 0条

03.Sentinel流控规则

[TOC]一、概述流量控制(flow control),其原理是监控应用流量的 QPS 或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。流量限制控制规则,分为:流控模式和流控效果各选项含义:资源名:唯一名称,默认请求路径针对来源:Sentinel可以针对调用者进行限流,填写微服务名,默认default(不区分来源)阈值类型/单机阈值:QPS(每秒钟的请求数量):当调用该API的QPS达到阈值的时候,进行限流线程数:当调用该API的线程数量达到阈值的时候,进行限流是否集群:当前不需要集群流控模式:直接:API达到限流条件时,直接限流...

Java 2023-01-14 PM 971℃ 0条

02.Sentinel初始化演示工程

[TOC]前言准备环境:JDK 1.8nacos 2.1.0sentinel-dashboard 1.8.5本次演示都是在本地windows系统上进行,只是入门级。1、启动Nacos服务windows系统Nacos启动命令(nacos服务bin目录下)startup.cmd -m standalone2、新建Module名称:sentinel-service-demo013、引入pom依赖基本上nacos和sentinel都是一起配置<?xml version="1.0" encoding="UTF-8"?> <project x...

Java 2023-01-14 PM 890℃ 0条