Go语言中文网 为您找到相关结果 19

从设计到实战:Go 如何扛住100亿次请求

前几天,偶然看到了 《扛住100亿次请求——如何做一个“有把握”的春晚红包系统”》(url)一文,看完以后,感慨良多,收益很多。正所谓他山之石,可以攻玉,虽然此文发表于2015年,我看到时已经是2016年末,但是其中的思想仍然是可以为很多后端设计借鉴,。同时作为一个工程师,看完以后又会思考,学习了这样的文章以后,是否能给自己的工作带来一些实际的经验呢?所谓纸上得来终觉浅,绝知此事要躬行,能否自己实践一下100亿次红包请求呢?否则读完以后脑子里能剩下的东西 不过就是100亿 1400万QPS整流 这样的字眼,剩下的文章将展示作者是如何以此过程为目标,在本地环境的模拟了此过程。   实现的目标: 单机支持100万连接,模拟了摇红包和发红包过程,单机峰值QPS 6万,平稳支持了业务。   注:本文...阅读全文

博文 0001-01-01 00:00:00 XiaoJIaQI

Golang gzip压缩的一个问题

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, 否则得不到任何数据, 这个问题没注意, 查了半天...阅读全文

博文 2016-02-19 00:00:01 u013834131

缓存 + 哈希 = 高并发?

当前互联网时代,怎么少的了高并发呢?高并发和高可用一样, 已经变成各个系统的标配了,如果你的系统QPS没有个大几千上万,都不好意思跟人打招呼,虽然可能每天的调用量不超过100。高并发这个词,我个人感觉是从电商领域开始往外流传的,特别是电商领域双11那种藐视全球的流量,再把技术架构出来分享一把,现在搞得全互联网都在说高并发,而且你注意回忆一下所有你看到的高并发系统,往往都逃不开一个核心概念,那就是缓存+哈希,一切都是以这个概念和基础的,仿佛这就是高并发的核心技术了。`我们看到的高并发技术围绕这个核心技术,通常我们看到的各种高并发的架构系统,在博客、论坛、现场分享出来的高并发系统,都跑不出以下几个方面的东西。资源静态化就是那种单个页面流量巨大无比,每秒的QPS几十万上百万的系统,确实并发高的系统...阅读全文

博文 2017-09-29 18:34:51 杨学好

[GOLANG]获取远程POST来的XML数据(微信公众平台)

今天测试用GO语言链接微信公众平台,一切都很顺利,但是发来的XML数据一直收不到。 将所有有可能的函数和值都测试过了,例如Request.Form,Request.PostForm,Request.MultiPartForm等都没有…… 最后发现它竟然藏在Request.Body里面,包的解释不完善害死人。 Request.Body里的数据是io数据,用ioutil.ReadAll方法可以将数据读出来。 读出来后用string方法转换一下,再用相应的解析函数解析成XML类就可以了。 记录下来留念一下...阅读全文

博文 2017-02-09 16:48:38 葱烧烙饼

Kafka有哪些可靠性保障?

**一、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工作的过...阅读全文

以太坊事件框架

过去在学Actor模型的时候,就认为异步消息是相当的重要,在华为的时候,也深扒了一下当时产品用的消息模型,简单实用,支撑起了很多模块和业务,但也有一个缺点是和其他的框架有耦合,最近看到以太坊的事件框架,同样简单简洁,理念很适合初步接触事件框架的同学,写文介绍一下。 以太坊的事件框架是一个单独的基础模块,存在于目录go-ethereum/event中,它有2中独立的事件框架实现,老点的叫TypeMux,已经基本弃用,新的叫Feed,当前正在广泛使用。 TypeMux和Feed还只是简单的事件框架,与Kafka、RocketMQ等消息系统相比,是非常的传统和简单,但是TypeMux和Feed的简单简洁,已经很好的支撑以太坊的上层模块,这是当下最好的选择。 TypeMux和Feed各有优劣,最优秀...阅读全文

博文 2018-11-17 20:34:40 大彬

以太坊事件框架

过去在学Actor模型的时候,就认为异步消息是相当的重要,在华为的时候,也深扒了一下当时产品用的消息模型,简单实用,支撑起了很多模块和业务,但也有一个缺点是和其他的框架有耦合,最近看到以太坊的事件框架,同样简单简洁,理念很适合初步接触事件框架的同学,写文介绍一下。 以太坊的事件框架是一个单独的基础模块,存在于目录go-ethereum/event中,它有2中独立的事件框架实现,老点的叫TypeMux,已经基本弃用,新的叫Feed,当前正在广泛使用。 TypeMux和Feed还只是简单的事件框架,与Kafka、RocketMQ等消息系统相比,是非常的传统和简单,但是TypeMux和Feed的简单简洁,已经很好的支撑以太坊的上层模块,这是当下最好的选择。 TypeMux和Feed各有优劣,最优秀...阅读全文

博文 2018-10-18 11:34:42 shitaibin

实现Golang和Erlang的连接(Port)

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(...阅读全文

一本正经地聊聊raft

笔者很久以前就了解过raft了,它相比paxos实现跟逻辑简单了许多,因此市场上有很多的分布式系统都是使用raft协议来保证数据的一致性的。不过第一个实际接触到的raft应用倒是mongo的副本集了。所以今天就从mongo的副本集说起。通常有多少个副本集,就保存有多少份数据。多份数据,就需要通过复制的手段来实现。这里复制的目的并不是为了读写分离,而是提高了数据的高可用。多份数据为了保证最终一致性,mongo底层是用一种变型的raft来实现的。一、raft的介绍1.1 问题所在如果是单节点,客户端修改某个值,成功的话整个系统都变为某个值: ok!一个节点,我自己跟自己达成共识即可。如果像mongo副本集,有多个节点存储同份数据,那就麻烦了: 同一个客户端同时向两个节点发送更新数据的命令,结果节...阅读全文

实现Golang和Erlang的连接(Port)

--- 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非常简单,实际上就是通过标准输入输出流与外部程序就行交...阅读全文