美团十年,支撑最大规模外卖配送的一站式机器学习平台如何炼成?
作者 | 艳伟,美团配送技术团队资深技术专家
编辑 | 唐小引
题图 | 东方 IC
AI 是目前互联网行业炙手可热的“明星”,无论是老牌巨头,还是流量新贵,都在大力研发 AI 技术,为自家的业务赋能。配送作为外卖平台闭环链条上重要的一环,配送效率和用户体验是配送业务的核心竞争力。随着单量上涨、骑手增多、配送场景复杂化,配送场景的各种算法在更快(算法需要快速迭代、快速上线)、更好(业务越来越依赖机器学习算法产生正向的效果)、更准(算法的各种预测如预计送达时间等,需要准确逼近真实值)的目标下也面临日益增大的挑战。
算法从调研到最终上线发挥作用,需要有一系列的工程开发和对接,由此引发了新的问题:如何界定算法和工程的边界,各司其职,各善其长?如何提升算法迭代上线的速度和效率?如何快速准确评估算法的效果?本文将为大家分享美团配送技术团队在建设一站式机器学习平台过程中的一些经验和探索,希望对大家能有所帮助或者启发。
业务背景
2019 年 7 月份,美团外卖的日订单量已经突破 3000 万单,占有了相对领先的市场份额。围绕着用户、商户、骑手,美团配送构建了全球领先的即时配送网络,建设了行业领先的美团智能配送系统,形成了全球规模最大的外卖配送平台。
如何让配送网络运行效率更高,用户体验更好,是一项非常有难度的挑战。我们需要解决大量复杂的机器学习和运筹优化等问题,包括 ETA 预测、智能调度、地图优化、动态定价、情景感知、智能运营等多个领域。同时,我们还需要在体验、效率和成本之间达到平衡。
美团配送机器学习平台演进过程
为什么建设一站式机器学习平台?
如果要解决上述的机器学习问题,就需要有一个功能强大且易用的机器学习平台来辅助算法研发人员,帮助大家脱离繁琐的工程化开发,把有限的精力聚焦于算法策略的迭代上面。
目前业界比较优秀的机器学习平台有很多,既有大公司研发的商用产品,如微软的 Azure、亚马逊的 SageMaker、阿里的 PAI 平台、百度的 PaddlePaddle 以及腾讯的 TI 平台,也有很多开源的产品,如加州大学伯克利分校的 Caffe、Google 的 TensorFlow、Facebook 的 PyTorch 以及 Apache 的 Spark MLlib 等。而开源平台大都是机器学习或者深度学习基础计算框架,聚焦于训练机器学习或深度学习模型;公司的商用产品则是基于基础的机器学习和深度学习计算框架进行二次开发,提供一站式的生态化的服务,为用户提供从数据预处理、模型训练、模型评估、模型在线预测的全流程开发和部署支持,以期降低算法同学的使用门槛。
公司级的一站式机器学习平台的目标和定位,与我们对机器学习平台的需求不谋而合:为用户提供端到端的一站式的服务,帮助他们脱离繁琐的工程化开发,把有限的精力聚焦于算法策略的迭代上面。鉴于此,美团配送的一站式机器学习平台应运而生。
美团配送机器学习平台的演进过程可以分为两个阶段:
MVP 阶段:灵活,快速试错,具备快速迭代能力。
平台化阶段:业务成指数级增长,需要机器学习算法的场景越来越多,如何既保证业务发展,又能解决系统可用性、扩展性、研发效率等问题。
MVP 阶段
初始阶段,大家对机器学习平台要发展成什么样子并不明确,很多事情也想不清楚。但是为了支撑业务的发展,必须快速上线、快速试错。因此,在此阶段,各个业务线独自建设自己的机器学习工具集,按照各自业务的特殊需求进行各自迭代,快速支持机器学习算法上线落地应用到具体的业务场景,也就是我们所熟知的“烟囱模式”。此种模式各自为战,非常灵活,能够快速支持业务的个性化需求,为业务抢占市场赢得了先机。但随着业务规模的逐渐扩大,这种“烟囱模式”的缺点就凸显了出来,主要表现在以下两个方面:
重复造轮子:
特征工程、模型训练、模型在线预测都是各自研发,从零做起,算法的迭代效率低下。
特征口径混乱:
各个业务方重复开发特征,相同特征的统计口径也不一致,导致算法之间难以协同工作。
平台化阶段
为了避免各部门重复造轮子,提升研发的效率,同时统一业务指标和特征的计算口径,标准化配送侧的数据体系,美团配送的研发团队组建了一个算法工程小组,专门规整各业务线的机器学习工具集,希望建设一个统一的机器学习平台,其需求主要包括以下几个方面:
该平台底层依托于 Hadoop/Yarn 进行资源调度管理,集成了 Spark ML、XGBoost、TensorFlow 三种机器学习框架,并保留了扩展性,方便接入其它机器学习框架,如美团自研的 MLX(超大规模机器学习平台,专为搜索、推荐、广告等排序问题定制,支持百亿级特征和流式更新)。
通过对 Spark ML、XGBoost、TensorFlow 机器学习框架的封装,我们实现了可视化离线训练平台,通过拖拉拽的方式生成 DAG 图,屏蔽多个训练框架的差异,统一模型训练和资源分配,降低了算法 RD 的接入门槛。
模型管理平台,提供统一的模型注册、发现、部署、切换、降级等解决方案,并为机器学习和深度学习模型实时计算提供高可用在线预测服务。
离线特征平台,收集分拣线下日志,计算提炼成算法所需要的特征,并将线下的特征应用到线上。
实时特征平台,实时收集线上数据,计算提炼成算法所需要的特征,并实时推送应用到线上。
版本管理平台,管理算法的版本以及算法版本所用的模型、特征和参数。
AB 实验平台,通过科学的分流和评估方法,更快更好地验证算法的效果。
图灵平台
平台化阶段,我们对美团配送机器学习平台的目标定位是:一站式机器学习平台,给算法同学提供一站式服务,覆盖算法同学调研、开发、上线、评估算法效果的全流程,包括:数据处理、特征生产、样本生成、模型训练、模型评估、模型发布、在线预测和效果评估。为了响应这个目标,大家还给平台取了个大胆的名字——Turing,中文名称为图灵平台,虽然有点“胆大包天”,但是也算是对我们团队的一种鞭策。
首先在获取数据阶段,支持在线和离线两个层面的处理,分别通过采样、过滤、归一化、标准化等手段生产实时和离线特征,并推送到在线的特征库,供线上服务使用。
模型训练阶段,支持分类、回归、聚类、深度学习等多种模型,并支持自定义 Loss 损失函数。
模型评估阶段,支持多种评估指标,如 AUC、MSE、MAE、F1 等。
模型发布阶段,提供一键部署功能,支持本地和远程两种模式,分别对应将模型部署在业务服务本地和部署在专用的在线预测集群。
在线预测阶段,支持 AB 实验,灵活的灰度发布放量,并通过统一埋点日志实现 AB 实验效果评估。
离线训练平台
离线训练平台的目标是:搭建可视化训练平台,屏蔽多个训练框架的差异,降低算法 RD 的接入门槛。
为了降低算法 RD 进入机器学习领域的门槛,我们开发了带有可视化界面的离线训练平台,通过各种组件的拖拉拽组合成 DAG 图,从而生成一个完整的机器学习训练任务。
目前支持的组件大致分为:输入、输出、特征预处理、数据集加工、机器学习模型、深度学习模型等几大类,每种类别都开发了多个不同的组件,分别支持不同的应用场景。同时为了不失去灵活性,我们也花费了一番心思,提供了多种诸如自定义参数、自动调参、自定义 Loss 函数等功能,尽量满足各个不同业务方向算法同学各种灵活性的需求。
我们的离线训练平台在产出模型时,除了产出模型文件之外,还产出了一个 MLDL(Machine Learning Definition Language)文件,将各模型的所有预处理模块信息写入 MLDL 文件中,与模型保存在同一目录中。当模型发布时,模型文件连带 MLDL 文件作为一个整体共同发布到线上。在线计算时,先自动执行 MLDL 中的预处理逻辑,然后再执行模型计算逻辑。通过 MLDL 打通了离线训练和在线预测,贯穿整个机器学习平台,使得线下和线上使用同一套特征预处理框架代码,保证了线下和线上处理的一致性。
在发布模型时,我们还提供了模型绑定特征功能,支持用户把特征和模型的入参关联起来,方便在线预测时模型自动获取特征,极大地简化了算法 RD 构造模型输入时获取特征的工作量。
模型管理平台
前面介绍了,我们的图灵平台集成了 Spark ML、XGBoost、TensorFlow 三种底层训练框架,基于此,我们的训练平台产出的机器学习模型种类也非常多,简单的有 LR、SVM,树模型有 GBDT、RF、XGB 等,深度学习模型有 RNN、DNN、LSTM、DeepFM 等等。而我们的模型管理平台的目标就是提供统一的模型注册、发现、部署、切换、降级等解决方案,并为机器学习和深度学习模型提供高可用的线上预测服务。
模型管理平台支持本地和远程两种部署模式:
本地:模型和 MLDL 统一推送到业务方服务节点上,同时图灵平台提供一个 Java 的 Lib 包,嵌入到业务方应用中,业务方通过本地接口的方式调用模型计算。
远程:图灵平台维护了一个专用的在线计算集群,模型和 MLDL 统一部署到在线计算集群中,业务方应用通过 RPC 接口调用在线计算服务进行模型计算。
对于超大规模模型,单机无法装载,需要对模型进行 Sharding。鉴于美团配送的业务特性,可以按照配送城市/区域进行分区训练,每个城市或区域产出一个小模型,多个分区模型分散部署到多个节点上,解决单节点无法装载大模型的问题。分区模型要求我们必须提供模型的路由功能,以便业务方精准地找到部署相应分区模型的节点。
同时,模型管理平台还收集各个服务节点的心跳上报信息,维护模型的状态和版本切换,确保所有节点上模型版本一致。
离线特征平台
配送线上业务每天会记录许多骑手、商家、用户等维度的数据,这些数据经过 ETL 处理得到所谓的离线特征,算法同学利用这些离线特征训练模型,并在线上利用这些特征进行模型在线预测。离线特征平台就是将存放在 Hive 表中的离线特征数据生产到线上,对外提供在线获取离线特征的服务能力,支撑配送各个业务高并发及算法快速迭代。
最简单的方案,直接把离线特征存储到 DB 中,线上服务直接读取 DB 获取特征 Value。读取 DB 是个很重的操作,这种方案明显不能满足互联网大并发的场景,直接被 Pass 掉。
第二种方案,把各个离线特征作为 K-V 结构存储到 Redis 中,线上服务直接根据特征 Key 读取 Redis 获取特征 Value。此方案利用了 Redis 内存 K-V 数据库的高性能,乍一看去,好像可以满足业务的需求,但实际使用时,也存在着严重的性能问题。
典型的业务场景:比如我们要预测 20 个商家的配送时长,假设每个商家需要 100 个特征,则我们就需要 20*100=2000 个特征进行模型计算,2000 个 KV。如果直接单个获取,满足不了业务方的性能需求;如果使用 Redis 提供的批量接口 Mget,如果每次获取 100 个 KV,则需要 20 次 Mget。缓存 mget 的耗时 TP99 约 5ms,20 次 Mget,TP99 接近 100ms,也无法满足业务方的性能需求(上游服务超时时间约 50ms)。
因此,我们需要对离线特征从存储和获取进行优化。我们提出了特征组的概念,同一维度的特征,按照特征组的结构进行聚合成一个 KV,大大减少了 Key 的数目;并且提供了相对完善的管理功能,支持对特征组的动态调整(组装、拆分等)。
实时特征平台
相比于传统配送,即时配送无论是在位置信息、骑手负载,还是在当前路网情况,以及商家出餐情况等方面都是瞬息变化的,实时性要求非常高。为了让机器学习算法能够即时的在线上生效,我们需要实时地收集线上各种业务数据,进行计算,提炼成算法所需要的特征,并实时更新。
AB 实验平台
AB 实验并不是个新兴的概念,自 2000 年谷歌工程师将这一方法应用在互联网产品以来,AB 实验在国内外越来越普及,已成为互联网产品运营精细度的重要体现。简单来说,AB 实验在产品优化中的应用方法是:在产品正式迭代发版之前,为同一个目标制定两个(或以上)方案,将用户流量对应分成几组,在保证每组用户特征相同的前提下,让用户分别看到不同的方案设计,根据几组用户的真实数据反馈,科学的帮助产品进行决策。
互联网领域常见的 AB 实验,大多是面向 C 端用户进行流量选择,比如基于注册用户的 UID 或者用户的设备标识(移动用户 IMEI 号/PC 用户 Cookie)进行随机或者哈希计算后分流。此类方案广泛应用于搜索、推荐、广告等领域,体现出千人千面个性化的特点。此类方案的特点是实现简单,假设请求独立同分布,流量之间独立决策,互不干扰。此类 AB 实验之所以能够这样做是因为:C 端流量比较大,样本足够多,而且不同用户之间没有相互干扰,只要分流时足够随机,即基本可以保证请求独立同分布。
即时配送领域的 AB 实验是围绕用户、商户、骑手三者进行,用户/商户/骑手之间不再是相互独立的,而是相互影响相互制约的。针对此类场景,现有的分流方案会造成不同策略的互相干扰,无法有效地评估各个流量各个策略的优劣。
鉴于上述的问题,我们将配送侧的 AB 实验分为三个阶段:事前的 AA 分组,事中的 AB 分流,事后的效果评估。
AA 分组:将候选流量按照既定的规则预先分为对照组和实验组,基于数理统计的理论确保对照组和实验组在所关注的业务指标上没有显著差异。
AB 分流:将线上请求实时分到对照或者实验版本。
效果评估:根据对照组和实验组的数据对比评估 AB 实验的效果。
由于即时配送的场景较为特殊,比如按照配送区域或城市进行 AB 实验时,由于样本空间有限,很难找到没有差异的对照组和实验组,因此我们设计了一种分时间片 AB 对照的分流方法:支持按天、小时、分钟进行分片,多个时间片进行轮转切换,在不同区域、不同时间片之间,对不同的策略进行交替切换进行 AB 分流,最大限度减少线下因素的影响,确保实验科学公正。
总结与展望
目前图灵平台支撑了美团配送、小象、LBS 平台等 BU 的算法离线训练、在线预测、AB 实验等,使算法 RD 更加关注算法策略本身的迭代优化,显著提高了算法 RD 的效率。未来我们会在以下方面继续深入探索:
1)加强深度学习的建设。
加强深度学习的建设,全面支持深度学习,实现深度学习相关组件与机器学习组件一样,在可视化界面可以和任意组件组合使用。
离线训练支持更多常用深度学习模型。
支持直接写 Python 代码自定义深度学习模型。
2)在线预测平台化,进一步解耦算法和工程。
简化图灵平台 SDK,剥离主体计算逻辑,建设在线预测平台。
在线预测平台动态加载算法包,实现算法、业务工程方、图灵平台的解耦。
【end】◆有奖征文◆推荐阅读百万人学AI:CSDN重磅共建人工智能技术新生态如何更新你的机器学习模型?手把手带你设计一个可持续的预测模型!GitHub 标星 11000+,阿里开源的微服务组件如何连续 10 年扛住双十一大促?突破性能极限——阿里云神龙最新ASPLOS论文解读深度学习“三巨头”、图灵奖得主 Yann LeCun:我没有天赋,所以才追随聪明人区块链数据分析,让你看清交易对手你点的每个“在看”,我都认真当成了AI
相关文章:

