golang 中有判断切片中是否包含某元素的现成方法么?
不知道从何查起....阅读全文
不知道从何查起....阅读全文
mysql 作为成熟稳定的数据持久化解决方案,广泛地应用在各种领域,但是在数据分析、全文检索方面稍有不足,而 elasticsearch 作为数据分析领域的佼佼者,刚好可以弥补这项不足,而我们要做的只需要将 mysql 中的数据同步到 elasticsearch 中即可,今天介绍使用logstash将mysql数据全量导出到es,使用go-mysql-elasticsearch将mysql实时同步到es。 添加mysql测试数据 SET NAMES utf8; SET FOREIGN_KEY_CHECKS = 0; -- ---------------------------- -- Table structure for `movies` -- ----------------------...阅读全文
前几天,偶然看到了 《扛住100亿次请求——如何做一个“有把握”的春晚红包系统”》(url)一文,看完以后,感慨良多,收益很多。正所谓他山之石,可以攻玉,虽然此文发表于2015年,我看到时已经是2016年末,但是其中的思想仍然是可以为很多后端设计借鉴,。同时作为一个工程师,看完以后又会思考,学习了这样的文章以后,是否能给自己的工作带来一些实际的经验呢?所谓纸上得来终觉浅,绝知此事要躬行,能否自己实践一下100亿次红包请求呢?否则读完以后脑子里能剩下的东西 不过就是100亿 1400万QPS整流 这样的字眼,剩下的文章将展示作者是如何以此过程为目标,在本地环境的模拟了此过程。 实现的目标: 单机支持100万连接,模拟了摇红包和发红包过程,单机峰值QPS 6万,平稳支持了业务。 注:本文...阅读全文
为什么在form里面含有enctype="multipart/form-data"时用r.parseForm()就解析不到数...阅读全文
D:\GoWorkSpace\src\Gin_API_Framework\api>go run main.go # Gin_API_Framework/vendor/github.com/fvbock/endless ..\vendor\github.com\fvbock\endless\endless.go:64: undefined: syscall.SIGUSR1 ..\vendor\github.com\fvbock\endless\endless.go:65: undefined: syscall.SIGUSR2 ..\vendor\github.com\fvbock\endless\endless.go:68: undefined: syscall.SIGTSTP .....阅读全文
课程介绍 阿里云安全管家服务是阿里云安全专家基于阿里云多年安全最佳实践经验为云上用户提供的全方位安全技术和咨询服务,为云上用户建立和持续优化云安全防御体系,保障用户业务安全。 阿里云应急响应服务能够在您的系统遭受黑客攻击时提供快速、专业的应急处理,包括入侵行为排查、病毒木马查杀、入侵原因分析、入侵影响评估等;能够帮助客户正确应对黑客攻击,降低攻击带来的安全损失。 产品详情:https://www.aliyun.com/product/sos/ 课时列表 • 课时1:安全管家服务规格介绍 • 课时2:基础巡检功能介绍 • 课时3:如何使用应急响应服务 开始学习http://click.aliyun.com/m/27864/ ...阅读全文
联系方式见 https://studygolang.com/wiki/contac...阅读全文
工作需要 一种 DLL 库, Golang 怎样生成 dll 呢? 查了很多资料,未见如何做。哪位大侠援手...阅读全文
gopath绝对没问题 go get可以 但是 govendor mac中 Error: Missing GOPATH. Check your environment variable GOPATH linux 中 Error: Package "/data/src/go\n/src/github.com/astaxie/beego" not a go package or not in GOPATH. ...阅读全文
1. 现象 服务的cpu跑满(golang实现), 并大量报too many open files错误.服务使用systemd来运行,部署在阿里ecs上. 2.分析 从日志来看,cpu的上升主要为到达文件数限制引起的,但之前已经更改过系统的文件数及所有用户的文件数,按道理是不应该出现这个问题的,后来查阅资料发现,文件数可以从三个维度限制分别为操作系统限制,用户态限制,以及进程限制,对于这三个维度选取最小值生效.于是对系统进行分析. 首先查看当前打开文件数, 进程占用的文件数并不多. lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 然后获取系统级文件数限制 输入命令cat /etc/sysctl.conf得到fs.file-max = 1...阅读全文
在调试,用一个main函数,调用了同一个package下面,另一个源文件的方法,可是报错了 undefined: CallMethod 我 go build 执行不报错,这个问题怎么排查呢,多谢!...阅读全文
今天测试用GO语言链接微信公众平台,一切都很顺利,但是发来的XML数据一直收不到。 将所有有可能的函数和值都测试过了,例如Request.Form,Request.PostForm,Request.MultiPartForm等都没有…… 最后发现它竟然藏在Request.Body里面,包的解释不完善害死人。 Request.Body里的数据是io数据,用ioutil.ReadAll方法可以将数据读出来。 读出来后用string方法转换一下,再用相应的解析函数解析成XML类就可以了。 记录下来留念一下...阅读全文
当前互联网时代,怎么少的了高并发呢?高并发和高可用一样, 已经变成各个系统的标配了,如果你的系统QPS没有个大几千上万,都不好意思跟人打招呼,虽然可能每天的调用量不超过100。高并发这个词,我个人感觉是从电商领域开始往外流传的,特别是电商领域双11那种藐视全球的流量,再把技术架构出来分享一把,现在搞得全互联网都在说高并发,而且你注意回忆一下所有你看到的高并发系统,往往都逃不开一个核心概念,那就是缓存+哈希,一切都是以这个概念和基础的,仿佛这就是高并发的核心技术了。`我们看到的高并发技术围绕这个核心技术,通常我们看到的各种高并发的架构系统,在博客、论坛、现场分享出来的高并发系统,都跑不出以下几个方面的东西。资源静态化就是那种单个页面流量巨大无比,每秒的QPS几十万上百万的系统,确实并发高的系统...阅读全文
func (b *MyBucket) Gzip(data []byte) []byte { var res bytes.Buffer gz, _ := gzip.NewWriterLevel(&res, 7) _, err := gz.Write(data) if err != nil { Log4e(err) } else { gz.Close() } return res.Bytes() } 最近将图片使用gzip压缩上传到s3, gzip压缩的过程中,Write之后一定要及时Close,不能defer, 这样才能flush, 否则得不到任何数据, 这个问题没注意, 查了半天...阅读全文
一次gRPC使用不当导致goroutine泄漏排查记...阅读全文
今天,翻墙也弄不了呀!大佬们,咋解决呀...阅读全文
今天做文件操作的时候,发现了一个路径问题. 当我在使用相对路径进行文件操作时(之前项目是用Eclipse写的),使用"./"得到的路径是基于GoPath的当前路径. 当我今天换成LiteIDE的时候,项目报错了.提示找不到文件,很纳闷找了半天,排查了半天发现,LiteIDE使用"./"是获取当前运行程序所在的当前路径. 与Eclipse环境恰恰相反...阅读全文
go tool dist: FAILED: hg identify -b 用all.bash进行编译的时候总是出现这个错误。导致编译推出,查了查好像是./cmd/dist/dist报的错。说 abort: there is no Mercurial repository here (.hg not found) go tool dist: FAILED: hg identify -b 怎么解决...阅读全文
11.蛤蟆笔记go语言——内存分配器 内存分配器,又叫做MemoryAllocator. 核心:自主管理,缓存复用,无锁分配。 内存管理以页为基本单位,多个地址连续页构成内存块。 页是page, 连续页是span. 按 8 倍数,将小对象分成多种大小规格。size class. 三级管理机构 三级管理机构如下图1: 算法依赖连续地址,预留较大地址空间。如下图2: 按页保存 span指针。 反查 object 所属 span。 检查相邻 span 是否可合并。 快速分配,按需扩张。 如下图3: 垃圾回收 垃圾回收器引发回收操作。如下图4: 为管理对象分配内存,不占用预留地址 图5...阅读全文
今天继续坑系列,高可用已经讲过了,当前互联网时代,怎么少的了高并发呢?高并发和高可用一样, 已经变成各个系统的标配了,如果你的系统QPS没有个大几千上万,都不好意思跟人打招呼,虽然可能每天的调用量不超过100。 高并发这个词,我个人感觉是从电商领域开始往外流传的,特别是电商领域双11那种藐视全球的流量,再把技术架构出来分享一把,现在搞得全互联网都在说高并发,而且你注意回忆一下所有你看到的高并发系统,往往都逃不开一个核心概念,那就是缓存+哈希,一切都是以这个概念和基础的,仿佛这就是高并发的核心技术了。` 我们看到的高并发技术 围绕这个核心技术,通常我们看到的各种高并发的架构系统,在博客,论坛,现场分享出来的高并发系统,都跑不出以下几个方面的东西。 资源静态化 就是那种单个页面流量巨大无比,每秒...阅读全文
package mysql import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" ) var ( db *sql.DB err error ) func init() { db, err = sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/database?charset=utf8") if err != nil { panic(err.Error()) } db.SetMaxOpenConns(1000) err = db.Ping() if err != nil { fmt.Println("Failed to connect to mysql, err:" ...阅读全文
事故经过 排查 总结 事故经过 【2019-12-27 18:00 周五】业务方突然找来说调用我们程序大量提示“触发限流”,但是我们没有收到任何监控报警。紧急查看了下 ServiceMesh sidecar 代理监控发现流量持续在减少,但是监控中没有任何触发限流的 http code 429 占比,如果有触发限流我们会收到报警。 后来通过排查是程序中有一个历史限流逻辑触发了,但是程序中触发限流返回的 http code 是 200,这就完全避开了 sidecar http code 非200 异常指标监控报警。把代码中的限流阈值调了非常大的一个值,统一走 sidecar 限流为准。 猜测本次触发限流可能跟网路抖动有关系,网络抖动导致连接持续被占用,最终 qps 超过限流阈值。因为这个程序最近...阅读全文
2018/06/07 16:16:14 INFO ▶ 0001 Using 'myapp' as 'appname' 2018/06/07 16:16:14 INFO ▶ 0002 Initializing watcher... 2018/06/07 16:16:38 SUCCESS ▶ 0003 Built Successfully! 2018/06/07 16:16:38 INFO ▶ 0004 Restarting 'myapp'... 2018/06/07 16:16:38 SUCCESS ▶ 0005 './myapp' is running... [ORM]2018/06/07 16:16:38 register db Ping `def...阅读全文
**一、AR** 在Kafka中维护了一个AR列表,包括所有的分区的副本。AR又分为ISR和OSR。 AR = ISR + OSR。 AR、ISR、OSR、LEO、HW这些信息都被保存在Zookeeper中。 **1.ISR** ISR中的副本都要同步leader中的数据,只有都同步完成了数据才认为是成功提交了,成功提交之后才能供外界访问。 在这个同步的过程中,数据即使已经写入也不能被外界访问,这个过程是通过LEO-HW机制来实现的。 **2.OSR** OSR内的副本是否同步了leader的数据,不影响数据的提交,OSR内的follower尽力的去同步leader,可能数据版本会落后。 最开始所有的副本都在ISR中,在kafka工作的过...阅读全文
看源码的时候看到这段,看注释能看懂,但是没有看到过这个语法的具体说明,谢谢啊。 if wt, ok := src.(WriterTo); ok { return wt.WriteTo(dst) } ...阅读全文
过去在学Actor模型的时候,就认为异步消息是相当的重要,在华为的时候,也深扒了一下当时产品用的消息模型,简单实用,支撑起了很多模块和业务,但也有一个缺点是和其他的框架有耦合,最近看到以太坊的事件框架,同样简单简洁,理念很适合初步接触事件框架的同学,写文介绍一下。 以太坊的事件框架是一个单独的基础模块,存在于目录go-ethereum/event中,它有2中独立的事件框架实现,老点的叫TypeMux,已经基本弃用,新的叫Feed,当前正在广泛使用。 TypeMux和Feed还只是简单的事件框架,与Kafka、RocketMQ等消息系统相比,是非常的传统和简单,但是TypeMux和Feed的简单简洁,已经很好的支撑以太坊的上层模块,这是当下最好的选择。 TypeMux和Feed各有优劣,最优秀...阅读全文
time 包中的Sleep函数是在sleep.go中声明的,但没看到此函数的定义,这个函数的定义在哪呢...阅读全文
过去在学Actor模型的时候,就认为异步消息是相当的重要,在华为的时候,也深扒了一下当时产品用的消息模型,简单实用,支撑起了很多模块和业务,但也有一个缺点是和其他的框架有耦合,最近看到以太坊的事件框架,同样简单简洁,理念很适合初步接触事件框架的同学,写文介绍一下。 以太坊的事件框架是一个单独的基础模块,存在于目录go-ethereum/event中,它有2中独立的事件框架实现,老点的叫TypeMux,已经基本弃用,新的叫Feed,当前正在广泛使用。 TypeMux和Feed还只是简单的事件框架,与Kafka、RocketMQ等消息系统相比,是非常的传统和简单,但是TypeMux和Feed的简单简洁,已经很好的支撑以太坊的上层模块,这是当下最好的选择。 TypeMux和Feed各有优劣,最优秀...阅读全文
``` package main import ( "fmt" ) // 一分为2, 肯定有一半是有序的 func BinarySearchDef(data []int, key int, low int, high int) int { if len(data) == 0 { return -1 } // 先找有序的一半,然后判定时候在该范围内, 注意临界值 for low <= high { mid := low + (high-low)/2 fmt.Println(mid) fmt.Println(data[mid]) if key == data[mid] { return mid } // 如果 key 比中间值小 if key < data[mid] { if key == da...阅读全文
笔者很久以前就了解过raft了,它相比paxos实现跟逻辑简单了许多,因此市场上有很多的分布式系统都是使用raft协议来保证数据的一致性的。不过第一个实际接触到的raft应用倒是mongo的副本集了。所以今天就从mongo的副本集说起。通常有多少个副本集,就保存有多少份数据。多份数据,就需要通过复制的手段来实现。这里复制的目的并不是为了读写分离,而是提高了数据的高可用。多份数据为了保证最终一致性,mongo底层是用一种变型的raft来实现的。一、raft的介绍1.1 问题所在如果是单节点,客户端修改某个值,成功的话整个系统都变为某个值: ok!一个节点,我自己跟自己达成共识即可。如果像mongo副本集,有多个节点存储同份数据,那就麻烦了: 同一个客户端同时向两个节点发送更新数据的命令,结果节...阅读全文
title: 实现Golang和Erlang的连接(Port) categories: Golang 在Erlang中,有很多种方式去实现与其他语言的交互,常见的几种方式有 使用TCP协议交互 使用Port 使用Erl_Interface方式去实现 CNode NIF 后面几种难度都是有的,也使用了比较复杂的C/C++,而且比较容易出现问题。TCP的方式是通过网络协议,个人也不是很喜欢,那就剩下Port方式去连接Erlang服务器。 Erlang的官方文档中对Port的介绍 在Erlang中使用Port非常简单,实际上就是通过标准输入输出流与外部程序就行交互。 现在我还是沿用官方文档中代码,仅做部分修改,实现Erlang与Golang的交互。 %% complex1.erl -module(...阅读全文
--- title: 实现Golang和Erlang的连接(Port) categories: Golang --- 在Erlang中,有很多种方式去实现与其他语言的交互,常见的几种方式有 1. 使用TCP协议交互 2. 使用Port 3. 使用Erl_Interface方式去实现 4. CNode 5. NIF 后面几种难度都是有的,也使用了比较复杂的C/C++,而且比较容易出现问题。TCP的方式是通过网络协议,个人也不是很喜欢,那就剩下Port方式去连接Erlang服务器。 [Erlang的官方文档中对Port的介绍](http://erlang.org/doc/tutorial/c_port.html) 在Erlang中使用Port非常简单,实际上就是通过标准输入输出流与外部程序就行交...阅读全文
1.在做内存问题相关的 profiling 时: 若 gc 相关函数占用异常,可重点排查对象数量 解决速度问题(CPU占用)时,关注对象数量( --inuse/alloc_objects )指标 解决内存占用问题时,关注分配空间( --inuse/alloc_space )指标 inuse 代表当前时刻的内存情况,alloc 代表从从程序启动到当前时刻累计的内存情况,一般情况下看 inuse 指标更重要一些,但某些时候两张图对比着看也能有些意外发现。 2.在日常 golang 编码时: 参数类型要检查,尤其是 sql 参数要检查(低级错误) 传递struct尽量使用指针,减少复制和内存占用消耗(尤其对于赋值给interface,会分配到堆上,额外增加gc消耗) 尽量不使用循环引用,除非逻辑真...阅读全文