龙翔云际的实验室

龙翔云际欢迎你


分布式事务原理

发布于:2019-01-05

分布式事务 在分布式系统中,为了保证数据的高可用,通常,我们会将数据保留多个副本(replica),这些副本会放置在不同的物理的机器上。为了对用户提供正确的增\删\改\差等语义,我们需要保证这些放置在不同物理机器上的副本是一致的。 分布式事务是指会涉及到操作多个数据库的事务。其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。分布式事务处理的关键是必须有一种方法可以知道事务在任何地方所做的所有动作,提交或回滚事务的决定必须产生统一的结果(全部提交或全部回滚) DTP模型和XA事务协议 DTP模型X/Open组织定义的分布式事务处理模型。XA是DTP定义的 …...

进入阅读

Elasticsearch安装使用

发布于:2018-12-25

什么是Elasticsearch Elasticsearch(ES)是一个基于Lucene构建的开源、分布式、RESTful接口的全文搜索引擎。Elasticsearch还是一个分布式文档数据库,其中每个字段均可被索引,而且每个字段的数据均可被搜索,ES能够横向扩展至数以百计的服务器存储以及处理PB级的数据。可以在极短的时间内存储、搜索和分析大量的数据。通常作为具有复杂搜索场景情况下的核心发动机。 Elasticsearch的主要特点如下: 实时性高——数据流进入Elasticsearch系统后,数据能够快速的建立索引并且被搜索到且对于查询请求在很“短”的时间内就能得到结果 分布式架构——一 …...

进入阅读

Go常用标准命令简介

发布于:2018-12-03

Go标准命令概述 Go 语言自带了一套完整的命令操作工具,我们可以在命令行中执行go来查看相关帮助 Usage: go <command> [arguments] The commands are: bug start a bug report build compile packages and dependencies clean remove object files and cached files doc show documentation for package or symbol env print Go environment information fix …...

进入阅读

Kafka架构简介

发布于:2018-12-02

kafka架构 一个kafka架构包括如下4部分: 若干个Producer,负责发生消息 一个kafka集群,包含若干个Broker,负责存储消息 若干个consumer group,每个consumer group包含一个或者多个consumer,负责消息消息 一个Zookeeper集群,负责管理集群配置及服务协同 kafka各个组件详解 Producer Producer即消息生产者,负责发布消息到broker,是向broker推送消息的客户端。 一个消息会被发布到一个特定的topic(主题)上,producer默认会将消息均衡地分布到topic的patition(分区)上。 在发送一 …...

进入阅读

GO程序性能调试工具——pprof

发布于:2018-10-13

pprof pprof是Golang的runtime内建的用于可视化和分析性能分析数据的工具,能帮助我们对程序运行时的 CPU、内存进行分析。 pprof 以 profile.proto 读取分析样本的集合,并生成报告以可视化并帮助分析数据(支持文本和图形报告) pprof能做的分析包括: CPU Profiling:CPU 分析,按照一定的频率采集所监听的应用程序 CPU(含寄存器)的使用情况,可确定应用程序在主动消耗 CPU 周期时花费时间的位置 Memory Profiling:内存分析,在应用程序进行堆分配时记录堆栈跟踪,用于监视当前和历史内存使用情况,以及检查内存泄漏 Block …...

进入阅读

HashMap的数据结构

发布于:2018-10-11

HashMap HashMap是Java程序员使用频率最高的用于映射(键值对)处理的数据类型。实质是一个哈希数组结构,但是在元素插入的时候,存在发生hash冲突的可能性。 从结构实现来讲,HashMap是数组+链表+红黑树(JDK1.8增加了红黑树部分)实现的,如下如所示。 HashMap类的数据结构 HashMap类包含5个关键参数: threshold:表示容器所能容纳的 key-value 对极限。 loadFactor:负载因子。 modCount:记录修改次数。 size:表示实际存在的键值对数量。 table:一个哈希桶数组,键值对就存放在里面。 public class …...

进入阅读

linux系统库链接简介

发布于:2018-09-30

库和库链接 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行。库是写好的现有的,成熟的,可以复用的代码,现实中每个程序都要依赖很多基础的底层库。 库有两种类型: 静态库:.a文件(win 系统下是lib) 动态库:.so文件(win 系统下是.dll) 静态库 静态库实际上是一些目标文件的集合,只用于链接生成可执行文件阶段。链接器会将程序中使用到函数的代码从库文件中拷贝到应用程序中,一旦链接完成生成可执行文件之后,在执行程序的时候就不需要静态库了。 静态库库的特点: 静态库对函数库的链接是放在编译时期完成的。 程序在运行时与函数库再无瓜葛,移植方便。 浪费空间 …...

进入阅读

Kafka安装使用

发布于:2018-09-26

什么是kafka Kafka是由LinkedIn开发的一个分布式的消息系统,使用Scala编写,它以可水平扩展和高吞吐率而被广泛使用。目前越来越多的开源分布式处理系统如Cloudera、Apache Storm、Spark都支持与 Kafka集成。 Kafka的主要特点如下: 以时间复杂度为 O(1) 的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条以上消息的传输。 支持消息分区,及分布式消费,同时保证每个Partition内的消息顺序传输。 同时支持离线数据处理和实时数据处理。 方便的支持支 …...