Windows 2008 R2中的NAP新功能详解
随着Windows Server 2008 R2版本的发布,Windows网络访问保护模式(NAP)又增加了新功能。在本文中,笔者将对新功能进行简要的介绍。Windows Server 2008中提供的网络访问保护(NAP)功能已经更新到R2版本。在Windows功能、无线网络访问…

whoosh学习(1)
2019独角兽企业重金招聘Python工程师标准>>> 背景 当前项目需要用到全文搜索redis不方便实现mysql效率太低搜索引擎选择 pylucenewhoosh(似乎更受欢迎,文档最全)为什么选择 纯python实现,省了编译二进制包的繁琐过程。…
仿照redis写的nginx开机画面
redis有一个开机画面: 下面是我写的的nginx开机画面: 新建一个文件 asciilogo.h //仿照redis风格打印一个logo,这样启动的时候就不会不注意 char *ascii_logo " …

房子成焦点,被挂马的房产网站仍在增加中
统计发现,近期大部分使用极光漏洞挂马,这个漏洞实在是太好用了。没打补丁,没装网盾,按网马广告上说的,有不弹、不卡、不闪三大“优点”,点击挂马网页会中招。今天新增被挂马的知名房产网站列表(…
检测、量化、追踪新冠病毒,基于深度学习的自动CT图像分析有多靠谱?
作者 | Ophir Gozes, Maayan Frid-Adar等译者 | 刘畅出品 | AI科技大本营(ID:rgznai100)背景:新冠病毒的传播非常迅速,并对数十亿人的生活产生了重大影响。由于非对称胸部CT已被证明是检测、量化和追踪该疾病的有效工具࿰…

关于产品体验以及产品会被抄袭的思考
一个好产品本来可以以免费让用户注册为开始吸引用户并从而能引导用户进行消费和购买的;但是由于可能考虑到当前这个产品可能会被别人抄袭,从而设定了门槛,然后营销团队进行沟通,和别人说当前的产品是多么多么的好,从而…

Linux socket 网络编程 常用头文件
一 三种类型的套接字:1.流式套接字(SOCKET_STREAM)提供面向连接的可靠的数据传输服务。数据被看作是字节流,无长度限制。例如FTP协议就采用这种。2.数据报式套接字(SOCKET_DGRAM)提供无连接的数据传输服务,…

达摩院实现自动驾驶核心技术突破,达摩院首次实现3D物体检测精度与速度的兼得
阿里巴巴达摩院在自动驾驶3D物体检测领域取得了新突破!达摩院近期一篇论文入选计算机视觉顶会CVPR 2020,该论文提出了一个通用、高性能的自动驾驶检测器,首次实现3D物体检测精度与速度的兼得,有效提升自动驾驶系统安全性能。目前&…

$httpprovider指令中拦截器interceptors的使用介绍
2019独角兽企业重金招聘Python工程师标准>>> $http服务允许我们使用http请求和后台做通信,但是在每一次放松请求之前我们都希望能够捕捉这个请求并且进行操作,比如之前富瑞中每一个请求中header要放入用户名和密码一样,富瑞的做法…

bzero, memset ,setmem 区别
bzero 原型:extern void bzero(void *s, int n);用法:#include <string.h> 功能:置字节字符串s的前n个字节为零。 说明:bzero无返回值。 举例: // bzero.c #include <sysl…
了解这4个重点,带你探索未来将如何设计智能系统和机器人!
作者 | Himanshu Ragtah 译者 | 天道酬勤 责编 | 徐威龙 出品 | AI科技大本营(ID:rgznai100) 到目前为止,为智能系统设计零件需要从头开始构建零件。从2D草图到可以根据给定的成本、材料和最大重量限制制造的可行且坚固的零件。这通常需要几天…

静态路由和默认路由的配置实例
RTA的配置:interface FastEthernet0/0ip address 1.1.1.2 255.255.255.252duplex autospeed auto!interface FastEthernet0/1no ip addressduplex autospeed autoshutdown!interface FastEthernet1/0ip address 10.10.10.1 255.255.255.0duplex autospeed auto!inte…

Centos运行级别和开机过程
一、Linux运行级别1)0:关机2)1:单用户3)2:多用户状态没有网络服务4)3:多用户状态有网络服务5)4:系统未使用保留给用户6)5:图形界面7&a…

