分布式架构

分布式缓存之Redis

和自甴很熟 提交于 2020-01-08 15:49:12
缓存大致可以分为两类,一种是应用内缓存,比如Map(简单的数据结构),以及EH Cache(Java第三方库),另一种 就是缓存组件,比如Memached,Redis;Redis(remote dictionary server)是一个基于KEY-VALUE的高性能的 存储系统,通过提供多种键值数据类型来适应不同场景下的缓存与存储需求 存储结构 大家一定对字典类型的数据结构非常熟悉,比如map ,通过key value的方式存储的结构。 redis的全称是remote dictionary server(远程字典服务器),它以字典结构存储数据,并允许其他应用通过TCP协议读写字典中的内容。数 据结构如下 启动停止redis Redis有哪些可执行文件 Redis-server Redis服务器 Redis-cli Redis命令行客户端 Redis-benchmark          Redis性能测试工具 Redis-check-aof Aof文件修复工具 Redis-check-dump Rdb文件检查工具 Redis-sentinel Sentinel服务器(2.8以后) 常用的命令是redis-server和redis-cli \1.直接启动 redis-server ../redis.conf 服务器启动后默认使用的是6379的端口,通过--port可以自定义端口;

分布式架构之Zookeeper

♀尐吖头ヾ 提交于 2020-01-08 13:51:19
zookeeper分布式锁原理: https://my.oschina.net/u/3492343/blog/2992492 zookeeper的树形结构 zookeeper节点特性 1.同级节点唯一性 2.临时节点和持久化节点 3.有序节点和无序节点 4.临时节点下不能存在子节点 集群搭建 server.id = ip:port:port 在zoo.cfg里面加入以下 server.1=192.168.182.128:2888:3888 server.2=192.168.182.129:2888:3888 server.3=192.168.182.130:2888:3888 192.168.182.128:2888是完成数据同步的节点 192.168.182.128:3888是选举leader的节点 自己练习的话关闭防火墙service iptables stop,生产就开放相关端口, 在data目录下创建myid(id一定要和上面id对应的ip对应) vim /tmp/zookeeper/myid 里面加入:1或2或3 zoo.cfg里面的参数 1.tickTime=2000 心跳时间 2.initLimit=10 初始化同步数据的时候10个心跳时间 3.syncLimit=5 心跳检测的最大延迟 4.dataDir = /x 同步数据存储的位置 5.clientPort

不为人所知的分布式锁实现全都在这里了!

◇◆丶佛笑我妖孽 提交于 2020-01-07 20:52:39
1、引入业务场景 首先来由一个场景引入: 最近老板接了一个大单子,允许在某终端设备安装我们的APP,终端设备厂商日活起码得几十万到百万级别,这个APP也是近期产品根据市场竞品分析设计出来的,几个小码农通宵达旦开发出来的,主要功能是在线购物一站式服务,后台可以给各个商家分配权限,来维护需要售卖的商品信息。 老板大O :谈下来不容易,接下来就是考虑如何吸引终端设备上更多的用户注册上来,如何引导用户购买,这块就交给小P去负责了,需求尽快做,我明天出差! 产品小P :嘿嘿~,眼珠一转儿,很容易就想到了,心里想:“这还不简单,起码在首页搞个活动页... ”。 技术小T: 很快了解了产品的需求,目前小J主要负责这块,找了前端和后端同学一起将活动页搞的快差不多了。 业务场景一出现 : 因为小T刚接手项目,正在吭哧吭哧对熟悉着代码、部署架构。在看代码过程中发现,下单这块代码可能会出现问题,这可是分布式部署的,如果多个用户同时购买同一个商品,就可能导致商品出现 库存超卖 (数据不一致) 现象,对于这种情况代码中并没有做任何控制。 原来一问才知道,以前他们都是售卖的虚拟商品,没啥库存一说,所以当时没有考虑那么多... 这次不一样啊,这次是售卖的实体商品,那就有库存这么一说了,起码要保证不能超过库存设定的数量吧。 小T大眼对着屏幕,屏住呼吸,还好提前发现了这个问题,赶紧想办法修复,不赚钱还赔钱

分布式事务

