分布式
主要讲解分布式缓存架构、分布式协调工具、分布式解决方案、分布式日志收集等。
杨林伟
像火箭科学家一样思考!
展开
-
分布式系列教程(46) -分布式定时任务锁(ShedLock实现)
01 概述定时任务经常被各个服务用到,比如定时清理日志,定时提醒,但是在分布式的环境下,一个任务会分配给多个微服务,每个微服务在某一时间可能会同时执行同一个事件,我们希望的是只有一个微服务去处理,这个时候需要用到了分布式定时任务锁,其中ShedLock是一种实现方式,本文来讲解。备注:还可以使用xxl-job,有兴趣的童鞋可以参考之前写的博客《分布式系列教程(17) - 分布式任务调度平台XXL-JOB》)。02 什么是ShedLock?ShedLock其实就是分布式定时任务锁,是一个在分布式环境中原创 2020-10-26 17:57:20 · 1445 阅读 · 1 评论 -
分布式系列教程(45) -安装Nacos(Docker或安装包)
1.拉取最新的Nacos镜像:docker pull nacos/nacos-server2.查看nacos镜像:docker images3.启动镜像:docker run --env MODE=standalone --name nacos -d -p 8848:8848 nacos/nacos-server4.浏览器访问:http://127.0.0.1:8848/nacos,账号密码均为nacos。...原创 2020-07-10 21:41:38 · 497 阅读 · 0 评论 -
分布式系列教程(44) -Nacos简介
引言Nacos官方文档地址:https://nacos.io/zh-cn/index.htmlNacos 是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos特性Nacos 的关键特性包括:服务发现和服务健康监测:服务消费者可以使用DNS TODO 或HTTP&API查找和发现服务。Nacos 提供对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。 Nacos 提供了 agent 上报模式和服务端主动检测2种健康检查模式, 还提供了统一的健康检查仪表原创 2020-07-08 11:52:01 · 1152 阅读 · 0 评论 -
分布式系列教程(43) -高并发情况下生成分布式全局id策略
方案一:利用全球唯一UUID生成订单号UUID基本概念:UUID是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的。UUID组成部分:当前日期和时间+时钟序列+随机数+全局唯一的IEEE机器识别号(全局唯一的IEEE机器识别号:如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得)。UUID优点:简单,代码方便。生成ID性能非常好,基本不会有性能问题。全球唯一,...原创 2019-12-19 20:20:23 · 524 阅读 · 0 评论 -
分布式系列教程(42) -ELK配置与使用
引言在前面的博客中,我们知道在Linux下如何搭建ELK(ElasticSearch+Logstash+Kibana)以及它们的使用,如有兴趣的同学,可以参考下。安装教程:《分布式系列教程(27) -Linux环境下安装Elasticsearch》《分布式系列教程(37) -Linux下搭建ElasticSearch集群》《分布式系列教程(28) -Linux环境安装Kibana》《...原创 2019-12-19 19:32:02 · 553 阅读 · 1 评论 -
分布式系列教程(41) -Logtash的简单使用
引言在上一篇博客《分布式系列教程(40) -Linux下安装Logstash》,我们知道了Logstash的安装步骤,本文就来详细讲解Logstash的使用。下面来讲解一个简单的案例。Logstash以JSON的格式输出ES的日志在ElasticSearch日志目录文件夹下(/usr/local/elasticsearch-6.4.3/logs),可以看到各种es的日志文件:其中上图的...原创 2019-12-19 17:41:47 · 576 阅读 · 0 评论 -
分布式系列教程(40) -Linux下安装Logstash
Logstash安装很简单,下面直接写过程:1.上传logstash安装包2.解压tar -zxvf logstash-6.4.3.tar.gz 3.启动logstash:cd /usr/local/logstash-6.4.3/bin/./logstash -f ../config/myconfig.conf启动的时候可以指定配置文件,具体的配置规则在自定义的文件myconf...原创 2019-12-19 17:01:00 · 493 阅读 · 0 评论 -
分布式系列教程(39) -分布式日志采集系统ELK
引言在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常底下。通常,日志被分散在储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。当务之急我们使用集中化的日志管理,例如:开源的syslog,将所有服务器上的日志收集汇总。...原创 2019-12-19 16:29:41 · 554 阅读 · 0 评论 -
分布式系列教程(38) -SpringBoot基于ES的网盘应用
1. 引言项目以提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-ES-NetDisk-Demo网盘搜索原理图:本文主要做一个迷你版的网盘操作,具体的爬虫获取数据功能就不做了,主要做网盘搜索的功能,演示效果如下:搜索之后2. SpringBoot基于ES的网盘应用开发2.1 数据准备1.定义文档...原创 2019-12-19 15:40:05 · 635 阅读 · 0 评论 -
分布式系列教程(37) -Linux下搭建ElasticSearch集群
引言在上一篇博客《分布式系列教程(36) -ElasticSearch集群原理》,主要讲解了ElasticSearch集群的原理。本文开始实践,在Linux下搭建ElasticSearch集群。Linux下搭建ElasticSearch集群1.首先准备三台服务器:服务器名称IP地址node-1192.168.212.184node-2192.168.212.1...原创 2019-12-19 11:46:01 · 485 阅读 · 0 评论 -
分布式系列教程(36) -ElasticSearch集群原理
1.引言ES是一个分布式全文检索框架,隐藏了复杂的处理机制,核心内容分片机制、集群发现、分片负载均衡请求路由。1.1 ES基本概念名词Cluster:代表一个集群,集群中有多个节点,其中有一个为主节点,这个主节点是可以通过选举产生的,主从节点是对于集群内部来说的。es的一个概念就是去中心化,字面上理解就是无中心节点,这是对于集群外部来说的,因为从外部来看es集群,在逻辑上是个整体,你与任...原创 2019-12-19 11:22:38 · 1201 阅读 · 0 评论 -
分布式系列教程(35) -ElasticSearch文档映射
1. 文档映射已经把ElasticSearch的核心概念和关系数据库做了一个对比,索引(index)相当于数据库,类型(type)相当于数据表,映射(Mapping)相当于数据表的表结构。关系型数据库ElasticSearch数据库(DB)索引(Index)表(Table)类型(type)行(Row)文档(Docments)列(Columns)字段...原创 2019-12-18 19:52:32 · 473 阅读 · 0 评论 -
分布式系列教程(34) -Linux下安装ik分词器
因为Elasticsearch中默认的标准分词器分词器对中文分词不是很友好,会将中文词语拆分成一个一个中文的汉字,因此引入中文分词器-es-ik插件。本文来讲解下再Linux下安装ik分词器。1. 首先下载ik分词器下载地址: https://github.com/medcl/elasticsearch-analysis-ik/releases注意:es-ik分词插件版本一定要和es安装...原创 2019-12-18 17:51:52 · 1304 阅读 · 0 评论 -
分布式系列教程(33) -ElasticSearch DSL语言查询与过滤
ES中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。由于DSL查询更为直观也更为简易,所以大都使用这种方式。DSL查询是POST过去一个JSON,由于POST的请求是JSON格式的,所以存在很多灵活性,也有很多形式。下面来举些例子:1. 根据名称精准查询姓名GET user_dao/user/_search{ "query":...原创 2019-12-18 17:14:44 · 566 阅读 · 0 评论 -
分布式系列教程(32) -ElasticSearch条件查询
ElasticSearch可以执行复杂的条件查询,下面直接举例子:首先先添加文档:PUT /user_dao/user_table/1{ "name":"baby", "sex":0, "age":1}PUT /user_dao/user_table/2{ "name":"father", "sex":0, "age":26}PUT /user_dao/us...原创 2019-12-18 16:56:20 · 598 阅读 · 0 评论 -
分布式系列教程(31) -ElasticSearch倒排索引
正向索引正排表 : 以文档的ID为关键字,表中记录文档中每个字的位置信息,查找时扫描表中每个文档中字的信息直到找出所有包含查询关键字的文档。这种组织方法在建立索引的时候结构比较简单,建立比较方便且易于维护,因为索引是基于文档建立的。若是有新的文档加入,直接为该文档建立一个新的索引块,挂接在原来索引文件的后面。若是有文档删除,则直接找到该文档号文档对应的索引信息,将其直接删除。但是在查...原创 2019-12-18 16:30:32 · 618 阅读 · 1 评论 -
分布式系列教程(30) -SpringBoot整合ElasticSearch
引言代码已提交至Github,有兴趣的同学可以下载来看看:https://github.com/ylw-github/SpringBoot-ElasticSearch-DemoSpringBoot整合ElasticSearch1.新建Maven项目Spring-ElasticSearch-Demo2.添加maven依赖:<parent> <groupId>org...原创 2019-12-17 20:31:49 · 706 阅读 · 0 评论 -
分布式系列教程(29) -Kibana实现增删改查
ElasticSearch类似于关系型数据库,可以使用Kibana对ElasticSearch进行增删改查。关系型数据库与ES对比:关系型数据库ElasticSearch数据库(DB)索引(Index)表(Table)类型(type)行(Row)文档(Docments)列(Columns)字段(Fields)在Kibana的管理界面,可以进行...原创 2019-12-17 20:01:30 · 843 阅读 · 0 评论 -
分布式系列教程(28) -Linux环境安装Kibana
引言Kibana是一个开源的分析和可视化平台,设计用于和Elasticsearch一起工作。你用Kibana来搜索,查看,并和存储在Elasticsearch索引中的数据进行交互。你可以轻松地执行高级数据分析,并且以各种图标、表格和地图的形式可视化数据。Kibana使得理解大量数据变得很容易。它简单的、基于浏览器的界面使你能够快速创建和共享动态仪表板,实时显示Elasticsearch查询...原创 2019-12-17 19:36:00 · 632 阅读 · 0 评论 -
分布式系列教程(27) -Linux环境下安装Elasticsearch
1. 引言在上一篇博客《分布式系列教程(26) -分布式日志搜集工具Elasticsearch简介》,介绍了ES的优点、应用场景等。本文进行实际操作,在Linux下安装ES。2. Linux下安装Elasticsearch注意:必须先安装好JDK!ES非常占内存,Linux安装内存建议1g内存以上!2.1 正常安装1.下载elasticsearch安装包:https://www.elas...原创 2019-12-17 19:18:24 · 674 阅读 · 0 评论 -
分布式系列教程(26) -分布式日志搜集工具Elasticsearch简介
1. Elasticsearch简介Elasticsearch (ES)是一个基于Lucene构建的开源、分布式、RESTful 接口全文搜索引擎。Elasticsearch 还是一个分布式文档数据库,其中每个字段均是被索引的数据且可被搜索,它能够扩展至数以百计的服务器存储以及处理PB级的数据。它可以在很短的时间内在储、搜索和分析大量的数据。它通常作为具有复杂搜索场景情况下的核心发动机。El...原创 2019-12-17 17:10:11 · 638 阅读 · 0 评论 -
分布式系列教程(25) -解决Zookeeper启动失败的问题
今天遇到一个很奇怪的问题,运行zookeeperd后显示启动成功:JMX enabled by defaultUsing config: /data/programfiles/zookeeper-3.4.5/bin/../conf/zoo.cfgStarting zookeeper ... STARTED但用zkServer.sh status查看,出现如下错误:JMX enab...原创 2019-12-16 17:11:36 · 611 阅读 · 0 评论 -
分布式系列教程(24) -Zookeeper数据查看工具ZooInspector
1.下载地址:https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip;2.下载后解压,在解压目录/build目录下,可以看到编译后的zookeeper-dev-ZooInspector.jar包。3.直接双击jar包就可以打开页面。4.连接Zookeeper5.点击节点可以查看信息...原创 2019-12-13 11:42:40 · 466 阅读 · 0 评论 -
分布式系列教程(23) -分布式事务解决方案(实践篇)
1. SpringCloud 集成LCN框架目前LCN版本已经升级为4.0了,但是官方没有SpringCloud2.0的demo案例。因为LCN本身是开源的,网上有大牛对LCN框架源码做修改,可以支持SpringCloud2.0版本。下面来讲解下SpringCloud2.0集成LCN框架的步骤:1.添加maven依赖<dependency> <groupId>c...原创 2019-12-07 16:08:42 · 520 阅读 · 0 评论 -
分布式系列教程(22) -分布式事务解决方案(设计篇)
引言昨日跟Java高级工程师陶鹏讨论之后,发现LCN框架的设计还是有一定的缺陷的,譬如“效率低”、“入侵性高”。毕竟是第三方公司的框架,还是有点不放心的,今天就来给大家讲解下“分布式事务控制”的框架原理设计。在上一篇博客《分布式系列教程(21) -分布式事务解决方案(框架篇)》,我们知道了可以使用LCN框架来解决分布式事务,其基本事务控制原理图如下:仿照LCN事务框架的设计流程,其实我们...原创 2019-12-07 15:07:28 · 579 阅读 · 0 评论 -
分布式系列教程(21) -分布式事务解决方案(框架篇)
引言在上一篇博客《分布式系列教程(20) -彻底解决分布式事务(理论篇)》,我们知道解决分布式事务的方案有很多,比如:「传统模式使用Jta+Atomikos」「2PC与3PC」「回调通知补偿型」「阿里巴巴TCC补偿框架」「可靠消息模式」「LCN框架」「阿里GTS框架」本文主要讲解LCN框架,LCN官网地址: https://www.txlcn.org/1. LCN框架T...原创 2019-12-06 17:52:37 · 564 阅读 · 0 评论 -
分布式系列教程(20) -分布式事务解决方案(理论篇)
1. 分布式事务产生的背景在微服务环境下,因为会根据不同的业务会拆分成不同的服务,比如会员服务、订单服务、商品服务等。让专业的人做专业的事情,每个服务都有自己独立的数据库,并且是独立运行,互不影响。服务与服务之间通讯采用RPC远程调用技术,但是每个服务中都有自己独立的数据源,即自己独立的本地事务。两个服务相互通讯的时候,两个本地事务互不影响,两者之间没有耦合,但是要保证事务的特性,如“一致性”...原创 2019-12-06 16:41:10 · 567 阅读 · 0 评论 -
分布式系列教程(19) -基于Redis实现分布式锁
1.引言我们知道实现分布式锁一般有几种实现方式:数据库乐观锁基于Zookeeper的分布式锁基于Redis的分布式锁在之前的章节《分布式协调工具Zookeeper(分布式锁实现)》中,已经实现了基于Zookeeper实现分布式锁,阅读本文之前可以去逛逛看看。基于Zookeeper的分布式锁原理: 每个客户端对某个功能加锁时,在zookeeper上的与该功能对应的指定节点的目录下...原创 2019-11-29 15:22:12 · 427 阅读 · 0 评论 -
分布式系列教程(18) -分布式配置中心Apollo安装与详解
引言项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式配置中心,能做到自动更新配置文件信息,解决以上问题。常用的分布式配置中心框架:Disconf(依赖于zookpeer)Zookpeer(保证配置文件信息实时更新 -事件通知)diamondApollo阿波罗(携程)Re...原创 2019-11-29 11:38:34 · 1000 阅读 · 0 评论 -
分布式系列教程(17) - 分布式任务调度平台XXL-JOB
1. 实现任务调度的方案任务调度指的是指定时间去执行指定的任务,那么Java有哪几种实现任务调度的方式呢?直接贴上代码来理解: 1.1 使用Thread public class ThreadDemo { static long count = 0; public static void main(String[] args) { Runnable runnable = new R...原创 2019-11-26 17:50:50 · 1075 阅读 · 0 评论 -
分布式系列教程(16) - 解决网站跨域的问题
引言跨域产生的原因:在当前域名请求网站中,默认不允许通过ajax请求发送其他域名。例如跨域会报错:jquery-1.7.2.min.js?t=2017-07-27:4 Failed to load http://b.xxx.com:8081/ajaxB: No ‘Access-Control-Allow-Origin’ header is present on the requested ...原创 2019-11-26 10:54:51 · 511 阅读 · 0 评论 -
分布式系列教程(15) - 解决分布式Session一致性问题
引言何为Session?Session 是客户端与服务器通讯会话技术, 比如浏览器登陆、记录整个浏览会话信息。Session原理:客户对向服务器端发送请求后,Session 创建在服务器端,返回Sessionid给客户端浏览器保存在本地,当下次发送请求的时候,在请求头中传递sessionId获取对应的从服务器上获取对应的Sesison对象。Session是保存在服务器的,及时关闭服务器。...原创 2019-11-25 17:53:05 · 712 阅读 · 0 评论 -
分布式系列教程(14) -分布式协调工具Zookeeper(集群选举策略)
1.Zookeeper的角色领导者(leader) : 负责进行投票的发起和决议,更新系统状态学习者(learner) : 包括跟随者(follower)和观察者(observer),follower用于接受客户端请求并想客户端返回结果,在选主过程中参与投票Observer可以接受客户端连接 :将写请求转发给leader,但observer不参加投票过程,只同步leader的状态,obse...原创 2019-11-25 17:08:38 · 497 阅读 · 0 评论 -
分布式系列教程(13) -分布式协调工具Zookeeper(实现分布式配置中心)
代码已提交至Github,有兴趣的同学可以下载来看看(git版本号:3f3d5e73d533c5ac9f92e0d21192e50149e39cb9):https://github.com/ylw-github/SpringBoot-Zookeeper-Demo 1.分布式配置中心什么是分布式配置中心?项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,...原创 2019-11-25 16:53:43 · 547 阅读 · 0 评论 -
分布式系列教程(12) -分布式协调工具Zookeeper(选举与哨兵机制)
代码已上传到Github,有兴趣的同学可以下载来看看(git版本号:45eb8ccf3ebe3872194dd7161eaf41780207a8a7):https://github.com/ylw-github/Zookeeper-Demo现在很多时候我们的服务需要7*24小时工作,假如一台机器挂了,我们希望能有其它机器顶替它继续工作。此类问题现在多采用master-salve模式,也就是常说的...原创 2019-11-25 15:59:19 · 443 阅读 · 0 评论 -
分布式系列教程(11) -分布式协调工具Zookeeper(分布式锁实现)
代码已提交至Github,有兴趣的同学可以下载来看看(git版本号:bea4d6f7ec9f7309033bcfa43316a660171ae5b6):https://github.com/ylw-github/Zookeeper-Demo本文目录结构:l____1. 知识点回顾l________1.1 多线程l________1.2 Java共享内存模型l____2. 分布式锁的解决方...原创 2019-11-25 14:44:53 · 587 阅读 · 1 评论 -
分布式系列教程(10) -分布式协调工具Zookeeper(负载均衡原理实现)
代码已上传到Gtihub,有兴趣的同学可以下载来看看(git版本号90275563ea2f9efc047e62427f6b9d472fe47b7f):https://github.com/ylw-github/Zookeeper-Demo使用Zookeeper实现负载均衡原理:服务器端将启动的服务注册到ZK注册中心上,采用临时节点。客户端从zk节点上获取最新服务节点信息,本地使用负载均衡算...原创 2019-11-25 13:42:31 · 478 阅读 · 2 评论 -
分布式系列教程(09) -分布式协调工具Zookeeper(Java基本操作)
上一篇博客《分布式协调工具Zookeeper(介绍&安装&配置详解)》讲到了分布式协调工具Zookeeper,主要讲解Zookeeper的概念、应用场景以及安装配置。基于上一篇博客安装的环境,本文讲解如何使用Java操作Zookeeper?代码已提交至Gtihub,有兴趣的同学可以下载看看(git版本号:e9d27b6df05095bb50c3666a1e8965102c85bb...原创 2019-11-25 10:46:55 · 547 阅读 · 0 评论 -
分布式系列教程(08) -分布式协调工具Zookeeper(介绍&安装&配置详解)
本文目录结构:l____1. Zookeeper简介l________1.1 Zookeeper集群机l________1.2 Zookeeper特性l________1.3 Zookeeper数据结构l____2. Zookeeper应用场景l________2.1 数据发布与订阅(配置中心)l________2.2 负载均衡l________2.3 命名服务(Naming Se...原创 2019-11-23 17:04:17 · 614 阅读 · 0 评论 -
分布式系列教程(07) -分布式Redis缓存 (缓存雪崩&穿透&热点key)
引言关于Redis:一般对数据库进行数据变更的时候(增加、删除、修改)的时候才会对Redis进行缓存更新,不建议再查询的时候把查询出来的数据进行redis缓存更新。比如某公司只会在晚上进行缓存同步基础数据(如:省份及下级市)1.缓存雪崩缓存雪崩通俗简单的理解就是:由于原有缓存失效(或者数据未加载到缓存中),新缓存未到期间(缓存正常从Redis中获取)所有原本应该访问缓存的请求都去查询数据库...原创 2019-11-23 14:25:44 · 491 阅读 · 0 评论