PHP FPM设置
php-fpm启动 拷贝启用文件 # cp -R ./sapi/fpm/php-fpm /etc/init.d/php-fpm 启动 # /etc/init.d/php-fpm 重启 # killall php-fpm # /etc/init.d/php-fpm ------------------------ 进程不够就会起新,新的不能超过pm.max_children; 但是新的也会变为…

MySQL的binarylog处理
繁忙中測試新到的服務器,調試優化app,再加上月底公司搬家,很多配置都要更改。早上不經意telnet改dns的時候發現MySQL日誌很大了。。。 奇怪,我設置過的都改過了。。後來發現這台是子公司帶過來的機器。。。。以前那幾台都沒寫過配…
IJCAI 2020灭霸式拒稿,AI审稿是否更公平?
来源 | 数据派 THU编辑 | 文婧出品 | AI科技大本营(ID:rgznai100)一、IJCAI 2020灭霸式拒稿引众怒随着AAAI 2020于2月7日作为2020年人工智能学界的第一个顶会在美国纽约开幕,人工智能相关领域的研究者们又要为新一年的顶会忙碌了。对于AI界的…

ASP.NET MVC 中将FormCollection与实体间转换方法
http://blog.csdn.net/lutinghuan/article/details/8449296 将Action动作中传递的FormCollection转变成对应的实体,可以使用Controller的TryUpdateModel()方法。 示例如下: [csharp] view plaincopy [HttpPost] public ActionResult Create(FormCollect…
增量学习不只有finetune,三星AI提增量式少样本目标检测算法 | CVPR 2020
作者 | VincentLee来源 | 晓飞的算法工程笔记该论文研究了非常有意义的增量式少样本目标检测场景iFSD(Incremental Few-Shot Detection),场景设置如下:检测模型可以在包含充足样本的基础类别上进行训练训练好后,iFSD能够应用到真实世界中&…

