自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小小郭

内心谦下是功,外行于礼是德

  • 博客(141)
  • 资源 (2)
  • 收藏
  • 关注

原创 Elasticsearch 索引管理:使用别名来修改字段类型

在 Elasticsearch 中,一个常见的问题是如何修改已存在的索引的字段类型。这是一个棘手的问题,因为 Elasticsearch 本身不允许直接修改字段类型。如果删除现有索引,重新建索引的话则会导致数据丢失。有一个方法是使用别名索引,当需要调整索引时可以先新建一个索引,把数据导入到新索引,之后将别名索引指向新索引。这些操作都是在es上完成,对于应用程序来说是无感知的。

2023-05-16 14:37:06 961

原创 解决macos使用brew安装php8.2后,老版本提示‘/usr/local/opt/icu4c/lib/libicui18n.70.dylib‘ (no such file)

可以看到/usr/local/opt/icu4c/lib/下没有对应文件了。今天使用另一种方式来修复。

2023-04-27 18:29:57 1976

原创 pulsar简介

plusar是和kafak同类型的消息处理平台,这两年开始走入大众视野。详细的说明就不赘述了,我们来快速使用体验下。

2022-08-13 22:34:04 778

原创 linux-mount-01-mountflags传参

mountmount2介绍了mount调用的定义NAME top mount - mount filesystemSYNOPSIS top #include <sys/mount.h> int mount(const char *source, const char *target, const char *filesystemtype, unsigned long mountf

2022-02-18 19:58:59 1427

原创 graphql入门使用-构建查询

书接上回在想接下来是先学习查询还是服务端开发时,我陷入了沉思。不想这个沉思持续了近5个月,本以为无法结束时,却在金秋十月迎来了转机。我发现更好的方式是两者结合在一起:先个服务端graphql接口,接着就这个接口的查询。ok,开始吧。环境准备服务端服务端使用js来写,使用的web框架是express,用到了express-graphql和graphql。为了便于调试,我们使用nodemon来运行。服务端的参考代码:https://github.com/warshipJian/express-g

2021-10-03 20:24:39 789

原创 graphql入门使用-查询

