chainhelen

openfaas 单机部署

faas

openfaas 单机部署

函数即服务(faas),现在挺火的一个概念,不同于Iaas、Paas、Saas,颗粒度更细致; 看一下github.com一个开源的openfaas; minikube 按照官方推荐的教程流程,首先使用minikube启动单点的k8s **1.**注意minikube启动的时候,会有一下几种情况: $ minikube start --vm-driver=virtualbox Starting local Kubernetes v1.10.0 cluster... Starting VM... E0808 02:43:48.772569 32480 start.go:174] Error starting host: Error creating host: Error executing step: Running precreate checks.

By chainhelen

锁

关于锁的总结(二)条件变量

条件变量 互斥器用于互斥,条件变量用于等待 如果上例子中消费者和生产者同时并发,那么需要消费者需要轮询(polling)或者轮转(spinning) 查询buf状态,看是否满足消费条件 void comsume_wait(int i) { for( ; ; ) { pthread_mutex_lock(&shared.mutex); if (i < shared.sum) { pthread_mutex_unlock(&shared.mutex); return; } pthread_mutex_unlock(&shared.mutex); } } void *comsume(void *arg) { (void) arg; for (int i = 0;

By chainhelen

互斥量

关于锁的总结(一)互斥量

锁 我们语境下的锁是一种同步机制,用于计算机在多任务环境下访问公共资源达到互斥作用。 临界资源 临界资源(Critical Resource)是一次仅允许一个进程(任务)使用的共享资源 临界区 每个进程(任务)中访问临界资源的代码块。每次只允许一个进程进入临界区(Critical Section) 互斥量 互斥量(mutex),用于保护临界区的。下面举个例子,三个task,其中两个生产者,一个消费者 以下代码有如下假定: 1. 生产者在shared.buf[i]生成出数据 i 2. 生产者竞争(race)生产,直到所有buf区域都有数据,并此时停止生成 3. 消费者在整个buf全有数据后才开始消费 #include <stdio.h> #include <pthread.h>

By chainhelen
记一次nodejs源码bug分析

js

记一次nodejs源码bug分析

1. 问题 前几日,我在测试express框架的时候,构造了一个测试样例死活过不来,即便调试到测试框架superagent ,依然不对。最终发现是nodejs的bug,而且最新版本的nodejs已经"修复"了,导致我中间饶了几圈都没发现是nodejs的事,下面来重现问题流程。 2. 环境预备 1. 安装一下gnvm 地址,后面需要控制一下版本(windows10 需要用管理员权限的cmd或者powershell) 2. 安装git环境(主要要使用curl命令) 3. 摘抄如下代码 // main.js var http = require('http') var tmpObject = Object tmpObject.prototype['love'] = 'express' var server = http.

By chainhelen

mysql字符集 小结

起因 公司的某个业务需要用到emoji编码,但是很早线上跑的mysql数据库是mysql 5.7.12 模拟 mysql root@127.0.0.1:test_yl_audit> show create table `1_text`; +--------+-------------------------------------------------------+ | Table | Create Table | +--------+-------------------------------------------------------+ | 1_text | CREATE TABLE `1_text` ( | | | `id` bigint(20) NOT NULL AUTO_INCREMENT, | | | `appid` varchar(255) NOT NU

By chainhelen

prometheus

prometheus 笔记

笔记 1. go语言创造,静态编译,无需安装太多依赖环境 2. 对于非法的路径,可以根据404返回头过滤成一类 others 3. 使用 record.rules 能够提前把数据组合好,直接访问处理后的数据,而不是实时去求表达式 4. 10分钟是个经验值,grafan 总是 能被 smoothed Counter // responseCounter Inc() 回复的总数 ,假设传入两个维度(默认还有其他维度) path 、method、status qps: sum(rate(requests_total[10m])) 按照维度分,可以保留下面grafa sum(rate(requests_total[10m])) by (endpoint, method, status) Histogram // 耗时responseLatency.

By chainhelen

text file busy

Text file busy 问题粗解

1. 问题起源 接手一个评论的项目,是用golang写的,采用了gin的web框架 发现里面并没有做热重启,尝试去了解了一下文档 推荐了一个endless的平滑重启库 当我尝试里面写的事例时候,会报错 文档里面提及的操作如下: Compile the example $ go build -o simple_server examples/simple.go Run it $ ./simple_server 2015/03/22 20:03:29 PID: 2710 localhost:4242 Make a request $ curl http://localhost:4242/hello WORLD! Change the handler - eg. replace

By chainhelen

内存泄漏

记一次定位js内存泄漏

来源 线上有个升级服务,隔一两个月时间内存会慢慢上涨到服务器内存80%以上,单进程内存到500M左右 原因一直不明确 heapdump 首先压测无果,初步猜测应该是压测量级或者特殊情况触发不够 就想着添加一下代码,等出现情况时,dump线上进程的内存 添加heapdump库,准备随时dump内存,但是由于内存过大,不能设置定时器,否则很可能影响性能 所以采用添加在路由里,等到情况复现时,手动触发 var heapdump = require('heapdump'); ... router.get('/profiler', function(req, res, next) { let query = req.query // 做token验证 if('xxxxxxxxxxxxx' === query.token) { heapdump.writeSnapshot(path.join(

By chainhelen

端口转发

记一次端口转发

问题 有个管理后台的php项目,我搭建了一个docker 容器,放在了公网ip 47 阿里云服务器上,作为调试环境比较麻烦 本地xdebug 通常的调试手段 本机IP 10.10.1.42 监听本地9000 服务器IP 10.0.1.2 连接是80端口 xdebug.remote_host=10.0.1.42 xdebug.remote_port=9000 也就是说xdebug是反向代理过来的 本机ip跳动 第二种其实是本机ip会乱动,远程不会乱动 在xdebug服务端有一个配置xdebug.remote_connect_back,设定为1则remote_host中值就会无效,xdebug服务端可以从http请求的头部$_SERVER['REMOTE_ADDR']获取远程客户端的IP地址

By chainhelen