自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(64)
  • 收藏
  • 关注

原创 go ast语义分析实现指标计算器

首先我们要知道AST是什么(Abstract Syntax Tree,AST),简称为语法树,是go语言源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。

2024-05-23 12:23:19 640

原创 rust 学习--所有权

所有权是rust的核心功能。Rust 是通过所有权来管理内存回收的栈是后进先出的栈中存储的数据在编译时是固定内存大小的数据数据移除栈叫出栈,数据存入栈叫入栈入栈要比在堆上分配内存块,入栈时分配器无需为存储新数据去搜索内存空间,其位置总是在顶部在调用一个函数的时候,传递给函数的值(包括可能指向堆上数据的指针)和函数的局部变量,都会被压入栈中,等函数结束时,这些值被移除栈。堆中存储的数据在编译时是的大小是未知的。

2024-05-17 17:02:03 541

原创 go语言实现无头单向链表

无头单向链表是一种线性数据结构,它的每个元素都是一个节点,每个节点都有一个指向下一个节点的指针。"无头"意味着这个链表没有一个特殊的头节点,链表的第一个节点就是链表的头。

2024-04-07 20:20:52 484

原创 学习clickhouse 集群搭建和分布式存储

使用集群的主要原因是为了提高系统的可扩展性、可用性和容错性。使用分布式存储的主要原因有以下几点:那么今天我们今天用docker的形式搭建一个clickhouse集群来提供我们学习用。docker-compose.yml注意:这里clickhouse的版本要和zookeeper的版本相互匹配上,不然后续就会有兼容性的问题。我的clickhouse的版本是22.1.3 所以我的zookeeper 的版本是3.5config.xmlmetrika.xml这里我们3个metrika.xml都是一样的

2024-03-06 17:40:34 868

原创 学习负载均衡的算法

一致性哈希(Consistent Hashing)是一种特殊的哈希技术,广泛应用于分布式系统中,用于解决数据的分布式存储问题。在传统的哈希表中,如果哈希空间的大小发生变化(例如,增加或减少服务器),几乎所有的键值对都需要重新映射,这会导致大量的数据迁移,对系统的性能和稳定性产生影响。一致性哈希通过引入虚拟节点和环形哈希空间的概念,使得哈希空间的大小变化时,只有一小部分的键值对需要重新映射。这大大减少了数据迁移的数量,提高了系统的稳定性。

2024-02-23 18:58:11 1416

原创 go-redis hash slot 之旅

redis的hash槽在redis集群中的作用是用来将数据分配到不同的slot,来降低单个节点的压力,来保证redis的工作效率。

2024-02-04 12:46:25 1246

原创 设计模式-生成器设计模式

复杂对象的创建:当对象的创建过程涉及到多个步骤,并且这些步骤的顺序可能会变化时,生成器模式可以提供一种灵活的方式来创建对象。不同的表示:当一个对象可以有多种不同的表示,而且你希望在运行时动态地选择表示时,生成器模式可以提供一种解决方案。封装创建过程:当你希望封装对象的创建过程,以便在不暴露对象的内部表示的情况下创建对象时,生成器模式可以提供帮助。

2024-01-26 16:37:27 775

原创 设计模式-责任链模式

责任链模式是一种行为设计模式,它让你可以将请求沿着处理者链进行发送。收到请求后,每个处理者都可以处理请求,或者将其传递给链上的下一个处理者。

2024-01-10 19:08:25 415

原创 在Windows操作系统上使用rtsp simple server和ffmpeg推送录屏视频流

