自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

04stone37

日积月累

  • 博客(57)
  • 收藏
  • 关注

翻译 Mqtt精髓系列之系统健壮性

翻译:https://www.hivemq.com/blog/are-your-mqtt-applications-resilient-enough/   Mqtt协议已经提供了一些特性来保证系统的健壮性,但是这还不够,有些特性仍需要应用来实现,如下图所示: Automatic Reconnect(断连重试)如果连接出现异常,客户端应该按照一定重试策略尝试重新连接;如果客户端由于没有权限,导

2017-11-30 21:00:32 522

翻译 Mqtt精髓系列之安全

翻译:https://www.hivemq.com/blog/mqtt-security-fundamentals/面临的挑战  在IOT场景中,设备资源受限(计算能力、耗电量等)和网络受限(带宽、稳定性等),这些因素使得高安全性和高可用性更加难以权衡。安全方案概览  Mqtt的安全可以在应用层、传输层和网络层进行保证,如下图所示: 身份认证方式一:用户名和密码  正确:客户端按一定规则生成签名作

2017-11-30 16:31:18 5155

翻译 Mqtt精髓系列之发布订阅

翻译:https://www.hivemq.com/blog/mqtt-essentials-part-4-mqtt-publish-subscribe-unsubscribe发布PublishQoS  客户端发布到Broker的消息Qos;Retain-Flag  当前发布的消息是否为保留消息;消息ID Packet Identifier消息ID只在Qos>0时使用,且范围为0~65535,尽可

2017-11-30 10:44:21 2657

翻译 Mqtt精髓系列之心跳机制

翻译:https://www.hivemq.com/blog/mqtt-essentials-part-10-alive-client-take-over心跳机制  Keep Alive指定连接最大空闲时间T,当客户端检测到连接空闲时间超过T时,必须向Broker发送心跳报文PINGREQ,Broker收到心跳请求后返回心跳响应PINGRESP。若Broker超过1.5T时间没收到心跳请求则断开连接

2017-11-29 21:02:21 10331

翻译 Mqtt精髓系列之保留消息Retained Messages

翻译:https://www.hivemq.com/blog/mqtt-essentials-part-8-retained-messages保留消息定义  如果PUBLISH消息的RETAIN标记位被设置为1,则称该消息为“保留消息”;Broker对保留消息的处理  Broker会存储每个Topic的最后一条保留消息及其Qos,当订阅该Topic的客户端上线后,Broker需要将该消息投递给它。

2017-11-29 18:59:50 17761

翻译 Mqtt精髓系列之服务质量Qos

Qos的重要性  QoS提供了3中服务级别,能够容忍不同网络环境。 QoS is a major feature of MQTT, it makes communication in unreliable networks a lot easier because the protocol handles retransmission and guarantees the delivery of

2017-11-29 17:08:13 2166

翻译 Mqtt精髓系列之连接建立过程

连接过程  首先,客户端发送CONNECT消息请求建立连接;其次,broker返回CONNACK消息,如下图所示: 通过NAT连接 It is a common use case that MQTT clients are behind routers, which are using network address translation (NAT) in order to translat

2017-11-29 12:54:50 4769

翻译 Mqtt精髓系列之预备知识

发布/订阅模式优势传统请求/应答模式是同步的,发布/订阅模式是异步的,这种模式带来以下几种好处:时间解耦:消息发布方和订阅方不需要同时在线发布和接受消息;空间解耦:消息发布方和订阅方只需要感知Broker的地址即可;消息过滤方式基于Topic过滤(mqtt使用);基于消息内容过滤;基于消息类型过滤;消息消费方式集群消费:一条只会投递给集群中某一台机器;广播消费:一条会投递给集群中的

2017-11-29 10:44:17 437

原创 Mqtt入门之协议介绍

介绍  MQTT是一个由IBM主导开发的基于二进制消息的发布/订阅编程模式的消息协议,它被设计用于轻量级的发布/订阅式消息传输,旨在为低带宽和不稳定的网络环境中的物联网设备提供可靠的网络服务。它的核心设计思想是开源、可靠、轻巧、简单,具有以下主要的几项特性: 1. 非常小的通信开销(最小的消息大小为 2 字节); 2. 支持各种流行编程语言(包括C,Java,Ruby,Python 等等)且

