自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Kong 自定义插件安装和调试

我的插件主要是解开token王header里面塞了三个参数,在调试过程中已经完成。1、在本地安装(基于当前目录中的.rockspec)在加载过程中难免会有错误,需要自己打日志排查。2、打包已安装的文件。

2023-07-14 18:00:58 645

原创 Lua脚本本地调试

这里主要使用日志的方式进行debug。

2023-07-14 17:59:32 1399

原创 Kong JWT鉴权

​ 最简单的理解和配置consumer的方式是,将其于用户进行一一映射,即一个consumer代表一个用户(或应用).但是对于KONG而言,这些都无所谓. Consumer的核心原则是您可以为其添加插件,从而自定义他的请求行为. 所以,或许您会有一个手机APP应用,并为他的每个版本都定义一个consumer, 又或者您有一个应用或几个应用,并为这些应用定义统一个consumer,这些都无所谓.

2023-07-14 17:55:36 514

原创 Kong 服务和路由的添加

这里参考DB-less-Mode,因为使用的是yaml配置文件的形式,所以所有的相关配置只需要往初始化的kong.yml文件中添加就可以了,就像nginx的配置文件。

2023-07-14 17:54:15 1409

原创 Kong(Without DB)的安装和基本使用

这里以Centos为例。

2023-06-28 15:27:43 405

原创 Kafka是如何实现高性能IO

使用批量处理的方式来提升系统吞吐能力。基于磁盘文件高性能顺序读写的特性来设计的存储结构。利用操作系统的 PageCache 来缓存数据,减少 IO 并提升读性能。使用零拷贝技术加速消费流程。

2023-06-25 15:23:42 567

原创 重复消费和堆积

接受消息会重复这一现状,然后通过一些方法来消除重复消息对业务的影响。

2023-06-20 17:21:41 210

原创 确保消息不会丢失

现在主流的消息队列产品都提供了非常完善的消息可靠性保证机制,完全可以做到在消息传递过程中,即使发生网络中断或者硬件故障,也能确保消息的可靠传递,不丢消息。绝大部分丢消息的原因都是由于开发者不熟悉消息队列,没有导致的。虽然不同的消息队列提供的 API 不一样,相关的配置项也不同,但是在保证消息可靠传递这块儿,它们的实现原理是一样的。

2023-06-20 14:43:32 250

原创 利用事务消息实现分布式事务

​ 之前提到的事务ACID大部分传统的单体关系型数据库(Mysql Oracle)都完整的实现了 ACID,但是,对于分布式系统来说,严格的实现 ACID 这四个特性几乎是不可能的,或者说实现的代价太大,大到我们无法接受。​ 分布式事务就是要在分布式系统中的实现事务。在分布式系统中,在保证可用性和不严重牺牲性能的前提下,光是要实现数据的一致性就已经非常困难了,所以出现了很多“残血版”的一致性,比如顺序一致性、最终一致性等等。

2023-06-16 10:57:27 305

原创 消息队列的基本概念

每种消息队列都有自己的一套消息模型,像队列(Queue)、主题(Topic)或是分区(Partition)这些名词概念,在每个消息队列模型中都会涉及一些,含义还不太一样。为什么出现这种情况呢?因为没有标准。曾经,也是有一些国际组织尝试制定过消息相关的标准,比如早期的 JMS 和 AMQP。但让人无奈的是,标准的进化跟不上消息队列的演进速度,这些标准实际上已经被废弃了。

2023-06-15 14:55:53 454

原创 为什么要学习消息队列

消息队列作为使用最广泛、生命力最旺盛的中间件,无论技术如何发展,都离不开分布式系统的最基本需求:通信。它涉及的底层技术是非常全面的,比如:高性能通信、海量数据存储、高并发等。并且,消息队列具有功能简洁、结构清晰的特点,入门简单但具有足够的深度,适合用来进行深入地分析和学习学好消息队列,不应该仅仅停留在使用层面上,还需要深入了解它的。但是要注意循序渐进,由浅入深地去学习。

