分布式部署

系统架构:分布式ID那点事儿

寵の児 提交于 2020-02-18 17:29:54
原文: https://zhuanlan.zhihu.com/p/107592567 全局唯一 不能出现重复的ID号,既然是唯一标识,这是最基本的要求。 趋势递增 为什么要趋势递增呢? 第一,由于我们的分布式ID,是用来标识数据唯一性的,所以多数时候会被定义为主键或者唯一索引。 第二,大多数互联网公司使用的数据库是MySQL,存储引擎为innoDB,对于BTree索引来讲,数据以自增顺序来写入的话,b+tree的结构不会时常被打乱重塑,存取效率是最高的,在主键的选择上面我们应该尽量使用有序的主键保证写入性能。 单调递增:保证下一个ID一定大于上一个ID,例如事务版本号、IM增量消息、排序等特殊需求。 信息安全 由于数据是递增的,所以,恶意用户的可以根据当前ID推测出下一个,非常危险,所以,我们的分布式ID尽量做到不易被破解。如果ID是连续的,恶意用户的扒取工作就非常容易做了,直接按照顺序下载指定URL即可;如果是订单号就更危险了,竞对可以直接知道我们一天的单量。所以在一些应用场景下,会需要ID无规则、不规则。 数据库自增方案缺点: 1.高并发下性能不佳,主键产生的性能上限是数据库服务器单机的上限 2.水平扩展困难,严重依赖数据库,扩容需要停机 Flicker方案: [flicker算法原文] http://code.flickr.com/blog/2010/02/08/ticket

常用分布式事务解决方案

半腔热情 提交于 2020-02-18 14:37:02
出处: https://github.com/clsaa/Distributed-Transaction-Notes 。 作者总结得很全面,做个笔记搬运。 一、 两阶段提交(2PC) 一个基于两阶段提交协议的分布式事务框架(LCN) 二阶段提交(Two-phaseCommit)是指,在计算机网络以及数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务提交时保持一致性而设计的一种算法(Algorithm)。通常,二阶段提交也被称为是一种协议(Protocol))。在分布式系统中,每个节点虽然可以知晓自己的操作时成功或者失败,却无法知道其他节点的操作的成功或失败。当一个事务跨越多个节点时,为了保持事务的ACID特性,需要引入一个作为协调者的组件来统一掌控所有节点(称作参与者)的操作结果并最终指示这些节点是否要把操作结果进行真正的提交(比如将更新后的数据写入磁盘等等)。因此,二阶段提交的算法思路可以概括为:参与者将操作成败通知协调者,再由协调者根据所有参与者的反馈情报决定各参与者是否要提交操作还是中止操作。 所谓的两个阶段是指:第一阶段:准备阶段(投票阶段)和第二阶段:提交阶段(执行阶段)。 1. 准备阶段 事务协调者(事务管理器)给每个参与者(资源管理器)发送Prepare消息,每个参与者要么直接返回失败(如权限验证失败),要么在本地执行事务,写本地的redo和undo日志

ClickHouse学习笔记

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-18 09:21:09
1. 概述 ClickHouse 是一个用于联机分析 (OLAP:Online Analytical Processing) 的列式数据库管理系统 (DBMS:Database Management System) ,简称 CK 。 ClickHouse 是一个完全的列式数据库管理系统,允许在运行时创建表和数据库,加载数据和运行查询,而无需重新配置和重新启动服务器, 支持线性扩展,简单方便,高可靠性,容错 。 ClickHouse 官方文档: https://clickhouse.yandex/docs/en/ 2. 应用场景 OLAP 场景关键特征: 大多数是读请求 数据总是以相当大的批 (> 1000 rows) 进行写入 不修改已添加的数据 每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列 宽表,即每个表包含着大量的列 较少的查询 ( 通常每台服务器每秒数百个查询或更少 ) 对于简单查询,允许延迟大约 50 毫秒 列中的数据相对较小: 数字和短字符串 ( 例如,每个 UR60 个字节 ) 处理单个查询时需要高吞吐量(每个服务器每秒高达数十亿行) 事务不是必须的 对数据一致性要求低 每一个查询除了一个大表外都很小 查询结果明显小于源数据,换句话说,数据被过滤或聚合后能够被盛放在单台服务器的内存中 应用场景: 用于结构良好清晰且不可变的事件或日志流分析 。 不适合的场景