进入阅读

Yum安装php7

发布于:2018-09-13

yum安装php7.0和php7.1 php7.0和php7.1的相关包在mirror.webtatic.com仓库中包含,还有一些相关依赖需要epel源。 需要添加epel和mirror.webtatic.com的rpm源,然后就可以开始相应安装了 #centos 6 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm #centos 7 rpm -Uvh …...

进入阅读

iptables简介及使用说明

发布于:2018-07-17

什么是iptables iptables是Linux平台最著名的防火墙工具,运行在用户空间通过控制Linux内核netfilter模块来管理网络数据包的处理和转发的一个命令行工具。可以把iptables理解成一个客户端代理,用户通过iptables这个代理,将用户的安全设定执行到netfilter netfilter/iptables组成Linux平台下的包过滤防火墙,与大多数的Linux软件一样,这个包过滤防火墙是免费的,它可以代替昂贵的商业防火墙解决方案,完成封包过滤、封包重定向和网络地址转换等功能。 iptables操作需要超级用户权限,其可执行文件通常位于 /sbin/iptables …...

进入阅读

Goroutine间的通信——channel机制

发布于:2018-06-25

并发与并行 关于并发和并行的区别,引用一个经典的描述: 并发是同一时间应对(dealing with)多件事情的能力。 并行是同一时间动手(doing)做多件事情的能力。 雨痕老师《Go 语言学习笔记》上的解释: 并发是指逻辑上具备同时处理多个任务的能力;并行则是物理上同时执行多个任务。 并发是代码的特性,并行是正在运行的程序的特性。随着抽象层次的降低,并发模型实际上变得更难也更重要,而越低层次的并发模型对我们也越重要。要想并发程序正确地执行,就要深入研究并发模型。 要想一段并发的代码没有任何bug,是非常困难的。有些并发bug是在系统上线数年后才发现的,原因常常是很诡异的,比如用户数 …...

进入阅读

Goroutine的调度机制——MPG模型

发布于:2018-06-23

goroutine goroutine是Go语言原生支持并发的具体实现,Go代码都无一例外地跑在goroutine中。 可以启动许多甚至成千上万的goroutine,但它们并不是被操作系统所调度执行,Go的runtime负责对goroutine进行调度执行。 除了被系统调用阻塞的线程外,Go运行库最多会启动$GOMAXPROCS个线程来运行goroutine。 和所有其他并发框架里的协程一样,goroutine里所谓“无锁”的优点只在单线程下有效,如果$GOMAXPROCS > 1并且协程间需要通信,Go运行库会负责加锁保护数据 goroutine调度 goroutine调度就是决定何时 …...

进入阅读

Docker简介和基本使用

发布于:2018-05-12