修改Linux内核参数提高服务器并发能力
1.参数设置 查看相关的参数 sysctl -a|grep tcp_keepalive net.ipv4.tcp_keepalive_intvl 30 net.ipv4.tcp_keepalive_probes 2 net.ipv4.tcp_keepalive_time 160 设置相关的参数 sysctl -w net.ipv4.tcp_keepalive_time 7500 也可以直接打开 # vim/etc/sysctl.conf 加入ne…

GPS小车移动应用程序
//用于desktop部署private void btnInitializeObjects_Click(object sender, System.EventArgs e){Catalog Cat MapInfo.Engine.Session.Current.Catalog; //创建临时层TableInfoMemTable tblInfoTemp new TableInfoMemTable("Animation");Table tblTemp Cat.GetT…

iOS网络-NSURLSessionDataTask大文件离线断点下载
什么叫离线断点下载,就是用户下载中关闭程序重新打开可以继续下载 代码实现如下: #import "ViewController.h" interface ViewController ()<NSURLSessionDataDelegate> //输出流 property (nonatomic, strong) NSOutputStream *stream ; //Task对象 property …

fcntl使用
1、获取文件的flags,即open函数的第二个参数: flags fcntl(fd,F_GETFL,0); 2、设置文件的flags: fcntl(fd,F_SETFL,flags); 3、增加文件的某个flags,比如文件是阻塞的,想设置成非阻塞: flags fcntl(fd,F_GETFL,0)…