前言本篇文章可能稍微长了一点,您需要先准备好时间,以免中途要去上厕所什么的,发生中断。我们一般都是用REST API, 即后端定义好API的数据结构和参数,前端再传参请求获取数据。比如我们有个获取用户列表的接口:GET /user/list, 返回用户id,用户名,创建时间:[ { "id": 1, "name": "jack", "created_at": "2021-05-10 13:14:15" }, { "id": 2,

2021-05-17 00:18:39 1392

原创 解决laravel框架在腾讯云 Serverless Framework 中439错误 Process exited before completing request问题

有时用composer更新了第三方库后,访问接口报错如下:{ errorCode: 1, errorMessage: "Process exited before completing request", statusCode: 439,}查看文档看不到什么的,可以去云函数后台看日志,会看到报错如下:START RequestId:4e3bae45f7b3af3aa133dcf14dd57d57Fatal error: Composer detected issues in your p

2021-03-17 20:47:52 959

原创 用go写一个docker(9)-初步构造容器

通过前面的准备我们可以开始写docker了。一口吃不出一个胖子,我们慢慢吃,到最后不会吃成胖子,但能把东西吃完也是极好的。所以我们先实现一个run版的docker,后续再慢慢加其他功能。本次的完整代码可参考:https://github.com/xianlubird/mydocker/tree/code-3.2为了便于理解,我精简了一下:https://github.com/warshipJian/jiandocker/tree/code-1主要看command.go文件:var runCo

2021-02-21 12:15:08 2503

原创 用go写一个docker(8)-介绍两个库cli和logrus

有了前面知识就可以开始写一个简单的docker了,但为了让这个docker好看一点,我们先了解一下会用到的两个库:cli 和 logrusgithub.com/urfave/cligithub.com/sirupsen/logrus关于go的版本这里再啰嗦一下,go在1.12之后就正式支持go module了,通过go module管理使用第三方包非常的方便。如无特殊说明,这里用的go版本都是1.15的,使用go module来管理维护第三方库(和go path说再见吧)。cli我们

2021-02-04 23:57:46 254

原创 用go写一个docker(7)-linux的AUFS文件系统

​namespace和cgroup解决的是容器的资源隔离和限制问题。容器的另一个特点是镜像分层,我们可以在基础镜像上加自己定制的东西。今天我们就以AUFS为例,来看看docker的文件系统。什么是AUFSAUFS 的全称是 Advanced Multi-layered unification filesytem,它的主要功能是:把多个目录结合成一个目录,对外使用。以下面为例,我们先直观地体验一下。1.准备工作准备三个目录,分别命名为:base,mnt,top。在base目录下创建名为base.txt

2021-01-25 19:17:15 183

原创 使用openvpn连通多个机房内网

一.环境简述之前一直使用公网ip来连接各个机房的服务器,现在ip不太够用了,而且有些机器也不需要用到公网ip.通过openvpn将多个机房连接起来,组成一个局域网,机器ip可以做到唯一性,便于标识.既节省了ip.又方便管理.本例环境如下,服务器使用的系统为centos 7.1 北京机房内网网段 172.16.2.0/24,服务器公网ip 20.20.20.20,内网网关172.16.2.1

2021-01-17 12:33:08 14287

原创 用go写一个docker(6)-linux的cgroup

namespace可以帮我们把资源隔离,但不能对资源的使用做限制。比如我想限制某个进程用多少CPU,多少内存话,怎么办呢?答案就是用cgroup什么是cgroupcgroup是Linux内核提供的一种可以限制、记录、隔离进程组(process groups)所使用的物理资源(如:cpu,memory,IO等等)的机制。体验下cgroup我们直接体验下cgroup的内存和CPU限制。一.cgroup的内存限制示例代码mem.go:package main​import ( "fmt"

2021-01-17 12:23:21 415

原创 极简jmeter使用教程

起因测试美眉对性能压测很感兴趣,说想试试jmeter,问有没有保姆级的jemter教程。我思考了一下决定亲手写一个。什么是jmeterjmeter是一款压力测试工具。ok,那我们先搞清楚什么压力测试?打个比方,有个网站:www.xiaoxiaoguo.cn,我想知道这个网站能不能同时承受10个人访问的话,要怎么做呢?最简单的办法就是找10个人,喊3,2,1,然后这个10个人同时操作电脑打开网站。找10个人应该不是很难,但假如要测试100个人,1万个人呢?这个方法就不行了。在实际的测试工作中,我们

2021-01-14 17:25:03 5239 4

原创 用go写一个docker(5)-linux的namespace(下)

上篇我们用go语言体验了namespace,今天了解下namespace的实现。namespace的目的是资源隔离,即资源都在,但不能让你看到。比如进程a只属于namespace A,则不能让a看到namespace B的资源,除非把a拉到namespace B中。namespace隔离的资源有:系统的hostname网络资源(网卡信息,路由信息等)进程信息(有哪些进程,父进程子进程间的关系等)用户信息(有哪些用户,组,用户的权限是什么)文件系统信息(有什么可用的文件系统等)等等...那

2021-01-11 12:05:12 469

原创 用go写一个docker(4)-linux的namespace(上)

​温馨提示:之后环境使用的系统如无特殊说明,都是用Linux,代码要在Linux上跑,在Windows或macos上是跑不起来的。这里使用的内核是4.15.0-88-generic,系统是Ubuntu 18.04。Namespace 是Linux提供的一种内核级别隔离机制,目前提供的能力如下:名称标识符隔离资源CgroupCLONE_NEWCGROUPcgroup根目录IpcCLONE_NEWIPCSystem V IPC(信号量、消息队列和共享内存)和POSIX m

2021-01-03 23:02:40 417

原创 用go写一个docker(3)-linux的proc

​proc是虚拟文件系统,放在内存里面。root@xxg_txy:~# ls /proc/1 1114 13 15 18922 22 27 30153 35 435 78 8638 consoles interrupts kpageflags partitions sysvipc10 1130 1303 16 18923 22846 270 3020 36

2020-12-27 22:56:55 266

原创 用go写一个docker(2)-go的Goroutine和通道

如果熟悉go的话请关掉这篇文章,不用往下读了。并发和并行并发强调的是可同时做多个事情(非阻塞),并行强调的是同一时间内多个事情同时进行。可以用CPU多核来理解:在单核CPU中,系统是可并发的,我们可以在打开浏览器的同时打开播放器听歌。CPU分了很多时间片,轮流给各进程使用,这些进程“看起来像”同时运行,但同一时间内只有一个时间片。而要并行的话则必须要多核CPU,因为并行强调的是同一时间内多个进程同时运行,即同一时间内要多个时间片。简而言之:单核CPU的并行能力是0,N核CPU的并行能力是N。阻塞和非

2020-12-14 16:07:35 199

原创 go使用第三方包和本地包

前言go之前对第三方包的管理不上心,其他语言比如python有pip,nodejs有npm,而go却没有一个官方的管理工具。在go 1.11之前,开发者需要要关注GOPATH环境变量,这对于开发者来说不友好。经过几次变更后,go于1.12版本开始正式使用go Module,go终于有了一个官方的处理方式,开发者也可以抛弃GOPATH了。本次使用的go版本为1.15.6,建议使用1.13或以上的版本,旧的方式就不要再关注了,让它随风而去吧。go version go1.15.6 darwin/amd

2020-12-10 16:58:15 9984 2

原创 用go写一个docker(1)-go的类型、变量、切片、字典、控制流程、函数、指针、结构体、方法和接口

如果熟悉go的话请关掉这篇文章,不用往下读了。安装go如果电脑上没装go,参考这篇文章安装:https://golang.org/doc/install类型高级语言分静态类型和动态类型。比如PHP,JavaScript是动态类型,go是静态类型。go的基本数据类型有:布尔、整形、浮点型、字符串、数组package mainimport ( "fmt" "reflect")func main() { // 布尔类型 a := true fmt.P

2020-12-08 11:27:31 187

原创 PHP8.0正式版的编译安装与使用

2020-11-26发布了PHP8.0的正式版介绍下它的安装,并使用laravel对比下PHP7安装与配置本次使用的操作系统Ubuntu 18.04.4 LTS安装1.准备必要库apt-get install -y autoconf libxml2-dev libsqlite3-dev \libcurl4-openssl-dev libssl-dev libonig-dev libtidy-dev zlib1g-dev2.去官网下载8.0正式版 https://www.php.net/.

2020-11-27 23:12:30 9933 1

原创 浅谈CORS跨域问题

前言在web开发中,有时会遇到如下错误:Access to XMLHttpRequest has been blocked by cors policy这个错误经常出现在新项目刚开始的时候,处理的方式一般有两种:1. 在浏览器上装个跨域插件或跑个本地代理,适用于本地调试。2. 调整服务端配置,从根本上解决。这是个老生常谈的跨域问题,今天我们来重新认识一下。什么是跨域一个URL的组成可以简化为四部分:协议,域名,端口号,路径。格式为:协议://域名:端口号/路径。比如地址: http

2020-11-24 18:34:47 917 1

原创 在k8s上平均分配容器到每个Node中

有时会遇到这样一个场景:每个pod上只需运行一个某应用的容器。k8s默认的容器调度策略是满足不了的,虽然它会尽量往负载低的服务器上调度,但难免会出现一台服务器上有两个或多个以上相同的容器。此时可通过nodeAffinity和podAntiAffinity配合使用来实现。示例如下:spec: affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerm

2020-10-20 15:42:41 4507 1

原创 非docker环境下的fastapi开机启动

有个方式是用Supervisor托管fastapi,配置Supervisor开机启动,从而达到fastapi开机启动的目的。但我只是想启动fastapi,能否不用Supervisor,当然是可以的。假设fastapi项目的路径是/opt/fastapi,则启动fastapi的命令可以是:/usr/local/bin/uvicorn --app-dir /opt/fastapi main:app那么把这条命令放到/etc/rc.local中就可以开机启动了。但这样又显得不是那么优雅,不如就用系统本

2020-10-19 15:30:19 1094

原创 docker核心技术简介之namespace

前言时光匆匆,转眼2020年也只剩下2个多月了,感慨之。今天来介绍下docker中用到的一个核心技术Namespace,由于个人能力有限,不会深入到具体的细节。私认为一个基础的docker需具备以下功能:1.资源隔离。即各个容器都是独立的,只能使用本容器的资源。比如每个容器只能看到自己的进程和文件,而看不到服务器上其他的进程和文件。每个容器的CPU和内存资源也是需要隔离的,不能出现某个容器把CPU占满,导致其他容器无法工作。2.镜像功能。一处构建,到处执行。用户在安装好docker后,直接拉取镜像

2020-10-10 18:38:42 1159

原创 PHP框架下配置文件读取k8s环境变量,实现node的custom-environment-variables效果

如果用过node的话,会发现它的环境配置管理在docker容器集群中使用起来比较方便。以koa为例,在config下定义好custom-environment-variables.json相关环境变量,比如:{ "mysql_host": "MYSQL_HOST", "mysql_user": "MYSQL_USER", "mysql_password": "MYSQL_PASSWORD", "mysql_db": "MYSQL_DB", "redis": "REDIS"}之后

2020-09-28 18:17:09 1052

原创 解决cURL error 60 Peer‘s Certificate issuer is not recognized.问题

有时更新了SSL证书后,在浏览器端正常访问,但在服务端,比如PHP不能正常请求该接口,报错如下:cURL error 60: Peer's Certificate issuer is not recognized.如果使用PHP的file_get_contents函数,报错如下:PHP Warning: file_get_contents(): SSL operation failed with code 1. OpenSSL Error messages:error:14090086:SSL

2020-09-27 17:24:17 26512

原创 gitlab的runner实践

公司的项目有个特点:项目多。这意味着每有一个新项目,就需要在gitlab,jenkins,k8s上新建对应的项目。虽然每次配置只花10分钟,但这种重复的劳动终究不是我们想要的。仔细一看,发现每次新建项目基本是改下名字,其他配置都没怎么改过,于是便有了改造思路:去掉中间商jenkins(jenkins是很优秀的,这里不用它是为了偷懒)利用gitlab的runner来做CI/CDCI/CD 流程去掉jenkins后,代码的打包发布工作就交给了gitlab的Runner。Runner是

2020-08-26 14:22:41 659

原创 ECS云盘在线扩容

今天分享一个运维小知识。有时候我们的服务器硬盘空间不足了,需要扩充空间。如果是单硬盘,又没有做LVM这些,能否不停机且将硬盘的容量扩大呢?当然是可以的,用云厂商的在线扩容实现。以阿里云的ECS为例,步骤如下:1. 找到服务器云盘,先创建一个快照(扩容失败时还原数据,虽然基本不会发生),快照创建完成后,选择云盘扩容。2. 勾选在线扩容,填好要扩容的容量。这里扩到200G3. 完成后可以看到硬盘变成了200G了,但进入服务器发现还是40G,此时要手动处理下。4. 先安装好用于扩容硬盘的工具Ce

2020-08-20 18:03:54 697

原创 laravel admin-03-验证码和防XSS攻击

一.验证码有个现成的库:https://github.com/Iamtong/laravel-admin-login-check-safe 直接拿来用吧。安装一下composer require iamtong/laravel-admin-login-check-safephp artisan vendor:publish --provider=Encore\LoginCheckSafe\LoginCheckSafeServiceProvider根据需求修改配置文件config/admin.p

2020-07-31 15:01:35 525

原创 laravel admin-02-数据导出

默认的csv导出有中文乱码的问题,需修改一下CsvExporter.php文件打开 vendor/encore/laravel-admin/src/Grid/Exporters/CsvExporter.php在public function export() 的$headers后面添加print(chr(0xEF).chr(0xBB).chr(0xBF));但还是不太方便,改为用laravel-excel吧一.安装对于laravel5.6及以上的,直接composer安装即可compose

2020-07-28 18:04:21 806

原创 laravel admin-01-按钮隐藏

laravel admin提供了模板化的管理后台,可以让后端在10分钟内就做出一个管理后台,非常的方便。优点:自带角色,权限管理,无需再做一套权限管理系统丰富的字段类型,无需另外去写相关的样式和交互基于laravel开发,可以说是没有学习成本了当然,不吹不黑,有一说一。作为一个已经迭代多年的框架,UI和交互方面显得不是那么的fasion,用它来处理一些定制化多的场景时,开发起来也比较繁琐。一.安装和入门认真学习的同学应该发现了,这些在小学二年级的时候学过了,所以安装和入门使用就不赘述了,

2020-07-27 21:20:06 397

原创 缩减docker镜像体积

以一个C语言的hello word为例:#include <stdio.h>#include <unistd.h>int main () { printf("Hello, world!"); sleep(100000); return 0;} dockerfile 如下:FROM gccCOPY hello.c .RUN gcc -o hello hello.cCMD ["./hello"]打包一下:docker build -f gcc -t

2020-06-03 15:05:54 327

转载 AUFS简介

早期docker的默认文件系统是AUFS(后来是Overlay),今天来简单学习一下。我们先实验一下,真实感受下aufs。在Ubuntu中默认就安装了aufs,可以直接使用。AUFS实验准备准备三个目录: base ,mnt , top。在base目录下准备base.txt 和 common.txt文件,在top目录下准备common.txt和foo.txt文件, mnt目录用于挂载# tree.├── base│ ├── base.txt│ └── common.txt├──

2020-06-03 14:40:59 6592

原创 一次小并发的上线复盘

由于有的人喜欢说高并发,百万并发,所以这个2万并发的项目就叫小并发吧。开发阶段之前给客户A做过一个活动,当时说活动会有1万并发,我们做了大量的优化和准备,结果上线后并发只有2千多,这个数据让我们觉得客户A喜欢吹牛。几个月后客户A又找过来,说要做一个新的活动,称这个活动会有2万的并发。由于之前的"经验",我们觉得顶多也就3千多吧,于是开发时就比较放飞。比如核心字段用TEXT,取全表数据来排名,用了大量的MySQL等等,这些设计给后面的上线埋下了小地雷。在上线前做了几次压测,压测目标2万,结果也还行,错

2020-05-19 10:35:23 264

原创 关于并发,QPS和TPS

并发有时候我们醉心于业务逻辑的书写,可能忽视了并发,这里鄙人斗胆说一下对并发的理解,如果错了请指正。在web开发中,并发指的是某个时间单位内对服务器产生的请求数,一般指1秒内产生的会话请求。比如我们说1千并发就是指1秒内有1000请求发送到web服务器。值得注意的是并发数和会话数是不同的,并发是一定会对服务器产生压力的,而会话数可能只是‘挂’在服务器上,并没有查询数据库等操作。比如我们说秒杀场景并发高,是由于在那几秒内要完成下单,库存扣减等操作,这些操作会对服务器,数据库等产生巨大的压力。而要做一个大流

2020-05-18 14:34:36 1424

原创 在koa中调用微信图片检测接口

需求: 写个接口给前端,前端传图片给你,然后你调用下微信的接口 https://api.weixin.qq.com/wxa/img_sec_check?access_token=ACCESS_TOKEN。第一眼看到,感觉就是很普通的一个简单的,直接用axios即可,代码类似如下:const accessToken = await wxUtil.getMPAccessToken();const...

2020-03-06 23:29:05 714

原创 守护进程4-nohup

我们要结束一个进程时可以通过kill命令来实现,kill的过程简单来说是这样:使用kill将信号发送到进程的task_struct中,task_struct的特定的成员变量里记下这个信号下一次CPU调度到这个进程的时,内核会先执行do\_signal,处理信号使用kill -l 命令可以查看kill能发送的信号nohup除了利用工具(tmux,screen等),daemon自守护,s...

2020-02-01 18:12:14 243

原创 守护进程3-systemed

看当前shell的pidecho $$ 看某个进程的pid可以用pidof,比如看nginx的pidof nginx在centos 6时代我们要配置一个开机启动的程序时,可以在/etc/rc.local中添加启动命令,在/etc/init.d中添加启动脚本。到了centos 7 时发现不推荐用init了,有了一个船新的系统systemed。systemed实现守护进程的方法除了利用...

2020-01-31 21:48:45 996

原创 守护进程2-daemon

如何看一个进程是不是守护进程呢?一个简单的方式是看下它的tty是不是?比如nginx的root@lan-dev-215:~/test# ps -e -o pid,ppid,cmd,tty | grep nginx 1436 1 nginx: master process /usr/ ? 1437 1436 nginx: worker process ? 1438 ...

2020-01-31 20:25:35 178

原创 守护进程1-tmux

前言一般要在服务器上做一些花里胡哨的操作时,都是打开终端(如果是远程服务器,则还需要通过ssh连接下)在上面操作。你会发现当你的ssh断开或关闭terminal时,你在上面临时运行的程序也停掉了,这是为什么呢,今天就来讨论下这个问题。terminal和shell关于终端和shell的来由说起来就话长了,这里不做赘述,可以看下这篇文章Linux Cygwin知识库(一):一文搞清控制台、终端、...

2020-01-31 15:29:08 674

2018年9月全国标准省市县行政划分代码数据表

爬取的是2018年9月县以上行政区划代码,做了下调整,表包含省,市,县区三个划分

2018-11-01

graphios脚本

用于将nagios的数据发送给graphite的一个脚本,属于github上的一个旧版本。

2015-01-12

空空如也

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

TA关注的人

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