说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

高性能微信公众平台开发

HTML文档下载 WORD文档下载 PDF文档下载
微信平台的月活跃数已达4.38亿,微信已被越来越多的商家为一大重点营销平台。微信的发展也带来了大量的数据存储及数据交互。那么,在进行微信开发时,面对用户较多的情况下,应如何确保瞬间并发的压力?

【编者按】目前,微信平台的月活跃数已达4.38亿,微信已被越来越多的商家为一大重点营销平台。面对如此庞大的用户群,商家迫切需要提供定制化的服务。那么,如何运营微信公众号成为企业亟需解决的问题,为此CSDN特别开设了 微信开发者社区供企业共同探讨、借鉴其他行业优秀的应用开发案例,为开发者带来一线“吃螃蟹”的经验得失。另外,企业/用户还可以借助微信项目对接平台,发布微信开发需求、寻找微信开发项目。

在进行微信开发时,面对用户较多的情况下,如何确保瞬间并发的压力?对于开发人员而言,一定要预估好自己的产品以后的用户量和数据量,保证产品稳定、有效地运行。  


微信基础交互

在谈更高性能的微信公众平台接口开发之前,我们先了解下微信开发的基础。微信公众平台官网的解释是:公众平台开发接口提供与用户进行消息交互、自定义菜单交互的能力。对于已接入的第三方接口,当用户发送消息时,微信会推送至第三方服务器。以上就是微信公众平台的开发流程,很多人因不明白而使开发受阻,如图1所示。


图1 微信公众平台开发流程

用户主动发送的消息分成普通消息、事件消息、语音识别结果。普通消息包含文本、图片、语音、视频、位置、链接等多维度消息,也是开发者们最常用的。事件消息包含关注、取消关注、扫描二维码参数、上报地理位置、自定义菜单(点击、跳转)监控等。整个消息按标准XML格式进行传递,所以开发人员可以用任何语言进行代码开发。在大型项目中会涉及转发处理。消息处理主要指的是被动接收,以及靠高级接口进行主动发送、高级群发等。针对这块,不久前微信已推出了模板消息功能。微信在消息处理上的形态已基本形成。

用户处理可以根据OpenID获取用户信息,通过Auth接口进行网页授权,只要在微信浏览器中即可获得用户信息,朋友圈分享的一些功能开发主要依赖此接口。消息对开发人员来说就是指令和关键词,程序主要用于处理各种指令,并返回对应的数据,该逻辑使微信开发更加简单,准入门槛更低。微信的发展也带来了大量的数据存储及数据交互,特别是对于拥有很多商户的开发商来说。

数据存储与快速查询

微信交互完全靠OpenID来进行用户识别,在标准XML中(FromUserName),建议开发者在数据库中建立一个与OpenID对应的表,该表只做关系处理,粉丝相关的数据则使用单独的表去存储。粉丝表的操作非常多,用户关注时要插入,取消关注时要删除。

在一些现场活动中遇到大量用户加入时,如果没有经过优化,服务器基本会崩溃,此时要用数据库分表解决方案。拿MySQL来说,一般建议一张表存储500万数据(多用户系统),否则高并发情况下数据库压力会非常大。另外,比较重要的就是微信交互数据,微信公众平台服务器只提供5天的用户交互信息供运营者查询。

微信在做架构时已意识到这一点,该项不能一直存储供用户查询,否则服务器架构扛不住。从我们公司的角度来看,一个公众号平均有1000个粉丝; 万个公众号,6000万粉丝,每天10%的用户会发送至少一条消息。也就是说,有600万的消息存储量,微信580万公众号的数据压力可想而知。即便如此,对于我们这样的商业公司来说,再大的数据量也要存储,因为我们需要更多的用户数据为商家的发展提供数据分析和数据模型。现阶段我们的处理方案是:近期数据实时查询 、历史数据异步查询 、数据库采用分布式。

  • 近期数据实时查询

将1~2个月的数据存储在实时数据库中,提供分布式解决方案,保证插入、查询的性能。

  • 历史数据异步查询