解压后,通过cmd进入FFmpeg所在的目录,执行下面的命令(其中rtsp://localhost:8554/mystream是上一步生成的地址)。从https://github.com/aler9/rtsp-simple-server/releases下载Windows版本的编译结果。填入rtsp://172.168.1.218:8554/mystream。从https://ffmpeg.org/download.html下载Windows版本的编译结果。我们可以看到console会出现下面的变化。

2023-12-05 12:46:03 941

原创 在AWS Lambda中使用FFmpeg处理m3u8视频流

在直播里领域,我们经常需要对视频流进行处理。FFmpeg则是该领域中处理的利器。这篇文章,我们将以视频流截图为例,讲解如何在AWS Lambda中对m3u8视频流进行截图。因为Lambda是无服务架构,其本地存储是不可靠的,于是最后我们需要将截图文件上传S3桶。

2023-12-05 12:45:23 744

原创 在AWS Lambda上部署标准FFmpeg工具——自定义层的方案

FFmpeg被广泛应用于音/视频流处理领域。对于简单的需求,我们可以直接运行FFmpeg二进制程序命令就可以完成。但是对于定制性的功能,则需要熟悉系统的代码设计框架,进行二次开发。文本讨论的是在AWS无服务架构的Lambda上,如何通过自定义层部署FFmpeg二进制程序。

2023-12-05 12:44:50 1102

原创 在AWS Lambda上部署标准FFmpeg工具——Docker方案

FFmpeg被广泛应用于音/视频流处理领域。对于简单的需求,我们可以直接运行FFmpeg二进制程序命令就可以完成。但是对于定制性的功能,则需要熟悉系统的代码设计框架,进行二次开发。文本讨论的是在AWS无服务架构的Lambda上,如何通过Docker部署FFmpeg二进制程序。

2023-12-05 12:44:12 692

原创 在AWS Lambda上部署EC2编译的FFmpeg工具——自定义层的方案

FFmpeg被广泛应用于音/视频流处理领域。对于简单的需求,我们可以直接运行FFmpeg二进制程序命令就可以完成。但是对于定制性的功能,则需要熟悉系统的代码设计框架,进行二次开发。文本讨论的是在AWS无服务架构的Lambda上,如何通过自定义层部署线下编译的FFmpeg二进制程序。

2023-12-05 11:58:11 720

原创 在AWS EC2中部署和使用Apache Superset的方案

本文将讲解如何在AWS EC2中部署Apache Superset,并通过AWS Glue连接AWS S3、AWS RDS、AWS RedShift中的数据,进行可视化展现。

2023-12-05 11:57:07 772

原创 在AWS EC2中部署和使用Apache Superset的方案

本文将讲解如何在AWS EC2中部署Apache Superset,并通过AWS Glue连接AWS S3、AWS RDS、AWS RedShift中的数据,进行可视化展现。

2023-12-05 11:54:30 867

原创 在AWS CodeBuild中更新Lambda导致进程被占用(status error 255)的解决方案

在Lambda的部署实践中,我们尝试使用CodeBuild将代码更新到Lambda函数中。在这个过程中,偶尔会触发一个不太常见的状态:Lambda状态一直是处于Pending的状况。这个时候Lambda是被锁死的,导致CodeBuild无法更新Lambda函数的代码。很可惜,Lambda的操作界面没有提供重置Lambda状态的功能,这个时候只能借助cli工具来解决。Lambda所在的region。构建日志页面提供的错误提示。Lambda的name。lambda的name。Lambda的arn。

2023-12-05 11:53:59 614

原创 一文看懂AWS IAM设计和使用

对照IAM,我们将上述内容拆开看。即“对什么”对应于代码仓库——“资源或服务”;“做什么”对应于操作类型——“策略”。

2023-12-05 11:52:37 142

原创 使用AWS Glue与AWS Kinesis构建的流式ETL作业(一)——数据实时采集

在此案例中,我们使用了CloudWatch + Kinesis Data Stream完成了前期的数据实时采集的工作,并且,使用了Lambda来作为触发器来对数据进行了一个验证操作(也可使用Lambda来进行ETL工作)。

2023-12-05 11:48:40 852

原创 使用AWS Glue与AWS Kinesis构建的流式ETL作业(二)——数据处理

说明:在此脚本中,引入了python其他的包。写入PG使用的是sqlalchemy,是为了实现有则更新,无则写入的操作。若无特殊要求,可参考 “2.4.1”由于Glue Job 在运行的时候,是在独立的服务器上,因此不能直接访问到私有子网中的服务。于是借助Glue连接,可以使得Job在运行时连接AWS服务。类型的Job,因此Job会一直运行。需要注意的是:RedShift需要创建一个终端节点,具体的方法请看。下文中提供了AWS RedShift和PG数据库的连接创建过程,在实际使用中我们可以二选一。

2023-12-05 11:45:57 515

原创 使用 Amazon S3 托管静态网站

AWS的S3对象存储服务除了具备存储功能,还具备服务器功能。我们可以使用它托管静态网站,而不需要另外启动一台Web服务器。下图1和2就是传统Web服务器场景,最后一个是S3的静态托管场景。具体的操作也很简单。只有在权限配置时,需要灵活的调整下。

2023-12-05 11:42:14 179

原创 将rtsp视频流发送到AWS Kinesis Video Streams的方案——使用Gstreamer(C++) Command Line

我们的实验都是在us-east-1上进行的。如果想在其他区域做实验,可以将下面us-east-1都改成对应的区域。

2023-12-04 19:14:34 351

原创 基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(一)——创建Glue

在此实验中,我们使用Glue 的爬网程序自动解析存储在s3桶中的原始数据,自动创建了表。通过Glue数据库中的表,我们可以使用Athena对表进行查询(Athena每次检索表对应的s3桶数据,按检索量收费)。接下来我们会对原始数据进行转换、清洗以及分区操作,以及使用API Gateway+Lambda实现一个无服务架构,通过API查询数据。

2023-12-04 19:13:53 634

原创 基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(三)——serverless数据分析

到此,我们已经完成了基于Glue ETL(提取、转换和加载)的serviceless 数据分析的全部过程了。在此案例中,我们使用到了AWS 服务中的Glue、S3、APIGateway、Lambda等服务实现了一个通过API访问的数据统计与分析接口。

2023-12-04 19:09:53 1041

原创 基于AWS Serverless的Glue服务进行ETL(提取、转换和加载)数据分析(二)——数据清洗、转换

到这一步,我们已经使用Glue ETL对s3桶中的数据进行了清洗、分区操作。在进行上篇中的Athena操作后,我们已经可以通过Athena直接查询到清洗、分区后的数据集了。接下来,我们会通过使用APIGateway+Lambda+Athena来构建一个无服务器的数据查询分析服务。

2023-12-04 19:09:20 658

原创 公有云迁移研究——AWS Translate

Translate是一种文本翻译服务,它使用先进的机器学习技术来提供高质量的按需翻译。

2023-12-04 18:59:07 731

原创 公有云迁移研究——AWS Route53

Amazon Route 53 是一种可用性高、可扩展性强的域名系统 (DNS) Web 服务。AWS Route53提供了强大的DNS、流量管理和可用性监控服务。Route53是一个Gloabl 的服务,我们可以通过该服务现实对其他Region的流量管理和分流。

2023-12-04 18:57:42 821

原创 公有云迁移研究——AWS DMS

AWS Database Migration Service (AWS DMS) 是一项云服务,可轻松迁移关系数据库、数据仓库、NoSQL数据库及其他类型的数据存储。您可以使用AWS DMS将数据迁移到AWS Cloud。在平时开发项目的时候尽量少用外键约束,这样会增加数据库迁移的复杂度和数据修复的复杂度。迁移完成后要对数据库的表结构进行检查,这样可以降低迁移带来的各种系统灾难。

2023-12-04 18:57:08 756

原创 AWS攻略——子网

现实场景中,我们希望一些服务器不可以被外网SSH登录上去,但是可以通过某一台跳板机登录。这样只用加固这台跳板机的安全性,就可以在一定程度上保障整个集群的安全。在AWS场景下,我们一般使用子网去做IP地址段的分割,然后限制子网的访问性来达到这样的目的。回顾下,其架构通过主ACL或者子网ACL来实现安全访问。如果我们不用子网,也可以直接使用复杂的ACL规则来达成。但是这就要求EC2实例不能新增,因为新增的EC2会在子网IP/CIDR下自动分配一个IP,而该IP不能指定。

2023-12-04 18:54:14 709

原创 AWS攻略——使用中转网关(Transit Gateway)连接同区域(Region)VPC

在中,我们使用Peering打通了不同VPC。如果需要打通多个VPC,则需要建立多个Peering,如下图:虽然Peering非常强大,可以直接跨账户、跨区域连接VPC。但是如果连接的VPC数量比较多的情况下,建立的Peering数量也会增加。在一个场景下——如果不同VPC在同一区域中,则可以只使用一个中转网关来实现连接。

2023-12-04 18:53:39 1106

原创 AWS攻略——使用中转网关(Transit Gateway)连接不同区域(Region)VPC

区别于一文中介绍的方案,我们将在本文中讨论如何通过中转网关连通不同区域的VPC。如果每个区域里只有一个VPC,则可以优先考虑的方案,因为非常简单。如果需要连接的区域中有多个VPC需要连接,这可以考虑中转网关。

2023-12-04 18:53:00 785

原创 AWS攻略——使用Public NAT解决私有子网实例访问互联网

在一文中,我们分别创建了一个Public子网和一个Private子网,并让Public子网中的实例可以SSH登录到Private子网的实例中。现实场景中,我们可能存在如下需求:实例可以访问互联网,但是互联网不可以访问实例。而我们的Private子网中的实例,既不能访问互联网,也不能被互联网访问。为了解决这个问题,我们引入共有NAT网关。

2023-12-04 18:52:29 905

原创 AWS攻略——使用ACL限制访问

假如我们希望限制只有公司内部的IP可以SSH登录到EC2,则可以考虑使用ACL来实现。我们延续使用的案例,在它的基础上做相关修改来实现相关功能。

2023-12-04 18:51:54 913

原创 AWS攻略——创建VPC

在一文中,我们在AWS默认的VPC下部署了一台可以SSH访问的机器实例。这篇文章我们将修改一个“变量”——创建一个简单的VPC,并使用相似的步骤,部署另外一个可以SSH访问的机器实例。

2023-12-04 18:46:38 1198

原创 AWS攻略——VPC初识

VPC是在AWS架构服务的基础,有点类似于我们在机房里拉网线和设置路由器等。等这些设施完备后,我们才能考虑给机器部署服务。而很多初识AWS的同学,可能连机房都没进去过,对网络这块更是停留在课本上。于是VPC成了横亘在征服者面前的一座大山。本系列将由浅入深讲解VPC的基础知识,希望可以修筑一条清晰的捷径,辅助征服者跨过这座大山。(另外一座大山是IAM,可以参阅我们以需求/解决方案的形式一步步深入了解VPC,同时尽量少接触其他服务,比如EC2等。

2023-12-04 18:41:54 925

原创 AWS攻略——Peering连接VPC

我们回顾下在全球化部署的场景下,往往会出现不同Region要相互通信,这就意味着不同VPC之间要相互通信。在不增加任何措施的情况下,VPC只能通过暴露在互联网上的地址通信,但是互联网存在带宽限制、安全性和稳定性等问题。为了解决这些问题,AWS提供了Peering(对等连接)设施。Peering走的是AWS自己搭建的网络,不走因特网,于是在安全性和稳定性这块得到保证,而其带宽号称无限制(我们实测可以达到几十兆每秒)。

2023-12-04 18:40:40 902

原创 mysql学习篇-锁篇

在mysql 里面有三类锁,他们锁的粒度是不通的,分为全局锁,表级锁和行级锁。

2023-11-10 20:10:52 60

原创 浅谈grpc负载均衡

在Kubernetes集群中,Ingress作为集群内服务对外暴露的访问接入点,其几乎承载着集群内服务访问的所有流量。Ingress是Kubernetes中的一个资源对象,用来管理集群外部访问集群内部服务的方式。我们可以通过Ingress资源来配置不同的转发规则,从而达到根据不同的规则设置访问集群内不同的Service所对应的后端Pod。

2023-11-09 21:35:40 169

原创 mysql学习篇-事务篇

事务A和事务B当事务A发生了修改,但是因为错误或者其他原因没有commit ,这时候事务B 读取到了事务A里面修改的值这时候就触发了脏读。在一个事务内多次查询某个符合条件的记录数量,如果一个事务内前后两次查询到的记录数量不一样的时候,就意味着发生了幻读。我们发现这并没有解决幻读的问题,说明我们在统一个事务里面一开始使用快照读,最后使用当前读是无法解决幻读问题的。在同事处理多个事务的时候,可能会引发脏读,不可重复读,幻读的问题,那么我们该如何避免这些问题呢?在事务A执行的期间去执行事务B,插入一条数据。

2023-11-09 14:30:49 53

原创 mysql学习篇-索引

B+tree是一种多叉树,叶子节点才存放数据,非叶子节点只存放索引,每个节点里面存放的是主键。每一层父节点的索引值都会出现在下层子节点的索引值中,因此在叶子节点中,包括了所有的索引值信息。每个叶子节点都有两个指针,分别指向上一个节点和下一个节点,形成了双向链表。

2023-11-07 21:54:26 46

原创 Redis学习篇--缓存雪崩、击穿、穿透

用户的数据一般都是存储在数据库里面,数据库的数据写在磁盘上,磁盘的读写性能是计算机硬件里面最慢的,在有大量请求的时候,如果我们直接去请求数据库,很容易导致数据库崩溃,为了避免数据库直接承受来自请求的压力,所以我们使用redis做一层缓存,因为redis是内存型数据库,数据的写入和读取比硬盘要高好几个量级。我们引入缓存,当缓存出现问题的时候就会面临3个问题,缓存雪崩,缓存击穿和缓存穿透。

2023-10-26 19:02:09 52

空空如也

空空如也

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

TA关注的人

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