`
in355hz
  • 浏览: 230048 次
社区版块
存档分类
最新评论
文章列表
在上一篇文章里忽略了一点。   CAP 定理有一个缺陷,这个缺陷可以帮助我们“部分”摆脱 分布式困境。   总的来说,CAP 定理本身是完备的,但它并没有描述一个分布式系统何时产生分区,以及分区会持续多长时间。理论其实只限制:在分区发生的 时间内,系统只能在一致性(C)和可用性(A)之间二选一。   因此,分布式系统完全可以在没有出现分区时保证 C 和 A,而在出现分区后,放弃一些 A 或者 C 然后通过人工操作消除分区,让系统恢复到分区前的状况。   这样说太复杂了。用 说人话 的方式就是:
上一篇介绍了 单机数据库 的 ACID 事务。下面将进入真正的难点:   “分布式环境” 分布式与单机最大的区别在于:单机是一个整体。组成这台机器的零件要么(看上去)都在正常状态,要么都不在状态,很少有例外。   ...
回到事务这个话题。上一篇提到:   数据库事务 = ACID   ACID 并不是一个纸面理论。这个世界上有成千上万台满足 ACID 特性的数据库运行在大大小小的机构、政府部门和企业,为各式各样的复杂业务提供服务。其中有银行、电信、统计机构、实验室,以及你正在访问的网站。如果全球的数据库同时崩溃,那也许是一场世界末日,嘭!   让我先烧个香膜拜一下,然后很肤浅的看一下数据库实现 ACID 的方法。   数据库 ACID 的实现   基本上,数据库实现 ACID 最关键的技术是日志和锁。  
最近看了一点资料,准备写一个大话题。   事务,是所有数据库讲义中最核心的话题。它本质上是一系列连续的,逻辑相关的数据库操作的组合。随便翻开一本书,都会告诉你,事务必须满足下面四个属性:   ACID(Atomic,Consistency,Isolation,Durability)   按照属性即实体的观点:数据库事务就是 ACID,符合 ACID 的就是数据库事务。因此我们可以得出一个公式:   数据库事务 = ACID   抛开课本上那些苦涩难懂的定义,如何理解 ACID ?    首先,我们不用去读 Jim Gray 的《Transaction Proces ...
Java 的 SoftReference 有很多年都没有被人惦记了。在 Javadoc 里, 它的描述是这样:   ”虚拟机在抛出 OutOfMemoryError 之前会保证所有的软引用对象已被清除。此外,没有任何约束保证软引用将在某个特定的时间点被清除,或者确定一组不同的软引用对象被清除的顺序。不过,虚拟机的具体实现会倾向于不清除最近创建或最近使用过的软引用。“   这个类可以直接被用来实现简单的缓存,这个类或派生的子类也可用于较大的数据结构,来实现更加复杂的缓存。只要软引用可以到达该对象,就是说,该对象实际上是在使用,软引用就不会被清除。这样能够实现一个复杂的缓存,例如,使用强 ...
最近业务中需要用 Python 写一些脚本。尽管脚本的交互只是命令行 + 日志输出,但是为了让界面友好些,我还是决定用中文输出日志信息。   很快,我就遇到了异常:   UnicodeEncodeError: 'ascii' codec can't encode characters in position 0- ...
这是 Trisha Gee 发表的 Disruptor 全解析系列博客的后续补充,原文链接是:http://mechanitis.blogspot.com/2011/08/disruptor-20-all-change-please.html​   Martin 最近公布了 Disruptor​ 的 2.0 版本​ —— 基本上,2.0 版自我们第一次开源以来有了如此多的改变,是需要把这些改变正式标记出来的时候了。Martin 的文章包含了所有的变化点,而我这一篇文章的目标是试图将之前的博客翻译成“新世界的语言”,因为把每篇博客都重写一遍得花很长时间。现在我知道用手工绘图表示一切的缺点了 ...
原文地址:http://mechanitis.blogspot.com/2011/08/dissecting-disruptor-why-its-so-fast.html​​, 作者是 Trisha Gee, LMAX 公司的一位女工程师。   我最近写文章的速度变慢了,是因为我一直在尝试写一篇博客解释内存屏障(Memory Barrier)以及它在 Disruptor​ 的应用。问题是,无论我阅读了多少次,无论我向永远耐心的 Martin​ 和 Mike​ 提出多少个问题试图弄明白一些重点,我还是没办法直观的把握主题。我猜我没有完全理解它所需要的深厚背景知识。
这是 MySQL 5.6 全局事务 ID(GTID) 系列的第三篇博客。   在之前的两篇博客中,第一篇​ 介绍了全局事务 ID 的定义与数据结构。第二篇​ 介绍了 MySQL 5.6 新增的全局事务状态(Gtid_state)。   这里准备介绍的是全局事务 ID 如何参与 MySQL 的主备复制流程。   MySQL 5.6 引入全局事务 ID 的首要目的,是保证 Slave 在复制的时候不会重复执行相同的事务操作;其次,是用全局事务 IDs 代替由文件名和物理偏移量组成的复制位点,定位 Slave 需要复制的 binlog 内容。   因此,MySQL 必须在写 bin ...
前文 MySQL 5.6 全局事务 ID(GTID)实现原理(一)​ 介绍了 MySQL 5.6 全局事务 ID 的定义和相关的数据结构 Gtid_set 与 Sid_map。接下来,这一篇的主要目标是深入了解文章最后提到的全局事务状态 Gtid_state。并且,如果可能 —— 顺便介绍下这些 Gtid_state 在主备复制中的功能:   全局事务状态 Gtid_state   Gtid_state 是 MySQL 5.6 内的一个全局对象,它的数据结构如下:  (mysql-5.6.9-rc\sql\rpl_gtid.h,line 2043)   Gtid_sta ...
MySQL 5.6 的新特性之一,是加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力。但是,有关 GTID 的作用和原理,在 MySQL 官方网站​ 的文档库中却很少被提到。   随着 MySQL 5.6 的 rc 版本号原来越高(这意味着 MySQL 5.6 向正式发布越来越近),想要全面了解这个神秘功能的需求也越来越急迫。因此,在这篇博客里,我打算从有限的文档出发,通过分析 MySQL 源码,逐步了解 MySQL GTID 和它在主备复制中的作用。   什么是 GTID?   有关全局事务 ID(GTID),容易找到的是这一篇文档: ...
原文地址:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast_22.html​, 作者是 Trisha Gee, LMAX 公司的一位女工程师。   我们多次提到了 Mechanical Sympathy (机器协同?) 这个短语,事实上它甚至是Martin 的博客 标题。它的含义与理解底层计算机硬件的操作原理,然后编程让软件用协同的方式,而不是以违背的方式在硬件上工作有关。   关于 
原文地址: http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-why-its-so-fast.html​​,作者是 Trisha Gee, LMAX 公司的一位女工程师。   Martin Fowler 写了一篇非常不错的 文章​,不仅描述了 Disruptor​,还展示了它是如何适配到 LMAX 架构 ...
原文地址:http://mechanitis.blogspot.com/2011/07/dissecting-disruptor-wiring-up.html​ 作者是 Trisha Gee, LMAX 公司的一位女工程师。   现在我已经讲了 RingBuffer​ 本身,如何从它 读取​ 以及如何向它 写入​。   从逻辑上来说,下一件要做的事情就是把所有的知识拼接到在一起。
原文地址:http://mechanitis.blogspot.com/2011/06/dissecting-disruptor-how-do-i-read-from.html​​  作者是 Trisha Gee, LMAX 公司的一位女工程师。   这是理解 LMAX​ 开发的 Disruptor 模式​ 系列博客的下一篇。   从 
Global site tag (gtag.js) - Google Analytics