随笔分类 - Go
摘要:go操作etcd etcd是近几年比较火热的一个开源的、分布式的键值对数据存储系统,提供共享配置、服务的注册和发现,本文主要介绍etcd的安装和使用。 etcd etcd介绍 etcd是使用Go语言开发的一个开源的、高可用的分布式key-value存储系统,可以用于配置共享和服务的注册和发现。 类似
阅读全文
摘要:go读取日志tailf tailf Go语言中读取日志使用第三方库:github.com/hpcloud/tail。 下载及安装 go get github.com/hpcloud/tail Tail结构体 type Tail struct { Filename string Lines chan
阅读全文
摘要:go操作kafka Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据,具有高性能、持久化、多副本备份、横向扩展等特点。本文介绍了如何使用Go语言发送和接收kafka消息。 sarama Go语言中连接kafka使用第三方库:github.com/Shop
阅读全文
摘要:一、zookeeper安装 下载地址 注: 需要安装jdk 作用: 服务注册中心 分布式锁 安装: 将下载好的zookeeper压缩包解压 注: 需要安装jdk 修改配置文件 将conf\zoo_sample.cfg复制一份,并重命名zoo.cfg 打开zoo.cfg文件,修改dataDir=D:/
阅读全文
摘要:日志收集项目 [01] 日志收集项目介绍 [02] kafka介绍 [03] kafa安装 [04] go操作kafka [05] tails读取日志 [06] etcd介绍 [07] go操作etcd [08] gopsutil系统监控 [09] influxDB使用 [10] grafana使用
阅读全文
摘要:Kafka Apache Kafka由著名职业社交公司LinkedIn开发,最初是被设计⽤来解决LinkedIn公司内部海量⽇志传 输等问题。Kafka使⽤Scala语⾔编写,于2011年开源并进⼊Apache孵化器,2012年10⽉正式毕业,现 在为Apache顶级项⽬。 介绍 Kafka是⼀个分
阅读全文
摘要:⽇志收集 项⽬背景 每个业务系统都有⽇志,当系统出现问题时,需要通过⽇志信息定位和解决问题。 当系统机器⽐较少 时,登陆到服务器上查看即可满⾜ 当系统机器规模巨⼤,登陆到机器上查看⼏乎不现实(分布式的系 统,⼀个系统部署在⼗⼏台机器上) 解决⽅案 把机器上的⽇志实时收集,统⼀的存储到中⼼系统。 在对
阅读全文
摘要:Go语言基础之WebSocket编程 webSocket是什么 WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据 在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就
阅读全文
摘要:Go语言基础之HTTP编程 web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接 客户端向服务器发送HTTP协议请求包,请求服务器里的资源文档 服务器向客户机发送HTTP协议应答包,如果请求的资源包含有动态语言的内容,那么服务器会调用动态语言的解
阅读全文
摘要:Go语言基础之TCP黏包 黏包示例 服务端: package main import ( "bufio" "fmt" "io" "net" ) func Process2(conn net.Conn) { defer conn.Close() reader := bufio.NewReader(co
阅读全文
摘要:Go语言基础之TCP编程 TCP协议 TCP/IP(Transmission Control Protocol/Internet Protocol) 即传输控制协议/网间协议,是一种面向连接(连接导向)的、可靠的、基于字节流的传输层(Transport layer)通信协议,因为是面向连接的协议,数
阅读全文
摘要:Go语言基础之UDP编程 UDP协议 UDP协议(User Datagram Protocol)中文名称是用户数据报协议,是OSI(Open System Interconnection,开放式系统互联)参考模型中一种无连接的传输层协议,不需要建立连接就能直接进行数据发送和接收,属于不可靠的、没有时
阅读全文
摘要:Go语言基础之socket编程 Socket是BSD UNIX的进程通信机制,通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。Socket可以理解为TCP/IP网络的API,它定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。电脑上运行的应用程序通常通过”套
阅读全文
摘要:Go语言基础之互联网协议介绍 互联网的核心是一系列协议,总称为”互联网协议”(Internet Protocol Suite),正是这一些协议规定了电脑如何连接和组网。我们理解了这些协议,就理解了互联网的原理。由于这些协议太过庞大和复杂,没有办法在这里一概而全,只能介绍一下我们日常开发中接触较多的几
阅读全文
摘要:Go语言基础之GMP原理与调度 一、Golang “调度器” 的由来? (1) 单进程时代不需要调度器 我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代” 一切的程序只能串行发
阅读全文
摘要:Go语言基础之Sync rsync.WaitGroup 在代码中生硬的使用time.Sleep肯定是不合适的,Go语言中可以使用sync.WaitGroup来实现并发任务的同步。 sync.WaitGroup有以下几个方法: 方法名 功能 (wg * WaitGroup) Add(delta int
阅读全文
摘要:Go语言基础之原子操作(atomic包) 原子操作 代码中的加锁操作因为涉及内核态的上下文切换会比较耗时、代价比较高。针对基本数据类型我们还可以使用原子操作来保证并发安全,因为原子操作是Go语言提供的方法它在用户态就可以完成,因此性能比加锁操作更好。Go语言中原子操作由内置的标准库sync/atom
阅读全文
摘要:Go语言基础之并发安全和锁 有时候在Go代码中可能会存在多个goroutine同时操作一个资源(临界区),这种情况会发生竞态问题(数据竞态)。类比现实生活中的例子有十字路口被各个方向的的汽车竞争;还有火车上的卫生间被车厢里的人竞争。 举个例子: var x int64 var wg sync.Wai
阅读全文
摘要:Go语言基础之select select多路复用 在某些场景下我们需要同时从多个通道接收数据。通道在接收数据时,如果没有数据可以接收将会发生阻塞。你也许会写出如下代码使用遍历的方式来实现: for{ // 尝试从ch1接收值 data, ok :=<-ch1 // 尝试从ch2接收值 data, o
阅读全文
摘要:Go语言基础之goroutine池 简易的work pool func worker(id int, jobs<-chan int, results chan<- int) { for j := range jobs { fmt.Printf("worker:%d start job:%d\n",
阅读全文