两次关于软考网络工程师的经历
考过两次软考网络工程师,第一次没怎么准备,稀里糊涂参加考试,下午差几分;第二次痛定思痛,好好的分析了下试题,上午61,下午49,下午只写了30分钟左右,因为觉得自己过的了了…
“不会数学,干啥都不行!”骨灰级程序员:你方向不对,努力也白费!
最近半年来,我们收到了很多留言,有很多都是相似的问题:1)数学不好搞编程好难,因为数据结构、编程语句、算法,核心原理都是数学。而且光会基础数学远远不够,还需要概率论,微积分、优化…

重新安装nginx注意事项
记得清理/etc/nginx/sites-enabled/default转载于:https://www.cnblogs.com/xiangnan/p/5146775.html
2020年,5种将死的编程语言
来源 | 码农网 译者 | 小峰曾几何时,几乎每个人都在使用Perl语言编程。但是那些经常使用的人慢慢地发现,关于这个Perl语言似乎总是有点不对劲。至少我知道有这么个叫做“piecemeal”的编程语言,它的创造者似乎就只是将这个功能堆在另一个功能…

关于 ulimit -SHn 65535
使用ulimit -a 可以查看当前系统的所有限制值,使用ulimit -n 可以查看当前的最大打开文件数。 新装的linux默认只有1024,当作负载较大的服务器时,很容易遇到error: too many open files。因此,需要将其改大。 使用 ulimit -n 65…

Could not load file or assembly App_Licenses.dll的问题
今天在AspDotNetStorefront做定制化开发,编译的时候莫名其妙地报告Could not load file or assembly App_Licenses, Version0.0.0.0, Cultureneutral, ... (Exception from HRESULT: 0x80070057 (E_INVALIDARG))的错误,检查文件系统,发现文件…
Docker 用法总结之:管理工具 shipyard 的具体使用指南
Docker 的命令行就已经非常好用了,假设非要加上基于 Web 的管理界面的话也有一些选择,如 DockerUI (Angular.js), Dockland (Ruby), Shipyard (Python/Django) 等。只是眼下来看 Shipyard 项目要活跃一点,Shipyard 支持多 host,能…

轻量级简单队列服务HTTPSQS安装与使用
原文地址:http://blog.s135.com/httpsqs 1.安装 wget http://httpsqs.googlecode.com/files/libevent-2.0.12-stable.tar.gz tar zxvf libevent-2.0.12-stable.tar.gz cd libevent-2.0.12-stable/ ./configure --prefix/usr/local/libevent-2.0.12-stable/ make…