自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 java io模型

在《Unix网络编程》一书中提到了五种IO模型,分别是:阻塞IO、非阻塞IO、多路复用IO、信号驱动IO以及异步IO。具体方面请参考我的另一篇博客。

2024-04-07 11:13:57 912

原创 tomcat-连接器架构设计

Tomcat的NioEndPoint组件实现了I/O多路复用模型,接下来我会介绍NioEndpoint的实现原理。

2024-04-03 16:52:40 382

原创 网络io模型

所谓的I/O就是计算机内存与外部设备之间拷贝数据的过程。我们知道CPU访问内存的速度远远高于外部设备,因此CPU是先把外部设备的数据读到内存里,然后再进行处理。请考虑一下这个场景,当你的程序通过 CPU向外部设备发出一个读指令时,数据从外部设备拷贝到内存往往需要一段时间,这个时候CPU没事干 了,你的程序是主动把CPU让给别人?还是让CPU不停地查:数据到了吗、数据到了吗…这就是I/O模型要解决的问题。

2024-04-03 16:35:56 608

原创 HTTP协议

HTTP协议是浏览器与服务器之间的数据传送协议。作为应用层协议,HTTP是基于TCP/IP协议来传递数据的(HTML文件、图片、查询结果等),HTTP协议不涉及数据包(Packet)传输,主要规定了客户端和服务器之间的通信格式。首先最基本的是,你要让服务端知道你的意图,你是想获取内容还是提交内容;都请求些什么内容呢?假如浏览器需要从远程HTTP服务器获取一个HTML文本,在这个过程中,浏览器实际上要做两件事情。第一步比较容易理解,浏览器从地址栏获取用户输入的网址和端口,去连接远端的服务器,这样就能通信了。

2024-03-19 16:43:28 156

原创 web容器导论

让我们先来简单回顾一下Web技术的发展历史,可以帮助你理解Web容器的由来。早期的Web应用主要用于浏览新闻等静态页面,HTTP服务器(比如Apache、Nginx)向浏览器返回静态HTML,浏览器负责解析HTML,将结果呈现给用户。随着互联网的发展,我们已经不满足于仅仅浏览静态页面,还希望通过一些交互操作,来获取动态结果,因此也就需要一些扩展机制能够让HTTP服务器调用服务端程序。于是Sun公司推出了Servlet技术。

2024-03-19 16:37:14 324

原创 ElasticSearch架构设计

领域专用语言Elasticsearch提供了基于JSON的DSL来定义查询。DSL由叶子查询子句和复合查询子句两种子句组成。

2024-03-13 10:15:52 1015

原创 mysql高可用架构设计

数据库中的数据在主库完成更新后,是异步同步到每个从库上的,这个过程有一个微小的时间差,这个时间差叫主从同步延迟。正常情况下,主从延迟非常小,不超过 1ms。但即使这个非常小的延迟,也会导致在某一个时刻,主库和从库上的数据是不一致的。应用程序需要能接受并克服这种主从不一致的情况,否则就会引发一些由于主从延迟导致的数据错误。主备切换可能是一个主动运维动作,比如软件升级、主库所在机器按计划下线等,也可能是被动操作,比如主库所在机器掉电。接下来,我们先一起看看主动切换的场景。

2024-03-04 13:50:48 888

原创 mysql服务治理

在数据库性能优化的过程中,了解IOPS(Input/Output Operations Per Second,即每秒输入/输出操作数)是至关重要的。IOPS是衡量数据库磁盘性能的重要指标之一,可以帮助我们了解数据库在处理输入输出操作时的效率和吞吐量。IOPS = 请求的IO总数 / 测试时间IOPS的数值受多个因素的影响,主要包括以下几个方面:1.硬件设备数据库的硬件设备对IOPS有着直接的影响。例如,硬盘类型(机械硬盘还是固态硬盘)、硬盘容量、硬盘转速等都会影响IOPS的数值。

2024-03-01 10:02:33 1061

原创 mysql基础

6一般情况下,我们创建的表的类型是InnoDB,如果新增一条记录(不重启mysql的情况下),这条记录的id是8;但是如果重启(上文中提到的)MySQL的话,这条记录的ID是5。因为InnoDB表只把自增主键的最大ID记录到内存中,所以重启数据库或者对表OPTIMIZE操作,都会使最大ID丢失。但是,如果我们使用表的类型是MylSAM,那么这条记录的ID就是8。因为MylSAM表会把自增主键的最大ID记录到数据文件里面,重启MYSQL后,自增主键的最大ID也不会丢失。

2024-02-28 15:06:27 287

原创 mysql事务

