自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

chenglinhust的专栏

分布式系统 基础架构 中间件系统 安全领域 容器技术 人工智能

  • 博客(1138)
  • 资源 (1)
  • 论坛 (1)
  • 收藏
  • 关注

原创 开源许可证

2019-03-13 23:28:58 260

原创 分布式系统核心—日志

    分布式系统的核心组件:日志。有时也叫write-ahead logs 、commit logs 或者事物 logs, 通常指在应用所有的修改之前先写入日志,一般会将重放日志、撤销日志都写进去。    NoSQL数据库、KV存储、Hadoop、raft、paxos 以及版本控制等等,这些中间件或者协议本质上都或多或少依赖于日志,可以发现日志一直都在分布式系统中扮演者非常重要的角色。 ...

2019-02-17 17:56:54 3839

原创 Lamport 逻辑时钟

    分布式系统中按是否存在节点交互可分为三类事件,一类发生于节点内部,二是发送事件,三是接收事件。注意: 以下文章中提及的时间戳如无特别说明,都指的是Lamport 逻辑时钟的时间戳,不是物理时钟的时间戳。     如果a在进程Pi中,b在进程Pj中,Ci(a) = Cj(b)且i < j,那么a在b之前。形式化一点,我们可以把系统事件E上的全序关系“=>”定义为:  ...

2019-02-11 23:07:45 2503

原创 TCP连接阻塞的监控和处理

                                                                    TCP连接阻塞的监控和处理那么,什么样的TCP连接属于上述发生阻塞的异常连接呢?结合线上运维经验,我们整理出符合该类异常的特征如下:该连接的Recv_Q的值特别大(超过3M) 该连接的Recv_Q的值持续上涨,造成堆积(在一定滑动时间窗口内) 服务...

2019-01-16 22:14:35 3141 1

转载 C++ 如何避免内存泄露

转载于:https://zhuanlan.zhihu.com/p/51898119前言近年来,讨论 C++ 的人越来越少了,一方面是由于像 Python,Go 等优秀的语言的流行,另一方面,大家也越来越明白一个道理,并不是所有的场景都必须使用 C++ 进行开发。Python 可以应付大部分对性能要求不高的场景,Go 可以应付大部分对并发要求较高的场景,而由于 C++ 的复杂性,只有在对性能...

2019-01-12 20:24:40 3602

原创 一致性模型

                                                                                        一致性模型

2018-11-08 16:41:40 589

原创 基于分布式一致性系统实现的分布式锁的生命期问题探究

                                                    基于分布式一致性系统实现的分布式锁的生命期问题探究分布式锁的生命期,即占有分布式锁所有权的Client与Quorum Server之间建立连接上耦合的Session的生命期,依赖着Client与Quorum Server之间定期心跳来更新。Client与Quorum Server,如果在本端...

2018-11-08 15:25:53 179 1

转载 filebeat工作原理

                                                                                         Filebeat工作原理Filebeat是本地文件的日志数据采集器。 作为服务器上的代理安装,Filebeat监视日志目录或特定日志文件,tail file,并将它们转发给Elasticsearch或Logstash进...

2018-10-30 00:15:22 2119

原创 leveldb之log文件

                                                                                        leveldb之log文件1.    log文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据。因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中...

2018-09-23 18:10:32 660 1

原创 LevelDB系统的整体架构

                                                                                 LevelDB系统的整体架构            上图简单展示了 LevelDB 的整体架构。LevelDB 的静态结构主要由六个部分组成:MemTable:内存数据结构,具体实现是 SkipList。 接受用户的读写请求,...

2018-09-23 17:48:36 282

原创 微信后端架构摘录

                                                                                              微信后端架构摘录

2018-09-20 22:02:57 1562

原创 Raft的PreVote实现机制

                                                                                       Raft的PreVote实现机制1. 背景在Basic Raft算法中,当一个Follower与其他节点网络隔离,如下图所示:Follower_2在electionTimeout没收到心跳之后,会发起选举,并转...

2018-09-19 23:54:43 891

原创 分布式系统之数据分片

                                                                                 分布式系统之数据分片详细参考:http://www.cnblogs.com/xybaby/p/7076731.html...

2018-09-18 18:07:21 654

转载 分布式存储的读修复和周期性静默修复的原理

                                                             分布式存储的读修复和周期性静默修复的原理    什么是静默错误?简单来说,就是磁盘写入数据返回成功,或者当时写入是正确的,放置一段时间后,由于硬件错误、固件 BUG 或者软件 BUG、供电问题、介质损坏等等各种原因,数据被改变了。正常来讲,分布式存储内部都会在读取数据时,或...

2018-09-04 23:26:17 505

原创 HDD/SSD/NVM存储介质

                                                                                    HDD/SSD/NVM存储介质NonVolatile Memory,非易失存储器,具有非易失、按字节存取、存储密度高、低能耗、读写性能接近DRAM,但读写速度不对称,读远快于写,寿命有限(需要像ssd一样考虑磨损均衡)。当电流关...

2018-09-04 22:48:53 1891

