网站大量收购闲置独家精品文档,联系QQ:2885784924

无用之用--创业公司中小众编程语言的使用.pdf

无用之用--创业公司中小众编程语言的使用.pdf

  1. 1、本文档共45页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
无用之用--创业公司中小众编程语言的使用.pdf

Go语⾔在⼩⽶抢购系统中的应⽤ ——⽆⽤之⽤,兼谈⼀些⼩众编程语⾔ 主讲:韩祝鹏 (hanzhupeng@) 开场与⾃我介绍 • 韩祝鹏 (albertlee) • ⼩⽶⺴ (2010年7⽉ — 今) • ⼩众编程语⾔业余爱好者 内容提纲 • ⼩⽶⺴⼤型秒杀系统设计 • Go语⾔在⼤秒系统中的使⽤与优化 • ⾼并发系统设计的思路 • 介绍⼏个⼩众的编程语⾔ • Just for fun 抢购应⽤的场景 • 开发时间限制 • 突发海量并发请求 • 数据准确性要求:不能超卖、购买数量限制 • 对失败的容忍基本为零 瞬时⾼并发 抢购系统历史 • 基于PHP+Mysql同步请求的系统 • 基于PHP和⽇志异步处理的系统 • 基于Go的⼤秒系统 基于PHP+Mysql • 数据⼀致性好 • 难于扩展,在突发⼤流量下,会很惨烈 • 只在2011年第⼀次预约时⽤过⼀次 基于PHP+⽂件锁的系统 • PHP层通过⽂件锁判断结果,写⽇志,返回结果 • ⽇志异步集中处理 • 集中记数,操作缺货开关 • 抢到资格的⽤户列表通过消息队列传⼊商城系统 • 数量控制不精确,放弃部分数据⼀致性,获取性能 基于PHP+⽂件锁的系统 ⼀周内能快速搞定! 基于PHP+⽂件锁的系统 基于Go语⾔的⼤秒系统 • 重写! • 业务逻辑越来越复杂,急需管理 • 对更精细控制能⼒的需求 为什么选择Go? • 语⾔偏好 • 语法标准,相对简单 • 编译型,强类型,GC • Goroutine 并发能⼒ • 编译成可执⾏⽂件,部署简单 • 系统的消息通道结构与Go语⾔⻛格内在相似性 为什么选择Go? • ⾮技术因素 • 应⽤核⼼逻辑较为固定,不需要频繁改动 • 在正式项⺫开始前半年,已经做过尝试 • 开发⼈员上⼿容易 • ⽼同事许式伟的推⼲与榜样作⽤ why not X? • Erlang: 学习成本⼤,不确定性⼤。抱持开放态度 • PHP :我希望有⼀个简单的基于内存的数据管理 • C/C++ :没信⼼快速搞定 • Python :对性能有所担忧,开发快速的收益⻓期看难 以抵消服务器成本 ⼤秒系统的设计 • Go语⾔开发前端HTTP层及middle层 • http层与middle层之间通过Redis做消息队列 • http层⽤于维持⼤量连接,保护middle层 • http层通过维护⼤量⻓连接,减少带宽使⽤ • middle层处理放⾏逻辑判断 ⼤秒系统的设计 • ⽤户的请求随机发送到HTTP服务器上 • 通过消息队列将⽤户请求汇聚到同⼀台middle服务器 • 系统的消息通道结构与Go语⾔⻛格内在相似性 • 系统结构的设计与语⾔⻛格的相互影响 针对Go语⾔的性能优化 • 使⽤ Go 1.3 ,提升GC性能 • 使⽤ Go 1.2 定制HTTP包 • 增加写缓存和读缓存的通道⻓度 • 创建连接时,减少读写缓存的⻓度 • 尽量减少heap上的短⽣命周期对象(避免频繁申请内 存,引起GC问题) • 实际效果:单机最⼤连接数增⻓了⼀倍 增加写缓存和读缓存的通道⻓度 • 使⽤chan作为资源池 修改后: 修改前: bufioWriter由默认4k减少为32字节 • 减少内存使⽤ • 减少写buffer操作 bufioReader 由默认4k减少为1k • 连接结束时,将buf放回资源池 • ⽆法将资源放回资源池时,显式设置为nil • 优化GC (具体效果待考) 改⼩buf ,减少写buf的操作

文档评论(0)

qspd + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档