Docker Storage

Q1:docker 数据管理有哪几种方式,各有什么特点 volume 由docker管理,不应被其他进程更改 持久化的 可由多个容器复用 支持卷驱动(可远程存储) bind mount 可在宿主机任意位置 可被其他进程更改 持久化的 可由多个容器复用 tmpfs mount 存储在宿主机内存中,可快速读写,不会写入持久存储设备 容器停止或重启时,tmpfs的数据可以自动清除 Q2:每种数据管理方式使用场景举一个例子 volume 挂载数据库数据文件 bind mount 挂载配置文件 tmpfs mount 用做缓存目录,如nginx的proxy_cache_path 参考 https://docs.docker.com/storage/

July 25, 2024 · 1 min · LwQ

Go Trace

Q1:请使用 runtime/trace 包,写一个使用trace的例子 启动两个goroutine,记录trace func main() { f, err := os.Create("trace.out") if err != nil { log.Fatalf("failed to create trace file: %v", err) } defer f.Close() if err := trace.Start(f); err != nil { log.Fatalf("failed to start trace: %v", err) } defer trace.Stop() var wg sync.WaitGroup wg.Add(2) go wait(&wg) go sum(&wg) wg.Wait() } func wait(wg *sync.WaitGroup) { defer wg.Done() time.Sleep(2 * time.Second) } func sum(wg *sync.WaitGroup) { defer wg.Done() i, s := 0, 0 ch := time....

May 29, 2024 · 1 min · LwQ

Go插件的使用

Q1:说明 go plugin 使用场景,并编写一个使用 plugin 的 demo Go plugin支持将Go包编译为共享库(.so)的形式单独发布,主程序可以在运行时动态加载这些编译为动态共享库文件的go plugin,从中提取导出(exported)变量或函数的符号并在主程序的包中使用。Go plugin的这种特性为Go开发人员提供更多的灵活性,我们可以用之实现支持热插拔的插件系统。 demo 通过不同插件实现io.StringWriter,可将输出保存到不同地方 plugin/plugin.go package main import ( "fmt" "log" "os" ) func init() { log.Println("stdoutStringWriter init") } type stdoutStringWriter struct{} func (w *stdoutStringWriter) WriteString(s string) (n int, err error) { return fmt.Fprint(os.Stdout, s) } var StringWriter stdoutStringWriter main.go package main import ( "io" "log" "plugin" ) func main() { log.SetFlags(log.Lshortfile | log.LstdFlags) p, err := plugin.Open("./plugin/plugin.so") if err != nil { panic(err) } w, err := p....

May 29, 2024 · 1 min · LwQ