自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

翻译 RabbitMQ入门(下)

Fanout这种类型非常简单,正如从名称中猜到的那样,它是将接收到的所有消息广播到它知道的所有队列中,系统中默认有些exchange类型上一节中的我们的日志系统将所有消息广播给所有消费者,对此我们想做一些改变,例如我们希望将日志消息写入磁盘的程序仅接收严重错误(errros),而不存储哪些警告(warning)或信息(info)日志 消息避免浪费磁盘空间。

2024-07-15 22:31:43 105

翻译 那些年让你迷惑的阻塞、非阻塞、异步、同步

在IT圈混饭吃,不管你用什么编程语言、从事前端还是后端,阻塞、非阻塞、异步、同步这些概念,都需要清晰地掌握,否则,怎么与面试官谈笑风生(chui niu pi)?但是,掌握这些概念又不是非常容易,尤其对非科班出身的,更加困难。本文试图给出一个清晰简明但不失深刻的介绍,希望对大家有所帮助。上面,我们从完成输入时,进程与内核的交互方式的角度分析了不同的I/O解决方案,在这个过程中,解释清楚了阻塞、非阻塞、同步、异步的概念。

2024-07-12 16:47:53 127

翻译 最详细排序解析,七大排序

lgN在这里为log2N简写为了方便描述,本文默认用int类型比较,从小到大排序本文排序算法以java语言实现本文的排序都是比较排序比较次数和赋值和交换次数有的排序不好分析,可能不准确上面详细介绍了七种排序的实现细节和特点,下面的表格总结了七种排序的各种特征。其中插入排序,选择排序,冒泡排序都是简单排序,时间复杂度是O(N2),其中插入排序和冒泡排序适合原始序列有序的数组,选择排序的交换和赋值次数会比较少,可以根据不同环境和数据的实际情况和长度选择具体的排序。

2024-07-01 18:06:59 115

翻译 不搞清这8大算法思想,刷再多题效果也不好的

算法和数据结构一直以来都是程序员的基本内功,可以说没有数据结构的基础建设和算法加持,也就没有这将近八十年的信息革命时代。数据结构可以看作是算法实现的容器,通过一系列特殊结构的数据集合,能够将算法更为高效而可靠地执行起来。算法的应用不单只体现在编程中。狭义的来讲,算法可看作是数据传递和处理的顺序、方法和组成方式,就像是各种排序算法等。而广义的来讲,算法更像是一种事物运行的逻辑和规则。太阳东升西落,海水潮汐潮流,月儿阴晴圆缺,这些或许都可以看似一种算法,只不过执行者不是电子计算机,而是自然万物。聊远了。

2024-06-28 16:29:41 118

翻译 24张图,九大数据结构安排得明明白白!

数据结构想必大家都不会陌生,对于一个成熟的程序员而言,熟悉和掌握数据结构和算法也是基本功之一。数据结构本身其实不过是数据按照特点关系进行存储或者组织的集合,特殊的结构在不同的应用场景中往往会带来不一样的处理效率。常用的数据结构可根据数据访问的特点分为线性结构和非线性结构。线性结构包括常见的链表、栈、队列等,非线性结构包括树、图等。数据结构种类繁多,本文将通过图解的方式对常用的数据结构进行理论上的介绍和讲解,以方便大家掌握常用数据结构的基本知识。

2024-06-26 10:55:02 64

翻译 RabbitMQ入门(上)

