计算机

Golang websocket结合一致性哈希算法构建高并发推送服务

1 场景介绍 web应用中,常有业务状态需要实时更新的场景。如一个较长的后台任务,从浏览器用户触发执行到执行完成可能需几十秒的时间,这时前端需隔几秒请求一次后台,查询任务执行进度。此种方式是长轮询的方式,是存在一定弊端的,增加了后台服务的负载,若并发操作量太大,后台压力会成倍激增。业界常采用http1.1的websocket扩展协议与浏览器建立长连接来实现实时业务状态更新。 2 实现方案

阅读更多

k-d tree算法原理及实现

k-d tree即k-dimensional tree,常用来作空间划分及近邻搜索,是二叉空间划分树的一个特例。通常,对于维度为$k$,数据点数为$N$的数据集,k-d tree适用于$N\gg2^k$的情形。 1)k-d tree算法原理

阅读更多

一致性哈希算法与高可用集群代理

假定N为后台服务节点数,当前台携带关键字key发起请求时,我们通常将key进行hash后采用模运算(hash(key)%N)来将请求分发到不同的节点上。 对前台请求于后台无状态服务节点不敏感的场景而言,只要请求key具有一定的随机性,哪怕节点动态增删,该算法于后台而言已可以达到很好的负载均衡效果。 但对于分布式缓存,或者分布式数据库等场景而言,上述方式就不合适了。因后台节点的增删会引起几乎所有key的重新映射。这样,于分布式缓存而言,均发生cache miss;于分布式数据库而言发生数据错乱,其影响是灾难性的。 而一致性哈希算法的目标是,当K个请求key发起请求时。后台增减节点,只会引起K/N的key发生重新映射。即一致性哈希算法,在后台节点稳定时,同一key的每次请求映射到的节点是一样的。而当后台节点增减时,该算法尽量将K个key映射到与之前相同的节点上。

阅读更多

手机品牌搜索走势图

当前,各应用平台每天都在产生海量的数据。基于海量数据的深度分析报告越来越有价值。该领域涵盖数学、统计学,计算机科学等众多学科,是一个值得深入研究的方向。本文涉及的是一个简单的数据分析场景,旨在梳理使用Python数据分析涉及的常用类库(pandas、matplotlib等)与入门知识。本文对指定的几家手机品牌,按日期区间,从百度指数网站获取其月度搜索数据,然后绘制出它们的搜索走势对比图。 1)关键点 a)日期区间(使用pandas的date_range方法); b)对指定日期(年月),获取手机品牌清单中各品牌的搜索量(requests使用); c)构造DataFrame(重点关注data、index和columns参数传值),结合matplotlib绘图。

阅读更多

根据遍历结果反向构建树

业务中也许会遇到反向构建树的情形,如从外部工具获取到依赖关系、行政区划,组织架构等文本数据时,如何去反向构建树。我们以“获取到了树的深度遍历结果,然后将树结构构建出来,最后用JSON格式输出”,来模拟此类树的反向构建过程。本文采用Ruby作为描述语言。 1) 已获取的树的遍历结果文本 company +- org-1 +- org-2 | \- org-2.

阅读更多