Jaeger源码分析——窥视分布式系统实现

原文地址:Jaeger源码分析——窥视分布式系统实现 前言 分析Jaeger源码主要有以下原因: 公司正在使用Jaeger,通过了解其源码,可以更好的把控这套系统。 了解分布式系统的设计 提升对golang的理解 提升个人英语 分析的版本为最新版本0.10.0,时间2017-11-23 Agent ——3部曲  agnet处于jaeger-client和collector之间,属于代理的作用,主要是把client发送过来的数据从thrift转为Batch,并通过RPC批量提交到collector...阅读全文

Segmentfault 2017-11-23 01:04:44 小卜邪

golang的goroutine调度机制

golang的goroutine调度机制 版权声明:本文为博主原创文章,未经博主允许不得转载。 目录(?)[-] 一直对goroutine的调度机制很好奇最近在看雨痕的golang源码分析基于go14 这篇文章是去年整理的记录公司内部wiki上 一直对goroutine的调度机制很好奇,最近在看雨痕的golang源码分析,(基于go1.4) 感觉豁然开朗,受益匪浅; 去繁就简,再加上自己的一些理解,整理了一下 ~~ 调度器 主要基于三个基本对象上,G,M,P(定义在源码的src/runtime/...阅读全文

博客园 2017-11-21 19:27 xuyuan77

zip文件上传解析问题

现在有个需求,服务端需要对上传的的文件进行解析,对于没有包含指定文件夹的zip,需要报错!符合规范的就保存简单的说,如何在不保存上传过来的zip文件的同时,分析文件结构func (p *FileStruct) ValidFile() error {    contentType := p.File.Header.Get("Content-Type")    if contentType != "application/zip" {        return fmt.Errorf("请上传zip...阅读全文

Go语言中文网 2017-11-22 18:48:43 playboy307

Golang性能调优(go-torch, go tool pprof)

Go语言已经为开发者内置配套了很多性能调优监控的好工具和方法,这大大提升了我们profile分析的效率。此外本文还将重点介绍和推荐uber开源的go-torch,其生成的火焰图更方便更直观的帮我们进行性能调优。我也是在实际一次的性能调优中,接触到go-torch,非常棒。 go tool pprof简介 Golang内置cpu, mem, block profiler Go强大之处是它已经在语言层面集成了profile采样工具,并且允许我们在程序的运行时使用它们,使用Go的profiler我们能...阅读全文

CSDN博客 2017年01月04日 15:27:58 WaltonWang

Go使用grpc+http打造高性能微服务

大家可以发现,Go越来越流行,其一是目前云计算领域基本是使用Go作为底层开发语言;其二是随着区块链的火爆,引申出了其背后很多开源项目,很多都是使用Go语言进行开发;其三就是在微服务方面,Go也展示很大的优势性。那么微服务是什么,如何将其与Go做一个整合,来提升整体开发生产效率,下面会进行详细讲解。什么是微服务微服务的概念最早由 Martin Fowler 提出,在他的理论当中,微服务是一整套小的服务,其中每一个服务互相之间都是独立的,它们之间通过 lightweight 机制进行交互。图 1图 ...阅读全文

微信公众平台 2017-11-22 astaxie

基于Golang的IP地址信息查询服务

工作中经常会有通过IP匹配用户信息的需求,如确定用户所在的地区(国家/省份/城市)、运营商、时区、经纬度等等。前一阵有个Golang开发的项目也有这样的需求,于是简单实现了一个包,最近忙里偷闲又包了一个支持HTTP和GRPC方式调用的服务,并开源在GitHub上了。本文主要介绍IP地址信息查询的实现细节和使用方式。 首先交代一下GitHub地址: IpQuery Golang Package:https://github.com/tabalt/ipquery IP地址信息查询服务:https:/...阅读全文

开源中国博客 2017-11-22 17:03:24 mickelfeng

Go 系列教程 —— 1. 介绍与安装

这是我们 Golang 系列教程的第一个教程。 ## Golang 是什么 Go 亦称为 Golang (译注:按照 Rob Pike 说法,语言叫做 Go,Golang 只是官方网站的网址),是由谷歌开发的一个开源的编译型的静态语言。 Golang 的主要关注点是使得高可用性和可扩展性的 Web 应用的开发变得简便容易。(译注:Go 的定位是系统编程语言,只是对 Web 开发支持较好) ## 为何选择 Golang 既然有很多其他编程语言可以做同样的工作,如 Python...阅读全文

Go语言中文网 2017-11-22 14:18:25 heyulong

Go 中锁的使用

> > 本文对Go中锁机制的进行简单介绍 Go中锁分为两种: * 互斥锁 * 读写锁 --- 互斥锁 --- 并发程序对公共资源访问的限制最常见的就是使用互斥锁的方式。在Go中,sync.Mutex 提供了互斥锁的实现。 简单使用示例: func main () { var mutex sync . Mutex count := 0 for r := 0 ; r < 50 ; r ++ { go func () { mutex . Lock () count += 1 mutex ...阅读全文

知乎专栏 2017-11-18 18:47:03 薛锦

Go 原子操作

> > 本文讲解 golang 中 sync.atomic 的常见操作 atomic 提供的原子操作能够确保任一时刻只有一个goroutine对变量进行操作,善用 atomic 能够避免程序中出现大量的锁操作。 atomic常见操作有: * 增减 * 载入 * 比较并交换 * 交换 * 存储 下面将分别介绍这些操作。 ---- 增减操作 ---- atomic 包中提供了如下以Add为前缀的增减操作: - func AddInt32(addr *int32, delta int3...阅读全文

知乎专栏 2017-11-16 21:34:49 薛锦

Go设计模式实例:简单工厂

> > 该系列文章将用简单的例子来介绍Go语言设计模式的实现。 -------- 简单工厂模式定义 -------- * 工厂模式提供创建具体实例的功能,使用者无需关心其具体实现。 ---- 适用场景 ---- * 避免客户端知道内部的具体实现,只有工厂才能接触实现细节。返回的实例可以是接口、具体类型等。 ---- 简单实例 ---- * 利用工厂模式求几何图形的边长和面积。 package main import ( "fmt" "math" ) type GeometryTy...阅读全文

知乎专栏 2017-11-10 11:42:56 薛锦

Golang并发模式下数据一致性问题

-- 前言 -- 在Golang中,并发编程变得容易实现,仅需要起一个goroutine即可开启并发模式: go f ( "goroutine" ) 但是,在并发编程中存在不少需要注意的地方。这篇文章简单讨论下,在多个goroutine对MongoDB数据库进行操作时,保证操作一致性的方法。 ---- 问题描述 ---- 假设我们起了多个goroutine,如下: go func () { //step1: 获取所有 status==true 的记录 records , _ := m...阅读全文

知乎专栏 2017-11-09 15:29:38 薛锦

分布式弹幕服务架构

今天简单记录一下弹幕服务器的设计思路,希望对大家有所帮助。 业务特点 弹幕典型的进少出多场景,一个房间如果有10W观众,每秒提交的弹幕也许只有1000次,但是广播弹幕给所有观众需要1000 * 10W次。 单机模型 为了推送消息,长连接几乎是必然的选择。 每个房间有若干观众,所有房间的观众都连接在1个服务进程上。 当弹幕提交上来,根据房间找出所有房间内的在线用户,循环将弹幕推送给他们。 假设1个服务进程的消息网络吞吐能力是50万次/秒,那么一个10万观众的房间,每秒提交5次弹幕就会达到服务端极限...阅读全文

鱼儿的博客 2017-11-07 00:00 鱼儿的博客

封装golang websocket

websocket出来好久了,一直没有动手去玩玩,今天抽了点时间写了一个golang的例子,下面简单记录一下。 协议 websocket是个二进制协议,需要先通过Http协议进行握手,从而协商完成从Http协议向websocket协议的转换。一旦握手结束,当前的TCP连接后续将采用二进制websocket协议进行双向双工交互,自此与Http协议无关。 可以通过这篇知乎了解一下websocket协议的基本原理:《WebSocket 是什么原理?为什么可以实现持久连接?》。 粘包 我们开发过TCP服...阅读全文

鱼儿的博客 2017-11-07 00:00 鱼儿的博客

Golang分布式ID生成服务

周末花了一晚上的时间,用Go写了一个ID生成服务,Github地址:go-id-alloc。 分布式ID生成,就我来看主要是2个流派,各有利弊,没有完美的实现。 1,snowflake流派。 它用于twitter的微博ID,因为是timeline按发布时间排序,所以这个算法是用毫秒时间戳作为ID的左半部,从而可以实现按时间有序。 像新浪微博也是在使用类似的ID生成算法,snowflake的好处是去中心化,但是依赖时钟的准确性,最差的情况是时钟发生了回退,那么ID就会重复;而如果不开启NTP同步时...阅读全文

鱼儿的博客 2017-11-21 00:00 鱼儿的博客

源码安装 NSQ

因为业务需要,要用到 NSQ。所以学习了下 NSQ。首先是安装,我在自己电脑上,倾向于源码安装。一是源码安装可以安装最新的代码,二是整个安装过程可以自己掌控。 但是,安装过程中遇到了一些坑。主要还是我对 Go 以及一些衍生工具用的不是特别熟悉,并且在网上搜索到的文章,都是抄来抄去的很多并不能解决我的问题。所以我把整个安装过程记录下来,给自己一个备忘,给别人一个方便。 安装 Go NSQ 是用 Go 写的,所以安装 NSQ 之前,要先安装 Go。 我这里给出安装具体过程的命令。具体可以参考我写的另...阅读全文

Segmentfault 2017-11-22 10:05:04 daryl

关于云计算,除了Docker,还有go

上个月,Go 语言的创始人之一,Unix 老牌黑客罗勃·派克(RobPike)在新文章中提到,Go 语言这十年的迅猛发展大到连他们自己都没有想到,并且还成为了云计算领域中新一代的开发语言,中国程序员对 Go 语言的热爱完全超出了他们的想象。 虚拟化,Docker,中国技术人 Docker 负责人也有类似的感叹感叹,完全没有想到中国居然有那么多技术人喜欢 Docker,有这么多人在为 Docker 做贡献。中国是除了美国本土之外的另一个如此喜欢 Docker 技术的国家。 Go 语言和 Docke...阅读全文

CSDN博客 2017年11月14日 17:34:33 EHome_BurNing

golang API

1.server端程序 package main //简单的JSON Restful API演示(服务端) //author: Xiong Chuan Liang //date: 2015-2-28 import ( "encoding/json" "fmt" "net/http" "time" ) type Item struct { Seq int Result map[string]int } type Message struct { Dept string Subject string...阅读全文

博客园 2017-11-21 16:59 peterinblog

数组与切片

[原文链接](https://yc90s.github.io/2017/11/20/%E6%95%B0%E7%BB%84%E4%B8%8E%E5%88%87%E7%89%87/) ## 数组 ### 定义 数组是一组同类型数据的集合,它是**值类型**,通过从0开始的下标索引访问元素值。初始化后**数组长度是固定的**,无法修改其长度。当作为方法的入参传入时將复制一份数组而不是引用同一指针。数组的长度也是其类型的一部分。 ### 初始化 - 长度为5的数组,其元素值依次为:1, 2, ...阅读全文

Go语言中文网 2017-11-21 20:36:16 yc90s

方法,接口学习笔记

之前在开发中编得过就行,没有好好地去思考一些细节问题,比如interface到底有什么用,现在好好总结下1.方法 package main import "fmt" import "reflect" type S struct { a int } func (s S) Set1(v int) { s.a = v } func (s *S) Set2(v int) { s.a = v } func (s *S) Get() int { return s.a } func main() { var ...阅读全文

Segmentfault 2017-11-21 12:05:05 Cedrus