avatar
Articles
40
Tags
37
Categories
0

Utopian

Utopian

golang pprof
Created2019-03-16
golang pprof以常见的one-gouroutine-per-connection模式来介绍pprof的用法 # server.gofunc main() { ln, err := net.Listen("tcp", ":8972") if err != nil { panic(err) } go func() { if err := http.ListenAndServe(":6060", nil); err != nil { log.Fatalf("pprof failed: %v", err) } }() var connections []net.Conn defer func() { for _, conn := range connections { co ...
Puppeteer coverage
Created2018-10-29
Using Puppeteer to Extract Code Coverage Data from Chrome Dev Tools阅读puppeteer example的代码,看到了里面有使用Coverage的使用,由于API中没有其目的的详细介绍,花了点时间研究了一下。 作用Puppeteer的目的其实是对Chrome DevTools API的封装,而Coverage其实是对Chrome DevTools中的检查CSS 和 JS 代码覆盖率的功能的封装。 APIclass: Coverage coverage.startCSSCoverage(options) coverage.startJSCoverage(options) coverage.stopCSSCoverage() coverage.stopJSCoverage() 调用顺序: 创建page,并调用startCSSCoverage/startJSCoverage开启分析js、css。 page.goto(URL); 调用stopCSSCoverage/stop ...
upload file via http
Created2018-09-09
背景两台外网服务器之间需要传输一个较大的文件,目标服务器有webserver。 解决方案初步想了下,有几种思路: ftp:目标服务器搭建ftp。通过ftp client上传。部署成本太高(主要是懒),放弃 nginx-upload-module: 较为理想的方案,使用nginx插件支持,成本小。但在编译module时卡住了,忘了之前的编译选项,加入upload module之后编译又报错,不想太折腾,放弃了。 在webserver上自己实现file upload server:此方案看似成本高,翻了一下,其实还挺简单。那就动手吧 流程http upload server搭建方法有很多,搭建webserver第一个想到的就是node了。于是找到了express-fileupload。npm库上代码都是现成的。 const express = require('express');const fileUpload = require('express-fileupload');const app = express(); // default ...
Unique ID generator
Created2018-06-24
Written with StackEdit. 本文介绍分布式ID生成的几种思路 背景底层数据存储时每条记录通常需要一个唯一ID来标识记录本身,然后根据该ID建立对应的各类索引列表。以微博为例,用户A发表的每条微博内容在底层存储时会为其分配一条索引ID,然后该ID也会写入follow的Timeline中(假设为写扩散模式)。各follower在阅读时先读取道好友发表的索引ID列表,然后根据其ID拉取微博内容。 分布式ID系统的目标 全局唯一 趋势有序 “有序”并非时必须的,实际使用中通常业务都会依赖ID的有序特性,来实现排序等特性。所以使用UUID之类简单粗暴的方案就不在我们讨论范围之内了。 思路方案一:使用db的自增索引这种在简单的架构设计中比较常见,如商品ID,入库时生成的uniqueid即为索引ID,生成方法以mysql为例: mysql>CREATETABLE `get_max_id` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '业务主键', `content` char ...
HTTPS performacne tips
Created2018-06-03
HTTP vs HTTPS performance相对HTTP,影响HTTPS性能的因素包括以下几个方面。 TLS协议开销TLS协议采用主从式架构模型,用于在两个应用程序间通过网络创建起安全的连接,防止在交换数据时受到窃听及篡改。TLS协议的优势是与高层的应用层协议(如HTTP、FTP、Telnet等)无耦合。应用层协议能透明地运行在TLS协议之上,由TLS协议进行创建加密通道需要的协商和认证。应用层协议传送的数据在通过TLS协议时都会被加密,从而保证通信的私密性。 TLS握手 The SSL or TLS handshake enables the SSL or TLS client and server to establish the secret keys with which they communicate. TCL client send “client hello“ to TLS server. include: cryptographic information such as the SSL or TLS version the CipherSuites s ...
HTTPS explained with carrier pigeons
Created2018-06-03
HTTPS explained with carrier pigeons转载一篇HTTPS的科普的文章。link Cryptography can be a hard subject to understand. It’s full of mathematical proofs. But unless you are actually developing cryptographic systems, much of that complexity is not necessary to understand what is going on at a high level. If you opened this article hoping to create the next HTTPS protocol, I’m sorry to say that pigeons won’t be enough. Otherwise, brew some coffee and enjoy the article. Alice, Bob and … pigeons?Any activity y ...
nginx-forward-http-x-forwarded-proto-header
Created2018-06-03
nginx透传X-Forwarded-Proto 背景业务接入https,后端服务需要需要客户端的请求schma是老版本http,还是新版的https请求。这里通常采用的方案是通过X-Forwarded-Proto头来识别: X-Forwarded-Proto (XFP) 是一个事实上的标准首部,用来确定客户端与代理服务器或者负载均衡服务器之间的连接所采用的传输协议(HTTP 或 HTTPS)。在服务器的访问日志中记录的是负载均衡服务器与服务器之间的连接所使用的传输协议,而非客户端与负载均衡服务器之间所使用的协议。为了确定客户端与负载均衡服务器之间所使用的协议, X-Forwarded-Proto 就派上了用场。 通常在ng中通过设置XFP来指定URI的scheme信息,如: proxy_set_header X-Forwarded-Proto $scheme; 然后后端可以通过读取header X-Forwarded-Proto来获得对应的scheme。 但是现网的接入环境会比较复杂,通常存在多层反向代理的情况,这种简单粗暴的方式就不灵验了。一个比较常见的https请求路径如 ...
nginx-accel-redirect
Created2018-05-01
背景项目需要,提供一个对外的文件下载服务,详细需求点如下: 需要对接多个客户 各个客户要求的数据格式不同,内容不同 客户间权限隔离 文件可能较大 方案文件下载的第一方案自然想到了nginx,ip、流量控制等nginx都只要配置就可以实现,但似乎无法做好各个客户间的权限隔离(当然localtion隔离也可以,但维护成本比较大)。搜索之后了解到了nginx的X-Accel X-accel allows for internal redirection to a location determined by a header returned from a backend. X-Accel比较特殊的地方是利用upstream返回的头部信息进行对应处理。常见的配置方式如下: nginx配置linkhttp { .... server { listen 80; server_name your-domain.com; location / { rewrite ^/d ...
RWMutex in go
Created2018-03-03
RWMutex使用场景读写锁适用于读多写少的场景。基础特性包括: RLock被reader占用时,Lock(/WLock)会被block。反之依然 RLock被占用时,其他读线程也可以获取到RLock。即允许多个reader同时访问共享资源 WLock同一时间只能被一个routine/thread获取 根据不同的优先级策略,可以有不同的实现方案: 读优先(Read-preferring RW locks)读优先允许最大量的并发,但是竞争激烈时可能导致write-starvation。因为读多写少的场景下,如果读请求的优先级更高,写锁获取成功的概率就更低了。 写优先(Write-preferring RW locks) 为了避免write-starvation的情况出现,给WLock的优先级更高,如果RLock已经被占用,那么WLock也将会在block中, 此时后续的新到的RLock调用也将被block,直到RLock被释放,WLock被writer获取成功后释放。 对比读优先,所允许的并发量相对要小一些。且实现更为复杂,性能也相对也要差一些。 总 ...
常用 Git 命令清单
Created2018-02-21
常用 Git 命令清单 转自阮一峰www.ruanyifeng.com/blog/2015/12/git-cheat-sheet.html 我每天使用 Git ,但是很多命令记不住。 一般来说,日常使用只要记住下图6个命令,就可以了。但是熟练使用,恐怕要记住60~100个命令。 下面是我整理的常用 Git 命令清单。几个专用名词的译名如下。 Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一、新建代码库 # 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个项目和它的整个代码历史$ git clone [url] 二、配置Git的设置文件为.gitconfig,它可以在用户主目录下(全局配置),也可以在项目目录下(项目配置)。 # 显示当前的Git配置$ git config --list# 编辑Git配置文件$ git config -e [--global]# 设置提交代 ...
1…34
avatar
Alex guo
个人技术博客
Articles
40
Tags
37
Categories
0
Follow Me
Recent Post
Cache In Next.js2024-03-25
Introduct to NotionAPI2024-01-06
Architecture of Supabase2023-12-28
Introduct-to-nocoDB2023-12-08
Doploy outline without docker2023-12-06
Tags
秒杀 Microservices Architecture Governance nginx 远程开发 Golang UUID cron memberlist 分布式 memos Git Readingnotes CMS 云函数 RWMutex BaaS redis AUTH golang docker Notion Next.js libuv groupcache gossip Outline Authentication COS nocoDB Supabase HTTPS 工作流引擎 随笔 Vscode Puppeteer
Archives
  • March 20241
  • January 20241
  • December 20233
  • November 20232
  • October 20233
  • September 20232
  • March 20222
  • January 20222
Info
Article :
40
UV :
PV :
Last Update :
©2020 - 2024 By Alex guo
Framework Hexo|Theme Butterfly