分布式锁机制原理以及三种实现方式介绍

我们两清 提交于 2020-02-18 05:32:40
很多小伙伴在学习Java的时候,总是感觉Java多线程在实际的业务中很少使用,以至于不会花太多的时间去学习,技术债不断累积!等到了一定程度的时候对于与Java多线程相关的东西就很难理解,今天需要探讨的东西也是一样的和Java多线程相关的!做好准备,马上开车! 学过Java多线程的应该都知道什么是锁,没学过的也不用担心,Java中的锁可以简单的理解为多线程情况下访问临界资源的一种线程同步机制。 在学习或者使用Java的过程中进程会遇到各种各样的锁的概念:公平锁、非公平锁、自旋锁、可重入锁、偏向锁、轻量级锁、重量级锁、读写锁、互斥锁等。 一、为什么要使用分布式锁 我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的Java多线程的18般武艺进行处理,并且可以完美的运行,毫无Bug! 注意这是单机应用,也就是所有的请求都会分配到当前服务器的JVM内部,然后映射为操作系统的线程进行处理!而这个共享变量只是在这个JVM内部的一块内存空间! 后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图: 上图可以看到,变量A存在JVM1、JVM2、JVM3三个JVM内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象,例如:UserController控制器中的一个整形类型的成员变量),如果不加任何控制的话

分布式和集群的区别

♀尐吖头ヾ 提交于 2020-02-17 11:43:58
分布式:一个业务拆分为多个子业务,部署在多个服务器上 。 集群:同一个业务,部署在多个服务器上 。 转自: https://blog.csdn.net/jiangyu1013/article/details/80417961 来源: CSDN 作者: 周杰伦本人 链接: https://blog.csdn.net/sdaujsj1/article/details/104353457

构建高并发高可用的电商平台架构实践

為{幸葍}努か 提交于 2020-02-17 07:25:52
一、 设计理念 1. 空间换时间 1) 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓存 应用端的缓存(memcache) 内存数据库 Buffer、cache机制(数据库,中间件等) 2) 索引 哈希、B树、倒排、bitmap 哈希索引适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。 B树索引适合于查询为主导的场景,避免多次的IO,提高查询的效率。 倒排索引实现单词到文档映射关系的最佳实现方式和最有效的索引结构,广泛用在搜索领域。 Bitmap是一种非常简洁快速的数据结构,他能同时使存储空间和速度最优化(而不必空间换时间),适合于海量数据的的计算场景。 2. 并行与分布式计算 1) 任务切分、分而治之(MR) 在大规模的数据中,数据存在一定的局部性的特征,利用局部性的原理将海量数据计算的问题分而治之。 MR模型是无共享的架构,数据集分布至各个节点。处理时,每个节点就近读取本地存储的数据处理(map),将处理后的数据进行合并(combine)、排序(shuffle and sort)后再分发(至reduce节点),避免了大量数据的传输,提高了处理效率。 2) 多进程、多线程并行执行

构建高并发高可用的电商平台架构实践

我们两清 提交于 2020-02-17 07:05:25
从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。 转载请声明出处: http://blog.csdn.net/yangbutao/article/details/12242441 作者:杨步涛 关注分布式架构、大数据、搜索、开源技术 QQ:306591368 技术Blog: http://blog.csdn.net/yangbutao 一、 设计理念 1. 空间换时间 1) 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓存 应用端的缓存(memcache) 内存数据库 Buffer、cache机制(数据库,中间件等) 2) 索引 哈希、B树、倒排、bitmap 哈希索引适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。 B树索引适合于查询为主导的场景,避免多次的IO,提高查询的效率。 倒排索引实现单词到文档映射关系的最佳实现方式和最有效的索引结构,广泛用在搜索领域。 Bitmap是一种非常简洁快速的数据结构,他能同时使存储空间和速度最优化(而不必空间换时间),适合于海量数据的的计算场景。 2. 并行与分布式计算 1) 任务切分、分而治之

构建高并发高可用的电商平台架构实践