2017-11-28 16:57:39 969

原创 Mqtt之安全

背景: MQTT方案通常部署在不安全的通信环境中。在这种情况下,协议实现通常需要提供这些机制:身份认证。用户和设备身份认证。权限校验。设备发布订阅权限、服务端资源访问权限等。数据加密。消息数据的隐私控制。完整性校验。消息数据的完整性校验。设备身份认证  方式1: MQTT协议方式,使用CONNECT报文的用户名和密码校验;   方式2: TLS协议方式,Broker使用设备发送的SSL证

2017-11-28 13:30:28 1003

原创 Mqtt之服务质量等级Qos

Qos0  发送者只发送一次消息,不进行重试,Broker不会返回确认消息。在Qos0情况下,Broker可能没有接受到消息,流程如下图所示: Qos1  发送者最少发送一次消息,确保消息到达Broker,Broker需要返回确认消息PUBACK。在Qos1情况下,Broker可能接受到重复消息,流程如下图所示: Qos2  Qos2使用两阶段确认来保证消息的不丢失和不重复。在Qos2情况下,B

2017-11-28 11:28:44 35592

原创 Mqtt入门之主题与主题过滤器

主题Topic  主题是一个UTF-8字符串,由一个或多个主题级别组成, 每个主题级别之间由正斜杠(主题级别分隔符)分隔,如下图所示: 主题过滤器TopicFilter  含有通配符的主题,目的是让客户端同时订阅多个主题。通配符  当客户端订阅主题时,它可以使用消息发布到的确切主题,或者可以使用通配符同时订阅更多的主题。 通配符只能在订阅主题时使用,并且在发布消息时不允许使用。单级通配符+  +表

2017-11-28 10:52:09 3813

原创 Mqtt之断开连接DISCONNECT

没有可变报头和消息体,固定头部如下: 响应动作如下:

2017-11-27 21:29:56 14839 1

原创 Mqtt之心跳请求消息PINGREQ和响应PINGRESP

请求固定报头心跳报文只有固定报头,没有可变报头和消息体。 心跳请求作用响应固定报头

2017-11-27 21:06:57 7324 1

原创 Mqtt之发布响应消息PUBACK和PUBREC

PUBLISH消息响应   PUBACK报文是对QoS 1等级的PUBLISH报文的响应,PUBREC报文是对QoS等级2的PUBLISH报文的响应。

2017-11-27 20:54:12 4883

原创 Mqtt入门之发布消息PUBLISH

固定报头重发标志DUP功能:消息是否第一次发送;保留标志RETAIN功能:服务端是否需要存储当前消息;可变报头可变报头按顺序包含:主题名和报文标识符。 消息体消息内容和格式根据应用而定。

2017-11-27 20:25:17 3684

原创 Mqtt之连接确认消息ConnAck

可变报头当前会话Session Present功能:客户端确认服务端是否持有会话,从而保持会话状态的一致; 连接返回码ConnectReturnCode Netty实现类MqttConnAckVariableHeader。

2017-11-27 20:06:10 6642 1

原创 Mqtt入门之请求连接信息Connect

可变头部Connect消息的可变头部分为4部分:协议名称Protocol Name;协议版本Protocol Level;连接标识Connect Flags;空闲连接保持时间Keep Alive;连接标识如下图所示: Netty实现类MqttConnectVariableHeader如下图所示: 消息体Connect消息的消息体包含的字段:客户端唯一标识(必填)、用户名、密码、Wi

2017-11-27 18:12:32 12102 1

原创 Mqtt入门之消息组成

消息组成Mqtt协议的消息由三部分组成:固定头部;可变头部;消息体;Netty中MqttMessage实现如下图所示: 固定头部  固定头部的长度固定为2Byte,第一个Byte指定了消息类型,第二个Byte指定了消息长度,如下图所示: 第一个Byte的7-4位指定了消息类型,3-0为消息类型的标记位,相当于扩展位,消息类型如下图所示: 标记位如下图所示: 剩余长度:当前

2017-11-27 17:39:14 3077

原创 基于Netty的长连接客户端