2023-06-13 18:18:46 1695

原创 01 Linux操作系统

passwd。

2023-06-07 10:57:49 704

原创 紧急事故的流程管理

在事故处理中,让:每个人清楚自己的职责是非常重要的。有点反直觉的是,明嘶职费反而能够使每个人可以更独立自主地解决问题,因为他们不用怀疑和担心他们的同事都在干什么。如果一个人目前要处理的事情大多了,该人需要向计划负责人申请更多的人力资源。他们应该将一部分任务交接给其他人,有的时候这些人应该负责在事故流程管理系统中创建更多的子事故(即用来通知公司其他相关部门等。)另外一种方式是,某个负责人可以将某个系统组件完全交给同事来处理,由该同事直接向负责人汇报情识。以下是系统中可以分配给某个人的角色。

2023-01-13 14:12:21 528

原创 数据结构和算法--排序

希尔排序(Shell Sort)是插入排序的一种,它是针对直接插入排序算法的改进。希尔排序又称缩小增量排序,因 DL.Shell 于 1959 年提出而得名。它通过比较相距一定间隔的元素来进行,各趟比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止。希尔排序时间复杂度是 O(n^(1.3-2)),空间复杂度为常数阶 O(1)。希尔排序没有时间复杂度为 O(n(logn)) 的快速排序算法快 ,因此对中等大小规模表现良好,但对规模非常大的数据排序不是最优选择,总之比一般 O(n^2 )

2022-06-15 11:51:46 163

原创 树表的查找

树表的查找当表插入,删除操作频繁时,为维护表的有序性,需要移动表中很多记录改用动态查找表----几种特殊的树表结构在查找过程中动态生成对于给定值key若表中存在,则成功返回;否则,插入关键字等于key的记录二叉排序树二叉树排序树(Binary Sort Tree)又称为二叉搜索树、二叉查找树定义:二叉排序树或是空数,或是满足以下性质的二叉树:若其左子树非空,则左子树上所有节点的值均小于根节点的值;若其右子树非空,则右子树上所有节点的值均大于等于根节点的值;其左右子树本身又各是

2022-05-28 18:40:17 233

原创 将实例化对象的方法 给新的对象用

将实例化对象的方法 给新的对象用class SharedKls: def __setattr__(self, key, value): if not hasattr(SharedKls, key): if callable(value): # 是否可以调用 # 不加staticmethod,会默认传self value = staticmethod(value) s

2022-04-20 21:14:28 244

原创 哈夫曼树及其应用

哈夫曼树及其应用判断树:用于描述分类过程的二叉树假设 小于60分的同学有5% 60-70 15% 70-80 40% 80-90 30% >90 10%显然:两种判别树的效率是不一样的问题:能不能找到一种效率最高的判别树呢? 这就是哈夫曼树(最优二叉树)研究的问题哈夫曼树基本概念树的路径长度:从树根到每一个节点的路径长度之和,记作TL权将树种结点赋给一个有着某种含义的数值,则这个数值称为该结点的权节点的带权路径长度从根节点到该结点之间的路径长度与该节点的权的乘积

2022-03-03 08:58:27 1412

原创 数据结构和算法基础--线性表

