热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

微信是如何用libco支撑8亿用户的

IT资讯,揭秘:微信是如何用libco支撑8亿用户的,UDN开发者论坛,专注企业互联网开发的IT技术社区
 导语

  ibco是微信后台大规模使用的c/c++协程库,2013年至今稳定运行在微信后台的数万台机器上。libco在2013年的时候作为腾讯六大开源项目首次开源,我们最近做了一次较大的更新,同步更新在https://github.com/tencent/libco 上。libco支持后台敏捷的同步风格编程模式,同时提供系统的高并发能力。

  libco支持的特性

  无需侵入业务逻辑,把多进程、多线程服务改造成协程服务,并发能力得到百倍提升;

  支持CGI框架,轻松构建web服务(New);

  支持gethostbyname、mysqlclient、ssl等常用第三库(New);

  可选的共享栈模式,单机轻松接入千万连接(New);

  完善简洁的协程编程接口

  – 类pthread接口设计,通过co_create、co_resume等简单清晰接口即可完成协程的创建与恢复; – 类__thread的协程私有变量、协程间通信的协程信号量co_signal (New); – 非语言级别的lambda实现,结合协程原地编写并执行后台异步任务 (New); – 基于epoll/kqueue实现的小而轻的网络框架,基于时间轮盘实现的高性能定时器;

  libco产生的背景

  早期微信后台因为业务需求复杂多变、产品要求快速迭代等需求,大部分模块都采用了半同步半异步模型。接入层为异步模型,业务逻辑层则是同步的多进程或多线程模型,业务逻辑的并发能力只有几十到几百。随着微信业务的增长,系统规模变得越来越庞大,每个模块很容易受到后端服务/网络抖动的影响。

  异步化改造的选择

  为了提升微信后台的并发能力,一般的做法是把现网的所有服务改成异步模型。这种做法工程量巨大,从框架到业务逻辑代码均需要做一次彻底的改造,耗时耗力而且风险巨大。于是我们开始考虑使用协程。

  但使用协程会面临以下挑战:

  业界协程在c/c++环境下没有大规模应用的经验;

  如何控制协程调度;

  如何处理同步风格的API调用,如Socket、mysqlclient等;

  如何处理已有全局变量、线程私有变量的使用;

  最终我们通过libco解决了上述的所有问题,实现了对业务逻辑非侵入的异步化改造。我们使用libco对微信后台上百个模块进行了协程异步化改造,改造过程中业务逻辑代码基本无修改。至今,微信后台绝大部分服务都已是多进程或多线程协程模型,并发能力相比之前有了质的提升,而libco也成为了微信后台框架的基石。

  libco框架

  libco在框架分为三层,分别是接口层、系统函数Hook层以及事件驱动层。

  libco是一个高效的c/c++协程库,提供了完善的协程编程接口、常用的Socket族函数Hook等,使得业务可用同步编程模型快速迭代开发。随着几年来的稳定运行,libco作为微信后台框架的基石发挥了举足轻重的作用。

推荐阅读
author-avatar
无敌BUG
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有