- 博客(336)
- 资源 (41)
- 收藏
- 关注
原创 mosquitto鉴权插件的开发与说明(一)
1. mosquitto的插件的接口在文件mosquitto_plugin.h中进行了声明,在创建自己的鉴权插件代码中必须包含头文件mosquitto_plugin.h,并且实现该头文件中声明的所有鉴权接口函数(接口函数mosquitto_log_printf除外)。2. mosquitto插件的权限校验方式由头文件mosquitto_plugin.h中声明的接口函数所限制,共
2017-08-02 17:54:59 8171 2
原创 Nginx的主要函数调用关系分析
感觉这篇总结没把Nginx最主要的函数调用关系说清楚,因此,这次又重新组织了一下,以更简单的方式描述Nginx中如何从main函数开始,到创建各个进程,然后当有客户端连入进来时如何进行消息读取,这篇总结还未涉及到对业务流程的处理,例如对http请求的处理等。Nginx支持epoll、select、kqueue等不同操作系统下的各种IO多路复用方式,本文以epoll为例分析Nginx是如何实现在一套
2017-07-10 14:36:13 1619
原创 程序员的自我修养——读《软技能-代码之外的生存指南》笔记
我记得曾经读过俞甲子的《程序员的自我修养——链接、加载和库》,当时就觉得这个书名起的不太合适,有点不合主题,因为这本书主要讲述链接库的事情,我认为这个是编译器的一部分,是作为程序员要掌握的一项基本技能,而不修养的事情,更谈不上基本修养(但是这本书的内容依然是非常好的,我曾经仔细阅读过5遍,并且详细的做了笔记和心得,所以,我还是很认可这本书内容)。从那个时候起,我隐约也在想一个问题:程序员的基本修养
2017-06-29 08:03:22 1513
原创 大数据平台在分布式服务中的应用
对大数据平台的一些理解大数据是目前比较火的领域,它涉及的领域比较广泛,例如数据挖掘、机器学习等等;所有这些基于数据的操作能够正常工作的前提是:搭建相应的大数据收集平台,在该平台中能够通过主动和被动的方式收集到足够的数据;一般情况下,大数据平台里的数据来源主要有:(1) 日志数据,相对于大数据平台,这是一种主动收集数据的方式;这种方式可能是大数据平台中最主要的数据来源,并且随着用户请求量、服务数量
2017-06-27 18:03:22 3691 2
原创 chmod简介及其使用方法
1. chmod命令介绍:chmod [who] [+ | - | =] [mode] 文件名 命令中各选项的含义为: 操作对象who可是下述字母中的任一个或者它们的组合: u 表示“用户(user)”,即文件或目录的所有者。 g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。 o 表示“其他(others)用户”。 a 表示“所有(all)用户”。它
2017-06-08 09:56:29 2378
原创 使用 logrotate对centos中各服务程序的日志文件进行转储
1.mosquitto的日志输出方式简介mosquitto是一个纯C的代码,它的日志输出支持若干中日志输出方式,通过修改配置项:log_dest即可完成对各种日志输出类型的切换,常见的日志输出类型有有下几种:(1)控制台输出stdout、stderrrlog_dest stderr(2)输出到日志文档log_dest file /home/logs/mosquitto/mosquitto.log【
2017-05-23 18:40:03 4241
转载 linux信号及其含义
我们运行如下命令,可看到Linux支持的信号列表: ~$ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) S
2017-05-08 20:07:56 3054
原创 悲观锁与乐观锁
悲观锁与乐观锁都是对被修改数据在并发情况下的一种保护机制;这里悲观与乐观的含义是指对于即将修改的数据被外界修改持一种悲或乐的态度;即:悲观锁是指我认为当我要修改一个数据的时候,别人也在修改,所以我要对即将操作的数据进行全程加锁,以保证我的操作不会被别人所影响;乐观锁是指当我要修改数据的时候,别人一般不会再修改,因此,我只在提交我的修改时再加锁,而不用全程加锁。由此可见:悲观锁的加锁时间更长。对于修
2017-04-19 12:25:20 1119
原创 CentOS7环境下搭建flume
一、flume安装与配置1.将flume解压到指定目录/home/jason/bigdata下:[root@clsserv202 bigdata]# pwd/home/jason/bigdata[root@clsserv202 bigdata]# ll总用量 4drwxrwxrwx. 8 root root 4096 9月 8 14:38 flume-1.6.02.将flume的目录添加到环境
2017-04-18 17:33:50 3333
原创 centos7环境下搭建storm集群
前提:使用的zookeeper集群为:11.12.112.215:2181,11.12.112.216:2181,11.12.112.217:2181并且zookeeper集群已经启动成功;下面将以11.12.112.210服务器上为例,说明storm的部署过程:1、解压storm到目录/home/jason/bigdata/下:[root@clsserv210 bigdata]# pwd/hom
2017-04-18 17:27:49 2990
原创 CentOS7环境下搭建Kafka
计划使用三台主机:11.12.112.206、11.12.112.207、11.12.112.208搭建Kafka集群环境,使用的zookeeper集群为:11.12.112.215:2181,11.12.112.216:2181,11.12.112.217:2181并且zookeeper集群已经启动成功;1.下载压缩包:kafka_2.11-0.8.2.2.tgz并将之放在某个目录下,例如:/h
2017-04-18 17:26:12 2834
原创 CentOS7环境下搭建Kibana
本次安装的Kibana主要用于展示《CentOS7环境下搭建ElasticSearch》中搭建的ES,其详细安装部署过程如下所示:1.解压Kibana压缩包kafka_2.11-0.8.2.2.tgz到指定的目录/home/jason/bigdata/下如下所示:[root@cluster209 kibana-4.1.3-linux-x64]# pwd/home/jason/bigdata/kib
2017-04-18 17:24:56 4157
原创 CentOS7环境下搭建ElasticSearch
搭建环境在11.12.112.209主机,本文件主要说明搭建一个ES,如果多个es,只有让他们的配置文件中的集群名称cluster.name配置成一样,它们就会自动组成一个集群。一、搭建elasticsearch环境1.先将软件放在:/home/jason/bigdata/目录下,如下:[root@cluster209 bigdata]# pwd/home/jason/bigdat...
2017-04-18 17:23:15 6119
原创 关于redis的pipline和lua脚本
1. 关于redis命令执行方式的一点看法:Redis命令执行时是串行的,在同一个连接上客户端发送一条命令,redis对这个命令进行操作然后返回结果,客户端只有接到这个结果之后才能发送下一条命令,例如: 如此串行的执行方式效率非常低,为此,redis引入了pipline,它可以让客户端依次发送一批命令过期,然后redis依次执行这些命令,并把这些命令的结果依次放入到一个list里面一次返回
2017-03-03 18:21:18 2887 3
原创 nginx源码分析之IO多路复用流程
一、 主流程几乎所有的服务器程序的工作模式都是:(1) 初始化一些参数;(2) 开启监听socket;(3) 在主线程的死循环(一般都是死循环)中对监听socket和业务socket进行IO状态监控(IO多路复用),并对IO进行处理;Nginx的主要工作模式是多进程模式,那么它的工作方式也是类似的。只不过是它的死循环被分散到了各个工作进程中。这
2017-03-02 20:35:40 4280 1
原创 nginx源码分析之内存池实现原理
建议看本文档时结合nginx源码;1.1什么是内存池?为什么要引入内存池?内存池实质上是接替OS进行内存管理,应用程序申请内存时不再与OS打交道,而是从内存池中申请内存或者释放内存到内存池,因此,内存池在实现的过程中,必然有一部分操作时从OS中申请内存,或者释放内存到OS,如下图所示:图1内存池的引入可有效解决两个问题:(1) 降低应用程序与OS之间进行频繁内存...
2017-02-21 19:47:47 4524
转载 使用LVS实现负载均衡原理及安装配置详解
本文转自:http://www.cnblogs.com/liwei0526vip/p/6370103.html 负载均衡集群是 load balance 集群的简写,翻译成中文就是负载均衡集群。常用的负载均衡开源软件有nginx、lvs、haproxy,商业的硬件负载均衡设备F5、Netscale。这里主要是学习 LVS 并对其进行了详细的总结记录。一、负载均衡LVS基本介绍 LB集群的架构
2017-02-15 08:54:53 944
转载 Linux 内核中的 Device Mapper 机制
本文结合具体代码对 Linux 内核中的 device mapper 映射机制进行了介绍。Device mapper 是 Linux 2.6 内核中提供的一种从逻辑设备到物理设备的映射框架机制,在该机制下,用户可以很方便的根据自己的需要制定实现存储资源的管理策略,当前比较流行的 Linux 下的逻辑卷管理器如 LVM2(Linux Volume Manager 2 version)、EVMS(Ent
2017-02-09 14:27:55 1821
原创 微服务开发过程中需要注意的若干事项
微服务,说比做容易!我们更关注怎样将这种架构设计思想融入到实际工作中,微服务更关注各服务之间的调用、管理,它追求软件研发过程中的自动化,例如:自动编译、打包、发布,自动化运维等等,这里的每一个自动化的地方都需要有相应的软件、脚本做支撑;在实际应用过程中,我们很难短时间内把所有的自动化基础软件熟练应用起来,一方面,时间紧迫,很难有公司会专门抽出来时间来搭建和构造这样的一套自动化系统出来,并且培训好相
2017-02-07 18:42:57 5050
翻译 优秀REST风格 API的设计原则
本文由逍遥子翻译自:https://codeplanet.io/principles-good-restful-api-design/文中注释由逍遥子根据个人理解填写,转载时请附带本文的连接。设计优秀的REST风格API非常困难!API是服务提供方和使用方之间的契约,打破该契约将会给服务端开发人员招来非常大的麻烦,这些麻烦来自于使用API的开发人员,因为对API的改动会导致他们的移动...
2017-01-10 17:42:27 36542 13
原创 正向代理和反向代理
正向代理,代理客户端发送请求,例如,我们局域网内的所有主机都不能上网,但是该局域网内有一台双网卡主机A能访问外网,这时可以在双网卡主机A上启动代理服务,在局域网内其他想访问外网的主机上配置代理服务,这样它们就可以上网了;因为这些原本无法访问外网的主机会先将上网请求发送到代理服务器A上,由代理服务A替它们访问相应的外网资源,并将请求到的网络资源返回给请求用户;对于服务端而言,它只能看到代理服务器,并不
2016-12-19 17:56:58 998
原创 为系统扩展而采取的一些措施——异步
同步与互斥,提到异步必然要涉及到与之对应的另一个词“同步”,而提到“同步”很多人也会联想到另一个词“互斥”,同步是指多个操作之间产生了依赖或者先后顺序关系,互斥是指多个操作需要访问同一个资源,而这个资源又不能让多个操作同时进行,那么这多个操作之间就是互斥关系;同步调用与异步调用,在服务设计时,同步调用是指调用方在发起调用之后必须一直等待直到调用结果返回才能进行后续的操作,异步调用是指调用发起方在发
2016-12-17 17:33:20 1544
原创 为系统扩展而采取的一些措施——缓存
缓存 1.1 缓存刷新机制,缓存刷新是指什么时候把数据库中的数据加载到缓存 (1) 定期刷新; (2) 缓存命中失败时刷新; 1.2 在有缓存时的数据写入方式: (1) 同步写入,即缓存和数据库同时被写入,即在应用层进行双写操作,这种方式可以有效保证缓存和DB中数据的一致性,由于这种方式即要更新缓存同时还要更改数据库,其访问效率相对较低,适合读多写少的场景; (2) 异步更新机制,在写操
2016-12-16 20:24:30 988
原创 架构设计的立方体扩展
本文是对《架构即未来》一书第20章的总结; 1. 立方体扩展是指X、Y、Z轴三个方向的扩展方式; 2. X轴扩展,指水平扩展,这种方式简单易于实现,它要求服务必须是无状态的,部署1个和部署多个是一样的,这样可以根据系统当前的业务承载量来部署所需数量的服务实例,一般情况下,该业务需要与服务注册、治理、发现机制相结合,当一个服务A被水平扩展了一个新实例ai时,所依赖它(调用了它)的其他服务C需要
2016-12-15 20:30:30 1483 1
原创 构建故障隔离的架构
本文是对《架构即未来》一书第19章的总结; 1. 什么是故障隔离的架构?个人理解,就是一个系统按照其功能划分为几个独立的子模块,子模块之间互不依赖,互不通信;这里的互不通信是指模块之间不要采用同步调用方式,可以采用中间模块转交的异步方式。 2. 故障隔离的架构有什么好处? (1) 限制故障的影响范围,采用了故障隔离的架构,每个子模块的故障至影响它本身而不会波及到其他模块; (2) 便于故
2016-12-15 20:14:43 4786
原创 性能测试、 障碍条件和回滚
第17章 性能测试 1. 性能测试是指把负载和用户需求施加在系统上,以测量其相应时间和稳定性的过程,它是为了验证应用能够满足预期的性能目标;一般需要关注响应时间、吞吐量和资源利用率这三类指标; 2. 性能测试的第一步是建立标准,没有标准的测试是没有意义的; 3. 性能测试的环境应该与研发、QA和准生产等环境分开;之所以要把性能测试环境独立开是因为性能测试需要对整个系统施加压力,如果系统中
2016-12-14 20:38:55 1063
原创 确定风险
本文是对《架构即未来》一书第16章的总结; 1. 风险管理是提高和保持可用性及可扩展型的最基本和最重要的方面。 2. 测试是预先发现风险并有效降低风险概率的有效方法,但是任何的测试都无法彻底发现所有的风险点; 3. 在AKF中倾向于把风险看成一个“多元化的产品”,将风险分成两部分: (1)风险发生的概率,它有两部分决定: [1] 本次变更(版本升级)的变更量,即这次改动有多大? [
2016-12-14 18:24:16 961
原创 聚焦核心竞争力:自建与外购
本文是对《架构即未来》一书第15章的学习与总结; 1.设计可扩展性的系统的两个关键:水平扩展和为了不可预知;水平扩展是我们服务能扩展的首要条件,未来不可预知是指在设计服务时要做好隔离,做好随时能把一个复杂组件替换掉的准备;这其实还是设计的基本功,要能从一堆复杂问题准确识别出一个组件,确定它的边界,处理好组件内和组件外的通信接口,能识别并设计好一个组件是满足不可预知条件的前提; 2.在对一个组件是
2016-12-12 20:50:34 1626
原创 团队的组织形式
本文是对《架构即未来》第2章的总结 1. 团队组织的核心就是人员的管理问题 2. 规范和标准对于一个团队来说非常重要,个人理解,它能保障团队成果的质量底线,如果一个团队不能养成遵守规范和标准的习惯,那这个团队的产出成果就会良莠不齐;规范和标准是一个团队由游击队走向正规军的标志; 3. 团队中的任何工作都要职责清晰、明确;如果全凭自觉,靠吃大锅饭的形式,当任务下来的时候就不会有人觉得自己对
2016-12-09 20:29:24 6711
原创 架构设计的原则
本文是对《架构即未来》一书第12章的总结; 1. 书中总结了一个好的架构应该具备的特点,但是有些特点个人感觉是重复的,中间起来应该有以下3个特点: (1) 具体的、可执行的;好的架构不应有太多虚的东西,它应该能够切实可执行起来用于指导开发; (2) 可度量的;平时最关注的是一个架构所能承载的性能,它应该是可以测试出来; (3) 可达到的;架构设计不应脱离实际,一个很美好但是无法实现的架构是
2016-12-07 20:39:32 2862
原创 如何估算一个分布式系统的容量
本文是对《架构即未来》一书第11章的总结; 1. 读完本章最大的收获是了解了应该如何评估一个系统的能力以及应该怎样为一个线上系统预留发展空间。在系统上线的时候,我们经常被问到的几个问题就是你的系统能承受多大的用户量?我们当前应该部署多少服务才能承载公司的当前和未来一段时间的业务? 2. 文中给出若干步骤用于预估系统的预留空间,将其总结如下: (1)确定当前的系统负载量,包括了解系统的组成以
2016-12-07 19:39:22 5495
原创 生产环境的变更管理
变更包含广阔的范围,它不仅包括软件的升级还包括对当前环境的任何软、硬件改动,包括配置、操作系统、数据库、防火墙、网络设备等等,对于研发来说,变更最主要的还是版本升级;生产环境的变更是事故发生的主要原因,经验指出,生产环境中的事故,有很大一部分是由于软、硬件的变更而引起;这也与我们的实际工作场景相似,我们在实际工作中,一旦遇到生产环境的问题,首先要问的就是最近有没有谁对系统做过任何改动?例如版本升级
2016-12-06 20:07:57 3810
原创 管理故障和问题
本文是对《架构即未来》第8章的总结。 1. 书中的的问题翻译为根源更合适。 2. 故障是指造成服务异常的事件,包括停止服务、服务效率降低等;根源是导致故障的原因;同一个根源可能导致多种不同的故障; 3. 解决故障属于紧急事情,找到根源属于重要事情,在时间管理的四象限法制中,紧急事情优先级要高于重要事情;在实际工作中也基本如此:一旦运维发现线上服务出现问题,首先想做的事情就是重启服务,尽量
2016-12-05 19:44:58 1429
原创 流程在团队管理中的作用
本文是对《架构即未来》一书第7章的总结与思考1. 个人认为书中的过程改为流程更为合适;2. 流程是什么?个人理解:为解决特定问题而形成的套路似的解决办法,只要大家遇到这样的问题,按照流程中的步骤一步步执行,就能确保问题解决。3. 流程能帮助我们做哪些事情?个人理解:(1)规范每个人的操作行为,让问题的解决更为规范、可控;其实每个人都有自己的主管思维和理解,每个人看问题的角度可能都不一样,他们所形成
2016-12-02 20:47:06 1768
原创 关于推送系统设计的一些总结与思考(三)
**四、 推送系统的集群化**4.1长连接集群推送系统作为一项基础服务,它需要承载全部在线用户量,对于移动互联网行业,在设计之初的期望目标用户量就非常大,并且用户未来一段时间的增长量通常难以预估,因此要求在设计推送系统时,都要求能够集群化部署、支持动态扩展。那么长连接集群化设计时需要解决那些问题呢? 个人认为长连接服务需要解决三个问题:路由、管理和动态扩展;另外,如果想要锦上添花,让长连接通道更加
2016-11-24 19:43:51 3345
原创 关于推送系统设计的一些总结与思考(二)
**三、 消息推送的工作模式** 常见的消息推送系统的工作模式有:推模式、拉模式以及推拉混合模式三种,在很多推送系统中,采用在线消息直接推送下去,离线消息让客户端拉取,这种方式很容易造成漏消息的问题。本节将介绍几种“特殊定义“的推送模式的特点和应用场景,它们的含义与通常理解的略微有些差异。 在线用户:个人认为在线用户是指网络正常、弱网、网络异常等情况下的用户,这些用户实际上正在使用系统,只是由于
2016-11-24 19:40:05 9959
原创 关于推送系统设计的一些总结与思考(一)
消息与通知本文中的消息是指交给推送系统的待发送字符串;通知是指推送系统内部,通过长连接服务发送给客户端的通知字符串,它只在推送系统内部使用,对于使用推送系统的上层应用无法感知其存在;一、 安全性在推送系统中,安全性最受关注的是长连接的安全管控,以及数据在长连接通道上传输的安全性。举个针对长连接的安全管控的例子:有人知道你的长连接服务的IP地址和端口之后伪造大量的TCP连接,将会对长连接服务器端产生的
2016-11-24 19:11:03 5409
原创 在logback、log4j等日志输出工具中输出java异常调用堆栈
使用logback、log2j输出java异常如果采用如下方式:try{ ... }catch (Exception e){ logger.error("[lid:{}] [{}]<< exception happened! detail:{}", logIndex, logFlag, e); }则无法输出异常的调用堆栈,下面这个一个静态工具函数,可以输出异常的堆栈信息,如下:publ
2016-09-27 09:12:29 8854 1
原创 数据链路层的一些总结
在网络中,主机与主机之间总是通过一个网线把各自的网卡对接起来,数据链路层的功能就是把一帧数据从当前主机(的某个网卡)传递到相连的下一个主机上(的某个网卡); 数据链路层为适应物理层采用的不同硬件,它支持多种协议,例如以太网、令牌环网、FDDI等,在我们日常使用过程中,以太网是最常见,也是TCP/IP采用的主要局域网技术,它采用CSMA/CD(带冲突检测的载波侦听多路介入)的媒体接入方法,速率为10
2016-09-21 10:27:33 1782
原创 IP、主机名和域名
在网络通信中,每个IP可唯一标识一台主机,在多网卡或者路由器等的情况下,每个主机可以有多个IP,通过哪个IP都可以找到该主机;但是IP地址是一个32位的数字,为了便于记忆,我们通常把按每字节划分,然后用10进制表示出来,即我们通常说的点分十进制(在IPV6的中采用的是冒号分十六进制)。如下图的网络抓包,可以看到一个我们常见的IP地址:192.168.100.1的实际存在形式用16进制就是:c0 a...
2016-09-21 10:13:32 26730 3
Mosq_Tester-20190722.zip
2020-02-01
mqtt-websocket的js测试客户端
2018-11-24
mosquitto-websocket-client
2018-03-15
mosquitto支持websocket的配置
2018-11-24
python-iniparse-0.4-9.el7.noarch.rpm
2018-03-07
SimpleJava、Linux命令行、Java NIO (中文版)、Linux Performance and Tuning Guidelines
2015-01-04
C开源hash代码uthash
2013-11-12
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人