数据结构和算法基础–线性表数据结构 = 数据的逻辑结构+数据的存储结构+数据的运算[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-28ek7MfI-1642426292721)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211215231756058.png)]线性表的定义和特点线性表是具有相同特性的数据元素的一个有限序列(a1,a2,a3,a4,a5,a6,a

2022-01-17 22:13:51 448

原创 算法和算法分析

算法和算法分析逻辑结构—研究对象的特性及其相互之间的关系存储结构—有效地组织计算机存储算法–有效地实现对象之间 ”运算“关系算法的定义对特定问题求解方法和步骤的一种描述,他是指令的有限序列。其中每个指令表示一个或多个操作简而言之,算法就是解决问题的方法和步骤算法的描述自然语言:英语、中文流程图:传统流程图、NS流程图伪代码:类语言程序代码:python go算法和程序算法算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法程序程序是某种

2022-01-17 21:30:27 280

原创 算法和算法分析

算法和算法分析逻辑结构—研究对象的特性及其相互之间的关系存储结构—有效地组织计算机存储算法–有效地实现对象之间 ”运算“关系算法的定义对特定问题求解方法和步骤的一种描述,他是指令的有限序列。其中每个指令表示一个或多个操作简而言之,算法就是解决问题的方法和步骤算法的描述自然语言:英语、中文流程图:传统流程图、NS流程图伪代码:类语言程序代码:python go算法和程序算法算法是解决问题的一种方法或一个过程,考虑如何将输入转换成输出,一个问题可以有多种算法程序程序是某种

2021-12-15 23:11:40 920

原创 数据结构和算法

数据结构和算法绪论Base—青岛大学 数据科学和软件工程学院程序=数据结构+算法----------------Nicklaus Wirth图灵奖获得者Pascal的语言之父绪论1、数据(Data)能够输入计算机且能被计算机处理的各种符号的集合信息的载体是对客观事物符号化的表示能够被计算机识别,存储和加工包括数值类型的数据:整数,实数非数值型的数据:文字、图像、图形、声音等2、数据元素(Data Element)和3、数据项2.1数据元素​ 是数据的基本单位,在

2021-12-09 08:18:23 166

原创 秒杀设计方案

秒杀设计方案在原有项目上继续加会导致程序因为并发量崩溃,数据出现问题,都会影响原来的项目单独写一个服务重新设计库(几个表)商品表,订单表并没有多少人秒杀:不要秒超了,上锁(悲观锁,乐观锁,mysql)同步扣款,生成订单简单地设计方案,数据直接打到数据库上(不推荐)并发量在几百个把同步换成异步celery+redis,同步扣款,生成订单并发量几千分布式锁(项目部署在多台机器上)用专业的消息队列(异步)限流(有令牌才能近来),有资格秒杀的用户,访问秒杀页面,给

2021-04-12 23:05:41 135

原创 Go数组的内存管理

数组内存管理开辟内存 默认零值数组,定长且元素类型一致的数据集合必备知识点:数组的内存是连续的也就是声明的元素是连续挨着存放的,内存之间的间隔和元素的类型有关,就比如元素为int8类型,那么他们之间就相差一个字节数组的内存地址实际上就是数组第一个元素的内存地址也就是第0个元素的内存地址,变量的内存地址指向的就是第0个元素的内存地址每个字符串的内部存储分为两部分len+str小栗子int8类型的package mainimport "fmt"func main

2021-03-14 18:25:08 331

原创 Go的异常处理

什么是错误?错误表示程序中出现了异常情况。比如当我们试图打开一个文件时,文件系统里却并没有这个文件。这就是异常情况,它用一个错误来表示。在 Go 中,错误一直是很常见的。错误用内建的 error 类型来表示。就像其他的内建类型(如 int、float64 等),错误值可以存储在变量里、作为函数的返回值等等。defer(延迟执行)package mainimport "fmt"func main() { defer fmt.Println("我最后执行!") defer fmt.

2021-03-06 10:37:31 213

原创 Go的并发

一、并发和并行并发:同一时间段内,多个任务再执行。(单个CPU,执行多个任务)Go语言原生支持并发,Go使用Go协程(Goroutine)和信道(Channel)来处理并发并行同一时刻,多个任务在执行(多个CPU的支持)go实现并发package mainimport ( "fmt" "time")// goroutine--->协程 ---2kb大小// 线程:启动一个线程需要2-5m 也就是python开进程,其余的都是开线程// go协程会复用线程,//

2021-03-05 13:31:55 364

原创 Go接口

接口是啥在面向对象的领域里,接口一般这样定义:接口定义一个对象的行为。接口只指定了对象应该做什么,至于如何实现这个行为(即实现细节),则由对象本身去确定。在 Go 语言中,接口就是方法签名(Method Signature)的集合。当一个类型定义了接口中的所有方法,我们称它实现了该接口。这与面向对象编程(OOP)的说法很类似。接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法。接口:面向对象的领域里,接口一般这样定义;接口定义一个对象的行为鸭子类型简单来说鸭子类型 有个鸭子。s

2021-03-02 17:13:33 113

原创 Go的方法

方法什么是方法?方法其实就是一个函数,在 func 这个关键字和方法名中间加入了一个特殊的接收器类型。接收器可以是结构体类型或者是非结构体类型。接收器是可以在方法的内部访问的。下面就是创建一个方法的语法。package mainimport "fmt"type Person2 struct { Id int Name string Sex string}//定义一个方法// 接收器 方法名func (p Person2)PrintName()

2021-02-24 10:56:56 133

原创 Go结构体

结构体一系列属性的集合Go 不支持类,而是提供了[结构体]。结构体中可以添加[方法]。这样可以将数据和操作数据的方法绑定在一起,实现与类相似的效果。所以可以近似的认为结构体就是python中的类使用结构体,而非类定义结构体//Project2/entipypackage entity//注意名字大小写,大写可以被外部导入引用type Person struct { //结构体中命名也是一样的 Name string age int sex string

2021-02-23 13:11:40 224

原创 Go的类型变量和函数

一、Go文件基本参数介绍package main //程序首行,必须指明是哪个包 这里表示是main包import "fmt" //示导入fmt包 因为Println函数是在fmt包下//***在函数外只能声明变量,常量,类型定义等,不能写逻辑代码func main() { //定义一个main函数 fmt.Println("Hello World") //输出 Hello World}/*package main - 每一个 Go 文件都应该在开头进行 package na

2021-02-22 21:32:48 317

原创 Go的基础环境搭建

一、环境搭建1.JDK的下载Go的官网,找到适合自己的版本下载就好了Windows 下可以使用 .msi 后缀(在下载列表中可以找到该文件,如go1.13.3.windows-amd64.msi)的安装包来安装。默认情况下 .msi 文件会安装在 c:\Go 目录下。将 c:\Go\bin 目录添加到 Path 环境变量中。添加后你需要重启命令窗口才能生效(默认已经添加了,这样在cmd窗口下敲 go 能找到该命令)2.测试安装打开cmd//在命令行下输入go version 我们可以

2021-02-22 13:43:51 298

原创 Python中集成es两种方式+集群+脑裂+打分

Python中集成es两种方式1 原生集成# Official low-level client for Elasticsearch### 等同于pymysql#pip3 install elasticsearchfrom elasticsearch import Elasticsearchobj = Elasticsearch() # 得到一个对象# 创建索引(Index)# result = obj.indices.create(index='user', body={"us

2021-02-21 17:24:59 485

原创 ES-查询相关和IK分词器

排序查询创建数据PUT books/_doc/1{ "name":"顾老二", "age":30, "from": "gu", "desc": "皮肤黑、武器长、性格直", "tags": ["黑", "长", "直"]}PUT books/_doc/2{ "name":"大娘子", "age":18, "from":"sheng", "desc":"肤白貌美,娇憨可爱", "tags":["白", "富","美"]}PUT books/_doc/

2021-02-21 15:36:51 842

原创 Es简介和基本增删查改

Es简介Elasticsearch 是一个基于Lucene的分布式搜索和分析引擎Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据Java开发,在Apache开源协议使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,使得全文检索变得简单一、Es核心概念-集群:单台机器,多台机器-节点:集群中的每一台机器叫一个

2021-02-19 23:21:40 412

原创 ES-倒排索引扩展阅读

随着央视诗词大会的热播,小史开始对诗词感兴趣,最喜欢的就是飞花令的环节。但是由于小史很久没有背过诗词了,飞一个字很难说出一句,很多之前很熟悉的诗句也想不起来。倒排索引**吕老师:**但是我让你说出带“前”字的诗句,由于没有索引,你只能遍历脑海中所有诗词,当你的脑海中诗词量大的时候,就很难在短时间内得到结果了。索引量爆炸搜索引擎原理Elasticsearch 简介**吕老

2021-02-19 20:42:08 155

原创 MongoDB快速入门

Mongodb介绍Mongodb是一款强大,灵活,且易于扩展的通用性非关系型数据库简介易用性MongoDB是一个面向文档(document-oriented)的数据库,而不是关系型数据库。不采用关系型主要是为了获得更好得扩展性。当然还有一些其他好处,与关系数据库相比,面向文档的数据库不再有“行“(row)的概念取而代之的是更为灵活的“文档”(document)模型。通过在文档中嵌入文档和数组,面向文档的方法能够仅使用一条记录来表现复杂的层级关系,这与现代的面向对象语言的开发者对数据的看法一

2021-02-18 23:07:55 332

原创 如何提高项目的并发量

如何提高项目的并发量减少交互,提高接口并发前端移动端还是web段,静态资源,使用cdn图片短视频都放在第三方存储上精灵图,将一些小图标做成一个图,在前端通过定位适用前端存储,放在vue的localstory,存放一些不敏感的信息前端缓存:响应头中的cache-control中的max-age设置过期时间,在过期时间内就不会向服务器发送请求后端使用nginx转发(不是直接使用uwsgi接受http,而是通过nginx转发socket来接收,这样走的更底层就会更快,uwsgi协议)

2021-02-18 19:01:24 370

原创 Rabbitmq的使用以及其他RPC的实现

消息队列1、两个服务调用(生产者消费者)restful(http协议),rpc(远程过程调用)2、解决的问题应用解耦流量削峰消息分发(发布订阅:观察者模式)异步消息(celery就是封装的消息队列)常见消息队列及比较Rabbitmq和kafka的比较(主流)rabbitmq:吞吐量小,有消息确认机制,消费完了,告诉我才会删掉,涉及订单电商等对可靠性有要求所谓吞入量小也是可以几百万条kafka:吞吐量高,注重高吞吐量,不注重消息可靠性,但这并不代表着不可

2021-02-17 10:56:10 506

原创 Mysql主从搭建Django读写分离

Mysql主从Mysql主从原理:master会将变动记录到二进制日志(BinLog)里面然后master会有一个I/O线程将二进制发送到salve(从库)此时slave也会有一个I/O线程吧master发送的二进制写入到relay日志里面最后salve有一个SQL线程,按照relay日志处理slave的数据操作步骤一、准备好两台mysql的服务器(再次使用docker模拟两台机器)环境mysql版本ip地址端口号主库(master)5.7172.16.209.

2021-02-10 14:11:30 149 1

原创 Nginx多容器部署web项目uwsgi+Django+Redis+Mysql

一、准备工作1.镜像拉取# 查看自己的镜像docker images# 拉取项目需要的镜像docker pull python:3.6docker pull mysql:5.7docker pull redis2.构建docker网络,让他们在同一个网络下实现互通docker network ls # 查看自己的docker网络docker network create luffu\y # 创建luffy网络二、测试网络1.启动mysql# 需要指定rootdocke

2021-01-22 17:58:44 435 1

原创 Celery

Celery执行流程1.实例化app 2.app装饰几个任务 3.其他函数导入这个任务并使用 函数.delay执行(此时并不是真正的执行而是将它放入broker中,如果这个时候worker启动,或者已经启动,他就立即执行) 4.得到结果放入redis中程序运行启动任务建议参考官方文档由于没有任务所以程序一直停在哪里添加任务[email protected] # 用此装饰器装饰def add(x, y): print(f'正在计算{x},{y}的和.....')

2021-01-06 09:36:16 214 1

空空如也

空空如也

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

TA关注的人

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