VALUES (4, 1100, 100000070001, 100000057004, 'dwtest2', '戴维test', 1, 1, 1, '2020-12-10 11:38:58', '2020-12-19 13:52:58', 0);VALUES (4, 1100, 100000070001, 100000057004, 'dwtest2', '戴维test', 1, 1, 1, '2020-12-10 11:38:58', '2020-12-19 13:52:58', 0);

2024-02-27 15:14:53 1007

原创 数据库选型

关系数据库经过几十年的发展后已经非常成熟,强大的 SQL 功能和 ACID 的属性,使得关系数据库广泛应用于各式各样的系统中,但这并不意味着关系数据库是完美的,关系数据库存在如下缺点。关系数据库缺点以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。

2024-02-26 12:06:57 889 1

原创 排序和查找算法

不稳定,时间复杂度最理想 O(nlogn) 最差时间O(n^2)2.选择排序:不稳定,时间复杂度 O(n^2)3.插入排序:稳定,时间复杂度 O(n^2)4。冒泡排序:稳定,时间复杂度 O(n^2)5。堆排序:不稳定,时间复杂度 O(nlog n)

2024-02-23 16:46:33 302

原创 mysql-MVCC

MVCC (Multiversion Concurrency Control),即多版本并发控制技术,它是通过读取历史版本的数据, 来降低并发事务冲突, 从而提高并发性能的一种机制读取数据时通过一种类似快照的方式将数据保存下来,这样读锁就和写锁不冲突了,不同的事务session会看到自己特定版本的数据版本链它使得大部分支持行锁的事务引擎,不再单纯的使用行锁来进行数据库的并发控制,取而代之的是把数据库的行锁与行的多个版本结合起来,只需要很小的开销,就可以实现非锁定读,从而大大提高数据库系统的并发性能。

2024-02-23 14:28:57 844

原创 mysql-索引

在数据十分庞大的时候,索引可以大大加快查询的速度,这是因为使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址,然后访问所在行相应的数据。索引是一个将索引列按照一定顺序排序,并维护到一种存储结构中如B+树或者hash列表中。在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。自我总结:索引其实就是一种维持一种特殊顺序的数据结构。

2024-02-19 16:52:02 269

原创 mysql架构设计

参考架构图1:第一层,即最上一层,所包含的服务并不是MySQL所独有的技术。它们都是服务于C/S程序或者是这些程序所需要的 :连接处理,身份验证,安全性等等。第二层值得关注。这是MySQL的核心部分。通常叫做 SQL Layer。在 MySQL据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断, sql解析,行计划优化, query cache 的处理以及所有内置的函数(如日期,时间,数学运算,加密)等等。各个存储引擎提供的功能都集中在这一层,如存储过程,触发器,视 图等。

2024-01-19 16:52:28 959

原创 服务注册发现机制

zk:CP设计(强一致性),目标是一个分布式的协调系统,用于进行资源的统一管理。当主节点crash后,需要进行leader的选举,在这个期间内,zk服务是不可用的(当然消费者可以缓存zk上注册的节点),并且在写数据时,同步到从节点阶段也是不可用的。eureka:AP设计(高可用),目标是一个服务注册发现系统,专门用于微服务的服务发现注册。Eureka各个节点都是平等的,不是主从架构。几个节点挂掉不会影响正常节点的工作,剩余的节点依然可以提供注册和查询服务。

2023-10-02 22:08:06 484

原创 服务链路追踪

skywalking是一个国产开源框架,2015年由吴晟开源 , 2017年加入Apache孵化器。skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。文档:中文文档:SkyWalking 文档中文版(社区提供)

2023-08-15 16:38:00 471

原创 服务限流治理

限流在日常生活中也很常见,比如节假日你去一个旅游景点,为了不把景点撑爆,管理部门通常会在外面设置拦截,限制景点的进入人数(等有人出来之后,再放新的人进去)。对应到计算机中,限流是从用户访问压力的角度来考虑如何应对故障,保护系统不会在过载的情况下出现问题,这就就需要限流。限流只允许系统能够承受的访问量进来,超出系统访问能力的请求将被丢弃。比如要搞活动,秒杀等,通常都会限流。

2023-08-04 09:15:48 519

原创 分布式配置中心导论

1.为了减轻数据库io压力,可能会将配置项存入到缓存,但配置项发生变更,无法立即通知缓存失效,需要人工手动清理缓存,效率比较低。在配置中心的设计上也是同样原理,可以直接在字典表注册我们需要的配置。轻量级实现分布式配置。

2023-07-14 09:04:47 126

原创 MyBatis- plus

使用saveBatch()方法时, MySQL JDBC驱动在默认情况下会无视executeBatch()语句,把我们期望批量执行的一组sql语句拆散,一条一条地发给MySQL数据库,批量插入实际上是单条插入,直接造成较低的性能。查看对应源码。