客户端工厂import java.util.List;/** * 接口描述:长连接客户端工厂类 * * @author ruipeng.lrp * @since 2017/11/26 * **/public interface ClientFactory { // ------------ 查询和新增 ------------ Client get(final Re

2017-11-27 15:50:21 8918 1

原创 本地缓存实现之Guava Cache

示例代码import java.util.concurrent.Callable;import java.util.concurrent.TimeUnit;import com.google.common.cache.Cache;import com.google.common.cache.CacheBuilder;import com.google.common.cache.Removal

2017-11-26 17:13:35 400

原创 Java基础之国际化

国际化资源文件各语言资源文件命名规范: 自定义名_语言代码_国别代码.properties;默认资源文件命名规范: 自定义名.properties;资源文件都必须是ISO-8859-1编码,因此,对于所有非西方语系的处理,都必须先将之转换为Java Unicode Escape格式。转换方法是通过JDK自带的工具native2ascii.test_zh_CN.propertiesaaa=\u5

2017-11-23 20:38:40 192

原创 线程池命名工具类

功能  按照“PoolName-thread-n”的格式命名线程池中的线程;示例代码import java.util.concurrent.ThreadFactory;import java.util.concurrent.atomic.AtomicInteger;/** * 类说明:线程池命名工具类 * * @author ruipeng.lrp * @since 2017/11/23

2017-11-23 14:36:18 400

原创 系统预热方案

JIT预热问题:机器重新部署时出现load高、rt高的现象; 原因:重新部署后,JVM需要一段时间识别出热点代码,这段时间内代码都是边解释边执行的,损耗性能。 方案:定制JVM,通过Beta检测出节点代码,生成预热文件,然后推送到集群其它机器,JVM加载到预热文件后将热点代码通过JIT编译成机器代码。

2017-11-22 20:46:46 1513

原创 CAP理论

CAP含义Consistency(一致性):数据一致性;Availability(可用性):集群性能,如吞吐量、延时等;Partition tolerance(分区容错性): 可靠性,部分机器出错不影响整体服务;CAP定理  任何分布式系统只可同时满足二点,没法三者兼顾。因此,在架构设计时不要将精力浪费在如何设计能满足三者的完美分布式系统,而是根据应用场景进行取舍。BASE理论  BASE是

2017-11-22 11:11:40 237

转载 JIT编译

转载:http://blog.csdn.net/ns_code/article/details/18009455编译过程  不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理机的目标代码或虚拟机能执行的指令集之前,都会按照如下图所示的各个步骤进行: 其中绿色的模块可以选择性实现。很容易看出,上图中间的那条分支是解释执行的过程(即一条字节码一条字节码地解释执行,如JavaScri

2017-11-21 21:03:57 311

原创 SSL/TLS协议

简介  SSL(Server Socket Layer)是Netscape公司提出一种保证网络上的两个节点进行安全通信的协议。后来IETF对SSL作了标准化,称为TLS(Transport Layer Security)。从技术上讲,目前TLS 1.0与TLS 3.0的差别非常微小。SSL\TLS协议两个重要作用:数据加密和身份认证。数据加密  SSL\TLS协议在TCP\IP协议中的位置如下图所示

2017-11-17 19:31:27 332

原创 PicoContainer系列之基本介绍

PicoContainer是非常轻量级的Ioc容器,提供依赖注入和对象生命周期管理的功能,纯粹的小而美的Ioc容器。而Spring是Ioc+,提供如AOP等其他功能,是大而全的框架,不只是Ioc容器。   官网地址:http://picocontainer.com/Bean模式(Behaviors)Caching:单例模式;Implementation Hiding:只能使用抽象类,不允许向下

2017-11-16 11:35:56 3174

原创 file.getPath() VS getAbsolutePath() VS getCanonicalPath()

区别getPath()返回的是构造方法里的路径,不做任何处理;getAbsolutePath()返回的是 user.dir+getPath(),也就是执行路径/用户工作目录加上构造方法中的路径; getCanonicalPath()返回的是将符号完全解析的路径,也就是全路径;代码示例import java.io.File;public class FilePathTest { pub

2017-11-15 11:14:49 336

原创 插件平台设计方案

可能的技术点: 待补充。。。

2017-11-14 16:19:48 340

原创 权限控制器AccessController

AccessController:根据特定的算法决定当前调用请求能否访问受限资源; 权限检查算法 调用堆栈没有出现doPrivileged: 需要堆栈中所有的调用者拥有权限才能通过; 调用堆栈出现doPrivileged:如果doPrivileged方法入参没有AccessControlContext参数,则认为拥有权限,直接返回;如果doPrivileged方法指定AccessContr

2017-11-14 11:36:50 3107

原创 安全管理器及策略

SecurityManager作用:开关,是否启用沙箱环境; 启用方式:JVM启动参数中添加-Djava.security.manager;通过代码安装System.setSecurityManager(new MySecurityManager()); 沙箱策略策略:指定某些代码对某些资源具有某些访问权限,如/home/admin目录下的代码对/logs目录下文件有只读权限,示例如下图所

2017-11-13 17:02:37 297

原创 沙箱机制

背景:从安全的角度,代码可以分为可信代码(如本地代码)和不可信代码(如第三方插件、网络代码等),为了防止不可信代码对应用的恶意侵犯,Java提供了一套隔离环境用于限制不可信代码对本地系统的资源访问,这种机制叫“沙箱机制”,如下图所示。     基本组件类加载器(用户可定制)Class文件检验器内置于Java 虚拟机的安全特性安全管理器及Java API(用户可定制)类加载器引入“命名空

2017-11-13 10:41:02 563

原创 Hystrix系列之组件间的关系

各组件关系每个CommandKey唯一表示一个Command,同理ThreadPoolKey和GroupKey;多个Command组成CommandGroup,用于命令的分组;每个Command可以有单独的线程池,整个CommandGroup也可以共享同一个线程池(默认);每个命令Command有自己的属性和熔断器CircuitBreaker;每个ThreadPool有自己的属性Threa

2017-11-10 19:05:45 341

原创 Hystrix系列之熔断器

熔断器状态转换  熔断器有三种状态(关闭、打开和半开),三者之间的转换逻辑如下图所示:熔断器默认为“关闭”状态;当失败率或者失败总量超过设定阈值,则变为“打开”状态,并开启定时器;达到HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds()设定的休眠时间后,熔断器变为“半开”状态,此时允许执行一个请求,执行成功则恢复为

2017-11-10 16:05:07 586

原创 Hystrix系列之工作流程

工作流程Step1:构建命令创建HystrixCommand或者HystrixObservableCommand对象:HystrixCommand command = new HystrixCommand(arg1, arg2);HystrixObservableCommand command = new HystrixObservableCommand(arg1, arg2);Step2:执行命

2017-11-10 14:56:49 251

原创 Hystrix系列之属性配置

Hystrix常用属性配置总结如下,详解介绍查看:https://github.com/Netflix/Hystrix/wiki/Configuration#intro 几个关键参数下面会进行详细介绍。线程池大小  估算原则:线程池大小尽可能小,以便当发生阻塞时最小化对系统的影响。   估算公式:线程池大小N=峰值QPS * 99%请求处理延时 + 冗余线程M;隔离策略策略1:THREAD

2017-11-10 12:22:27 344

原创 慢SQL熔断方案

问题  现有数据开放平台,通过执行用户的SQL命令提供数据查询服务。用户的SQL命令具有不确定性,当出现慢sql时会影响系统的稳定性,主要表现是服务器线程池被占满,造成雪崩效应,其它正常sql无法正常执行,出现系统假死现象。熔断方案  按照某个维度(用户、SQL等)进行熔断,如果采样周期T内SQL超时的情况的超过设定阈值N,进行熔断降级并且发送通知,如下图所示: 该方案具有以下特点:及时性:

2017-11-09 17:26:45 1492

原创 系统稳定性保障

常见保护措施限流算法漏桶算法漏桶算法的主要思想如下:漏桶容量固定,按照固定速率流出水滴直到桶变空;水滴可以以任意速率流入漏桶,如果桶满则溢出(丢弃);         令牌桶算法令牌桶算法的主要思想如下:桶的容量固定,令牌被按照固定的速率加入到桶中;桶满则溢出(丢弃);请求到来时先获取令牌,获取到则进行处理,否则阻塞、等待或者拒绝;    Guava的RateLimiter提供了

2017-11-09 14:29:24 2801

原创 防雪崩利器Hystrix

简介: Netflix的 Hystrix 是一个帮助解决分布式系统交互时超时处理和容错的类库, 它同样拥有保护系统的能力。

2017-11-08 17:14:09 393

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除