自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(258)
  • 收藏
  • 关注

原创 一次性吃透分布式一致性Raft协议

简介Raft是一种为了管理复制日志的一致性算法。它提供了和 Paxos 算法相同的功能和性能,但是它的算法结构和 Paxos 不同,使得 Raft 算法更加容易理解并且更容易构建实际的系统。为了提升可理解性,Raft 将一致性算法分解成了几个关键模块:领导人选举、日志复制和安全性。同时它通过实施一个更强的一致性来减少需要考虑的状态的数量。参考文章http://thesecretlivesofdata.com/raft/https://raft.github.io/raft.pdf...

2021-03-29 19:07:20 6152

原创 Redis总结

最近针对Redis的基本数据结构、持久化机制、事务、主从复制和分布式锁等知识点做了系统的学习和整理,现对本次学习Redis的过程做一次思考和总结。为什么要使用nosql(not only sql)这个问题我们站在互联网技术中常提到的"高并发"和"高可用"关键词来思考这个问题,我是这样子理解的:传统的关系型数据库,比如单机的MySQL的QTS只有2000~3000左右,在一些大并发的场景下,比如618活动、双11活动等场景下,数据库根本就扛不住这么大的并发量,轻而易举的就将数据库打挂了,从而导致了服务

2020-07-02 15:41:08 10247 2

原创 Dubbo进阶(十五):Dubbo总结

最近针对Dubbo中核心的知识点做了一次系统的学习,现对本次学习Dubbo的过程做一次总结。Dubbo的定位Dubbo的定位是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。Dubbo产生的背景随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。分布式服务架构当垂直应用越来越多,应用之间交互不可避免,将

2020-06-17 21:11:09 10104 2

原创 老司机带你走近CodeReview

Code Review 很重要,但是一个团队并不是所有人都是老司机,有很多同学是没有代码 review 经验的,他们往往不知道应该重点 check哪些点。这样可以让团队在review时,能有的放矢,过程中逐步积累起经验,共同成长。严格来说,CR应该在提测之前,包含业务逻辑实现,代码优化重构等所有代码改动过的地方,同时应有测试参与评审,评估影响面,以便完善测试用例。

2023-04-04 15:49:38 600 1

原创 Dubbo ScopeModel 的设计思想

抽象这三个能力是为了实现 Dubbo 的多实例支持

2022-11-11 11:40:09 982 2

原创 聊聊分布式锁的设计模型

什么是分布式锁?

2022-10-10 11:42:30 919

原创 《凤凰架构》读后感 - 演进中的架构

服务架构演进路径

2022-10-01 15:36:30 273

原创 Proxyless Mesh 在 Dubbo 中的实践(实战篇)

Proxyless Mesh 在 Dubbo 中的实战指南

2022-09-02 16:48:43 692

原创 Proxyless Mesh 在 Dubbo 中的实践(原理篇)

Proxyless Mesh在Dubbo中的实践

2022-09-02 16:28:57 689 2

原创 DDD实战心得

DDD实战细节

2022-08-12 17:56:40 1303

转载 浅谈架构模式

原文连接 https://hangzhouhot.com/architecturepattern/

2022-06-02 09:49:59 142 1

转载 系统稳定性保障思路

原文连接:https://mp.weixin.qq.com/s/0Z8-Xw8pvDhTivALJtBltw

2022-05-09 09:32:18 189

原创 单元化架构之消息篇

设计原则前面我们讲到单元化架构中分为GZone、CZone和RZone,所以在消息的场景中跨Zone投递场景必不可少,我们应该本着一下原则就对我们架构进行升级改造。最小化对业务的侵入性希望业务不做改造或者做很少的改造就能支持跨Zone消息,尽量将跨Zone逻辑封装到消息服务器端。节约网络流量消息中心采用的是pub/sub的模式,一个消息往往有多个订阅端。在跨Zone的场景下,如果每个跨Zone的订阅端都单独投递一份消息,会带来大量的网络流量。所以消息在跨Zone时进行了合并,跨Zone时只将一条消

2022-03-15 11:24:39 5922

原创 单元化架构之流量调度篇

在之前的文章中,我们了解了单元化架构的一些基本理论和原理,没看过的小伙伴可以再次阅读哈。流量管控调拨和服务请求路由是LDC架构中的一个关键设计主题,本篇文章将向大家详细介绍核心原理和实现。整个流量调度的架构我们可以分为四层架构,分别是DNS、接入层、服务调用和DAO层。DNS比如用户在打开百度首页时,浏览器会先请求DNS解析www.baidu.com域名,得到一个IP,然后与这个IP建立通信请求。机房间流量分配,就是在DNS解析时完成的,这个过程可能用户都没有察觉到。DNS根据规则,将域名解析到其

2022-03-14 19:49:14 5487 1

原创 初识单元化架构