孤街醉人 提交于 2020-01-07 20:12:05
前置知识 事务: 事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元,组成事务的所有操作只有在所有操作均能正常执行的情况下方能提交,只要其中任意一个执行失败,将导致整个事务的回滚。简单来说就是提供一种”要么什么都不做,要不全都做“的机制。 本地事务: 当事务是由资源管理器本地管理时被称为本地事务。本地事务的有点是支持严格的 ACID 特性,高效,可靠,状态可以只在资源管理器中维护,而且应用编程模型简单。但是本地事务不具备分布式事务的处理能力,隔离的最小单位受限于资源管理器。MySql 的 InnoDB 通过日志(Redo 和 Undo)和锁来保证事务。 全局事务: 当事务由全局事务管理器进行全局管理时成为全局事务,事务管理器负责管理全局事务状态和参与的资源,协同资源的一直提交回滚。 刚性事务和柔性事务 刚性事务:遵循 ACID 原则,强一致性,典型的例子就是数据库事务。 柔性事务:尊循 BASE 理论,最终一致性,允许在一定时间内,不同节点的数据不一致,但要求最终一致性。 分布式知识 CAP 分布式系统在设计时只能在一致性,可用性和分区容错性中满足两种,无法兼顾三种。 C: 在分布式环境中,一致性是指数据在多个副本之间是否能够保持一致的特性。在一致性的要求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。 A:

阿里巴巴技术总监全解中台架构19页ppt

与世无争的帅哥 提交于 2020-01-07 16:22:00
//初创时,快速上线 单体架构至少撑了3年 //分布式,中间件基座 //平台化,内部是简单服务,对于业务侧就是快速上线 //平台化之后由于多平台协作问题,再次出现问题: 效率仍然不能匹配业务发展之需要。 //案例 //案例解析 //总结 //建设路径 从战略共识开始 //总结 本人免费整理了Java高级资料,涵盖了Java、Redis、MongoDB、MySQL、Zookeeper、Spring Cloud、Dubbo高并发分布式等教程,一共30G,需要自己领取。 传送门: https://mp.weixin.qq.com/s/osB-BOl6W-ZLTSttTkqMPQ 来源: https://www.cnblogs.com/yunxi520/p/12161373.html

微服务全流程分析

余生颓废 提交于 2020-01-07 11:09:25
转眼已经2020,距离微服务这个词落地已经过去好多年!(我记得2017年就听过这个词)。然而今天我想想什么是微服务,其实并没有一个很好的定义。为什么这样说,按照微服务的定义: 微服务架构就是将一个庞大的业务系统按照业务模块拆分成若干个独立的子系统,每个子系统都是一个独立的应用,它是一种将应用构建成一系列按业务领域划分模块的,小的自治服务的软件架构方式,倡导将复杂的单体应用拆分成若干个功能单一、松偶合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发,及持续集成与交付活动。 根据这个定义,不难看出其实就是对复杂的业务系统统一做逻辑拆分,保持逻辑上的独立。那么逻辑上独立就是一个服务这样做真的是好吗,如何界定:小、独,还有要做一个事情,完成单一的业务,单一的功能要拆分出来,为了独立而独立会不会导致拆的过细?不同人有不同的见解,我们今天一起探讨微服务的过去和未来。 微服务缘起 在没有微服务之前,我们最早的架构模式就是 MVC 模式,把业务逻辑分为:表示层,业务逻辑层,数据访问层。MVC模式随着大前端的发展,从一开始的前后端不分离,到现在的前后端分离逐渐演进。这种演进好的一点是剥离了不同开发语言的开发环境和部署环境,使得开发较为便利,部署更直接。然而问题是:这种模式仍然是单体应用模式,如果有一个改动需要上线,你不得不因为这个改动去考虑更多

Java分布式应用技术架构介绍

冷暖自知 提交于 2020-01-07 04:46:25
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 分布式架构的演进 系统架构演化历程-初始阶段架构 初始阶段 的小型系统 应用程序、数据库、文件等所有的资源都在一台服务器上通俗称为LAMP 特征: 应用程序、数据库、文件等所有的资源都在一台服务器上。 描述: 通常服务器操作系统使用linux,应用程序使用PHP开发,然后部署在Apache上,数据库使用Mysql,汇集各种免费开源软件以及一台廉价服务器就可以开始系统的发展之路了。 系统架构演化历程-应用服务和数据服务分离 好景不长,发现随着系统访问量的再度增加,webserver机器的压力在高峰期会上升到比较高,这个时候开始考虑增加一台webserver 特征: 应用程序、数据库、文件分别部署在独立的资源上。 描述: 数据量增加,单台服务器性能及存储空间不足,需要将应用和数据分离,并发处理能力和数据存储空间得到了很大改善。 系统架构演化历程-使用缓存改善性能 特征: 数据库中访问较集中的一小部分数据存储在缓存服务器中,减少数据库的访问次数,降低数据库的访问压力。 描述: 系统访问特点遵循二八定律,即80%的业务访问集中在20%的数据上。 缓存分为本地缓存和远程分布式缓存,本地缓存访问速度更快但缓存数据量有限,同时存在与应用程序争用内存的情况。 系统架构演化历程-使用应用服务器集群 在做完分库分表这些工作后

