高性能高可用机票实时搜索系统⾼性能⾼可⽤机票实时搜索系统 去哪⼉⺴ 梁启康 议题 系统诉求 海海量量数据 设计思路路 搜索框架 报价引擎 待解问题 系统诉求 • 全⽹网价最低 • 航线报价最全 • 实时性最好 • 产品最丰富 • 预定最流畅 ⾯面临问题 航班舱位时刻变动 供应商规则调整密集 航司政策各有不不同 供应商的office权限不不⼀一致 运价规则变化繁多 GDS数据成本不不菲 供应商规则量量2亿+ • 运价规则1亿+ • 报价量量 • 国内国际航线28万 * 航班数 * 产品个数 * 供应商个数 * 180天 = 1500亿 + • 搜索量量 • 航线搜索+航班搜索:3k+qps • 每秒计算产品数:搜索qps * 航班数 * 供应商个数 * 产品个数 = 1500万 + 设计思路路 • 最理理想的⽅方式 • 所有的报价都实时计算,填充好 • ⼀一个巨⼤大的哈希表 分级缓存 ⽆无状态 搜索框架 PriceMerger 报价引擎 供应商直连 旗舰店 CacheManager 抓取 App WWW Touch 分销 Cache Redis MQ MQ 航班数据 运价数据 应⽤用层 聚合层 报价源 基础数据 搜索框架 遇到问题 解决⽅方案 • 报价数量量多,内存问题 • 报价源多,不不稳定 • 响应时间要求苛刻 • 搜索条件有热点 •0 码力 | 26 页 | 1.94 MB | 1 年前3
1-Noah-Chen-连接世界的Python社区0 码力 | 24 页 | 2.98 MB | 1 年前3
Golang在接入层长连接服务中的实践-黄欣Golang 在接入层长连接服务中的实践 黄欣 基础平台-架构部 目录 • 背景 • 架构 • 心得 目录 • 架构 • 心得 背景—why 长连接? • 业务场景 – 大量实时计算 • 司机乘客撮合 • 实时计价 – 高频度的数据交互 • 坐标数据 • 计价数据 – App和服务端双向可达 • 上行(抢单) • 下行(派单) 背景—why golang? • 开发效率 rsp || nil So easy, So efficient 心得—coding—实现 • what’s diff? – conn svr • 常驻内存,内存中有个大连接对象map(资源问题) • 请求都是基于连接的(如果模块间存在资源的互相引用,当资源变更的情况 下,容易发生panic)(竟态问题) • 对象编程 – 封装:conn资源(包括goruntine)作为结构体封装起来,保证所有资源 statusLoop() 心得—profiling • Timer优化 • Channel使用优化 心得—timer优化 • 为什么需要优化? – 万级别的连接 – 每个连接上大量的定时任务(心跳检测,注册检测,认证检测) 实际情况:当10w左右连接,什么数据不收发,只有定时器检测心跳超时,cpu 能耗掉一个core • 怎么优化? – 特点: • 秒级别定时任务 • 范围最多60s – 方案:0 码力 | 31 页 | 1.67 MB | 1 年前3
MoonBit月兔编程语言 现代编程思想 第五课 数据类型:树、二叉树、二叉搜索树、AVL树现代编程思想 树 Hongbo Zhang 1 数据结构:树 树 ⼆叉树 ⼆叉搜索树 ⼆叉平衡树 2 ⽣活中的树状图 ⽣活中有很多的数据的结构与⼀颗树相似 谱系图(⼜称,家族树) ⽂件结构 数学表达式 …… 3 树的逻辑结构 数据结构中,树是由有限个节点构成的具有层次关系的集合 节点是存储数据的结构,节点之间存在亲⼦关系:⽗节点和⼦节点 如果树不为空,则它拥有⼀个根节点:根节点没有⽗节点 Int, queue: Queue[IntTree]) -> Bool { 2. match pop(queue) { 3. (None, _) => false // 若队列为空,结束搜索 4. (Some(head), tail) => match head { // 若队列⾮空,对于取出的树进⾏操作 5. Empty => bfs_search(target, 17 数据结构:⼆叉搜索树 为了⽅便搜索,我们将数据从⼩到⼤依次排序,便获得了基于⼆叉树的⼆叉搜索树 (Binary Search Tree) 左⼦树的数据⼩于根节点的数据⼩于右⼦树的数据 中序遍历(左、根、右)能从⼩到⼤遍历排序后的数据 搜索的最坏情况的次数是树的⾼度 + 1,⽽⾮元素总数 ⼆叉搜索树的插⼊与删除需要保证操作结束后的树依然保持着顺序 18 ⼆叉搜索树的插⼊ 对于⼀棵树0 码力 | 29 页 | 1015.26 KB | 1 年前3
2020美团技术年货 算法篇CODE A BETTER LIFE 【算法篇】 算法 1 智能搜索模型预估框架 Augur 的建设与实践 1 Transformer 在美团搜索排序中的实践 23 BERT 在美团搜索核心排序的探索和实践 36 美团智能配送系统的运筹优化实战 60 一站式机器学习平台建设实践 77 美团搜索中 NER 技术的探索与实践 92 KDD Cup 2020 Debiasing ICRA 2020 轨迹预测竞赛冠军的方法总结 132 KDD Cup 2020 AutoGraph 比赛冠军技术方案及在美团的实践 141 KDD Cup 2020 多模态召回比赛亚军方案与搜索业务应用 161 CIKM 2020 | 一文详解美团 6 篇精选论文 179 MT-BERT 在文本检索任务中的实践 192 美团无人车引擎在仿真中的实践 204 美团无人配送 CVPR2020 安全控制算法 235 KDD Cup 2020 多模态召回比赛季军方案与搜索业务应用 252 对话任务中的“语言 - 视觉”信息融合研究 267 ICDM 论文:探索跨会话信息感知的推荐模型 278 自然场景人脸检测技术实践 289 技术解析 | 横纵一体的无人车控制方案 304 目录 智能搜索模型预估框架 Augur 的建设与实践 作者:朱敏 紫顺 乐钦 洪晨 乔宇 武进0 码力 | 317 页 | 16.57 MB | 1 年前3
Laravel 5.3 中文文档基于驱动的通知系统; 通过 Laravel Echo 提供强大的实时支持;通过 Laravel Passport 实现无痛的 OAuth2 服务器;通过 Laravel Scout 实现全文模型搜索;在 Laravel Elixir 中支持 Webpack;“可邮寄”的对象;明确分离 web 和 api 路由;基于闭包的控制台命令;存储上传文件的辅助函数;支持 POPO 和单动作控制 器;以及优化前端脚手架;等等等等。 Passport 细节,请查看其文档。 搜索(Laravel Scout) Laravel Scout 提供了一个简单的、基于驱动的针对 Eloquent 模型的全文搜索解决方案。通过模 型观察者,Scout 会自动同步更新 Eloquent 记录的搜索索引,目前,Scout 使用 Algolia 驱动,不 过,编写自己的驱动很简单,你可以通过自己的搜索实现扩展 Scout。 你可以简单通过添加 你可以简单通过添加 Searchable trait 到模型让模型变得可搜索:0 码力 | 691 页 | 9.37 MB | 1 年前3
Laravel 5.6 中文文档storage/app/public 目录用于存储用户生成的文件,比如可以被公开访问的用户头像,要达到被 Web 用户访问的目的,你还需要在 public (应 用根目录下的 public 目录)目录下生成一个软连接 storage 指向这个目录。你可以通过 php artisan storage:link 命令生成这个软链接。 Tests 目录 tests 目录包含自动化测试文件,其中默认已经提供了一个开箱即用的 安装好了之后,在终端中使用如下命令将 Homestead Vagrant 盒子 laravel/homesterad 添加到 Vagrant 中。下载该盒子将会花费一些时间,具体时间长短主要取决于你的网络连接速度: vagrant box add laravel/homestead 如果上述命令执行失败,需要确认 Vagrant 是否是最新版本。 运行命令会列出一个选择列表,选择 virtualbox homestead ssh 命令了。 通过 SSH 连接 你可以在 Homestead 目录下通过运行 vagrant ssh 以 SSH 方式连接到虚拟机。如果你设置了全部访问 Homestead,也可以在任意路径下通 过 homestead ssh 登录到虚拟机。 如果你需要以更简捷的方式连接到 Homestead,可以为主机添加一个别名来快速连接到 Homestead 盒子,创建完别名后,可以使用0 码力 | 377 页 | 14.56 MB | 1 年前3
Node.js Manual & Documentationbe modified to add custom paths. require()的搜索路径数组,你可以修改该数组添加自定义的搜索路径。 Example: add a new path to the beginning of the search list 例如:将一个新的搜索路径插入到搜索列表的头部。 require.paths.unshift('/usr/local/node'); the root of the search tree. 其次,如果调用 require()的文件已经位于一个 node_modules 层次中,最上 级的 node_modules 目录将被作为搜索的根。 For example, if the file at '/home/ry/projects/foo/node_modules/bar/node_modules/baz/quux.js' '/home/ry/projects/foo/node_modules/bar/node_modules/baz/quux.js' 调用 require('asdf.js'),node 会在下面的位置进行搜索: /home/ry/projects/foo/node_modules/bar/node_modules/baz/node_ modules/asdf.js /home/ry/0 码力 | 153 页 | 1.21 MB | 1 年前3
美团点评2018技术年货>再新建一个客户端链接->再断开链接。 如上图所示,一次 Connect 和 Disconnect 为一次连接的建立与关闭,上图绿色框框的日志分别是两次 连接的生命周期。我们可以看到,内存每次都是在连接被关闭的的时候暴涨 256B,然后也不释放。走到 这里,问题进一步缩小,肯定是连接被关闭的时候,触发了框架的一个Bug,而且这个Bug在触发之前分 配了 256B 的内存,随着Bug被触发, Disconnect 事件(客户端WebSocket连接关闭时会调用到这里),基本上可以确定,在 Disconnect 事件前后申请的内存并没有释放。 在使用 idea debug 时,要选择只挂起当前线程,这样我们在单步跟踪的时候,控制台仍然可以看到堆外 内存统计线程在打印日志。 Netty堆外内存泄露排查盛宴 - 美团技术团队 在客户端连接上之后然后关闭,断点进入到 onDisconnect onDisconnect 回调,我们特意在此多停留了一会,发现控 制台内存并没有飙升(7B这个内存暂时没有去分析,只需要知道,客户端连接断开之后,我们断点hold 住,内存还未开始涨)。接下来,神奇的一幕出现了,我们将断点放开,让程序跑完: Debug 松掉之后,内存立马飙升了!!此时,我们已经知道,这只“臭虫”飞不了多远了。在 Debug 时,挂起的是当前线程,那么肯定是当前线程某个地方申请了堆外内存,然后没有释放,继续“快马加0 码力 | 229 页 | 61.61 MB | 1 年前3
Laravel 6.0 中文文档安装好了之后,在终端中使用如下 命令将 Homestead Vagrant 盒子 laravel/homesterad 添加到 Vagrant 中。下载该盒子将会花费一些时间,具体时间长短主要取决于你的网 络连接速度(建议在有梯子的条件下下载): vagrant box add laravel/homestead 如果上述命令执行失败,需要确认 Vagrant 是否是最新版本,如果 不是的话更新 Vagrant 通过 SSH 连接 你可以在 Homestead 目录下通过运行 vagrant ssh 以 SSH 方式连 接到虚拟机。如果你设置了全部访问 Homestead,也可以在任意路 径下通过 homestead ssh 登录到虚拟机。 如果你需要频繁登录到 Homestead 虚拟机,可以考虑将上述功能 添加宿主机以便快速通过 SSH 进入 Homestead 盒子。 连接到数据库 Homestead 做好了配置,更方便的是,这些配置值与 Laravel 的 .env 中默认提 供的配置一致。 想要通过本地的 Navicat 或 Sequel Pro 连接到 Homestead 上的 MySQL 或 Postgres 数据库,可以通过新建连接来实现,主机 IP 都是 127.0.0.1,对于 MySQL 而言,端口号是 33060,对 Postgres 而言,端口号是 54320,用户名/密码是0 码力 | 1442 页 | 14.66 MB | 1 年前3
共 419 条
- 1
- 2
- 3
- 4
- 5
- 6
- 42