2023-06-01 21:47:53 976

原创 orm框架导论

hibernate的最大优点是不需要手写sql,这一点补充了mybatis需要手写sql语句的缺点,但是hibernate由于过度封装,丧失了其灵活性,面对变化莫测的需求,hibernate封装的sql无法满足业务需求,故也逐渐被淘汰。它整合了hibernate不用手写sql的优点,里面封装了大量常用的API,能够满足大部分的业务需求,同时对无法满足业务需求的API,他可以让程序员自己按照mybatis的风格进行手写,可以说到目前为止是orm框架的集大成者。

2023-05-02 21:53:41 117 1

原创 服务治理导论

服务降级:一般是从整体负荷考虑,就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值,这样做,虽然服务水平下降,但好歹,比直接挂掉要强,最关键的不会影响到相关的其他服务。另外一个常见的策略就是根据QPS限制,比如我知道我调用的一个db服务,qps是3000,那如果不限制,超过3000,db就可能被打爆。固定的速率,往里边放入令牌,如果桶满了,就把令牌丢掉,最后桶中可以保存的最大令牌数永远不会超过桶的大小。限流一般需要结合容量规划和压测来进行。

2023-05-02 21:23:49 765

原创 架构设计-分布式ID

比如单机 MySQL 数据库,前期因为业务量不大,只是使用单个数据库存数据,后期发现业务量一下子就增长,单机 MySQL 已经不能满足于现在的数据量,单机 MySQL 已经没办法支撑了,这时候就需要进行分库分表。

2023-04-29 22:24:38 1761

原创 高可用架构设计

存储高可用方案的本质都是通过将数据复制到多个存储设备,通过数据冗余的方式来实现高可用,其复杂性主要体现在如何应对复制延迟和中断导致的数据不一致问题。因此,对任何一个高可用存储方案,我们需要从以下几个方面去进行思考和分析:数据如何复制?各个节点的职责是什么?如何应对复制延迟?如何应对复制中断?常见的高可用存储架构有主备、主从、主主、集群、分区,每一种又可以根据业务的需求进行一些特殊的定制化功能,由此衍生出更多的变种。

2023-04-02 18:08:10 1808

原创 日志治理解决方案

【代码】日志设计。

2023-03-22 10:43:45 241

原创 分布式-负载均衡

当然,软件负载均衡的最大优势是便宜,一台普通的 Linux 服务器批发价大概就是 1 万元左右,相比 F5 的价格,那就是自行车和宝马的区别了。集群级别负载均衡:广州机房的负载均衡用的是 F5 设备,F5 收到用户请求后,进行集群级别的负载均衡,将用户请求发给 3 个本地集群中的一个,我们假设 F5 将用户请求发给了“广州集群 2”。而实际上任务分配并不只是考虑计算单元的负载均衡,不同的任务分配算法目标是不一样的,有的基于负载考虑,有的基于性能(吞吐量、响应时间)考虑,有的基于业务考虑。

2023-03-12 19:18:53 588

原创 shell编程

Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知道,shell 和 shell script 是两个不同的概念。由于习惯的原因,简洁起见,本文出现的 "shell编程" 都是指 shell 脚本编程,不是指开发 shell 自身。Shell 脚本(shell script),是一种为 shell 编写的脚本程序。

2023-01-31 18:15:12 561

原创 分布式事务Seata

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。其中,TC 为单独部署的 Server 服务端,TM 和 RM 为嵌入到应用中的 Client 客户端。管理分支事务处理的资源,与TC交谈以注册分支事务和报告分支事务的状态,并驱动分支事务提交或回滚。定义全局事务的范围:开始全局事务、提交或回滚全局事务。维护全局和分支事务的状态,驱动全局事务提交或回滚。

2023-01-30 19:30:02 560

原创 架构设计导论

它通过 Façade 服务适配不同的前端,通过服务组合和编排,组织和协调微服务。BFF 微服务可根据需求和流程变化,与前端应用版本协同发布,避免中台微服务为适配前端需求的变化,而频繁地修改和发布版本,从而保证微服务核心领域逻辑的稳定。企业级业务流程往往是多个微服务一起协作完成的,每个单一职责的微服务就像积木块,它。,微服务内的应用服务也是处理服务的组合和编排,那这二者有什么差异呢?BFF 位于中台微服务之上,主要职责是微服务之间的服务协调;BFF主要职责是处理微服务之间的服务组合和编排。

2023-01-16 19:53:00 880

原创 分布式-数据库治理

一、分布式数据库。

2023-01-16 19:31:22 881

原创 shiro

