go-singlefilght

singleflight

1
2
3
golang.org/x/sync/singleflight


singleflight 是 go 提供的一个扩展并发原语,主要是用来合并请求来降低服务压力。

code

1
2
https://cs.opensource.google/go/x/sync/+/036812b2:singleflight/singleflight.go

原理

实现了一个 Group 的 struct

1
2
3
4
5
type Group struct {
mu sync.Mutex // protects m
m map[string]*call // lazily initialized
}

阅读更多

docker build alpine dns error

使用 alpine 构建 Ddockerfile ,导致 docker 打包失败,错误如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
fetch https://mirrors.aliyun.com/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
fetch https://mirrors.aliyun.com/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
v3.13.4-69-g5bcff43ec5 [https://mirrors.aliyun.com/alpine/v3.13/main]
v3.13.4-66-g32aee0eba0 [https://mirrors.aliyun.com/alpine/v3.13/community]
OK: 13892 distinct packages available
fetch https://mirrors.aliyun.com/alpine/v3.13/main/x86_64/APKINDEX.tar.gz
WARNING: Ignoring https://mirrors.aliyun.com/alpine/v3.13/main: DNS lookup error
fetch https://mirrors.aliyun.com/alpine/v3.13/community/x86_64/APKINDEX.tar.gz
WARNING: Ignoring https://mirrors.aliyun.com/alpine/v3.13/community: DNS lookup error
ERROR: unable to select packages:
bash (no such package):
required by: world[bash]
curl (no such package):
required by: world[curl]
ERROR: Service 'microservice-users-rpc' failed to build : The command '/bin/sh -c apk update && apk add --no-cache curl bash' returned a non-zero code: 2
make: *** [docker-compose-up] Error 1

阅读更多

osxfuse:mac ntfs 支持

install

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
brew cask install osxfuse
Updating Homebrew...
Fast-forwarded master to origin/master.
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/cask).
No changes to formulae.

==> Caveats
To install and/or use osxfuse you may need to enable their kernel extension in

System Preferences → Security & Privacy → General

For more information refer to vendor documentation or the Apple Technical Note:

https://developer.apple.com/library/content/technotes/tn2459/_index.html

You must reboot for the installation of osxfuse to take effect.

==> Satisfying dependencies
==> Downloading https://github.com/osxfuse/osxfuse/releases/download/osxfuse-3.10.4/osxfuse-3.10.4.dmg
==> Downloading from https://github-production-release-asset-2e65be.s3.amazonaws.com/1867347/58615480-1769-11ea-8f1f-f6cc029e4f08?X-Amz-Algorithm=AWS4-HMAC-SH
######################################################################## 100.0%
==> Verifying SHA-256 checksum for Cask 'osxfuse'.
==> Installing Cask osxfuse
==> Running installer for osxfuse; your password may be necessary.
==> Package installers may write to any location; options such as --appdir are ignored.
Password:
installer: Package name is FUSE for macOS
installer: Installing at base path /
installer: The install was successful.
==> Changing ownership of paths required by osxfuse; your password may be necessary
🍺 osxfuse was successfully installed!

系统偏好设置-> FUSE

20200115100235.png

阅读更多

golang sync

##Goroutine 内存占用

下面是一个创建 goroutine 什么也不干,对内存的占用打印。说明创建 goroutine 的成本非常低。

1
2
3
4
5
6
7
8
num:1  mem: 0.062MB average:64.000kb 
num:10 mem: 0.000MB average:0.000kb
num:100 mem: 0.000MB average:0.000kb
num:1000 mem: 0.250MB average:0.256kb
num:10000 mem: 1.373MB average:0.141kb
num:100000 mem: 265.852MB average:2.722kb
num:1000000 mem: 2462.125MB average:2.521kb

以下是创建代码:

阅读更多

tcp连接数

Tcp 连接中,Server 监听固定端口,Client 发起主动连接。 经过三次握手后建立 Tcp 连接。

Client

client 每次请求,如果不固定端口,系统会选用一个空闲端口。该端口是独占,不能和其他 Tcp 连接共享。本地端口最大数为 65536 ,0 有特殊含义(预留,系统指定动态生成的端口),其他的全作为 client 情况下 ,最大连接数为65535 。 除去系统服务使用的端口,能够使用的会比这个少一些,1024 一下的端口通常为保留端口。

阅读更多

jenkins 配置说明

这是给团队写的 jenkins 会出现问题的说明,简单的描述了 jenkins 使用中会出现的问题,以及应对方法。当然最好的应对方法是没有问题。

jenkins 是什么

jenkins 自动化的命令运行引擎,pipeline (流水线) 是按照既定的逻辑来执行 jenkinsfile 中的代码。

也就是说它只是一个流程执行引擎,所有的命令都需要依赖其它软件包。 比如 npm ,maven, ansiable 等等。当使用 docker 来启动 jenkins 时,需要在 dockerfile 里面加上打包需要的依赖。

阅读更多

生成分布式id

分布式系统中经常需要生成全局唯一 id ,要求:

  1. 全局唯一: 不能出现重复ID
  2. 高可用: 作为基础系统,被许多关键系统调用,一旦宕机,影响严重
阅读更多

docker_sysctl

Sysctl 用于配置运行时的内核参数,正常情况下修改 /etc/sysctl.conf . 然后执行 sysctl -p 就能够设置成功。

当使用 Docker 启动服务时,使用 sysctl -p 来配置 docker 的参数时会出现问题。比如

1
2
3
sysctl: cannot stat /proc/sys/net/core/rmem_max: No such file or directory
sysctl: cannot stat /proc/sys/net/core/wmem_max: No such file or directory

阅读更多