MQ(message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是 message 而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ 是一种非常常 见的上下游「逻辑解耦 + 物理解耦」的消息通信服务。使用了 MQ 之后,消息发送上游只需要依赖 MQ,不用依赖其他服务。RabbitMQ 是一个消息中间件:它接受并转发消息。

2024-06-16 13:07:15 102

翻译 JVM如何调优

方式一:查看日志方式2:强制触发Full GC。

2024-06-02 16:03:59 69

翻译 Java 性能优化的 45 个细节

在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。

2024-05-15 18:02:55 82

翻译 ShardingSphere-Sharding-Proxy

Sharding-Proxy是ShardingSphere的第二个产品,定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端(如:MySQL Command Client, MySQL Workbench等操作数据,对DBA更加友好。向应用程序完全透明,可直接当做MySQL使用适用于任何兼容MySQL协议的客户端。

2024-05-14 00:14:10 1055

翻译 面试题:java 泛型详解-绝对是对泛型方法讲解最详细的,没有之一

泛型在Java中有很重要的地位,在面向对象编程及各种设计模式中有非常广泛的作用,什么是泛型?为什么要使用泛型?泛型,即“参数化类型”,一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数。此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。泛型的本质是为了参数化类型(在不创建新的类型的情况下,通过泛型指定不同类型来控制形参具体限制的类型)。

2024-05-13 16:55:22 67

翻译 ShardingSphere-广播表

广播表指所有的分片数据源中都存在的表,表结构及其数据在每个数据库中均完全一致。适用于数据量不大且需要与海量数据的表进行关联查询的场景,例如:字典表。插入、更新操作会实时在所有节点上执行,保持各个分片的数据一致性查询操作,只从一个节点获取可以跟任何一个表进行 JOIN 操作。

2024-05-12 12:46:20 482

翻译 ShardingSphere-多表关联

例如:t_order 表和 t_order_item 表,均按照 order_no分片,并且使用 order_no进行关联,则此两张表互为绑定表关系。server-order0的db_order上有t_order0、t_order1、t_order_item0、t_order_ item1。server-order1的db_order上有t_order0、t_order1、t_order_item0、t_order_ item1。order表、order_item表的分片规则是一样的。

2024-05-11 22:56:49 725

翻译 互联网架构实践心得 (九)—架构评审一百问和设计文档五要素

API 的详细定义可以由 Swagger UI、Spring REST Doc、Miredot 等等工具生成,这些生成的接口是按照代码来组织层次关系的,只能体现接口的参数定义不能体现接口的形态等,是没有思想的,不适合用来阅读,只适合用来参考。分类,按业务功能的分类,按受众的分类等等形式(图上不同的颜色),同步还是异步(结果不在响应中,单独的回调返回),单条还是批量,数据接口还是页面调用等等重要性(图上文字后的星号),比如重点标记主流程的接口。

2024-05-11 16:51:46 149

翻译 ShardingSphere-mysql水平分片

当单表记录达到500万条或磁盘空间占用达2GB时需要考虑水平分表。水平分表是按行切分为多个表,若放在同一个服务器里能够满足性能要求就不用分库。若不能满足要求就要分库了,将表放在不同的服务器上。

2024-05-09 20:29:15 231

翻译 互联网架构实践心得 (四)—简单好用的监控六兄弟

这里所说的六兄弟只指 ELK 套件()以及 TIG 套件上图显示了两套独立的体系,ELK 和 TIG(TIG 是我自己编出来的,网上没有类似于 ELK 这种约定俗成的说法):这两套体系都由收集器+存储+展示网站构成,青绿色的收集器,蓝绿色的存储,红色的展示网站。这两套体系都有免费的组件可以使用,安装配置也相对简单(当然公司也要赚钱,他们肯定都主推 Cloud 版本,一般也不会用 Cloud 版本,肯定本地部署)。ELK 体系更多用于日志类数据的收集、保存、搜索、查看、报警。

2024-04-24 17:09:19 182

原创 【云原生 • Docker】 ELK 8.4.3 docker 保姆级安装部署详细步骤

之前我们已经使用过软件进行过安装了,不知道的可以看我之前写的文章ELK日志系统搭建完整详细步骤ELK主要由ElasticSearch、Logstash和Kibana三个开源工具组成,还有其他专门由于收集数据的轻量型数据采集器Beats。Elasticsearch :分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。

2024-04-21 15:15:16 1070 1

翻译 ShardingSphere-mysql 垂直分库

垂直分库,将业务上不相关,即不需要join操作的表划分到不同的库。

2024-04-11 22:11:23 120

原创 ShardingSphere-ShardingSphere读写分离和数据脱敏

读写分离虽然可以提升系统的吞吐量和可用性,但同时也带来了数据不一致的问题,包括多个主库之间的数据一致性,以及主库与从库之间的数据一致性的问题。水平分片和读写分离联合使用,能够更加有效的提升系统性能, 下图展现了将分库分表与读写分离一同使用时,应用程序与数据库集群之间的复杂拓扑关系。在数据量不是很多的情况下,我们可以将数据库进行读写分离,以应对高并发的需求,通过水平扩展从库,来缓解查询的压力。读写分离是通过主从的配置方式,将查询请求均匀的分散到多个数据副本,进一步的提升系统的处理能力。

2024-04-09 21:45:42 980

原创 互联网架构实践心得 (六)—给飞机换引擎和安全意识十原则

这种方式的迁移是需要有短暂的停机的,两个脚本的执行和验证需要一段时间(数据量大的话导数据费时),如果希望尽可能减少停机时间的话,可以采用两段走的方式,先同步今天前的99.9%的数据到新数据库,在停机后再同步今天发生的那0.1%的数据,极端点希望彻底不停机的话,需要让业务同时走两套系统进行双写,这种方案大大增加了复杂度,但是可以换来几乎 0 停机的时间,除非是需要 24 小时在线的金融系统,一般不会考虑新老系统双活的方案。第二方面说的是,后端往往会返回更多的数据给前端,前端选择需要的数据进行呈现,有的时。

2024-04-07 18:24:01 588

翻译 互联网架构实践心得 (三)—相辅相成的存储五件套

这里所说的五件套是指关系型数据库索引型数据库时序型数据库文档型数据库和缓存型数据库。这里只是说明了我们可以这么来搭配这些类型的数据库,不是说我们所有的应用都需要用到这些类型的数据库。同步写服务负责第一时间把重要的数据落地和落缓存。异步写服务通过监听 MQ 来感知数据的变化,然后重新读取最新的数据来把数据写入其它次要数据源,比如文档性数据库和索引型数据库,需要的话可以在缓存中回写一个状态。由一个专门的数据查询服务来根据需求做数据路由,根据需求和性能因素,从不同的数据源读取数据。

2024-04-02 14:34:47 81

翻译 互联网架构实践心得 (二)—屡试不爽的架构三马车

这里所说的三驾马车是指微服务消息队列定时任务。如下图所示,这里是一个三驾马车共同驱动的一个立体的互联网项目的架构。不管项目是大是小,这个架构模板的形态一旦定型了之后就不太会变,区别只是我们有更多的服务有更复杂的调用,更复杂的消息流转,更多的Job。整个架构整体是可扩展的,而且不会变形,这个架构可以在很长的一段时间内无需有大的调整。图上画了虚线框的都代表这个模块或项目是不包含太多业务逻辑的,纯粹是一层皮(会调用服务但是不会触碰数据库)。

2024-04-02 14:33:34 101

翻译 ShardingSphere-ShardingSphere基本介绍及核心概念

分布式数据库中间件(Distributed Database Middleware,检测DDM),是一款分布式关系型数据库,采用先进的存储计算分离架构,实现并发,计算,数据存储三个方面均可线性扩展,专注于解决数据库分布式扩展问题,突破了传统数据库的容量和性能瓶颈,实现海量数据高并发访问,其核心的优势是提供数据库水平扩展能力。

2024-03-31 22:39:16 8319

翻译 互联网架构实践心得 (十)—数据的权衡和折腾

本文站在数据的维度谈一下在架构设计中的一些方案对数据的权衡以及数据流转过程中的折腾这两个事情。最后进行系列文章的总结和之后系列文章写作计划的一些展望。

2024-03-28 18:12:39 57

翻译 互联网架构实践心得 (七)——三十种架构设计模式

设计模式是前人通过大量的实践总结出来的一些经验总结和最佳实践,在经过多年的软件开发实践之后,回过头来去看23种设计模式你会发现很多平时写代码的套路和OOP的套路和设计模式里的总结的类似,这也说明了你悟到的东西和别人悟到的一样,经过大量实践总能趋向性得到出一些最佳实践的结论,架构设计也是一样。这里结合自己的理解分析一下微软给出的云架构的一些模式。话说微软干这方面的事情真的很厉害,之前翻译过的《微软应用架构指南》写的也很不错。。

2024-03-27 14:33:01 227

翻译 前端案例:基于el-table和el-pagination实现数据的分页效果

Element,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。

2024-03-24 00:33:57 2008

翻译 springboot集成Druid,配置详解新手必须读

Druid是Java语言中最好的数据库连接池。Druid能够提供强大的监控和扩展功能。Druid也是配置最简单使用最方便的一种连接池。Druid是阿里巴巴开源平台上的一个项目,整个项目由数据库连接池、插件框架和SQL解析器组成。该项目主要是为了扩展JDBC的一些限制,可以让程序员实现一些特殊的需求,比如向密钥服务请求凭证、统计SQL信息、SQL性能收集、SQL注入检查、SQL翻译等,程序员可以自由选择。

2024-03-21 10:49:12 6980 2

翻译 基于Docker搭建Prometheus

Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud公司开发的。随着发展,越来越多公司和组织接受采用Prometheus,社会也十分活跃,他们便将它独立成开源项目,并且有公司来运作。Google SRE的书内也曾提到跟他们BorgMon监控系统相似的实现是Prometheus。现在最常见的Kubernetes容器管理系统中,通常会搭配Prometheus进行监控。

2024-02-01 23:31:31 2236 5

翻译 微服务调用链追踪中心搭建

一个完整的微服务系统包含多个微服务单元,,各个微服务子系统存在互相调用的情况,形成一个调用链。一个客户端请求从发出到被响应经历了哪些组件、哪些微服务、请求总时长、每个组件所花时长等信息我们有必要了解和收集,以帮助我们定位性能瓶颈、进行性能调优,因此监控整个微服务架构的调用链十分有必要,本文将阐述如何使用Zipkin搭建微服务调用链追踪中心。

2024-01-23 21:56:12 214

翻译 Redis精通系列——Stream

Stream弥补了Redis作为MQ(message queue)技术选型上的不足之处;Redis 5.0发布的Stream相比Pub/Sub模块,Stream支持消息持久化,结合sentinel或cluster使其成为了一个比较可靠的消息队列。尽管我认为它很难成为公司MQ的技术选型产品,但是关于Stream的使用和特性(消费组),仍值得一探究竟。消息顺序存储消息ID序列化规则生成消息的遍历消息阻塞/非阻塞获取客户端分组消费消息消息确认机制消息异常机制消息队列监控。

2024-01-18 22:42:24 244

翻译 如何限流?在工作中是怎么做的?说一下具体的实现?

限流可以认为是服务降级的一种,限流就是限制系统的输入和输出流量已达到保护系统的目的,一般来说系统的吞吐量是可以被测算的,为了保证系统的稳定运行,一旦达到需要限制的阈值,就需要限制流量并采取一些措施以完成限制流量的目的。比如,延迟处理,拒绝处理,或者部分拒绝处理等等。

2024-01-16 18:19:35 159

翻译 Bitmaps-位图

Bitmaps 称为位图,它不是一种数据类型。网上很多视频教程把Bitmaps称为数据类型,应该是不正确的。Bitmaps 是Redis提供给使用者用于操作位的“数据类型”。Bitmaps 不是数据类型,底层就是字符串(key-value),byte数组。我们可以使用普通的get/set直接获取和设值位图的内容,也可以通过Redis提供的位图操作getbit/setbit等将byte数组看成“位数组”来处理Bitmaps 的“位数组”每个单元格只能存储0和1,数组的下标在Bitmaps中称为偏移量。

2024-01-14 22:05:35 109

翻译 Redis之zset实现滑动窗口限流

程序员设计了一个在每分钟内只允许访问1000次的限流方案,如下图01:00s-02:00s之间只允许访问1000次,这种设计最大的问题在于,请求可能在01:59s-02:00s之间被请求1000次,02:00s-02:01s之间被请求了1000次,这种情况下01:59s-02:01s间隔0.02s之间被请求2000次,很显然这种设计是错误的。从测试输出的数据可以看出,起到了限流的效果,从第11次以后的请求操作都是失败的,但是这个和我们允许的5次误差还是比较大的。指定时间T内,只允许发生N次。

2024-01-13 19:42:26 84

翻译 Sentinel(哨兵)

主从复制奠定了Redis分布式的基础,但是普通的主从复制并不能达到高可用的状态。在普通的主从复制模式下,如果主服务器宕机,就只能通过运维人员手动切换主服务器,很显然这种方案并不可取。针对上述情况,Redis官方推出了可抵抗节点故障的高可用方案——Redis Sentinel(哨兵)。Redis Sentinel(哨兵):由一个或多个Sentinel实例组成的Sentinel系统,它可以监视任意多个主从服务器,当监视的主服务器宕机时,自动下线主服务器,并且择优选取从服务器升级为新的主服务器。

2024-01-10 23:36:28 130

翻译 Redis集群详述(从服务内部讲解,这次看完真的懂了,面试官再怎么问也能轻轻松松!)

在1000个节点的时候仍能表现得很好并且可扩展性是线性的。没有合并操作(多个节点不存在相同的键),这样在 Redis 的数据模型中最典型的大数据值中也能有很好的表现。写入安全,那些与大多数节点相连的客户端所做的写入操作,系统尝试全部都保存下来。但是Redis无法保证数据完全不丢失,异步同步的主从复制无论如何都会存在数据丢失的情况。可用性,主节点不可用,从节点能替换主节点工作。关于Redis集群的学习,如果没有任何经验的弟兄们建议先看下这三篇文章(中文系列): Redis集群教程。

2024-01-08 21:25:20 109

翻译 Redis分布式基石——主从复制技术详述

主从复制是Redis分布式的基石,也是Redis高可用的保障。在Redis中,被复制的服务器称为主服务器(Master),对主服务器进行复制的服务器称为从服务器(Slave)。配置文件——redis.conf文件中,配置slaveof ip port命令——进入Redis客户端执行slaveof ip port启动参数—— ./redis-server --slaveof ip port。

2024-01-04 21:31:00 174

翻译 Redis精通系列——LFU算法详述(Least Frequently Used - 最不经常使用)

LRU有一个明显的缺点,它无法正确的表示一个Key的热度,如果一个key从未被访问过,仅仅发生内存淘汰的前一会儿被用户访问了一下,在LRU算法中这会被认为是一个热key。例如如下图,keyA与keyB同时被set到Redis中,在内存淘汰发生之前,keyA被频繁的访问,而keyB只被访问了一次,但是这次访问的时间比keyA的任意一次访问时间都更接近内存淘汰触发的时间,如果keyA与keyB均被Redis选中进行淘汰,keyA将被优先淘汰。

2024-01-03 20:31:47 727

翻译 Redis精通系列——info 指令用法

Redis提供了info指令,它会返回关于Redis服务器的各种信息和统计数值。在使用Redis时,时常会遇到一些疑难杂症需要我们去排查,这个时候我们可以通过info指令来获取Redis的运行状态,然后进行问题的排查。server: Redis服务器的一般信息clients: 客户端的连接部分memory: 内存消耗相关信息persistence: RDB和AOF相关信息stats: 一般统计replication: 主/从复制信息cpu: 统计CPU的消耗。

2024-01-02 23:26:59 764

翻译 如何设计一个高并发系统?

其实所谓的高并发,如果你要理解这个问题呢,其实就得从高并发的根源出发,为啥会有高并发?为啥高并发就很牛逼?我说的浅显一点,很简单,就是因为刚开始系统都是连接数据库的,但是要知道数据库支撑到每秒并发两三千的时候,基本就快完了。所以才有说,很多公司,刚开始干的时候,技术比较 low,结果业务发展太快,有的时候系统扛不住压力就挂了。当然会挂了,凭什么不挂?你数据库如果瞬间承载每秒5000/8000,甚至上万的并发,一定会宕机,因为比如 mysql 就压根儿扛不住这么高的并发量。所以为啥高并发牛逼?

2023-12-27 14:38:48 72

翻译 Redis必知必会之zset底层—Skip List跳跃列表(面试加分项)

跳表全称叫做跳跃表,简称跳表。跳表是一个随机化的数据结构,实质就是一种可以进行二分查找的有序链表。跳表在原有的有序链表上面增加了多级索引,通过索引来实现快速查找。跳表不仅能提高搜索性能,同时也可以提高插入和删除操作的性能。Skip List(跳跃列表)这种随机的数据结构,可以看做是一个二叉树的变种,它在性能上与红黑树、AVL树很相近;但是Skip List(跳跃列表)的实现相比前两者要简单很多,目前Redis的zset实现采用了Skip List(跳跃列表)(其它还有LevelDB等也使用了跳跃列表)。

2023-12-25 22:23:38 277

原创 Redis整合Lua脚本

Lua是一种用C语言编写而成的轻量级的脚本语言。

2023-12-18 22:23:29 2144

空空如也

空空如也

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

TA关注的人

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