摘要:
业务特点 瞬时并发量大:秒杀时会有大量用户在同一时间进行抢购,瞬时并发访问量突增 10 倍,甚至 100 倍以上都有。库存量少:一般秒杀活动商品量很少,这就导致了只有极少量用户能成功购买到。业务简单:流程比较简单,一般都是下订单、扣库存、支付订单 技术难点 现有业务的冲击:秒杀是营销活动中的一种, 阅读全文
摘要:
ByteBuf类:Netty的数据容器 ByteBuf 维护了两个不同的索引:① readerIndex:用于读取;② writerIndex:用于写入;起始位置都从0开始:名称以 read或者 write开头的方法会更新 ByteBuf 对应的索引,而名称以 set或者 get开头的操作不会。 阅读全文
摘要:
一、Sentinel 介绍 Sentinel 是阿里巴巴出品的面向分布式服务架构的轻量级流量控制组件,主要以流量为切入点,从限流,流量整形、熔断降级、系统负载保护等多个维度来保障微服务的稳定性。主页地址 Sentinel Hystrix resilience4j 隔离策略 信号量隔离(并发线程隔离) 阅读全文
摘要:
一、网络 问题:今天的大多数系统都会调用其他系统。您是否正在与第三方系统(支付网关,会计系统,CRM)集成?你在做网络服务电话吗?如果呼叫失败会发生什么?如果您要查询数据,则可以进行简单的重试。但是如果您发送命令会发生什么?我们举一个简单的例子: 1 var creditCardProcessor 阅读全文
摘要:
Skywalking 根据官方的解释,Skywalking是一个可观测性平台(Observability Analysis Platform简称 OAP)和应用性能管理系统(Application Performance Management 简称 APM)。提供分布式链路追踪、服务网格(Servi 阅读全文
摘要:
更多内容,前往 IT-BLOG 一、Nacos 简介 Nacos 是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。Nacos 使服务更容易注册,并通过 DNS或 HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防止向不健康的主机或服务实例发送 阅读全文
摘要:
固定窗口计数器 将时间划分为多个窗口,窗口内出现一次请求就将计数器加一,如果计数器超过了限制数量,则本窗口内后续请求都被丢弃当,时间到达下一个窗口时,计数器重置。 固定窗口计数器是最为简单的算法,但这个算法有时会出现通过请求量允许为限制的两倍。考虑如下情况:限制 1 秒内最多通过 5 个请求,在第 阅读全文
摘要:
我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。 一、平衡多路查找树(B-Tree) B-Tree是为磁盘等外存储设备设计的一种平衡查找树。因此在讲 B-Tree之 阅读全文
摘要:
更多内容,前往 IT-BLOG 消息送达语义是消息系统中一个常见的问题,主要包含三种语义:【1】At most once:消息发送或消费至多一次;【2】At least once:消息发送或消费至少一次;【3】Exactly once:消息恰好只发送一次或只消费一次;下面分别从生产者和消费者的角度来 阅读全文
摘要:
更多内容,前往 IT-BLOG HW(High Watermark):俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个 offset 之前的消息。分区 ISR 集合中的每个副本都会维护自身的 LEO(Log End Offset):俗称日志末端位移,而 ISR 集合中最 阅读全文
摘要:
更多内容,前往 IT-BLOG leader epoch 代表 Leader 的纪元信息(epoch),初始值为0。每当 Leader 变更一次,leader epoch 的值就会加1,相当于为 Leader 增设了一个版本号。每个副本中还会增设一个矢量 <LeaderEpoch >= StartO 阅读全文
摘要:
更多内容,前往 IT-BLOG 在了解 Kafka的事务之前,先说一下 Kafka中幂等和事务(Kafka 0.11.0.0版本引入的两个特性)以此来实现 Exactly once(精确一次)了解更多链接。 幂等:生产者在进行重试的时候有可能会重复写入消息,而使用 Kafka的幂等性功能之后就可以避 阅读全文
摘要:
更多内容,访问 IT-BLOG Kafka中实现延迟队列 在发送延时消息的时候并不是先投递到要发送的真实主题(real_topic)中,而是先投递到一些 Kafka 内部的主题(delay_topic)中,这些内部主题对用户不可见,然后通过一个自定义的服务拉取这些内部主题中的消息,并将满足条件的消息 阅读全文
摘要:
InnoDB页 将数据划分为若干个页(page),以页作为磁盘和内存之间交互的基本单位,InnoDB中页的大小一般为 16KB。也就是在一般情况下,一次最少从磁盘中读取16KB的内容到内存中,一次最少把内存中的16KB内容刷新到磁盘中。 InnoDB行格式 我们平时是以记录为单位来向表中插入数据的, 阅读全文
摘要:
Mysql 查询执行的过程链接 一、不要建立太多索引 我们虽然可以根据我们的喜好在不同的列上建立索引,但是建立索引是有代价的:【1】空间上的代价:每建立一个索引都要为它建立一棵 B+树,每一棵 B+树的每一个节点都是一个数据页,一个页默认会占用16KB的存储空间,一棵很大的 B+树由许多数据页组成, 阅读全文
摘要:
一、Zookeeper 实现机制 文件系统 + 通知机制 二、Zookeeper 高可用实现原理 一个 ZooKeeper 集群如果要对外提供可用的服务,那么集群中必须要有过半的机器正常工作并且彼此之间能够正常通信。如果想搭建一个能够允许 N 台机器 down 掉的集群,那么就要部署一个由 2*N+ 阅读全文
摘要:
更多内容,前往 IT-BLOG 如今,REST和微服务已经有了很大的发展势头。但是,REST规范中并没有提供一种规范来编写我们的对外 REST接口 API文档。每个人都在用自己的方式记录 api文档,因此没有一种标准规范能够让我们很容易的理解和使用该接口。我们需要一个共同的规范和统一的工具来解决文档 阅读全文
摘要:
通过一个示例,来说明索引的代价。如下,给 person_info表中创建一个联合索引 idx_name_birthday_phone_number。 1 CREATE TABLE person_info( 2 id INT NOT NULL auto_increment, 3 name VARCHA 阅读全文
摘要:
Semaphore 是一个计数信号量,必须由获取它的线程释放。Semaphore 是 Synchronized 的加强版,常用于限制可以访问某些资源的线程数量,例如通过 Semaphore限流。Semaphore 只有3个操作:初始化、增加、减少。 1 import java.util.Random 阅读全文
摘要:
更多内容,前往 IT-BLOG MySQL中支持的四种隔离级别 提到事务,你肯定会想到 ACID(Atomicity、Consistency、Isolation、Durability,即原子性、一致性、隔离性、持久性),来说说其中I,也就是“隔离性”。当数据库上有多个事务同时执行的时候,就可能出现脏 阅读全文
摘要:
更多内容,前往 IT-BLOG Leader选举是保证分布式数据一致性的关键所在。当 Zookeeper集群中的一台服务器出现以下两种情况之一时,需要进入 Leader选举:【1】服务器初始化启动;【2】服务器运行期间无法和 Leader保持连接; 服务器启动时期的 Leader选举 若进行 Lea 阅读全文
摘要:
更多内容,前往 IT-BLOG 一、什么是 Future和 FutureTask FutureTask 的 Future就源自于它的异步工作机制,如果我们在主线程中直接写一个函数来执行任务,这是同步的任务,也就是说必须要等这个函数返回以后我们才能继续做接下的事情,但是如果这个函数返回的结果对接下来的 阅读全文
摘要:
我只总结干货,不喜欢扯炉子。肯定还有很多方面没有涉及到,希望各位指出。ths~ 市面上流行的开源注册中心很多,耳熟能详的有 Eureka、Zookeeper、Nacos、Consul。我们在选型的时候也主要从这四个组件中进行筛选。下面就对我们内部的讨论内容进行整理: 第一个维度:开源公司的实力 Eu 阅读全文
摘要:
SpringBoot启动类上使用 @SpringBootApplication注解,该注解是一个组合注解,包含多个其它注解。和类定义(SpringApplication.run)要揭开 SpringBoot的神秘面纱,我们要从这两位开始就可以了。 1 @SpringBootApplication 2 阅读全文
摘要:
MyBatis上线前后的版本:上线前(3.2.3)上线后(3.4.6) 服务上线后,开始陆续出现了一些更新系统交互日志方面的报警,这属于系统的辅助流程,报警如下代码所示。我们发现都是跟 MyBatis相关的报警,说明在进行类型转换 [ibatis.type.TypeException]的时候,系统产 阅读全文
摘要:
更多内容,前往 IT-BLOG Select语句的执行过程会经过连接器、分析器、优化器、执行器、存储引擎,同样的 Update语句也会同样走一遍 Select语句的执行过程。 但是和 Select最大不同的是,Update语句会涉及到两个日志的操作 redo log(重做日志) 和 binlog 阅读全文
摘要:
一、慢查询优化基本步骤 【1】先运行看看是否真的很慢,注意设置SQL_NO_CACHE(查询时不使用缓存);【2】where条件单表查,锁定最小返回记录表。这句话的意思是把查询语句的 where都应用到表中返回的记录数最小的表开始查起,单表每个字段分别查询,看哪个字段的区分度最高;【3】explai 阅读全文
摘要:
摘要 性能优化涉及面很广。一般而言,性能优化指降低响应时间和提高系统吞吐量两个方面,但在流量高峰时候,性能问题往往会表现为服务可用性下降,所以性能优化也可以包括提高服务可用性。在某些情况下,降低响应时间、提高系统吞吐量和提高服务可用性三者相互矛盾,不可兼得。例如:增加缓存可以降低平均响应时间,但是处 阅读全文
摘要:
ZGC(The Z Garbage Collector)是JDK 11中推出的一款低延迟垃圾回收器,ZGC可以说源自于 Azul System 公司开发的C4收集器[基本不用调优]它的设计目标包括: 【1】停顿时间不超过10ms(STW减少了)目前一般线上环境运行良好的 Java应用 MinorG 阅读全文
摘要:
更多内容,前往 IT-BLOG 成为优秀的架构师是大部分初中级工程师的阶段性目标。优秀的架构师往往具备八种核心能力:编程能力、调试能力、编译部署能力、性能优化能力、业务架构能力、在线运维能力、项目管理能力和规划能力。 这几种能力之间的关系大概如下图。编程能力、调试能力、编译部署能力属于最基础的能力。 阅读全文
摘要:
我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析 MySQL中 InnoDB引擎的加 阅读全文