转载 数据库为什么使用B+树而不是B树

                                              数据库为什么使用B+树而不是B树B树和B+树的区别B树和B+树的区别主要有两点:在B树中,你可以将键和值存放在内部节点和叶子节点,但在B+树中,内部节点都是键,没有值。叶子节点同时存放键和值 B+树的叶子节点有一条链相连,而B+树的叶子节点各自独立。B树与B+树的对比示意图使用B+树...

2018-08-30 23:14:48 1064

原创 基于容器构建具备一致性系统环境

2018-08-24 16:43:16 278

原创 能耗相关名词介绍

                                                                                        能耗相关名词介绍1. ACPI: 高级配置和电源管理接口2. IPMI: 智能平台管理接口 (IPMI) 是一种开放标准的硬件管理接口规格IPMI协议被广泛用于服务器监控中,包括采集CPU温度、风扇转速、主板温度...

2018-07-24 09:12:02 452

原创 获取机器当前CPU频率

                                         获取机器当前CPU频率struct perf_cpu_info{    int tsc;    int index;    int mhz;};struct perf_cpu_info *cpu_list;static unsigned long long native_read_tsc(void...

2018-07-17 23:41:25 3137

原创 超线程简介

超线程简介超线程的技术原理超线程技术在一个物理核上模拟两个逻辑核,两个逻辑核具有各自独立的寄存器(eax、ebx、ecx、msr等等)和APIC,但会共享使用物理核的执行资源,包括执行引擎、L1/L2缓存、TLB和系统总线等等。超线程对性能的影响分析可以看出,超线程技术仅仅是在一个物理核心上使用了两个物理任务描述符,物理计算能力并没有增加。现在很多程序如web application, 都采用多w...

2018-07-04 22:36:14 1862

原创 关于CPU C-States 省电模式,你需要知道的事情

为了在CPU空闲的时候降低功耗,CPU可以被命令进入low-power模式。每个CPU都有几种power模式,这些模式被统称为C-states或者C-modes。lower-power模式最早在486DX4处理器上被引入,到现在,更多power mode被引入和增强,来进一步降低CPU的功耗。这些模式最基本的思想是通过CPU内部的idle unit切断CPU的clock信号和供电。越多的CPU单元...

2018-06-13 10:41:22 61299

转载 DPDK分析

DPDK分析点击打开链接

2018-04-07 16:38:54 483

原创 实现一个高性能网络通讯库的要点

实现一个高性能网络通讯库的要点    由于硬件的发展速度快,本来占时间消耗小头的软件层,变成了大头,原本占性能比例非常小的的中断、上下文切换,也成为了性能优化的方向。    许多bypass kernel的方案开始发展起来,以前在千兆网卡普及的时代,就有用户态报文处理框架如netmap,需要自己加载一个特殊的内核模块,将驱动使用的内存mmap到用户空间,供用户进程使用。也有我们现在在用的DPDK。...

2018-04-07 16:24:16 773

原创 区块链核心之共识机制

区块链核心之共识机制    共识机制:在一个时间段内对事物的前后顺序达成共识的一种算法。    如下如几个共识算法的比较:

2018-03-27 23:19:16 3141

原创 网络QoS解决方案

网络QoS解决方案     在网络带宽不足时,对网络流量做区别服务。优先传输那些重要的、要求网络延迟小的、如果丢弃会导致更大业务代价的数据,并对不同应用的数据做合理的带宽分配与控制。如果一定需要丢弃一些数据,则丢弃那些代价比较低的。这就是网络 QoS 要实现的目标。     在数据包从网卡发出前修改IP包头的TOS字段的指定6bit的DSCP相应的值,使得数据包在被送到网络

2018-03-26 23:52:41 1654

原创 用 Python 构建区块链

用 Python 构建一个极小的区块链转载地址:http://python.jobbole.com/89041/

2018-03-19 22:14:54 472

原创 Redis 高可用架构最佳实践

Redis 高可用架构最佳实践1.  Redis sentinel原理Sentinel 集群通过给定的配置文件发现 master,启动时会监控 master。通过向 master 发送 info 信息获得该服务器下面的所有从服务器。Sentinel 集群通过命令连接向被监视的主从服务器发送 hello 信息 (每秒一次),该信息包括 Sentinel 本身的 IP、

2018-03-18 18:36:06 385

转载 Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结

Nginx+Redis+Ehcache:大型高并发与高可用的三层缓存架构总结Nginx对于中间件nginx常用来做流量的分发,同时nginx本身也有自己的缓存(容量有限),我们可以用来缓存热点数据,让用户的请求直接走缓存并返回,减少流向服务器的流量一、模板引擎通常我们可以配合使用freemaker/velocity等模板引擎来抗住大量的请求。小型系统可能直接在服务器端渲染出所有的页面并放入缓存,之...

2018-03-17 12:50:42 855 2

转载 2018 存储技术热点与趋势总结

2018 存储技术热点与趋势总结https://mp.weixin.qq.com/s/lqWY8DBibCbdHTV-xiUmqA

2018-03-16 23:58:38 874

原创 键值数据库PebblesDB读后感

键值数据库PebblesDB读后感      在LevelDB/RocksDB这种分层思路上,PebblesDB提出了一种减少写放大的思路,下面学习并总结,所述以论文为基础,也有个人 观点,客观论述请看原文。虽然LSM的写放大最近被研究很多,但是就写放大本身而言,是一个很古老的问题。在计算机体系中,如果相邻两层的处理单元不一致或者应用对一致性等有特殊的需求,就很可能出现

2018-03-16 23:47:51 967

原创 分布式系统技术—心跳

分布式系统技术—心跳心跳顾名思义,就是以固定的频率向其他节点汇报当前节点状态的方式。收到心跳,一般可以认为一个节点和现在的网络拓扑是良好的。当然,心跳汇报时,一般也会携带一些附加的状态、元数据信息,以便管理。故障检测是任何一个拥有容错性的分布式系统的基本功能,而实际上所有的故障检测协议都基于心跳通讯机制,原理很简单,被监控的组件定期发送心跳信息给监控进程(或者由监控进程轮询被监控组件)

2018-03-11 22:56:42 4363 1

原创 Quorum Journal Manager原理

Quorum Journal Manager原理    在一个典型的HA集群,两个独立的物理节点配置为NameNodes。在任何时间点,其中之一NameNodes是处于Active状态,另一种是在Standby状态。 Active NameNode负责所有的客户端的操作,而Standby NameNode尽用来保存好足够多的状态,以提供快速的故障恢复能力。    为了保

2018-03-11 22:21:08 742

原创 一种多级缓存的系统架构

一种多级缓存的系统架构   下面这个也是比较常用的多级缓存的系统架构图:    这是一个使用了多级缓存的系统。Nginx应用服务器的本地缓存解决了热点数据的缓存问题。Redis分布式缓存集群减少了访问回源率。Tomcat应用集群使用的平台级缓存防止了缓存失效/奔溃之后的冲击。数据库缓存提升了数据库查询时的效率。

2018-03-11 10:55:09 1770 1

原创 版本分支策略之思考

版本分支策略之思考下面给出一种比较好的版本分支策略:上面分支的解释:1. 长期存在的分支  a) master分支 (开发集成分支):用于开发阶段代码的集成,接受当前版本新特性代码的持续合入  b) live分支 (稳定集成分支):用于代码冻结后的稳定版本的持续集成,如需合入代码必须通过更加严格的review和测试。所有中版本 (e.g. v3.3, v3.4)在live分支上进行发布  c) x...

