分布式系统基础专栏
分布式系统基础系列文章
RonTech
执着、认真;喜欢技术,但更热爱技术+行业;热爱生活,但更喜欢与人交往;喜欢学习,但更注重与人分享。
展开
-
聊聊微服务架构
互联网时代,在极端情况下,每天都有新需求要开发上线。随着代码量及团队成员的增加, 传统单体式架构的弊端日益凸显,严重制约了业务的快速创新和敏捷交付,与互联网所追求的 “唯快不破”的目标越来越远。这就是微服务架构兴起的时代大背景。 微服务架构( Microservice Architecture) 是近两年来最流行的架构术语之一,大名鼎鼎的 Martin Flower曾这样描述原创 2017-10-20 17:37:02 · 4596 阅读 · 0 评论 -
一致性Hash(Consistent Hash)
一致性Hash算法简介一致性Hash算法是在1997年由麻省理工提出的一种分布式Hash实现算法,设计的目标是为了解决英特网中的热点问题。一致性Hash算法提出了在动态变化的Cache环境中,判定Hash算法好坏的四个定义。平衡性(Balance):平衡性是指哈希的结果能够尽可能的分布到所有的节点中去,这样从算法上解决负载均衡的问题。单调性(monotonicity):单调性是指在新增或者删减节原创 2017-10-27 12:20:56 · 662 阅读 · 0 评论 -
持久化存储-MySql拓展-Master-Slave
分布式架构-持久化存储之-MySql拓展-Master-Slave转载 2016-12-24 12:51:46 · 1072 阅读 · 0 评论 -
持久化存储-MySql拓展-Master-Master
为了尽可能的降低系统停止写入的时间,最佳的方案就是采用Dual-Master架构,即Master-Master架构。转载 2017-01-03 17:04:08 · 686 阅读 · 0 评论 -
分布式缓存-Memcache定义
Memcache 是一款开源的高性能的分布式内存对象缓存系统,用于在应用中减少对数据库的访问,提高应用的访问速度,降低数据库负载。为了在内存中提供高速的数据查找能力,Memcache使用Key-value的形式存储和访问数据,在内存中维护了一张巨大的HashTable,使得对数据的查找的时间复杂度降低到了O(1),保证了对数据的高速访问。由于内存的大小是有限的,当内存中没有过多的空转载 2016-12-20 09:06:53 · 378 阅读 · 0 评论 -
分布式Session
传统的应用服务器,如Tomcat、Jboss等,其自身所实现的Session管理大部分都是基于单机的。但是在大型分布式系统中,支撑其业务的不仅仅只是一台机器,而是一个分布式集群,请求在不同的服务器之间跳转。转载 2016-12-22 09:34:30 · 822 阅读 · 0 评论 -
分布式系统基础-远程过程调用(RPC)
RPC(Remote Procedure Call,远程过程调用)是建立在Socket之上的一种多进程间的通信机制。不同于复杂的Socket通信方式,RPC的初心是设计一套远程通信的通用框架,这个框架能够自动处理通信协议、对象序列化、网络传输等复杂细节,并且希望开发者使用这个框架以后,调用一个远程机器上的接口代码与以本地方法调用的代码“看起来没什么区别”,从而大大减小分布式的开发难度,原创 2017-10-10 21:49:31 · 4308 阅读 · 0 评论 -
分布式系统基础-全文检索
我们每个人解除互联网都是从互联网搜索开始的,虽然大家常用的搜索引擎可能不同,搜索的关键词也可能不同,但是我们习惯经常在网上搜索的方式来快速学习技术并解决日常工作中所遇到的各种技术问题,如果没有互联网搜索引擎,那么恐怕我们将会有很多的人要失业了。如何在海量的网页信息中准确且快速的找到包含我们所搜索关键字的所有网页并合理的排序展示,这的确是一个很有挑战的问题。除了我们日常工作中使用的搜原创 2017-10-17 16:15:22 · 12540 阅读 · 0 评论 -
分布式系统基础-消息队列之Kafka
相对于前面所说的那些MQ前辈们,Kafka可谓是不走寻常路的“天才少年”。与久负盛名的前辈们不同,Kafka从一开始就是走“互联网的野路子”,它抛弃了很多华而不实的企业级特性,专注于高性能与大规模这两个互联网应用的核心需求,并全面采用了新一代的分布式架构 的设计理念,从基因和技术两方面拉开了与前辈们的距离。我们先来看看Kafka的一些激动人心的特性。高吞吐量、低延迟:Kafka每秒可以处理几十万条原创 2017-10-20 10:44:42 · 599 阅读 · 0 评论 -
分布式系统基础-消息队列之RabbitMQ
RabbitMQ是挑战Java/JMS消息中间件的产物,也是第二代消息中间件,它是实现了AMQP消息模型的重要产品,所以我们需要先了解一下AMQP模型相关的内容。AMQP模型如下图所示,每个Exchange (信箱/交换机)绑定(Binding)了0到N个Queue(队列),当收到Publisher发布的Message后,Exchange会根据自身的类型结合路由规则来确定此消原创 2017-10-20 10:27:20 · 883 阅读 · 0 评论 -
分布式系统基础-消息队列之ActiveMQ
ActiveMQ是J2EE中 JMS消息通信规范的一个实现,也是目前还在活跃和发展的最古老的第一代MQ,自从2004年成熟以后就迅速传播开来,经过多年的发展,逐步奠定了它在Java/J2EE圈子里的开源霸主地位,可谓生生不息。ActiveMQ除了作为独立的消息中间件使用,还经常在某些ESB (Enterprise Service Bus)产品中作为总线基础设施( Bus Infrastructur原创 2017-10-18 20:55:24 · 1314 阅读 · 1 评论 -
分布式系统基础-消息队列之JMS
JMS并没有定义消息的网络报文格式及相关的通信命令协议,但它以Java API的方式给出了一个可以纳入到J2EE环境中的消息中间件所应具备的编程级接口。同时,JMS归纳总结了两种通用的消息传递模型,深入理解这两种消息模型有助于我们准确把握消息中间件的原理和典型的使用场景。第一个消息模型是点对点消息通信模型。如下图所示,发送方Client1(Producer/Sender) 与消费者Client 2原创 2017-10-18 20:41:16 · 1080 阅读 · 0 评论 -
分布式系统基础-消息队列概述
消息队列(Message Queue,MQ)其实是一个古老的计算机术语,UNIX进程间通信就是用到了消息队列技术:一个进程把数据写入某个特定的队列中,其他进程可以读取队列中的数据,从而实现异步通信能力。而后来我们所说的“消息队列”通常指独立的消息队列中间件。不管是最早的进程间通信的消息队列还是独立的消息队列中间件,他们相对于RPC通信来说都有以下很明显的优势。原创 2017-10-18 20:31:13 · 543 阅读 · 0 评论 -
分布式系统基础-分布式事务
事务是数据库运行中的一个逻辑工作单位,工作单元内的一系列SQL命令具有原子性操作特点,这些命令要么完全成功执行,要么完全撤销或不执行,如果是后者,则表现为数据库内的最终数据没有发生任何改变。事务通常由数据库中的事务管理子系统负责处理。原创 2017-10-08 13:27:06 · 1089 阅读 · 0 评论 -
分布式系统的一致性原理
对于分布式系统,我们必须深刻理解和牢记一点:分布式系统的不可靠性。“可靠性”是指系统可以无故障的持续运行,如果一个系统在运行中意外宕机或者无法正常使用,那么他就是一个不可靠的系统,即使宕机和无法使用的时间很短。我们知道,分布式系统通常是由独立的服务器通过网络松散耦合组成的,而网络本质上是一个复杂的I/O系统,而通常情况下,I/O发生故障的概率和不可靠性远远高于主机的CPU和内存,加之网络设备的引入,原创 2017-10-06 17:54:02 · 835 阅读 · 0 评论 -
分布式系统架构网络之IDC机房
我们开发的互联网应用被部署到IDC机房里的某个服务器上,从而完成了应用互联网的接入,所以我们接下来学习一些IDC机房的相关知识。IDC机房又被称为互联网数据中心(Internet Data Center)或者数据中心,IDC不仅是数据存储的中心,还是数据流通的中心。IDC机房是标准化的电信专业级机房,为企业、政府提供服务器托管,租用及相关增值等方面的全方位服务。一开始,IDC机房主要是联通、电信等运原创 2017-09-28 16:46:39 · 18743 阅读 · 0 评论 -
分布式系统核心问题
分布式系统是计算机科学中十分重要的一个研究领域。随着现代计算机集群规模的不断增长,所处理的数据量越来越大,同时对于性能、可靠性的要求越来越高,分布式系统相关技术已经变得越来越重要,起到的作用也越来越关键。分布式系统中如何保证共识是个经典的技术问题,无论在学术上还是工程上都存在很高的研究价值。令人遗憾地是,理想的(各项指标均最优)解决方案并不存在。在现实各种约束条件下,往往需要通过牺牲掉某些需求,来设计出满足特定场景的原创 2017-11-28 18:40:51 · 25029 阅读 · 5 评论 -
分布式系统设计理念
首先,分布式系统的首要目的是提升系统的整体性能和吞吐量。如果最终设计出来的分布式系统占用了10台机器才勉强达到单机系统的两倍性能,那么这个分布式系统还有存在的价值吗?另外,即使采用了分布式架构,也仍然需要尽力提升单机上的程序性能,使得整体性能达到最高。所以,我们仍然需要掌握高性能单机程序的设计和编程技巧,例如多线程编程、多进程高性能IPC通信、高性能的网络框架等。其次,任何分布式系统都存在让人无法回原创 2017-09-26 17:05:34 · 2941 阅读 · 0 评论 -
软件架构需要考虑的基本原则
架构尽可能的简单,清晰,不过度设计。稳定业务和易变业务要分离处理,核心业务和非核心业务要分离处理,电商业务和辅助流程要分离,应用和数据要分离,服务和实现细节分离,前台和后台分离。原创 2017-09-25 15:40:04 · 3289 阅读 · 2 评论