暂时将数据从热点数据库转移到专门的数据分析服务器,只用来提供查询服务,可借助一些搜索查询,利用数据分析软件进行提炼与大数据挖掘。

  • 数据库分布式

预估数据量比较大的内容,采用分布式存储,保证数据库的高性能服务。

实例解析

“分享有礼”是我们公司2014年七夕节上线的一个项目,上线两天,PV数就达到了200万,成功领取盒子的用户达20万人。该项目源于BMW的“分享至朋友圈,求助好友帮助领取奖品”的活动。技术评审时我们就意识到这是一个疯狂的项目。我们将面临Web、DB、带宽三项挑战,并且还要与微信服务器进行大量交互。

先说微信交互层面,朋友圈分享不需要用户进行关注,也不会产生用户信息交互,比较简单。但其业务逻辑中有个比较可怕的地方,即已领过盒子的用户,在第二次进入时要记录该用户已领取过盒子,同时用户打开朋友圈(朋友分享的链接),点击协助后也要对此进行记录。微信高级接口中有个Auth接口(Scope为snsapi_base),无须用户授权就可以获取用户OpenID。借此我们的解决方案是用户每打开一次,我们就去请求一次微信服务器。然而,这个解决方案带来的潜在风险很大。压力测试过程中,基本上2000并发压力就很大了,我们通过以下方法解决了该问题。

  • access_token进行了缓存存储,这可以减少一次服务器交互。
  • 用户OpenID存储在浏览器Cookie中。程序先判断浏览器Cookie,Cookie中有就不请求,这减少了用户二次打开时的请求量。
  • 用户数据存储的表加上了Memcached这种缓存中间件。

微信浏览器优化方案

在微信公众平台开发中,对微信浏览器的了解很重要。微信浏览器跟普通浏览器没什么区别,只是微信在其中做了一定的修改。当一个产品流量比较大时,上述架构会解决微信服务器交互的压力。所存在的带宽压力、Web压力还是需要靠Web开发技术来解决,手机浏览器每一个请求都要耗费流量。2G网络的用户也很多,所以该项是微信开发非常重要的一点。下面是一些优化小技巧。

  • 图片Sprite把常用的小图片合并成为一张大图,减轻多次请求造成的流量浪费。
  • CSS、JS合并压缩推荐Google的工具Minify。
  • 纯CSS、JS压缩推荐Apache自带的Gzip模块。

所以在进行微信开发时,用户较多的情况下,瞬间并发压力会比较大。不过作为开发人员,一定要预估好自己的产品以后的用户量和数据量。保证产品稳定、有效地运行。  

作者简介:张毅,前腾讯团购电商业务高级工程师,早期还担任过苏州同程旅游网技术经理,负责公司平台网站开发,涉足电商、在线旅游、政府信息化等多个行业。具有多年互联网技术经验,长期专注于LAMP技术应用与优化、技术架构,拥有丰富的大型项目规划和实施经验。


干货来袭,更多微信应用开发精彩案例,请查看 微信技术社区!

