入门级MqttBroker:MqttWk1.3.0源码分析

MqttWk可以算作开源MQTT Broker中的教科书,代码简洁易懂,虽然并不适合生产,但对照着MQTT白皮书的每个功能,都能在里面找到基本的实现,能够对Broker有个非常全面的认知以及有了兜底方案的底气(实在写不出,按这个思路先上生产也行,能用就行)。

作者wizzer其实是为了推广他写的Nutz,把MqttWk当作Nutz的一个应用场景来写的。Nutz/NutzBoot就是国产版Spring/Springboot,作者除了实现IoC、AOP等基本功能,还做了一些国内公司喜欢的小优化。在MqttWk中大量出现Nutz的代码,不过不必担心,只要会Spring就能够瞬间理解,只是换了个参数名字而已。

阅读更多

比特币论文研读:论文原文分析

本文将浅析论文原文,对论文中一笔带过的重要逻辑,或者难以理解的地方进行详述,有助于定性地理解论文描述的模型。

阅读更多

二级缓存设计

本文根据阿里开源的JetCache和大佬同事用kotlin写的MutilCacheManager两个框架,来分析二级缓存应该如何设计。

我们一般的缓存有2种用法:

  1. 纯缓存。例如预算加减、分布式锁、配置信息。
  2. 多级缓存+数据库/外部接口调用。一般一级或者二级就够用了。

二级缓存通常是指:为了获取查询耗时较长的数据,以本地缓存+远程统一存储缓存,构建的两个层级的缓存。

multi_level_cache.png

阅读更多

Moquette源码分析(二)v0.12订阅树

Moquette 0.12(以下简称M12)的订阅树实现在moquette-0.12/broker/src/main/java/io/moquette/broker/subscriptions,包括:

订阅树版本 M10 M12
订阅树增删改查 SubscriptionDirectory CTrieSubscriptionDirectory
订阅树 - CTrie
片段 Token Token
主题 Topic Topic
订阅信息 Subscription Subscription
普通节点 TreeNode CNode
封装节点 - INode
墓碑节点 - TNode

查看源码的时候应该从CTrie开始阅读。

阅读更多

Moquette源码分析(一)v0.10订阅树

一、M10 简介

Moquette 0.10(以下简称M10)的订阅树实现在moquette-0.10/broker/src/main/java/io/moquette/spi/impl/subscriptions,包括:

  • SubscriptionsDirectory:订阅树的增删改查
  • Token:片段,由topicFilter按“/”分割而成的最小字符串单位
  • Topic:主题/主题过滤器,包含一系列方法,比如比较主题和主题过滤器是否匹配
  • Subscription:订阅信息,{clientId, topicFilter,qos,active}
  • TreeNode:树节点

查看源码的时候应该从SubscriptionsDirectory开始阅读。

阅读更多

百度IoT:MQTT_Broker架构设计

百度IoT的Broker设计我特别想参考的但是技术能力和时间不够去实现……网上只有一篇百度工程师的总结《共享行业的分布式MQTT设计》,这里将围绕这篇文章去讲解。

Broker集群架构

单机版MQTT Broker有连接数量和并发处理能力的限制,因此分布式必不可少。百度IoT采用的Akka Cluster来做集群管理,每个节点对等,不存在像Mosquitto这种用一台机器“桥接”做分布式产生的单点故障隐患。每个节点监听MemberUp、MemberDown、MemberUnreachable、ClusterMemberState等事件来感知其他节点的上下线,用Akka Actor实现节点间的消息通信。

baidu_broker_cluster.jpg

阅读更多

一致性Hash

一致性Hash是分布式架构最重要最基础的东西,这里以分布式图片缓存服务器为例进行讲述。

原始问题:假设我们需要对一堆图片做缓存,缓存的图片放在了2台服务器上,当到来一个请求,应该如何知道请求的图片在哪台上面呢?

暴力遍历就不要去想了,否则缓存就没有意义了。一个自然的想法就是根据图片的名字做一个映射(Hash),将图片名字映射到0,1两个数字上面,例如有这样的映射函数:

$$ f(图片名称) = md5(图片名称) \% 2 $$

阅读更多

毕业设计整理(六):LBP纹理特征

局部二值模式(Local Binary Pattern,LBP)是一种用来描述图像局部纹理特征的算法,反映的是图像像素点周围纹理变化情况,具有旋转不变性、灰度不变性(光照变化无影响)、计算复杂度低等优点,1994年首次由Timo Ojala, Matti Pietikainen等人提出,用于纹理特征提取。2002年论文《Multiresolution gray-scale and rotation invariant texture classification with local binary patterns》进行了归纳总结,2018年该论文引用量154次,累计9832次。

LBP特征描述

原始LBP特征

origin_lbp.png

阅读更多