在当今的互联网业内,很多大型互联网系统,比如淘宝、支付宝、网商银行等,都已经实现了单元化架构,并从中获益匪浅,更多企业正加入其中。为什么要做单元化,单元化架构能给系统带来什么样的能力。本文将从架构发展历史的角度作为切入点来了解一下单元化架构的发展历史以及一些落地方案。单点架构支付请求要从客户端发送到服务端,服务端最终再把结果返回客户端,必然会有一次异地网络往返。应用进程内部会发生很多次业务逻辑运算,耗时忽略不计。应用会访问多次数据库,一笔支付请求按10次数据库访问算(对于支付系统来说并不算多,一笔业务可

2022-03-07 20:04:48 8146

原创 Why Service Mesh

什么是Service Mesh官方介绍A service mesh is a dedicated infrastructure layer for handlingservice-to-service communication. It’s responsible for the reliabledelivery of requests through the complex topology of services thatcomprise a modern, cloud native app

2022-03-03 15:33:40 2134

原创 【社招】蚂蚁面经

最近面试了蚂蚁金服的岗位,经过一个多月的战斗最终收获offer,想记录一下整个面试过程希望可以帮助到更多的小伙伴~前期准备简历一份清晰的简历可以让你更容易获得面试机会,把自己的优势一定要写清楚,这样子才可以在n多份简历里脱颖而出。如果有自己的博客一定要贴上去或者参与过哪些开源项目也要贴上去,不然怎么证明自己对技术的热爱呢?项目准备这块是重点,一定要有深入的思考,不能说是按照产品的prd去crud,抽象抽象再抽象!包括项目的技术选型、技术方案评估、异常方案的设计等等。熟悉岗位JD在准

2022-02-16 10:47:55 2631

转载 DDD 核心概念梳理

本文转载自:https://mp.weixin.qq.com/s/qca9foDun0HUvo7eS03W5g

2022-02-15 16:52:13 690

原创 聊聊Dubbo的注册中心、配置中心以及元数据中心

了解Dubbo的部署架构可以帮助我们更深入的理解Dubbo,先来看一张官网的图片这张图应该是非常经典的一张图了,从dubbo问世以来一直都没有怎么变过,从上图中可以清晰的看到dubbo作为一个微服务框架,注册中心是至关重要的,主要负责协调 Consumer 与 Provider 之间的地址注册与发现。除此之外dubbo还有配置中心和元数据中心。配置中心主要负责存储 Dubbo 启动阶段的全局配置,保证配置的跨环境共享与全局一致性以及负责服务治理规则(路由规则、动态配置等)的存储与推送元数据中心主要

2022-02-07 15:52:58 2235

原创 聊聊Dubbo3应用级服务发现模型

什么是服务发现服务发现,即消费端自动发现服务地址列表的能力,是微服务框架需要具备的关键能力,借助于自动化的服务发现,微服务之间可以在无需感知对端部署位置与IP地址的情况下实现通信。实现服务发现的方式有很多种,Dubbo 提供的是一种 Client-Based 的服务发现机制,通常还需要部署额外的第三方注册中心组件来协调服务发现过程,如常用的 Nacos、Zookeeper等,Dubbo 自身也提供了对多种注册中心组件的对接,用户可以灵活选择。Dubbo 基于消费端的自动服务发现能力,其基本工作原理如下

2022-01-19 18:12:25 932

转载 聊聊数据库优化的4大手段

原文链接:https://mp.weixin.qq.com/s/1MBHvtF_XN8g9uaqI-dQ6g

2021-12-25 16:02:12 885

原创 如何做好应用架构分层和模块化?

没有顶层设计、模块划分的应用就像一团打结的毛线,代码分支可能会跳来跳来,没有边界。很难理清楚内部的业务逻辑,更糟糕的是随着需求的堆积,日积月累更难理清楚内部的模块划分,所以从一开始就应该定好系统的模块,确定好边界之后才知道每一部分往哪里放。每次实现一个新需求内心都有一个层次树,大概会在哪个模块加什么东西,传统的MVC 模型在web 应用流行了很久,也很容易理解,下面我基于之前实现的一个系统做了些修剪和设计,形成了一个比较通用的分层架构。如下图:后面分别讲解每一个模块的职责。controller控制

2021-12-24 21:58:29 2127

原创 Arthas这么好用,你还不会用吗

Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?有什么办法可以监控到JVM的实时运行状态?

2021-11-25 18:20:20 1927 2

原创 从0到1搭建简单的灰度发布系统

什么是灰度发布系统灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行A/B testing,即让一部分用户继续用产品特性A,一部分用户开始用产品特性B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B上面来。灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度。灰度期:灰度发布开始到结束期间的这一段时间,称为灰度期。(来源于百度百科)灰度发布的好处提前获得目标用户的使用反馈根据反馈结果,做到查漏补缺优化产品体

2021-11-19 18:10:13 3072

原创 深度解析@Async引起的循环依赖

啊,昨晚发版又出现了让有头大的循环依赖问题,按理说Spring会为我们解决循环依赖,但是为什么还会出现这个问题呢?为什么在本地、UAT以及PRE环境都没有出现这个问题,但是到了PROD环境就出现了这个问题呢?本文将从事故时间线、及时止损、复盘分析等几个方面为大家带来详细的分析,干货满满!事故时间线本着"先止损、后复盘分析"的原则,我们来看一下这次发版事故的时间线。2021年11月16日晚23点00分00秒开始发版,此时集团的devops有点慢2021年11月16日晚23点03分01秒,收到发版失败

2021-11-17 18:12:19 4943 4

原创 对于分布式消息队列我有话说

消息中间件作为互联网常用的技术手段,能够进行服务解耦、削峰填谷、异步操作,虽然这些的确可以给我们的系统带来好处,但是如果使用不当也会带来不少的坑,本文以rabbitMQ为例来分享在使用在使用消息队列中遇到的一些坑以及解决方案。所以为分布式消息队列就是将消息分摊到各个节点上,所有节点上的消息汇总就是消息的总和。在了解今天正文内容之前,我们先大概了解一下消息队列的模型。从上面这张图可以看到,消息队列总共由发送者+队列+消费者组成。生产者在投放过程中消息丢失所谓生产者消息丢失指的是消息在生产者投放到队

2021-11-03 19:31:11 2476

原创 B站崩了、Facebook崩了,我们到底该怎么保证高可用

相信前一段时间的新闻大家都知道了,B站崩了三个半小时,Facebook全球崩了7个小时,那么作为工程师的我们到底应该怎么保证我们系统的稳定性和高可用呢?在了解以下思路和方案之前,我们先抛个砖,我们可以在两个层面保证高可用开发设计层面冗余:主备,负载均衡,failover取舍:降级,限流,熔断,超时控制运维层面灰度发、A/B Test故障演练监控报警异地多活背景以B站为例,我们来回顾一下B站宕机到恢复的时间线。2021年7月13日 晚上11点,B站主页崩溃App端

2021-10-27 15:39:28 2141

原创 基于ShardingSphere的Encrypt-JDBC数据脱敏实战

背景安全控制一直是治理的重要环节,数据脱敏属于安全控制的范畴。对互联网公司、传统行业来说,数据安全一直是极为重视和敏感的话题。数据脱敏是指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。涉及客户安全数据或者一些商业性敏感数据,如身份证号、手机号、卡号、客户号等个人信息按照相关部门规定,都需要进行数据脱敏。在真实业务场景中,相关业务开发团队则往往需要针对公司安全部门需求,自行实行并维护一套加解密系统,而当脱敏场景发生改变时,自行维护的脱敏系统往往又面临着重构或修改风险。此外,对于已经

2021-10-19 15:00:47 3051 2

原创 延时消息推送的正确姿势你get到了吗?

延时消息推送的应用场景想必大家都不陌生:自动收货订单10分钟后自动取消废话不多说,直接上代码。在 RabbitMQ 3.6.x 开始,RabbitMQ官方提供了延迟队列的插件,可以下载放置到RabbitMQ 根目录下的 plugins 下。延迟队列插件下载地址:https://github.com/rabbitmq/rabbitmq-delayed-message-exchangemaven依赖如下application.properties如下MQ的配置如下我们在 Exchange

2021-10-13 11:39:03 2369

原创 99%的人都能看懂的MQ补偿机制

补偿机制的意义假设有这样子一种场景:客户端请求 ---->空间结构微服务 ---->业主档案微服务 ---->房源微服务。这种调用链非常普遍。那么为什么需要考虑补偿机制呢?一次跨机器的通信可能会经过DNS 服务,网卡、交换机、路由器、负载均衡等设备,这些设备都不一定是一直稳定的,在数据传输的整个过程中,只要任意一个环节出错,都会导致问题的产生。而在分布式场景中,一个完整的业务又是由多次跨机器通信组成的,所以产生问题的概率成倍数增加。但是,这些问题并不完全代表真正的系统无法处理请求,所

2021-09-22 09:39:24 3796 1

转载 深入解析Dubbo3.0服务端暴露全流程

原文链接:https://mp.weixin.qq.com/s/nEhvPl7IWlQU2VfpXwZtOw背景随着云原生时代的到来,Dubbo3.0的一个很重要的目标就是全面拥抱云原生。正因如此,Dubbo3.0为了能够更好的适配云原生,将原来的接口级服务发现机制演进为应用级服务发现机制。基于应用级服务发现机制,Dubbo3.0能大幅降低框架带来的额外资源消耗,大幅提升资源利用率,主要体现在:单机常驻内存下降 75%能支持的集群实例规模以百万计的集群注册中心总体数据量下降超 90%目前关

2021-09-17 22:16:49 2716

原创 DDD指导微服务架构升级演进之路

上周组内针对楼盘词典的架构和演进方向做了一次内部头脑风暴,目前楼盘词典还是单体服务,随着业务的快速发展和数据资产的不断累积,单体服务很难在未来支撑更复杂的业务场景,同时也会在排查问题方面更加困难。针对这个痛点考虑将楼盘词典做微服务拆分,那么如何做好微服务的拆分、如何把控好微服务拆分的粒度,如何解决数据一致性问题以及在最小影响范围内进行架构升级等则是我们面临的难题。楼盘词典目前的架构从上面的这张图我们可以清洗的看到楼盘词典目前有三个核心的功能,分别是:空间服务:用来保存空间信息,比如城市、楼盘、分期、

2021-08-16 14:26:29 2904

原创 领域驱动设计基础

领域驱动设计(DDD) 是 Eric Evans 提出的一种软件设计方法和思想,主要解决业务系统的设计和建模。DDD 有大量难以理解的概念,尤其是翻译的原因,某些词汇非常生涩,例如:模型、限界上下文、聚合、实体、值对象等。实际上 DDD 的概念和逻辑本身并不复杂,很多概念和名词是为了解决一些特定的问题才引入的,并和面向对象思想兼容,可以说 DDD 也是面向对象思想中的一个子集。“如无必要,勿增实体”,我们先把 DDD 这些概念丢开,从一个案例出发,在必要的时候将这些概念引入。一个案例小王是一个软件公司

2021-07-26 18:04:29 3078

原创 G1这么强,你确定不了解一下?

中国武术有句名言:“内练一口气,外练筋骨皮”,修炼内功可以让自己比变得更强!本文将全面的带领大家了解一下G1这款垃圾收集器,在正式了解G1之前,我们先来回顾一下垃圾回收的相关基础知识。如何定位内存中不再使用的对象各位小伙伴都知道Java是支持垃圾对象自动回收,不需要开发者手动去进行垃圾对象回收,用起来真的是舒服的不要不要的。那么问题了,Java是怎么做到识别内存中不再使用的垃圾对象呢?通常有两种方法:引用计数法给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值+1;当引用失效时,计数器

2021-07-19 11:59:55 3691

转载 Apache Dubbo 3.0.0 正式发布 - 全面拥抱云原生

本文转载自微信公众号「阿里巴巴中间件」:https://mp.weixin.qq.com/s/5loawrCyKmN4HhK1lzy0Rw

2021-07-13 17:40:19 2816 1

原创 探秘ZGC

探秘ZGC

2021-06-16 14:55:23 3348

转载 JAVA并发都没搞明白,怎么进大厂?

本文转载自微信公众号「sowhat1412」https://mp.weixin.qq.com/s/2aNfF11-eou2Gkbi09cBPQ

2021-05-26 15:00:28 3526

原创 那些年我们用过的分布式锁,你都get到了吗

分布式锁的特性互斥性:和我们本地锁一样互斥性是最基本,但是分布式锁需要保证在不同节点的不同线程的互斥。可重入性:同一个节点上的同一个线程如果获取了锁之后那么也可以再次获取这个锁。锁超时:和本地锁一样支持锁超时,防止死锁。常见的分布式锁MySQLzookeeperRedis基于MySQL实现分布式锁基于zookeeper实现分布式锁基于Redis实现分布式锁...

2021-05-19 15:55:26 3740

原创 zookeeper的watcher机制

ZooKeeper 提供了分布式数据的发布/订阅功能。一个典型的发布/阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题对象,当这个主题对象自身状态变化时,会通知所有订阅者,使它们能够做出相应的处理。在 ZooKeeper 中,引入了 Watcher 机制来实现这种分布式的通知功能。 ZooKeeper 允许客户端向服务端注册一个 Watcher 监听,当服务端的一些指定事件触发了这个 Watcher,那么就会向指定客户端发送一个事件通知来实现分布式的通知功能。简单来说客户端在向z

2021-04-27 17:47:13 5733

原创 zookeeper的leader选举机制

leader选举是zookeeper中最重要的技术之一,也是保证分布式数据一致性的关键所在。leader选举分为服务器启动时选举和服务器运行期间选举。服务器启动时期的leader选举Leader 选举的时候,需要注意的一点是,隐式条件便是 ZooKeeper 的集群规模至少是2台机器,这里我们以3台机器组成的服务器集群为例。在服务器集群初始化阶段,当有一台服务器(我们假设这台机器的 myid 为1,因此称其为 Server1)启动的时候,它是无法完成 Leader 选举的,是无法进行 Leader 选举

2021-04-27 16:21:29 1530 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除