国内最专业的IT技术学习网

UI设计

当前位置:主页 > UI设计 >

使用Go处理每分钟百万请求

发布时间:2019/07/02标签:   每分钟    点击量:

原标题:使用Go处理每分钟百万请求
这篇文章在medium上很火,作者以现实案例来剖析,讲得很好。咱们常常据说应用Go的goroutine和channel很轻易完成高并发,那是不是全体代码都放在goroutine中运转便可以完成高并发顺序了呢?很明显并不是。这篇文章将教各人怎样一步一步写出一个简略的, 高并发的Go顺序。注释我在几家差别的公司处置反渣滓邮件,防病毒和反歹意软件的任务超越15年,当初我晓得这些体系终极会由于咱们要天天处置大批数据而变得越来越庞杂。现在,我是smsjunk.com的CEO和 KnowBe4的首席架构师,他们都是收集保险行业的公司。有味的是,在从前的10年里,作为一位软件工程师,我参加过的全部Web后端开辟大局部都是应用RubyonRails实现的。不要误解我的意义,我喜爱 RubyonRails,我信任这是一个了不起的生态,然而过了一段时光,你开端以 Ruby的方法考虑和计划体系,忘了怎样高效和底本能够应用多线程、并行、疾速履行和小的内存耗费来简化软件架构。多年来,我是一位C/C++,Delphi和 C#开辟职员,并且我刚开端认识到怎样准确的应用东西停止任务能够会有多庞杂。我对互联网中那些言语和框架战斗并不太感兴致,比方哪门言语更好,哪个框架更快。 我一直信任效力,出产力和代码可保护性重要取决于怎样简略的构建处理计划。成绩在处置咱们的匿名监测和剖析体系时,咱们的目的是可能处置来自数百万端点的大批POST恳求。Web处置顺序将收到一个JSON文档,该文档能够包括须要写入 AmazonS3的多个无效内容的聚集,以便咱们的 map-reduce体系稍后对这些数据停止操纵。传统上,咱们会斟酌创立一个任务层架构,应用诸如以下的技巧栈: Sidekiq Resque DelayedJob ElasticbeanstalkWorkerTier RabbitMQ ...并搭建2个差别的集群,一个用于web前端,一个用于worker,因而咱们能够随便扩容呆板来处置马上到来的恳求。从一开端,咱们的团队就晓得咱们能够在Go中如许做,由于在探讨阶段咱们看到这能够是一个十分大流量的体系。我始终在应用Go,大概快2年时光了,并且咱们也应用Go开辟了一些体系,然而没有一个体系的流量可能到达这个数目级。咱们起首创立了几个struct来界说咱们经过POST挪用接受到的Web恳求,并将其上传到S3存储中。typePayloadCollectionstruct{WindowsVersionstring`json:"version"`Tokenstring`json:"token"`Payloads[]Payload`json:"data"`}typePayloadstruct{//[redacted]}func(p*Payload)UploadToS3()error{//thestorageFoldermethodensuresthattherearenonamecollisionin//casewegetsametimestampinthekeynamestorage_path:=fmt.Sprintf("%v/%v",p.storageFolder,time.Now().UnixNano())bucket:=S3Bucketb:=new(bytes.Buffer)encodeErr:=json.NewEncoder(b).Encode(payload)ifencodeErr!=nil{returnencodeErr}//EverythingweposttotheS3bucketshouldbemarked'private'varacl=s3.PrivatevarcontentType="application/octet-stream"returnbucket.PutReader(storage_path,b,int64(b.Len()),contentType,acl,s3.Options{})}

版权信息Copyright © IT技术教程 版权所有    ICP备案编号:鲁ICP备09013610号