• 为什么我们需要 Kubernetes,它能做什么? 最基础的,Kubernetes 可以在物理或虚拟机集群上调度和运行应用程序容器。然而,Kubernetes 还允许开发人员从物理和虚拟机’脱离’,从以主机为中心的基础架构转移到以容器为中心的基础...
    • 5年前
    • 2019-09-27 16:16
  • 没有云控制器管理器的 Kubernetes 集群的架构 云控制器管理器(cloud controller manager,CCM)整合后架构 此图重要 云控制器管理器(cloud controller manager,CCM)这个概念 (不要...
    • 5年前
    • 2019-09-26 17:07
  • Kubernetes设计理念与分布式系统 分析和理解Kubernetes的设计理念可以使我们更深入地了解Kubernetes系统,更好地利用它管理分布式部署的云原生应用,另一方面也可以让我们借鉴其在分布式系统设计方面的经验。 API设计原则 对于...
    • 5年前
    • 2019-09-26 16:37
  • 参考https://www.kubernetes.org.cn/k8s 大规模容器集群管理工具,从Borg到Kubernetes 在Docker 作为高级容器引擎快速发展的同时,Google也开始将自身在容器技术及集群方面的积累贡献出来。在Goo...
    • 5年前
    • 2019-09-26 15:51
  • 知识图谱 https://www.processon.com/view/link/5ac64532e4b00dc8a02f05eb#map 国内网站 k8s中文网 https://www.kubernetes.org.cn k8s中文文档 ht...
    • 5年前
    • 2019-09-26 11:22
  • 并发写通道陷阱 如果想用chan作为队列先进先出,不能用多线程写一个chan 多个线程同时写,可能后写的线程,先写入chan,导致数据顺序混乱 注意:尽量避免多个线程写一个chan,如果启用了线程,注意关闭线程。最好不要多线程写一个队列性质的ch...
    • 5年前
    • 2019-08-27 17:39
  • buffer陷阱 重复调用bufio.NewReader(conn)可能导致第二读取时,第一次读取的包丢失 以下代码第一行可能有问题 func ReadSafeTCPData(conn *net.TCPConn) ([]byte, error)...
    • 5年前
    • 2019-08-27 17:35
  • package main import ( "encoding/hex" "fmt" "strconv" ) func main() { fmt.Println("-------字符串转Bool--------") fmt.Println(str...
    • 5年前
    • 2019-08-14 19:35
  • package main import "fmt" import "time" func worker(id int, jobs <-chan int, results chan<- int) { for j := range job...
    • 5年前
    • 2019-08-08 22:29
  • 1用sync.Mutex var mutex = &sync.Mutex{} mutex.Lock()//开始锁定 //执行一些并发操作 mutex.Unlock()//结束锁定 2 用atomic包 package main impo...
    • 5年前
    • 2019-08-08 22:21
  • package main import "time" import "fmt" func main() { requests := make(chan int, 5) for i := 1; i <= 5; i++ { requests &...
    • 5年前
    • 2019-08-08 21:51
  • package main import ( "fmt" "sync" "time" ) func worker(id int, wg *sync.WaitGroup) { fmt.Printf("Worker %d starting\n", id...
    • 5年前
    • 2019-08-08 20:48
  • range读取close的chanel package main import "fmt" func main() { queue := make(chan string, 3) queue <- "one" queue <- "tw...
    • 5年前
    • 2019-08-08 20:30
  • 内建的close方法可以用来关闭channel。 总结一下channel关闭后sender的receiver操作。 如果channel c已经被关闭,继续往它发送数据会导致panic: send on closed channel: import...
    • 5年前
    • 2019-08-08 15:43
  • 读取通道超时time.After select有很重要的一个应用就是超时处理。 因为上面我们提到,如果没有case需要处理,select语句就会一直阻塞着。这时候我们可能就需要一个超时操作,用来处理超时的情况。 下面这个例子我们会在2秒后往cha...
    • 5年前
    • 2019-08-08 15:36
  • 1通道定义 // var 通道变量名 chan 通道数据类型 var cn chan string 2初始化 // make(chan 通道数据类型,容量) cn = make(chan string, 100) make的第二个参数指定缓存...
    • 5年前
    • 2019-08-08 13:51
  • select 语法 select case must be receive, send or assign recv select中的case条件必须是接收、发送、或者给接收赋值 如 var cn chan string select { ca...
    • 5年前
    • 2019-08-08 13:00
  • 通道写满了,丢弃消息 package main import "fmt" func main() { ca := make(chan string, 2) ca <- "str1" fmt.Printf("put to chanel str...
    • 5年前
    • 2019-08-08 11:27
  • 1如果主线程和所有子线程都阻塞 如果主线程和所有子线程都阻塞,则程序报错(fatal error: all goroutines are asleep - deadlock!)并退出 package main import "fmt" func ...
    • 5年前
    • 2019-08-08 11:15
  • 1主要代码参考 BasicFileAttributeView attributes = Files.getFileAttributeView(Paths.get(f.getAbsolutePath()), BasicFileAttributeVi...
    • 5年前
    • 2019-04-11 19:28

文章树