自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 分布式架构

首先是无状态前端机器不足以承载请求流量,需要进行水平扩展,一般QPS是千级。然后是关系型数据库无法承载读取或写入峰值,需要数据库横向扩展或引入nosql,一般是千到万级。之后是单机nosql无法承载,需要nosql横向扩展,一般是十万到百万QPS。最后是难以单纯横向扩展nosql,比如微博就引入多级缓存架构,这种架构一般可以应对百万到千万对nosql的访问QPS。当然面向用户的接口请求一般到不了这个量级,QPS递增大多是由于读放大造成的压力,但也属于高并发架构考虑的范畴。相关联的领域概念。

2024-12-09 16:47:30 751

原创 微服务架构设计

微服务(Microservice Architecture)是近几年流行的一种架构思想,关于它的概念很难一言以蔽之。究竟什么是微服务呢?简而言之,微服务架构风格是一种将单个应用程序作为一套小型服务开发的方法,每种应用程序都在自己的进程中运行,并与轻量级机制(通常是HTTP资源API)进行通信。这些服务是围绕业务功能构建的,可以通过全自动部署机制独立部署。这些服务的集中管理最少,可以用不同的编程语言编写,并使用不同的数据存储技术。

2024-11-13 11:19:24 902 1

原创 jvm-垃圾回收机制

顾名思义,垃圾回收就是释放垃圾占用的空间,那么在Java中,什么样的对象会被认定为“垃圾”?那么当一些对象被确定为垃圾之后,采用什么样的策略来进行回收(释放空间)?在目前的商业虚拟机中,有哪些典型的垃圾收集器?下面我们就来逐一探讨这些问题。以下是本文的目录大纲:一.如何确定某个对象是“垃圾”?二.典型的垃圾收集算法三.典型的垃圾收集器。

2024-08-05 09:45:03 1219

原创 JVM调优

堆内存调整参数如图所示:我们可以发现每一个区域都有一个可变的伸缩区,当我们的内存空间不足的时候,会在可变的范围内扩大内存空间,当我们的内存空间变得不紧张的时候我们再释放可变空间。在堆内存的调优之中我们要特别注意两个参数-Xms初始化内存分配大小,默认为物理内存的1/64,-Xmx 最大的分配内存默认为物理内存的1/4。查看jvm配置可使用下面的命令。

2024-08-01 16:09:55 789

原创 sping总览

轻量级的开源的J2EE框架。它是一个容器框架,主要实现了ioc,同时又通过aop实现了面向切面编程,它又是一个中间层框架(万能胶)可以起一个连接作用,比如说把mybatis和spring mvc粘合在一起运用,可以让我们的企业开发更快、更简洁。

2024-07-16 16:45:16 730

原创 Java高级特性

对比面向过程,是两种不同的处理问题的角度。面向过程更注重事情的每一个步骤及顺序,面向对象更注重事情有哪些参与者模型(对象)、及各自需要做什么(方法),及各自含有的特征(属性)。面向对象编程我个人理解就是:把一些特有的特征(属性)和行为(方法)封装在一个类里面,我们要去使用某个属性或者方法,就通过这个类来进行使用。比如:洗衣机洗衣服面向过程会将任务拆解成一系列的步骤(函数),1、打开洗衣机----->2、放衣服----->3、放洗衣粉>4、清洗----->5、烘干。

2024-07-05 09:14:25 768

原创 JVM-类加载机制

那么什么是类加载?Java的类加载,就是把字节码格式“.class”文件加载到JVM的方法区,并在JVM的堆区建立一 个java.lang.Class对象的实例,用来封装Java类相关的数据和方法。那Class对象又是什么呢?你可以 把它理解成业务类的模板,JVM根据这个模板来创建具体业务类对象实例。参考:https://gitee.com/daiwei-dave/core-java.git。

2024-06-25 11:36:59 989

原创 CAP与BASE分布式理论

CAP理论是说对于分布式数据存储,最多只能同时满足一致性(C,Consistency)、可用性(A, Availability)、分区容忍性(P,Partition Tolerance)中的两者。

2024-05-10 09:19:50 1172

原创 Java8 Labmbda 表达式

groupby方法有几个重载方法,上面使用的方法有三个参数第一个参数表示分组按照什么进行分类第二个参数表示分组结果最后用什么容器保存并返回,可以指定为LinkedHashMap,HashMap等第三个参数表示分类后,对应的分类的结果如何收集踩坑分享。

2024-05-06 11:22:06 429

原创 线程池核心原理与应用

线程池是一种多线程开发的处理方式,线程池可以方便得对线程进行创建,执行、销毁和管理等操作。主要用来解决需要异步或并发执行任务的程序。

2024-04-30 09:47:08 999

原创 计算机网络基础

那是因为 2MSL 是一份报文存在于网络中最长的时间,超过该时间到达的报文都将被丢弃,而如果客户端最后的确认报文于网络中丢失的话,服务端必将发起超时请求,重新发送第三次挥手动作,此时等待中的客户端就可随即重新发送一份确认请求。这是为什么客户端等待一个最长报文传输时间的原因。有人可能好奇为什么前面的各次请求都没有做超时等待而只最后一次数据发送做了超时等待?

2024-04-28 16:50:24 817

原创 java io模型

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

2024-04-07 11:13:57 971

原创 tomcat-连接器架构设计

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

2024-04-03 16:52:40 447

原创 网络io模型

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

2024-04-03 16:35:56 702

原创 HTTP协议

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

2024-03-19 16:43:28 195

原创 web容器导论

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

2024-03-19 16:37:14 396

原创 ElasticSearch架构设计

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

2024-03-13 10:15:52 1561

原创 mysql高可用架构设计

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

2024-03-04 13:50:48 1250

原创 mysql服务治理

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

2024-03-01 10:02:33 1353

原创 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 337

原创 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 1101

原创 数据库选型

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

2024-02-26 12:06:57 981 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 342

原创 mysql-MVCC

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

2024-02-23 14:28:57 943

原创 mysql-索引

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

2024-02-19 16:52:02 968

原创 mysql架构设计

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

2024-01-19 16:52:28 1334

原创 服务注册发现机制

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

2023-10-02 22:08:06 640

原创 服务链路追踪

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

2023-08-15 16:38:00 576

原创 服务限流治理

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

2023-08-04 09:15:48 765

原创 分布式配置中心导论

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

2023-07-14 09:04:47 163

原创 MyBatis- plus

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

2023-06-01 21:47:53 1935

原创 orm框架导论

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

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

原创 服务治理导论

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

2023-05-02 21:23:49 843

原创 架构设计-分布式ID

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

2023-04-29 22:24:38 2097

原创 高可用架构设计

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

2023-04-02 18:08:10 2747

原创 日志治理解决方案

【代码】日志设计。

2023-03-22 10:43:45 413

原创 分布式-负载均衡

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

2023-03-12 19:18:53 839

原创 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 598

原创 分布式事务Seata

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

2023-01-30 19:30:02 672

原创 架构设计导论

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

2023-01-16 19:53:00 1005

空空如也

空空如也

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

TA关注的人

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