Apache Shiro 是 Java 的一个安全框架。目前,使用 Apache Shiro 的人越来越多,因为它相当简单,对比 Spring Security,可能没有 Spring Security 做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的 Shiro 就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。

2022-12-11 21:18:31 648

原创 Spring 循环依赖解决方案

循环依赖就是循环引用,就是两个或多个Bean相互之间的持有对方,比如A引用B,B引用C,C引用A,则它们最终反映为一个环。结论先行:1.构造器循环依赖----初始化失败2.field属性注入循环依赖----初始化成功3.field属性注入循环依赖(prototype)----初始化失败现象总结:同样对于循环依赖的场景,构造器注入和prototype类型的属性注入都会初始化Bean失败。因为@Service默认是单例的,所以单例的属性注入是可以成功的。

2022-11-24 18:10:24 4187 2

原创 微服务组件Sentinel

在服务提供者不可用的时候,会出现大量重试的情况:用户重试、代码逻辑重试,这些重试最终导致:进一步加大请求流量。一旦线程资源被耗尽,服务调用者提供的服务也将处于不可用状态, 于是服务雪崩效应产生了。大量的缓存不命中, 使请求直击后端,造成服务提供者超负荷运行,引起服务不可用。2、服务之间相互依赖,当服务A出现响应时间过长,影响到服务B的响应,进而产生连锁反应,直至影响整个依赖链上的所有服务,该如何处理?服务雪崩效应:因服务提供者的不可用导致服务调用者的不可用,并将不可用逐渐放大的过程,就叫服务雪崩效应。

2022-11-23 19:14:29 554

原创 微服务调用组件Feign

Feign是Netflix开发的声明式、模板化的HTTP客户端,其灵感来自Retrofit、JAXRS-2.0以及WebSocket。Feign可帮助我们更加便捷、优雅地调用HTTP API。Feign支持多种注解,例如Feign自带的注解或者JAX-RS注解等。Spring Cloud openfeign对Feign进行了增强,使其支持Spring MVC注解,另外还整合了Ribbon和Eureka,从而使得Feign的使用更加方便优势。

2022-11-22 11:21:37 727

原创 Ribbon核心原理

Spring Cloud Ribbon是基于Netflix Ribbon 实现的一套客户端的负载均衡工具,Ribbon客户端组件提供一系列的完善的配置,如超时,重试等。通过Load Balancer获取到服务提供的所有机器实例,Ribbon会自动基于某种规则(轮询,随机)去调用这些服务。Ribbon也可以实现我们自己的负载均衡算法。

2022-11-21 12:10:23 449

原创 NoSQL

关系数据库的表结构 schema 是强约束,操作不存在的列会报错,业务变化时扩充列也比较麻烦,需要执行 DDL(data definition language,如 CREATE、ALTER、DROP 等)语句修改,而且修改时可能会长时间锁表(例如,MySQL 可能将表锁住 1 个小时)。以微博的关注关系为例,“我关注的人”是一个用户 ID 列表,使用关系数据库存储只能将列表拆成多行,然后再查询出来组装,无法直接存储一个列表。列式数据库:解决关系数据库大数据场景下的 I/O 问题,以 HBase 为代表。

2022-11-20 22:53:20 307

原创 raft协议

即 client 发送过来的数据均先到达 Leader 节点,Leader 接收到数据后,先将数据标记为 uncommitted 状态,随后 Leader 开始向所有 Follower 复制数据并等待响应,在获得集群中大于 N/2 个 Follower 的已成功接收数据完毕的响应后,Leader 将数据的状态标记为 committed,随后向 client 发送数据已接收确认,在向 client 发送出已数据接收后,再向所有 Follower 节点发送通知表明该数据状态为committed。

2022-11-20 17:46:55 197

原创 微服务组件nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

2022-11-20 17:19:45 2576

原创 Spring Cloud Alibaba

Spring Cloud Alibaba 致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。依托 Spring Cloud Alibaba,您只需要添加一些注解和少量配置,就可以将 Spring Cloud 应用接入阿里微服务解决方案,通过阿里中间件来迅速搭建分布式应用系统。此外,阿里云同时还提供了 Spring Cloud Alibaba 企业版。

2022-11-19 12:24:00 131

原创 SPI机制

SPI (Service Provider Interface),主要用于扩展的作用。举个例子来说,假如有一个框架有一个接口,他有自己默认的实现类,但是在代码运行的过程中,你不想用他的实现类或者想扩展一下他的实现类的功能,但是此时你又不能修改别人的源码,那么此时该怎么办?这时spi机制就有了用武之地。

2022-11-06 22:42:33 460 1

空空如也

空空如也

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

TA关注的人

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