微服务架构
文章平均质量分 75
微服务架构
JavaEdge.
关注并私信我,获取更多大厂求职经验。《编程严选网》创始人
展开
-
访问数据库超时问题排障
根据故障时段在系统忙时,推断出故障是跟支持用户访问的功能有关。根据系统能在流量峰值过后自动恢复这一现象,排除后台服务被大量请求打死的可能性。根据CPU利用率曲线的规律变化,推断出可能和定时任务有关。在故障复盘阶段,除了对故障问题本身做有针对性的预防和改进以外,更重要的是,在系统架构层面进行改进,让整个系统更加健壮,不至于因为某一个小的失误,就导致全站无法访问。我给系统提出的第一个自动杀慢SQL的建议,它的思想是:系统的关键部分要有自我保护机制,避免外部的错误影响到系统的关键部分。原创 2023-01-05 22:29:09 · 2158 阅读 · 0 评论 -
跨系统实时同步数据解决方案
对于海量数据,必须要按照查询方式选择数据库类型和数据的组织方式,才能达到理想的查询性能。这就需要把同一份数据,按照不同的业务需求,以不同的组织方式存放到各种异构数据库中。因为数据的来源大多都是在线交易系统的MySQL数据库,所以我们可以利用MySQL的Binlog来实现异构数据库之间的实时数据同步。为了能够支撑众多下游数据库实时同步的需求,可通过MQ解耦上下游,Binlog先发送到MQ中,下游各业务方可以消费MQ中的消息再写入各自DB。原创 2023-01-01 23:24:26 · 3269 阅读 · 1 评论 -
ZooKeeper的适用场景
0 Github1 面试题ZooKeeper的适用场景?2 考点分析现在聊的面试主题,是分布式系统,其实跟你聊完Dubbo以及相关的一些问题,确认你现在分布式服务框架,RPC框架,基本都有一些认知.下面,可能开始要跟你聊分布式相关的其他问题了.分布式锁这个东西,还是很常用的,做Java开发,分布式系统,可能会有一些场景会用到.最常用的分布式锁就是ZooKeeper来实现.这个问题...原创 2019-07-10 11:23:02 · 1541 阅读 · 0 评论 -
微信支付流程时序图
支付文档:原创 2022-02-09 18:57:09 · 1430 阅读 · 0 评论 -
亿级流量的动态数据查询解决之道
DB主从分离、分库分表后,随并发和数据量增长,磁盘I/O成为系统性能瓶颈,于是缓存上场了!1 什么是缓存一种存储数据的组件,让对数据请求更快返回。某些场景下可能还会使用SSD作为冷数据的缓存。比如说360开源的Pika就是使用SSD存储数据解决Redis的容量瓶颈的。凡是位于速度相差较大的两种硬件之间,用于协调两者数据传输速度差异的结构,均可称为缓存。常见硬件组件延时:做一次内存寻址大概需要100ns,而一次磁盘查找则需10ms。使用内存作为缓存的存储介质相比以磁盘作为主要存储介质的DB,性原创 2022-01-29 16:59:41 · 1220 阅读 · 1 评论 -
一文搞懂RPC
1 RPC是什么remote procedure call (RPC) :远程过程调用过程 就是业务处理、计算任务,更直白理解,就是程序。(像调用本地方法一样调用远程的过程。)RPC采用Client-Server结构,通过request-response消息模式实现。1.1 RPC VS RMIRMI(remote method invocation)远程方法调用是oop领域中RPC的...原创 2019-11-14 13:21:16 · 2406 阅读 · 2 评论 -
Ehcache缓存设计原理
纯Java开源缓存框架,配置简单、结构清晰、功能强大,是一个非常轻量级的缓存实现,Hibernate里面就集成了相关缓存功能。Ehcache架构图核心概念cache manager缓存管理器,以前只允许单例,现在可多实例cache缓存管理器内可放置若干cache,存放数据的实质,所有cache都实现了Ehcache接口,这是一个真正使用的缓存实例。通过缓存管理器的模式,可在单个应用中轻松隔离多个缓存实例,独立服务于不同业务场景需求,缓存数据物理隔离,同时需要时又可共享。el原创 2021-02-03 21:05:15 · 1600 阅读 · 1 评论 -
高并发系统设计之道(一)- 方法论
随着业务发展,带来的是洪水般流量的增加,为确保系统可靠稳定,我们也得会“大禹治水”。万变不离其宗,目前主流其实方案都可归类如下三种思想:Scale-out:分治思想,采用集群将流量分散于各服务器。像数据库一主多从、分库分表、存储分片都是其思想的实际方案体现。缓存:使用缓存来提高系统的性能,就好比水库,抵御了大部分流量冲击,尽力保证下游的平安异步:有时未处理完成之前,可以让请求先返回,在数据准备好之后再通知请求方,即可在单位时间内处理更多请求。缓存几乎所有服务都会用到缓存,可谓是现实的万金油。缓原创 2020-09-22 03:29:26 · 1609 阅读 · 0 评论 -
单点登录原理及其实现方案
1 定义单点登录(Single sign-on,简称 SSO),一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有该属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。所以你会看到很多域名直接是sso.domain.com,也就是用来做单点登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一退出(single sign-off)就是指,只需要单一的退出动作,就可以结束对于多个系统的原创 2021-02-02 12:54:47 · 2805 阅读 · 0 评论 -
分布式事务简介
微服务系统的最大挑战设计安排Springcloud微服务系统实例Event Sourcing 系统实例读写服务分离适合人群预备基础环境参数学习成果学习成果-实战...原创 2019-03-01 16:45:35 · 1522 阅读 · 0 评论 -
大厂Java面试-分布式架构演进史
目标了解分布式架构中的相关概念初始分布式架构及意义分布式架构的发展过程和历史分布式架构的演进过程构建分布式架构最重要的因素1 分布式架构的发展历史1946 年情人节(2.14) , 世界上第一台电子数字计算机诞生在美 国宾夕法尼亚大学大学,它的名字是:ENIAC; 这台计算机占地 170 平米、重达 30 吨,每秒可进行 5000 次加法运算。 第一台电子计算机诞生以后,意味着一...原创 2019-05-22 00:42:15 · 1358 阅读 · 0 评论 -
别再纠结Redis/zookeeper,告诉你分布式锁的正确解决方案
在分布式系统中访问共享资源需要一种互斥机制,防止彼此之间的互相干扰,以保证一致性,就需要用到分布式锁。1 分布式场景下的数据一致性问题最常见的“秒杀”场景:某商品库存10,用户A想买6,用户B想要买5个。理想状态用户A先买走6,库存剩4,此时用户B应该无法购买5,给出数量不足提示真实情况用户A和B同时获取到商品剩10,A买走6,在A更新库存之前,B又买走了5,此时B更新库存,商品还剩5。不做处理将会出现各种不可预知的后果。那么在这种高并发多线程的情况下,解决问题最有效最普遍的方法就是给共享资原创 2020-05-12 16:04:47 · 1879 阅读 · 0 评论 -
分布式Session架构演示史
Session,客户端与服务器的一次交互过程,该过程可以是连续、时断时续。Sevlet时代(JSP),一旦用户与服务端交互,Tomcat就会为用户创建一个session,同时前端会有一个jsessionid,每次交互都会携带。服务器只要在接到用户请求时候,就能拿到jsessionid,并根据该ID在内存中找到对应的会话session,拿到session会话后,就可以操作会话。会话存活期间,我们就能认为用户一直处于正在使用着网站的状态,session超期过时,那么就可以认为用户已经离开网站,停止交互了。原创 2021-01-08 15:55:30 · 1131 阅读 · 0 评论 -
分布式服务接口请求顺序性保证
服务A发送的三个有序请求请求1、2、3,依次发到MQ,然后服务B的多个实例从MQ消费。俩请求过去了,落在不同机器上,可能插入请求因为某些原因执行慢一些,导致删除请求先执行了,此时因为没数据所以啥效果也没有;将比如某个订单id对应的请求都给分发到某机器,在那个机器上因为可能还是多线程并发执行,你得立即将某个订单id对应的请求扔一个内存队列,强制排队,确保顺序性。建议从业务逻辑上最好设计的这个系统不需要这种顺序性的保证,一旦引入顺序性保障,会导致系统复杂度上升,而且会带来效率低下,热点数据压力过大等问题。...原创 2021-02-03 14:48:53 · 1705 阅读 · 0 评论 -
Java微服务系统分布式事务解决方案
1 面试题分布式事务了解吗?你们如何解决分布式事务问题的?2 考点分析只要聊到做了分布式系统,必问分布式事务,若你对分布式事务一无所知的话,确实很坑,起码得知道有哪些方案,一般怎么来做,每个方案的优缺点是什么。现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配.你做系统肯定要用事务,那你用事务的话,分布式系统之后肯定要用分布式事务.先不说你搞过没有,起码你得明白有哪几...原创 2019-07-12 11:58:11 · 3134 阅读 · 0 评论 -
什么是Scale Up(纵向扩展)和Scale Out(横向扩展)?
1 Scale Out即Scale horizontally,横向扩展,向外扩展 。称为集群系统。指由多个节点组成的SAP HANA系统,这种系统的扩展主要以水平扩展方式(指增加节点的方式)来进行。比如:我们向原有的web、邮件系统添加一个新机器。2 Scale Up即Scale vertically)纵向扩展,向上扩展。称为单节点系统,指系统中只包括一个有效节点(如果需要HA时,可以将两个单节点以System Replication形式构成单节点的HA架构)。这种架构的系统只具有垂直扩展能力,原创 2020-09-22 02:24:12 · 9574 阅读 · 0 评论 -
分布式事务实战---XA两阶段提交(2PC)方案详解
XA,2PC,two-phase commit protocol。两阶段事务提交采⽤的是 X/OPEN 组织定义的DTP 模型所抽象的AP应用程序,Application Program,定义事务边界(即定义事务的开始和结束),并且在事务边界内对资源进行操作TM(事务管理器)Transaction Manager,负责分配事务唯一标识,监控事务的执行进度,并负责事务的提交、回滚等RM(资源管理器)Resource Manager,如数据库、文件系统等,并提供访问资源的方式XA 接口xa原创 2021-02-01 22:40:39 · 2927 阅读 · 0 评论 -
MySQL事务基础
1 什么是事务一种可靠、一致的方式,访问和操作数据库中数据的程序单元。2 ACID性质并非任意的对数据库的操作序列都是数据库事务。数据库事务拥有以下四个特性,习惯上被称之为ACID特性。原子性(Atomicity):事务作为一个整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行一致性(Consistency):事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一...原创 2020-03-15 00:44:31 · 2554 阅读 · 0 评论 -
阿里华为等大厂的本地缓存、分布式缓存解决方案详解
现在互联网应用(网站/App)的整体流程,可概括如图用户请求从界面(浏览器/App)到网络转发、应用服务再到存储(数据库或文件系统),然后返回到界面呈现内容。如图1所示,缓存的使用可以出现在1~4的各个环节中,每个环节的缓存方案与使用各有特点。1 缓存特征缓存是一个数据模型对象,有它的一些特征1.1 命中率命中率=返回正确结果数/请求缓存次数命中率问题是缓存中的一个非常重要的问题,它是衡量缓存有效性的重要指标。命中率越高,表明缓存的使用率越高。1.2 最大元素(或最大空间)缓存中可以存放原创 2020-07-19 20:27:45 · 2757 阅读 · 0 评论 -
如何设计一个RPC框架?
1 从使用者考虑用,户使用RPC框架开发过程时需要做什么?定义过程接口服务端实现过程客户端使用生成的stub代理对象2 设计客户端客户端生成过程接口的代理对象设计客户端代理工厂,用JDK动态代理即可生成接口的代理对象。思考1、在ClientStubInvocationHandler中 需完成哪些事情?2、将请求的内容编组为消息这件事由谁来做?3、消息协议是固定不...原创 2019-11-16 01:14:17 · 2091 阅读 · 0 评论 -
高可用架构设计(3) -电商商品详情页缓存背景及框架说明
0 导读我们这个教程,基于hystrix,如何来构建高可用的分布式系统的架构,项目实战模拟真实业务的这么一个小型的项目,来全程贯穿,用这个项目中的业务场景去一个一个的讲解hystrix高可用的每个技术纯讲hystrix,脱离实际的业务背景,听起来有点枯燥,大家学完了hystrix以后,可能没法完全感受到技术是如何融入我们的项目中的大背景:电商网站,首页,商品详情页,搜索结果页,广告页,促销...原创 2019-07-14 00:15:54 · 1840 阅读 · 0 评论 -
SpringCloud微服务实战(11)-微服务网关及其实现原理(Zuul)
服务之间直接调用,每个微服务都开放Rest API,并调用其他微服务的接口:随服务数量增多,若还是每个服务都直接对外部客户端提供接口,就会变得很复杂,最显然的就是每个服务自己实现鉴权。这就需要一个角色充当 request 请求统一入口,即服务网关。业务接口必须通过API网关暴露,是所有客户端请求的唯一入口。微服务之间通信也要通过API网关。网关是具体核心业务服务的看门神,相比于具体实现业务的系统服务,它是一个边缘服务,主要提供动态路由,监控,弹性,安全性等功能。从单体应用到多体应用的演化过程来讲解网关的原创 2020-05-26 22:13:55 · 2674 阅读 · 0 评论 -
SpringCloud安全实战(一)-API及其安全机制
我们的重点是完整知识体系达到系统性的思考API安全API?与因特网相连的端系统提供了一个应用程序接口(英语:Application Programming Interface,缩写:API;又称为应用程序编程接口)是软件系统不同组成部分衔接的约定。API规定了运行在一个端系统上的软件请求因特网基础设施向运行在另一个端系统上的特定目的地软件交付数据的方式。比方说:Ali...原创 2020-03-13 18:15:25 · 6086 阅读 · 4 评论 -
系统配置自动装载机制 - 分布式开发
1 @SpringBootApplication注解点击进入源码查看这个注解相当于三个注解的功能集成1.1 @EnableAutoConfiguration启用Spring Boot的自动bean加载机制1.2 @ComponentScan在应用程序所在的包上启用扫描配置组件扫描指令,以与 Configuration 类一起使用。提供与Spring XML的<con...原创 2019-12-01 00:31:38 · 1877 阅读 · 0 评论 -
Spring Cloud GateWay源码解析实战 - RoutePredicateHandlerMapping
package org.springframework.cloud.gateway.handler;import java.util.function.Function;import reactor.core.publisher.Mono;import org.springframework.cloud.gateway.config.GlobalCorsProperties;imp...原创 2019-12-10 02:10:04 · 2685 阅读 · 0 评论 -
SpringCloudGateway限流原理与实践
缓存、降级和限流是开发高并发系统的三把利器。缓存的目的是提升系统访问速度和增大系统能处理的容量,可谓是抗高并发流量的银弹降级是当服务出现问题或者影响到核心流程的性能则需要暂时屏蔽,待高峰或者问题解决后再打开而有些场景并不能用缓存和降级来解决,比如稀缺资源、写服务、频繁的复杂查询,因此需有一种手段来限制这些场景的并发/请求量,即限流。限流的目的是通过对并发访问/请求进行限速,或对一个时间窗口内的请求进行限速来保护系统。一旦达到限制速率则可以拒绝服务、排队或等待、降级。一般开发高并发系统常见的限流原创 2020-07-26 20:16:58 · 2767 阅读 · 0 评论 -
Spring Cloud GateWay 源码解析实战 - FilteringWebHandler(更新ing)
package org.springframework.cloud.gateway.handler;import java.util.ArrayList;import java.util.List;import java.util.stream.Collectors;import org.apache.commons.logging.Log;import org.apache.com...原创 2019-12-10 02:09:02 · 2557 阅读 · 2 评论 -
开发SpringCloud微服务三年,我才知道@EnableEurekaServer注解到底做了什么
全是干货的 Java 技术仓库:https://github.com/Wasabi1234/Java-Interview-Tutorial当你在启动类上添加了启动 Eureka 服务注册中心注解时,到底发生了什么呢?激活eureka服务器相关配置EurekaServerAutoConfiguration的注解EurekaServerMarkerConfiguration点击到这里,我们发现 spring.factories文件注意到如下注解@ConditionalOnBean .原创 2020-05-10 04:56:01 · 4735 阅读 · 4 评论 -
Spring Cloud Alibaba 实战(3) - 微服务拆分与编写
1 概述1.1 单体架构vs微服务架构单体架构是什么微服务是什么微服务特性微服务全景架构图微服务优缺点微服务适用场景1.2 业务分析与建模项目功能演示与分析微服务拆分项目架构图数据库设计API文档1.3 编写微服务创建小程序创建项目编写用户微服务编写内容微服务2 单体应用一个归档包(例如war包)包含所有功能的应用程序,我们通常称为单体应用。而架...原创 2021-01-29 15:54:03 · 1566 阅读 · 3 评论 -
SpringCloudAlibaba之Sentinel-规则管理及推送模式(pull&push)
相关代码1 拉(pull)模式1.1 架构设计该模式的数据源(如本地文件、RDBMS 等)一般可写入。使用时需在客户端注册数据源:将对应读数据源注册至对应的 RuleManager,将写数据源注册至 transport 的 WritableDataSourceRegistry 中。以本地文件数据源为例:public class FileDataSourceInit implements InitFunc { @Override public void init() throws原创 2020-10-08 21:11:59 · 2115 阅读 · 1 评论 -
SpringCloudAlibaba之Sentinel(一)- 实现容错
本章主要讲解Sentinel,介绍这个之前先讲解容错的常见手段,然后快速入门Sentinel内容主要包括,限流规则,降级规则,集群限流,搭建生产级Sentinel,最后进行Sentinel核心源码分析.1 雪崩效应系统依赖的某个服务发生延迟或者故障,数秒内导致所有应用资源(线程,队列等)被耗尽,造成所谓的雪崩效应cascading failure(级联失效 / 级联故障)2 常见容错方案2.1 超时模式一种最常见的容错模式常见的有设置网络连接超时时间,一次RPC的响应超时时间等。在分原创 2020-05-13 09:41:23 · 2041 阅读 · 2 评论 -
SpringCloud微服务实战(1)-简介
微服务是一种架构风格:一系列微小的服务共同组成跑在自己的进程每个服务为独立的业务开发独立部署分布式的管理1 微服务架构简介1.1 起点和终点起点既有架构的形态终点好的架构不是设计出来的,而是进化而来的,一直在演进ing单一应用架构=》垂直应用架构=》分布式服务架构=》流动计算架构1.2 需考虑因素什么不适合微服务?系统中包含很多很多强事务场景业务相对稳定,迭代周期长访问压力不大,可用性要求不高1.3 原则沟通的问题会影响系统设计(康威定律)Organiz原创 2021-01-29 18:49:27 · 1145 阅读 · 0 评论 -
阿里Sentinel核心源码解析-责任链模式最佳实践(下)
NodeSelectorSlot首先,链中第一个处理节点是 NodeSelectorSlot。// key 是 context name, value 是 DefaultNode 实例private volatile Map<String, DefaultNode> map = new HashMap<String, DefaultNode>(10);@Overridepublic void entry(Context context, ResourceWrapper r原创 2020-12-20 16:36:59 · 1544 阅读 · 0 评论 -
关于Eureka 2.x,别再人云亦云了!
最近朋友圈被Eureka 2.x停止开发的新闻刷屏,例如:Eureka 2.0 开源工作宣告停止,继续使用风险自负 凉凉了,Eureka 宣布闭源,Spring Cloud 何去何从?关于第二篇,我想说,这是在造谣。不妨来看一下官方的言论:The open source work on eureka 2.0 has been discontinued. The code ba...转载 2020-01-13 22:33:48 · 5930 阅读 · 0 评论 -
SpringCloud启动报错ClassNotFoundException: named/NamedContextFactory /environment/EnvironmentChangeEvent
添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId></dependency>原创 2020-10-07 19:27:57 · 1932 阅读 · 0 评论 -
SpringCloud微服务实战(5)-Feign应用通信
0 课程导学Hi!大家好~我叫JavaEdge,是你在博学谷学习互动编程课程的老师。从现在开始,我们一起学习 Feign。什么是Feign?先看看谷歌翻译的说法:伪装?这是什么意思呢?因为Feign的作用就是可以隐藏Rest请求,伪装成类似SpringMVC的Controller。这样我们就不必再亲手拼接url、参数等,如此便可解放我们的键盘,有更多时间陪对象了。你肯定要问了,为什么Feign这么火,大家都喜欢用呢?因为它是 SpringCloud 官方推荐的组件,我们知道,SpringClou原创 2021-01-10 18:37:00 · 1325 阅读 · 0 评论 -
SpringCloud实战 - Hystrix
1.背景目前对于一些非核心操作,如增减库存后保存操作日志 发送异步消息时(具体业务流程),一旦出现MQ服务异常时,会导致接口响应超时,因此可以考虑对非核心操作引入服务降级、服务隔离。2.Hystrix说明官方文档 [https://github.com/Netflix/Hystrix/wiki]hystrix是netflix开源的一个容灾框架,解决当外部依赖故障时拖垮业务系统、甚至引起雪...原创 2019-12-01 19:46:52 · 1881 阅读 · 0 评论 -
Spring-Cloud-Alibaba-Nacos配置管理
该技术类似Spring Cloud Config。1 配置管理的意义现实的痛点不同环境,不同配置配置属性动态刷新为解决痛点,常用方案是引入配置服务器,架构如下引入依赖写配置(约定大于配置),要谨遵如下映射关系图哦创建新的bootstrap.yml配置文件在NACOS操作面板配置启动内容中心2 配置的动态刷新修改配置后,应用可动态刷新配置,而无需重启应用添加 @RefreshScope 注解即可回滚Bug不要回滚到初始状态! Nacos 至今未解决。原创 2021-02-20 20:51:42 · 1447 阅读 · 0 评论 -
Spring Cloud Gateway源码解析实战 - 路由工厂
1、基于日期时间的断言工厂基于日期时间的断言工厂主要是通过日期时间对请求进行断言,判断请求时间是否符合配置的时间,实现类主要有三种,分别如下:AfterRoutePredicateFactory:接收一个日期参数判断请求时间是否在配置时间之后; BeforeRoutePredicateFactory:接收一个日期参数,判断请求日期是否在指定日期之前; BetweenRoutePre...原创 2019-12-10 23:21:40 · 2342 阅读 · 0 评论 -
Kafka的安装与入门基础
0 Java消息服务(Java Message Service,JMS)Java消息服务(Java Message Service,JMS)应用程序接口是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持。Java消息服务的规范包括两种消息模式...原创 2019-02-27 20:23:49 · 1754 阅读 · 0 评论