时间秒杀一切 提交于 2020-02-17 06:44:57
从各个角度总结了电商平台中的架构实践,由于时间仓促,定了个初稿,待补充完善,欢迎大家一起交流。 转载请声明出处: http://blog.csdn.net/yangbutao/article/details/12242441 作者:杨步涛 关注分布式架构、大数据、搜索、开源技术 QQ:306591368 技术Blog: http://blog.csdn.net/yangbutao 一、 设计理念 1. 空间换时间 1) 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返回body,客户端可以继续用cache,减少流量),ETag) 反向代理缓存 应用端的缓存(memcache) 内存数据库 Buffer、cache机制(数据库,中间件等) 2) 索引 哈希、B树、倒排、bitmap 哈希索引适合综合数组的寻址和链表的插入特性,可以实现数据的快速存取。 B树索引适合于查询为主导的场景,避免多次的IO,提高查询的效率。 倒排索引实现单词到文档映射关系的最佳实现方式和最有效的索引结构,广泛用在搜索领域。 Bitmap是一种非常简洁快速的数据结构,他能同时使存储空间和速度最优化(而不必空间换时间),适合于海量数据的的计算场景。 2. 并行与分布式计算 1) 任务切分、分而治之

初识分布式系统

自闭症网瘾萝莉.ら 提交于 2020-02-13 01:55:49
随着大型网站的各种高并发访问、海量数据处理等场景越来越多,如何实现网站的高可用、易伸缩、可扩展、安全等目标就显得越来越重要。为了解决这样一系列问题,大型网站的架构也在不断发展。提高大型网站的高可用架构,不得不提的就是分布式。本文主要简单介绍了分布式系统的概念、分布式系统的特点、常用的分布式方案以及分布式和集群的区别等。 一、集中式系统 在学习分布式之前,先了解一下与之相对应的集中式系统是什么样的。 集中式系统用一句话概括就是:一个主机带多个终端。终端没有数据处理能力,仅负责数据的录入和输出。而运算、存储等全部在主机上进行。现在的银行系统,大部分都是这种集中式的系统,此外,在大型企业、科研单位、军队、政府等也有分布。集中式系统,主要流行于上个世纪。 集中式系统的最大的特点就是部署结构非常简单,底层一般采用从IBM、HP等厂商购买到的昂贵的大型主机。因此无需考虑如何对服务进行多节点的部署,也就不用考虑各节点之间的分布式协作问题。但是,由于采用单机部署。很可能带来系统大而复杂、难于维护、发生单点故障(单个点发生故障的时候会波及到整个系统或者网络,从而导致整个系统或者网络的瘫痪)、扩展性差等问题。 二、分布式系统(distributed system) 分布式 分布式就是把一个计算任务分解为若干个计算单元,并分派到若干个不同的计算机中去执行,然后再汇总计算结果。

集中式架构vs分布式架构

烈酒焚心 提交于 2020-02-12 23:07:00
历史 自从20世纪60年代大型主机被发明出来以后,凭借其超强的计算和I/O处理能力以及在稳定性和安全性方面的卓越表现,在很长一段时间内,大型主机引领了计算机行业以及商业计算领域的发展。由于大型主机卓越的性能和良好的稳定性,其在单机处理能力方面的优势非常明显,使得IT系统快速进入了集中式处理阶段,其对应的计算机系统称为集中式系统。 但从20世纪80年代以来,随着微型计算机的出现,越来越多廉价的PC机成为了各大IT企业架构的首选,分布式的处理方式越来越受到业界的青睐,计算机系统正在经历一场前所未有的从集中式到分布式架构的变革。 主要有以下几点原因: 大型主机的人才培养成本非常高,通常一台大型主机汇集了大量精密的计算机组件,操作非常复杂,这对一个运维人员掌握其技术细节提出了非常高的要求。 大型主机也是非常昂贵的,通常一台配置较好的IBM大型主机,其售价达到上百万美元甚至更高,因此也只有像政府、金融和电信等企业才有能力采购大型主机。 集中式有非常明显的单点问题,大型主机虽然在性能和稳定性方面表现卓越,但并不代表其永远不会出故障。一旦一台大型主机出现了故障,那么整个系统将处于不可用的状态,后果相当严重。 随着业务的不断发展,用户访问量迅速提高, 计算机系统的规模也在不断扩大,在单一大型主机上进行扩容往往比较困难。 随着PC机性能的不断提升和网络技术的快速普及,大型主机的市场份额变得越来越小