SDCC 2015:顶尖技术精英云集 大会日程及首批讲师议题公布 《近匠》专访猿团创始人CEO谢恩明:梦想、未来、改变 《近匠》专访小熊尼奥:从软硬结合到IP合作,AR产品的机遇 W3C启动Web支付标准工作,推进在线结算流程 W3C中国区会员沙龙在京召开 W3C CEO Jeff分享W3C未来发展重点 【SDCC讲师专访】车轮互联总架构师韩天峰:PHP是最好的编程语言 SDCC 2015讲师专访精彩集锦(一):你想知道的,都在这! (入门篇)带你走进Erlang 【大神来了】Elixir语言设计者José Valim:释放Erlang VM的能量 【SDCC 2015讲师专访】刘小溪:Vert.x3的异步框架实战 【CTO讲堂】支付接入开发的陷阱有多深? 程序员界“香饽饽”、大神级别人物集体亮相——SDCC 2015编程语言专场议题曝光 【CTO沙龙】CDN在共享经济下的创新应用 深入浅出Fetch API 带你入解应用场景及适用问题 SDCC 2015讲师专访精彩集锦(二):途牛网、饿了么、快的等大牛都来了 百度、饿了么、美团专家齐聚SDCC2015,剖析前端开发核心技术 【SDCC讲师专访】百度乔刚:前端可视化难点分析及探索实践 【CTO讲堂】Growth Hacking背后,数据分析平台的架构调整 BAT、巨杉、南大、柏睿等齐聚SDCC—新一代数据库专场议题曝光! 《近匠》BeeCloud创始人黄君贤:三行代码集成支付的技术实现 【SDCC讲师专访】AdMaster技术副总裁卢亿雷:分布式数据库挑战与分析 tvOS真的代表了应用的未来吗? 使用Fetch API和ES6生成器构建异步API Android应用性能优化实践 华云数据:OpenStack的技术践行之路 【SDCC讲师专访】腾讯潘安群:腾讯云金融级数据库TDSQL分析 高颜值、高品质——安全技术论坛议题曝光! 移动应用开发者正饱受折磨 在Android平台上加载本地库的危险性 《近匠》程序员客栈,程序员背后的经纪人 【CTO讲堂】浅析工业级物联网项目的快速开发 诚聘vb.net软件开发人员 急:怎么查看oracle 的encoding参数? 关于多台电脑的串口通信,请高手执教!!!!!!不够可以在加!!!! 各位大侠,我想用VB实现多线程,如何做?小弟在线急等,QQ:19671554 关于多台电脑的串口通信,请高手执教!!!!!!不够可以在加!!!! 各位大侠,我想用VB实现多线程,如何做?小弟在线急等,QQ:19671554 SimpleObjectBroker问题 我的报表需要打印"接下页" 猜字游戏 小弟载了一个教程,里面的文件扩展名是pdf的,请问要用什么软件打开啊? 求教一个简单的问题。关于打包。 在线等。在线等 关于函数 ASP.NET中操作EXCEL,为何添加操作可象操作ACCESS一样没问题,而删除和更改操作却出错?100*n分for your answer 求助:如何调出linux下kppp源代码? www.clpclub.com是不是不能上了? 如何制作登陆窗口? 关于中大型网站如何应用软件工程的问题 求救高手,如何使双硬盘同步写 请问怎样在用户点击(s)后将用户点击的软件自动安装到用户(c)的机器上 请问如何用网站提供的搜索引擎,知道查找关键字,我用的是WebBrowser1,100分呀 tomacat的配置问题?急 学过严蔚敏的〈数据结构(C语言版)〉的请进! 开发过nokia上运行程序的朋友,请进来,本人遇到一个非常麻烦的问题,欢迎各位赐教. 如何从字符串中提取单词? 谁知道那里有longhorn下载??? 100分请教实现播放列表的思路? 有关图形化公交车线路的问题!! 关于网站软件工程的问题 我的sqlserver 2000 在安装的时竟然说什么不支持??? 免费ASP空间申请 有关用Firework作网页模板的问题-急! 大虾请指点~~!!~~ 如何固定游戏中的分辨率? 今天见到了蓝心MM,估计她是CSDN有史以来最PL的MM。 也来贴一篇!!!送给大学毕业几年的哥们!(转) 急:关于weblogic的控制台 ? 请问各位:哪里有好的javascript的教程? 小问题 请问在哪里可以找到监控局域网的网络流量的工具,不够再加? 免费ASP空间申请 白羊座的进来领分,水园里白羊座好像很少。。。。 ie无法编译jsp? 300分!求《程序员增值合订本》上册中的"完全掌握TCppWebBrowser控件"内容! Google搜索从入门到精通(散分) 由于工作需要,将要转到Linux平台,请问那位知道有什么好的SQL Client在Linux下? 由于工作需要,将要转到Linux平台,请问那位知道有什么好的SQL Client在Linux下? 你是怎么过的?CSDN无高人?:( 找asp.net入门经典!一定是C#写的!!!在线等! 菜鸟的关于DataGrid的问题 资源管理器中选中的多个文件怎样传给我的程序 什么是“三层数据库”和“嵌入式软件系统”? 化学方程式中生成物是多少 工程制图题求解答,完成平面立体的三面投影,完成平面立体的三面投影完成平面立体及表面上点的三面投影 同质量稀硫酸中放入不同质量的铝和镁,置换出等质量氢气,则烧杯两边是否质量相同 含硫元素的氮肥的化学式 只有在酸碱盐之间发生的反应叫做复分解反应.那为什么酸+金属氧化物=盐+水 也是? AQ代表什么呢? 含氯元素的氮肥化学式 求易错解的成语求容易解释错的成语(病句中常出)例如,目无全牛,表面象盲人摸象似的成语,实质指技术精练. AQ a什么意思 氨气溶于水中放热吗如果放热 放的热量多吗? 20个高中易错成语解释并造句 【化学】FeS中S的化合价为多少FeS中S的化合价为多少 冰醋酸是什么来着?【应该不是把醋酸冻成冰吧?】 男人的肉密度大,女人的肉密度小,相同重量,女人看上去要比男的胖一圈, 尖利什么意思? 什么是试剂空白 能量高的和能量低的哪个燃烧热高一些? 请用自己的语言回答. 立体几何,有没有什么方法可以判断,几条线段或点可以构成几个面,有没有什么公式?例如:1..四条线段顺次首尾相连,最多可确定的平面个数是多少?2.过同一点的4条线段中,任意3条都不在同一 放出的热量比燃烧热大吗一个物质的燃烧热与他实际的放出热量相比哪个大? I _____(have)a shower yesterday.用所给单词的适当形式填空. 我需要高一物理的所有定理.我需要高一物理的所有定理,不需要太罗唆(只要定理的文字和公式以及名称) 新托福的相关复习问题我去年3月开始准备托福,6级就480.那时还没毕业,边上课边折腾了2个月,后来因为课程实在很多,就暂时搁置了.去年裸考了下,阅读23,听力12,口语18,作文22.今年过完年把单词 -why didn't you answer my phone call yesterday evening?-oh,sorry.I_____(have)a shower and didn't hear the call 高一物理理论问题我想问一下,为什么惯性与物体的速度无关,可是现实生活中,助跑跳远要比立定跳远远多了,那又怎样解析呢?需要详细一点,谢啦! 密度符号ρ是读漏还是读肉?我们老湿是读作漏的. 新人复习托福有经验者请进我没复习考了一次雅思看情况,现在要转战托福IBT.怎么复习,什么资料要买,什么计划表复习表什么的,懵懵懂懂~希望考过的经验人士能给写点意见建议什么的!没有考 氧化性的漂白原理? 很有意思,大家来看看.3只小猫3天抓3只老鼠,那么要在10天里抓10只老鼠需要多少只小猫? 关于托福考试时间和复习问题 有经验的来 本人现大三 大四要去美国交流 最好考托或G,我觉得G短时间准备太难,就决定考托.现情况如下:我四级600+,六级600不到一点,过了高级口译笔试(口试 蛋白质的化学组成:(C、H、O、N、S) 小学一年级语文练习册52页怎么作 如何提高边际利润率 周期表前20号元素中有A、B、C、D、E5种元素.已知它们都不是稀有气体元素,且原子半径依次减小,其中A和E同族,A和C、B与E原子的电子层数都相差2,A、B原子的最外层电子数之比为1:4.这五种元素 元素强氧化性和漂白性两者有什么联系?为什么说是强氧化性的物质有漂白性?里面的原理是什么? 小学一年级常用的课外练习册有哪些? 嗯、如题、L开头的英文单词、中间要有S、F或Y的要有中文意思哈~ KMn O 4与S O 2反应化学方程式? 锋利无比的意思 某温度下,纯水中的c(H+)=2×10—7mol/L则此时c(OH-)=___ __;若温度不变,滴入稀硫酸使c(H+)=5×10—6mol/L,则c(OH-)=________,由水电离出c(H+)为 ;若温度不变,滴入氯化铵溶液使溶液中c(H+)=5×10—6mol/L,则溶液 F e S 与K O H 是否反应? 锋利如初意思 带l和f的英文单词有哪些 你应该往汤里加些盐,汤更好喝的 You should ____ some _____ ____ the soup ,the soup will be more ____ 锋利如初的意思 有没有哪个单词里包含F L Y这三个字母的?除了fly flying以外 比如说**f***l*y 以下四种物质漂白原理与其他三种不同的是?A.SO2 B.Na2O2 C.O3 D.HClO 密度单位rou读第几声?怎么一二三四声的都有! 已知:Zn+S=ZnS(s) △fHm =-189.5kJ/molZnS+2O2=ZnSO4(s) △fHm =-789.1kJ/mol.则ZnSO4(s)的标准生成焓 【 】A-978.6kJ/mol B-599.65kJ/mol "因为大一新生马上就要入学了,我要做好帮助迎接新生的工作"用英语怎么说? rou 密度单位 怎么打啊 谁知到DNA的化学式 我是英语翻译的大一新生,可是我想当英语教师,那我需要转到英语师范去么?还是继续读英语翻译再去考教师资格证呢? 一个正方形周长是36厘米,它的面积是多少 核糖核酸的化学式~ 大一新生怎样考相关的英语证书,还有我是电气的可以提前考哪些证书 有什么最快学会自行车的办法? 怎么样描述dna.有怎么描述? 能不能发给我一份啊 我是大一新生刚学这个……就是关于C语言的编译系统的文件 铝与镁在相同时间内产生的氢气谁多 缅甸商家开始接受信用卡付款 硬件不足德媒:美窃听默克尔手机已长达十年 奥报告称美国一年有500名少年儿童因枪美购物网上售卖“清朝帽子”等万圣节形韩独岛宣传片因被指使用日剧片段已被临日本诈骗犯瞄准出台女 十余人被骗损失为落实核电设施出口 安倍破例再访土耳俄罗斯:在争议中力挺转基因食品英媒称中欧欲修补贸易关系 补贴问题仍德国组阁谈判紧张进行 新联合政府或增研究:提升信任感亦可靠食补 有效成分日本最大电信服务商操作失误 致半个日伊朗被指核能力相当发达 可在一个月内蒙古国总统启程访朝 成金正恩执政后首韩国整容手术事故层出不穷 整容共和国美国处方药价格高昂 民众被迫违法购外俄民调:超六成民众认为俄中存在多方面加拿大机场现可疑包裹 警方搜查机场附墨西哥20岁男子贩毒杀害数十人 墨警美将军称驻阿富汗部队将经由俄罗斯领空初步计票结果显示格执政联盟候选人赢得新加坡歌手铃凯银川演绎清纯歌风城固县委书记刘双耀:建设“六个城固”美媒:美国将就伊拉克安全形势与伊朗直韩国今下午将通过板门店送还5名获救朝韩媒:总理提名人言辞惹争议 朝野两党韩国一国会议员将2000万韩元现金放公安部交管局:世界杯开赛3天查处52河南19岁少女死于戒网瘾学校11时报盘:沪指走势温吞 创业板指剑安倍与日本媒体频繁互动 被指“收买”温州政法委专职委员帮人逃脱强制戒毒 柯震东为情所伤 经纪人:他真的爱过也如何维护社会主义契约精神的公平原则男子为给白血病女儿筹钱治病上街乞讨(以明晰的底线界定限制公权私用10万名在泰柬籍劳工紧急返乡温州政法委专职委员帮人逃脱强制戒毒 河南19岁少女死于戒网瘾学校世界杯升温淄博“夜经济” 部分酒店酒韩国生育率全球倒数 年轻人不婚不育引网秦音乐雷达新版上线融入社交功能
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