Go语言原生支持的Lock(sync.Mutex)不是可重入的,同个协程重复获得锁会panic
1 | package sync |
1 | === RUN TestLock |
如何实现类似Java语言提供的ReentrantLock,支持可重入呢?
more >>
Go语言原生支持的Lock(sync.Mutex)不是可重入的,同个协程重复获得锁会panic
1 | package sync |
1 | === RUN TestLock |
如何实现类似Java语言提供的ReentrantLock,支持可重入呢?
more >>
Apache Pulsar 是 Apache 软件基金会顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性,被看作是云原生时代实时消息流传输、存储和计算最佳解决方案。
Raft算法是通过一切以领导者为准的方式,实现一系列值的共识和各节点日志的一致。
Raft 算法属于 Multi-Paxos 算法,它是在兰伯特 Multi-Paxos 思想的基础上,做了一些简化和限制,比如增加了日志必须是连续的,只支持领导者、跟随者和候选人三种状态,在理解和算法实现上都相对容易许多。
Raft 算法是现在分布式系统开发首选的共识算法。绝大多数选用 Paxos 算法的系统(比如 Cubby、Spanner)都是在 Raft 算法发布前开发的,当时没得选;而全新的系统大多选择了 Raft 算法(比如 Etcd、Consul、CockroachDB)。
Raft 算法支持领导者(Leader)、跟随者(Follower)和候选人(Candidate) 3 种状态。
Raft 算法是强领导者模型,集群中只能有一个领导者。集群内的节点都对选举出的领袖采取信任,因此Raft不是一种拜占庭容错算法。
在初始状态下,集群中所有的节点都是跟随者的状态。
more >>
Paxos算法是Leslie Lamport于1990年提出的一种基于消息传递且具有高度容错特性的共识(consensus)算法。
包含 2 个部分:
有多个客户端(比如客户端 1、2)访问系统,试图创建同一个只读变量(比如 X),客户端 1 试图创建值为 3 的 X,客户端 2 试图创建值为 7 的 X,要如何达成共识,实现各节点上 X 值的一致?
more >>分布式系统是一个硬件或软件组件分布在不同计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
对于一个分布式系统而言,无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)。
对某个指定的客户端来说,读操作保证能够返回最新的写操作结果,强调数据正确
非故障的节点在合理的时间内返回合理的响应(不是错误和超时的响应)。
强调的是服务可用,但不保证数据正确。
当节点间出现任意数量的消息丢失或高延迟(网络分区)的时候,系统仍然在继续工作。
强调的是集群对分区故障的容错能力
more >>
ZooKeeper 是一个分布式的,开放源码的分布式应用程序协同服务。ZooKeeper 的设计目标是将那些复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。
ZooKeeper 最早起源于雅虎研究院的一个研究小组。在当时,研究人员发现,在雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协同,但是这些系统往往都存在分布式单点问题。
所以,雅虎的开发人员就开发了一个通用的无单点问题的分布式协调框架, 这就是ZooKeeper。 ZooKeeper 之后在开源界被大量使用, 下面列出了 3 个著名开源项目是如何使用 ZooKeeper:
典型应用场景:
ZooKeeper 适用于存储和协同相关的关键数据, 不适合用于大数据量存储(需要将数据加载到内存构造成datatree,一般最多几百M)。
可以将原本一大串很长的地址缩短到一个很短的地址,用户访问这个短地址可以重定向到原本的长地址
比较著名的短链域名有腾讯的url.cn
,微博的t.cn
等,也有很多公司提供了免费/收费的短链接开放API,感兴趣的可以自行网上搜索。
使用短链服务可能会有哪些弊端呢?
抛开以上弊端不讲,本着学习的心态,本文将介绍如何使用Go语言开发一
个简单的短链服务,简述背后的原理, 末尾会有项目代码。
Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎
。
Lucene是Doug Cutting(Hadoop之父)于1999年创建的基于Java语言开发的搜索引擎类库,并于2005年成为Apache顶级开源项目,具有高性能、易扩展的特点。但Lucene也存在以下局限:
于是Shay Banon在2004年基于Lucene开发了Compass,并在2010年重写了Compass,取名Elasticsearch,解决的主要问题:
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true