分布式秒杀 - 实战

女生的网名这么多〃 提交于 2020-01-06 17:11:16
疯狂创客圈 Java 高并发【 亿级流量聊天室实战】实战系列之15 【 博客园总入口 】 前言 疯狂创客圈 (笔者尼恩创建的高并发研习社群)Springcloud 高并发系列文章,将为大家介绍三个版本的 高并发秒杀: 一、 版本1 :springcloud + zookeeper 秒杀 二、版本2 :springcloud + redis 分布式锁秒杀 三、版本3 :springcloud + Nginx + Lua 高性能版本秒杀 以及有关Springcloud 几篇 核心、重要的文章 : 一、 Springcloud 配置, 史上最全 一文全懂 二、 Springcloud 中 SpringBoot 配置全集 , 收藏版 三、 Feign Ribbon Hystrix 三者关系 , 史上最全 深度解析 四、 SpringCloud gateway 详解 , 史上最全 本文:是**第一个版本 springcloud + zookeeper 秒杀 **实现,文章比较长,大家可以挑选感兴趣的部分,选择性阅读。 本文的秒杀效果图: 提示 : 本文内容,稍微有些陈旧,最新的源码和最新内容,请关注高并发社群—— 疯狂创客圈 1 为何要以秒杀做为高并发实战案例? 时间调到在单体架构还是主流的年代,那时候,大家学习J2EE技术的综合性实战案例,一般来说,就是从0开始实现,一行一行代码的

什么是分布式系统,如何学习分布式系统

佐手、 提交于 2020-01-05 22:05:21
欢迎关注专栏: Java架构技术进阶 。里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦。 什么是分布式系统 分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是 利用更多的机器,处理更多的数据 。 首先需要明确的是,只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议,带来更多的问题。。。 在很多文章中,主要讲分布式系统分为分布式计算(computation)与分布式存储(storage)。计算与存储是相辅相成的,计算需要数据,要么来自实时数据(流数据),要么来自存储的数据;而计算的结果也是需要存储的。在操作系统中,对计算与存储有非常详尽的讨论,分布式系统只不过将这些理论推广到多个节点罢了。 那么分布式系统怎么将任务分发到这些计算机节点呢,很简单的思想,分而治之,即分片( partition) 。对于计算

美团分布式服务通信框架及服务治理系统OCTO

爱⌒轻易说出口 提交于 2020-01-05 02:47:44
一、什么是OCTO 定义: OCTO是美团的分布式服务通信框架及服务治理系统,属于公司级基础设施(octo已经开源,https://github.com/Meituan-Dianping。 octo-rpc, octo-portal,octo-ns 都是octo的一部分)。 目标: 为公司所有业务提供统一的服务通信框架,使业务具备良好的服务运营能力,轻松实现服务注册、服务自动发现、负载均衡、容错、灰度发布、调用数据可视化等,持续提升服务高可用性、服务运维效率。 类比: 美团点评内部类似的框架还有pigeon(已开源,https://github.com/dianping/pigeon)。OCTO是octopus(章鱼)的缩写,pigeon是鸽子的意思,一个水里游,一个天上飞,目标大体一致。 业界同类产品有Dubbo。OCTO的功能因为主要内部用,功能要丰富的多。 规模: 千亿级别 静儿的老领导17年时做过一个QCon分享,叫《OCTO:千亿规模下的服务治理挑战与实践》。里面提到了16年OCTO日调用量已经超过千亿,目前这个数字还在高速增长。 二、产生背景 阶段1 - 垂直应用阶段 这个阶段大体相当于目前运用最广泛的「分层架构」。把业务按照领域划分(垂直拆分),将一个大应用分成几个互不相干的小应用。 阶段2 - 早期分布式阶段 随着规模的扩大,系统之间需要进一步拆分