Docker是什么 Docker属于Linux容器技术的一种封装,提供简单易用的容器使用接口,它是目前最流行的Linux容器解决方案。 Docker使用Go语言进行开发实现,基于Linux内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。 Docker将应用程序与该程序的依赖打包在一个文件里面(镜像)。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。 基于Docker的沙箱环境可以实现轻型隔离,多个容器间不会相互影响。 Docker和虚拟机的区别 虚拟机(virtual …...

进入阅读

MySQL中的锁机制

发布于:2018-05-02

MySQL中锁类型分类概述 按锁的粒度可划分为:表锁、行锁、页锁 按锁的机制可划分为:乐观锁、悲观锁 按锁的兼容性可划分为:共享锁、排他锁 按锁的算法模式可划分为:记录锁、间隙锁、临键锁、意向锁、插入意向锁 锁粒度 表锁 表锁的锁定颗粒度在MySQL中是最粗的,InnoDB、MyISAM引擎中都有应用,对当前整张表加锁。 表锁不适合高并发的场景,但开销小,加锁快,不会出现死锁,发生锁冲突的概率最大。 手动加锁方式: LOCK TABLES xx READ/WRITE; 行锁 行锁的锁定颗粒度在MySQL中是最细的,应用于InnoDB存储引擎,只针对操作的当前行进行加锁。并发情况下,产生锁等待的 …...

进入阅读

GC垃圾回收原理解析

发布于:2017-12-16

GC GC(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。 GC机制是区别C++的一个重要特征,C++需要开发者自己实现垃圾回收的逻辑,而JAVA开发者则只需要专注于业务开发,因为垃圾回收这件繁琐的事情JVM已经为我们代劳了。 GC分代和收集算法 现代的垃圾收集器基本都是采用分代收集算法,其主要思想: 将Java的堆内存逻辑上分成块:新生代、老年代,处理堆内存外还有一个特殊的区域叫永久代,针对不同存活周期、不同大小的对象采取不同的垃圾回收策略。 新生代(Young Generation) …...

进入阅读

Go的异常处理-panic,defer,recover

发布于:2017-12-14

Go的异常处理 Go语言追求简洁优雅,所以,Go语言不支持传统的 try…catch…finally 这种异常,因为Go语言的设计者们认为,将异常与控制结构混在一起会很容易使得代码变得混乱。 在Go语言中,使用多值返回来返回错误。不要用异常代替错误,更不要用来控制流程。在极个别的情况下,也就是说,遇到真正的异常的情况下(比如除数为0了)。才使用Go中引入的Exception处理:defer, panic, recover。 Go的异常处理可以这么简单描述:Go中可以抛出一个panic的异常,然后在defer中通过recover捕获这个异常,然后正常处理 panic Golang里比较常见的错误 …...

进入阅读

JIT即时编译原理解析

发布于:2017-10-15

JIT JIT是(just in time)的缩写, 也就是即时编译编译器。使用即时编译器技术,能够加速Java程序的执行速度。 Java编译器通常通过javac将程序源代码编译,转换成java字节码,JVM通过解释字节码将其翻译成对应的机器指令,逐条读入,逐条解释翻译。很显然,经过解释执行,其执行速度必然会比可执行的二进制字节码程序慢很多。为了提高执行速度,引入了JIT技术。 JIT编译狭义来说是当某段代码即将第一次被执行时进行编译,因而叫“即时编译”。JIT技术,将字节码编译成平台相关的原生机器码,并进行各个层次的优化,这些机器码会被缓存起来,以备下次使用。 如果JIT对每条字节码都进行编 …...

进入阅读

JVM原理解析

发布于:2017-07-11

JVM JVM是Java虚拟机(Java virtual machine)的简称,是运行Java程序必不可少的机制。编译后的Java程序指令并不直接在硬件系统的CPU上执行,而是由JVM执行。 JVM实现了Java语言最重要的特征:即平台无关性。JVM屏蔽了与具体平台相关的信息,使Java语言编译程序只需要生成在JVM上运行的目标字节码(.class),就可以在多种平台上不加修改地运行。 JVM是编译后的Java程序(.class文件)和硬件系统之间的接口。javac是收录于JDK中的Java语言编译器,该工具可以将后缀名为.java的源文件编译为后缀名为.class的可以运行于Java虚拟机 …...

进入阅读

Go语言并发编程

发布于:2017-03-12

并发编程 Go语言是在多核和网络化的时代背景下诞生的原生支持并发的编程语言。毫不夸张的说Go语言的这一特性是吸引很多编程玩家痴迷于Go语言开发的重要原因。 在早期,CPU都是以单核的形式顺序执行机器指令,Go语言的祖先C语言正是这种顺序编程语言的代表。所有的指令都是以串行的方式执行,在相同的时刻有且仅有一个CPU在顺序执行程序的指令。 随着处理器技术的发展,单核时代以提升处理器频率来提高运行效率的方式遇到了瓶颈,目前各种主流的CPU频率基本被锁定在了3GHZ附近。单核CPU的发展的停滞,给多核CPU的发展带来了机遇。相应地,编程语言也开始逐步向并行化的方向发展。 常见的并发编程主要是基于多线程 …...

进入阅读

数据库并发控制——事务隔离

发布于:2017-03-02

事务隔离与并发控制 事务隔离定义了数据库系统中一个事务中操作的结果在何时以何种方式对其他并发事务操作可见。 并发控制描述了数据库事务隔离以保证数据正确性的机制。为了保证并行事务执行的准确执行,数据库和存储引擎在设计的时候着重强调了并发控制这一点。典型的事务相关机制限制数据的访问顺序以满足可序列化和可恢复性,限制数据访问意味着降低了执行的性能,并发控制机制就是要保证在满足这些限制的前提下提供尽可能高的性能。 两阶段锁是关系数据库中最常见的提供了可序列化和可恢复性的并发控制机制。为了访问一个数据库对象,事务首先要获得这个对象的锁。对于不同的访问类型(如对对象的读写操作)和锁的类型,如果另外一个事务 …...

进入阅读

分类

开发
    --go (9)
    --java (5)
    --php (11)
    --mysql (9)
    --javascript (3)
    --html (1)
    --算法 (6)
架构
    --理论 (9)
    --网络 (3)
    --服务器 (2)
    --消息队列 (3)
    --容器 (5)
    --监控 (1)
    --搜索引擎 (3)
    --大数据 (0)
    --测试 (1)
系统
    --linux (10)
    --mac (2)
    --windows (1)
足球
    --世界杯 (60)
    --欧洲杯 (28)
    --文迷 (3)
大学时光
    --校园生活 (96)
    --假期生活 (17)
    --广院杯那些事 (14)
    --北京奥运 (6)
    --胡思乱写 (17)


最近发布

零拷贝技术介绍

服务网格技术简介

C语言标准和标准库简介

Kubernetes简介及环境搭建

Go语言开发的顶级项目


归档

2006 (109)
2007 (40)
2008 (47)
2009 (10)
2010 (6)
2012 (10)
2013 (14)
2014 (27)
2015 (15)
2016 (6)
2017 (8)
2018 (11)
2019 (17)
2020 (5)