架构
文章平均质量分 91
加多
欢迎关注微信公众号 技术原始积累
展开
-
架构整洁之道-核心笔记
架构”这个词往往使用于“高层级”的讨论中。这类讨论一般都把“底层”的实现细节排除在外。而“设计”一词,往往用来指代具体的系统代码组织结构和实现细节。但是,从一个真正的系统架构师的日常工作来看,这样的区分是根本不成立的。底层设计细节和高层架构信息是不可分割的。只考虑高层架构,而不考虑设计细节会导致架构师脱离一线,导致架构师永远不了解具体开发代码时会遇到什么问题。而只考虑设计细节而不考虑架构会导致视野的局限性,没有全局观,设计出来的系统可能边界不清楚,组件划分不明确,系统最终成为一团谁也理不清的乱麻。原创 2023-01-21 10:25:28 · 1269 阅读 · 0 评论 -
微服务核心组件 Zuul 网关原理剖析
一、前言Zuul 网关是具体核心业务服务的看门神,相比具体实现业务的系统服务来说它是一个边缘服务,主要提供动态路由,监控,弹性,安全性等功能。在分布式的微服务系统中,系统被拆为了多套系统,通过zuul网关来对用户的请求进行路由,转发到具体的后台服务系统中。本 Chat 主要内容如下:服务网关演化历程。Zuul 1.0 服务架构与源码剖析。Zuul 2.0 服务架构新特性。...原创 2018-09-11 12:25:54 · 17955 阅读 · 0 评论 -
MySQL中流式查询使用
一、前言MySQL 是目前使用比较广泛的关系型数据库,而从数据库里面根据条件查询数据到内存的情况想必大家在日常项目实践中都有使用。当指定条件的数据量特别大时候一般是通过分页的方式在前端页面通过 Tag 标签一页页的加载数据到内存;但是有些情况下却不需要用户切换 Tag 标签的方式一页页的加载数据,这时候如果一下子全部把数据加载内存,就有可能会导致 OOM,虽然这时候可以通过程序控制分页查询...原创 2018-08-08 19:50:38 · 5756 阅读 · 0 评论 -
分布式消息中间件 RocketMQ:概述与源码编译篇
一、前言Apache RocketMQ 是一个分布式消息中间件,其具有低延迟、高性能和可靠性、万亿级容量、灵活的可扩展性特性;它是阿里巴巴在2012年开源的分布式消息中间件,目前已经捐赠给 Apache 软件基金会,并于2017年9月25日成为 Apache 的顶级项目。二、RocketMQ架构 本图来自rocketmq官网RocketMQ 是一个分布式消息中间件,其具有低延...原创 2018-07-21 10:13:34 · 833 阅读 · 0 评论 -
MySQL 中基于 XA 实现的分布式事务
五、MySQL 中基于 XA 实现的分布式事务5.1 XA协议首先我们来简要看下分布式事务处理的XA规范 可知XA规范中分布式事务有AP,RM,TM组成:其中应用程序(Application Program ,简称AP):AP定义事务边界(定义事务开始和结束)并访问事务边界内的资源。资源管理器(Resource Manager,简称RM):Rm管理计算机共享的资源,许多软...原创 2018-07-07 09:58:23 · 4728 阅读 · 4 评论 -
分布式事务- TCC编程式模式
一、前言严格遵守ACID的分布式事务我们称为刚性事务,而遵循BASE理论(基本可用:在故障出现时保证核心功能可用,软状态:允许中间状态出现,最终一致性:不要求分布式事务打成中时间点数据都是一致性的,但是保证达到某个时间点后,数据就处于了一致性了)的事务我们称为柔性事务,其中TCC编程模式就属于柔性事务,本文我们来阐述其理论。二、TCC编程模式TCC编程模式本质上也是一种二阶段协议,...原创 2018-06-23 23:54:13 · 5422 阅读 · 1 评论 -
分布式事务- 三阶段协议
一、前言前面我们介绍了为解决分布式事务而提出来的的二阶段协议,本文首先来讲解二阶段的不足,然后阐述三阶段协议,三阶段协议也是一个标准的协议,也并没有说具体如何实现。二、二阶段协议存在的问题主要是同步阻塞问题,在二阶段的第一阶段所有参与者接受到事务协调器的事务准备请求后,会在本地开启并执行事务,但是没有提交事务。所有参与者等待第二阶段事务协调器发出事务提交或者回滚后才会提交或者回滚事...原创 2018-06-22 15:51:11 · 400 阅读 · 0 评论 -
分布式事务-二阶段协议
一、前言在单个数据库实例时候,我们可以在一个数据源的事务(本地事务)内做多步数据库操作,在事务内的多个操作要么全部执行生效,要么全部不生效。在多数据实例节点时候,我们对多个实例的数据源进行操作时候就没办法把多个操作放到一个大的事务内来管理了,因为多个实例操作的是不同的数据源,而数据库自带的事务是针对单个数据源来说的。二、二阶段协议单个数据库实例内的事务我们称为本地事务,需要保证多个...原创 2018-06-21 19:46:39 · 382 阅读 · 0 评论 -
使用数据库悲观锁实现不可重入的分布式锁
一、前言在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。常见的有使用zk的最小版本,redis的set函数,数据库锁来实现,本节我们谈谈使用数据库悲观锁机制来实现一个分布式锁。二、使用数据库悲观锁实现不可重入的分布式锁...原创 2018-06-12 19:17:23 · 720 阅读 · 0 评论 -
使用Redis单实例实现分布式锁
一、前言在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。常见的有使用zk的最小版本,redis的set函数,数据库锁来实现,本节我们谈谈Redis单实例情况下使用set函数来实现分布式锁。二、使用Redis单实例实现分布...原创 2018-06-11 21:15:21 · 825 阅读 · 1 评论 -
使用zookeeper实现分布式锁
一、前言在同一个jvm进程中时,可以使用JUC提供的一些锁来解决多个线程竞争同一个共享资源时候的线程安全问题,但是当多个不同机器上的不同jvm进程共同竞争同一个共享资源时候,juc包的锁就无能无力了,这时候就需要分布式锁了。常见的有使用zk的最小版本,redis的set函数,数据库锁来实现,本节我们谈谈使用zookeeper的序列节点机制来实现一个分布式锁。二、使用zookeeper实...原创 2018-06-11 21:14:48 · 4024 阅读 · 2 评论 -
分布式系统中服务降级策略探究-chat
在分布式系统架构中多个系统之间通常是通过远程RPC调用进行通信,也就是 A 系统调用 B 系统服务,B 系统调用 C 系统的服务。当尾部应用 C 发生故障而系统 B 没有服务降级时候可能会导致 B,甚至系统 A 瘫痪,这种现象被称为雪崩现象。所以在系统设计时候要使用一定的降级策略,来保证当服务提供方服务不可用时候,服务调用方可以切换到降级后的策略进行执行。本 Chat 我们主要围绕下面主题展开...原创 2018-05-11 14:36:08 · 819 阅读 · 0 评论