2018-03-10 19:28:42 642

原创 zookeeper的服务容量和自我保护实现思考

zookeeper的服务容量和自我保护实现思考1)服务自我保护能力,通过基于租户+Throtting机制,能够对访问请求限流,确保核心服务自我恢复能力;  引入租户管理,为后续限流,性能统计等功能提供一个基础的信息;通过Throtting来达到API的限速(常见的有楼桶算法和令牌桶算法)。2)服务容量扩容能力,通过将部分流量迁移至新搭建Quorum,分散集群访问压力;       通过资源...

2018-03-10 16:23:14 588

原创 一致性哈希之应用twemproxy与codis

一致性哈希之应用twemproxy与codis一.  twemproxytwemproxy 是 twitter 开源的一个轻量级的后端代理,兼容 redis/memcache 协议,可用以管理 redis/memcache 集群。                       twemproxy 内部有实现一致性哈希算法,对于客户端而言,twemproxy 相当于是缓存数据库的入口,它无需知道后端的...

2018-03-08 22:28:06 2238

原创 HANA内存数据库简介

HANA内存数据库简介       SAP HANA是一个软硬件结合体,提供高性能的数据操作功能。HANA 的精髓就是把所有的数据放到内存里——离处理数据最近的地方,也是计算机全身除了CPU 速度最快的地方。而不像传统数据库,数据放在硬盘里,走过复杂的读操作,走过系统总线,在内存里被短暂的处理,然后再走过同样的路回去,躺在硬盘里。HANA的基本原理如下图所示:

2018-03-05 09:45:19 5505

原创 区块链技术生态的设计

区块链技术生态的设计      详见:区块链技术生态

2018-03-04 17:50:03 500

原创 Fisher–Yates shuffle 洗牌算法

Fisher–Yates shuffle 洗牌算法     Fisher–Yates shuffle 算法是一个用来将一个有限集合生成一个随机排列的算法(数组随机排序)。这个算法生成的随机排列是等概率的。同时这个算法非常高效。     算法的复杂度是O(n),伪代码如下:-- To shuffle an array a of n elements (indices 0..n-1):

2018-02-24 15:43:35 437

原创 删除大量文件的方法

删除大量文件的方法要在Linux下删除海量文件的情况,需要删除数十万个文件。这个是之前的程序写的日志,增长很快,而且没什么用。这个时候,我们常用的删除命令rm -fr * 就不好用了,因为要等待的时间太长。所以必须要采取一些非常手段。我们可以使用rsync的--delete-before参数来实现快速删除大量文件。1)建立一个空的文件夹:     mkdir /tmp/te

2018-02-23 20:30:37 525

走向分布式基础学习

是学习分布式的好资料,里面的内容讲解的非常详细,是一个台湾人下载的

2015-03-22

快乐的霖霖的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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