系统架构
朱小厮
你知道的越多 你不知道的也就越多
展开
-
原创 | 科普一个 Star 数为 28.5k 的云原生网关
点击上方“朱小厮的博客”,选择“设为星标”后台回复"加群",加入新技术群Traefik (发音和 traffic 相同,采用 Golang 编写)是一个云原生的新型的 H...原创 2020-05-03 10:08:00 · 1065 阅读 · 0 评论 -
原创 | Nginx 架构原理科普
点击上方“朱小厮的博客”,选择“设为星标”后台回复"1024"领取公众号专属资料Nginx(发音为“engine X”)是由俄罗斯人 Igor Sysoev 编写的一个免...原创 2020-04-22 09:32:19 · 1584 阅读 · 1 评论 -
越说越迷糊的CAP
在上一篇《Paxos、Raft不是一致性算法/协议?》中,皮皮简单地聊了聊一致性(Consistency)与共识(Consensus)的区别。本文再来继续简单聊一聊CAP。不管大家有没有深入了解过分布式系统,相信对CAP应该还是有个比较熟悉的印象。CAP定理起源于加州大学柏克莱分校(University of California, Berkeley)的计算机科学家埃里克·布鲁尔(Eric Br...原创 2020-03-18 16:13:03 · 1245 阅读 · 0 评论 -
为什么RedisCluster会设计成16384个槽呢?
点击上方“朱小厮的博客”,选择“设为星标”后台回复”加群“加入公众号专属技术群Redis Cluster 是Redis的集群实现,内置数据自动分片机制,集群内部将所有的key映射到16384个Slot中,集群中的每个Redis Instance负责其中的一部分的Slot的读写。集群客户端连接集群中任一Redis Instance即可发送命令,当Redis Instance收到自己不负责的...原创 2019-12-25 11:31:00 · 3401 阅读 · 0 评论 -
消息中间件(Kafka/RabbitMQ)收录集
本篇主要整理工作中遇到的一些消息中间件的相关知识,包括Kafka, RabbitMQ, RocketMQ, ActiveMQ等,不排除收录其他消息中间件的可能。 这里会持续收录相关知识,包括安装、部署、使用示例、监控、运维、原理等。 所有新撰写的与中间件有关的文章都会收录与此,注意保存本文链接。Last Update Time: 2018-04-19 01:19:50 Update ...原创 2017-01-26 10:42:12 · 14591 阅读 · 25 评论 -
什么是Zero-Copy?
概述考虑这样一种常用的情形:你需要将静态内容(类似图片、文件)展示给用户。那么这个情形就意味着你需要先将静态内容从磁盘中拷贝出来放到一个内存buf中,然后将这个buf通过socket传输给用户,进而用户或者静态内容的展示。这看起来再正常不过了,但是实际上这是很低效的流程,我们把上面的这种情形抽象成下面的过程:read(file, tmp_buf, len);write(socket,原创 2016-09-19 21:28:17 · 27693 阅读 · 11 评论 -
RocketMQ配置
1. 客户端的公共配置类:ClientConfig 参数名 默认值 说明 namesrvAddrNameServer 地址列表,多个NameServer地址用分号隔开 clientIp 本机IP 客户端本机IP地址,某些机器会发送无法识别客户端IP地址的情况,需要应用在代码中强制指定 instanceName DEFAULT ...原创 2017-01-26 11:04:58 · 21210 阅读 · 0 评论 -
数据库相关中间件收录集
数据库中间件这里主要介绍互联网行业内有关数据库的相关中间件。数据库相关平台主要解决以下三个方面的问题:为海量前台数据提供高性能、大容量、高可用性的访问为数据变更的消费提供准实时的保障高效的异地数据同步应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL)。写操作会在数据库上产生变更记录,MySQL...原创 2016-10-09 18:15:09 · 21494 阅读 · 2 评论 -
信息指纹
信息指纹的由来 信息有“指纹”吗?信息要“指纹”做什么呢? ”指纹”一般特指我们识别人所采用各种方式的一个总称。生活中我们需要辨认出周围的每一个人,即使是非常相似的双胞胎,因为辨别是我们进行相互交流的前提。无论是通过名字、长相、声音的辨认,还是通过有技术依据的指纹与虹膜辨认,甚至是通过DNA鉴定,目的都只有一个,就是能准确确认对方。 可见指纹的首要用途就是识别个体,当然作为指纹特征,需转载 2016-02-18 12:15:11 · 2419 阅读 · 0 评论 -
Jedis对redis的操作详解
通过前一篇《redis的简单使用》的简单介绍,本篇主要阐述Jedis对redis的五大类型的操作:字符串、列表、散列、集合、有序集合。JedisUtil这里的测试用例采用junit4进行运行,准备代码如下: private static final String ipAddr = "10.10.195.112"; private static final int ...原创 2016-04-11 21:28:02 · 42376 阅读 · 11 评论 -
一文详解TCP
记得以前面试的时候被面试官问起TIME_WAIT有什么痛点,当时只记得TCP三次握手、四次挥手之类的,至于其中的某个状态还真是记不起来,之前也没有过多关注过,还有对于拥塞控制的概念也比较模糊。TCP报文格式TCP大家都知道是什么东西,这个协议的具体报文格式如下:标志位URG:指示报文中有紧急数据,应尽快传送(相当于高优先级的数据)。PSH:为1表示是带有push标志的数据,指示接收方...原创 2018-11-13 00:36:18 · 11885 阅读 · 9 评论 -
新书《深入理解Kafka:核心设计与实践原理》上架,感谢支持~
新书上架初识 Kafka 时,笔者接触的还是 0.8.1 版本,Kafka 发展到目前的 2.x 版本,笔者也见证了Kafka的蜕变,比如旧版客户端的淘汰、新版客户端的设计、Kafka 控制器的迭代优化、私有协议的变更、事务功能的引入等。Kafka从昔日的新星逐渐走向成熟,再到今日的王者地位不可撼动,这期间有太多的故事可讲。刚接触 Kafka 时,市面上还并没有任何关于 Kafka 的书籍。在...原创 2019-02-24 00:40:53 · 7779 阅读 · 17 评论 -
基于数据库实现的分布式锁
概述在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。但是到了分布式系统的时代,这种线程...原创 2019-06-20 00:43:21 · 31311 阅读 · 13 评论 -
大家所推崇的Redis分布式锁真的就万无一失吗?
在单实例JVM中,常见的处理并发问题的方法有很多,比如synchronized关键字进行访问控制、volatile关键字、ReentrantLock等常用方法。但是在分布式环境中,上述方法却不能在跨JVM场景中用于处理并发问题,当业务场景需要对分布式环境中的并发问题进行处理时,需要使用分布式锁来实现。分布式锁,是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。目前比较常...原创 2019-06-22 10:37:23 · 5376 阅读 · 4 评论 -
为了追求极致的性能,Kafka掌控这11项要领
很多同学私信问我Kafka在性能优化方面做了哪些举措,对于相关问题的答案其实我早就写过了,就是没有系统的整理一篇,最近思考着花点时间来整理一下,下次再有同学问我相关的问题我就可以潇洒的甩个链接了。这个问题也是Kafka面试的时候的常见问题,面试官问你这个问题也不算刁难你。在网上也有很多相关的文章开讲解这个问题,比如之前各大公众号转载的《为什么Kafka这么快?》,这些文章我看了,写的不错,问题在于...原创 2019-06-26 19:57:02 · 3756 阅读 · 10 评论 -
Kafka主题中的分区数越多吞吐量就越高?BULLSHIT!!!
分区是Kafka中最小的并行操作单元,对于生产者而言,对于每一个分区的数据写入是完全可以并行化的;对于消费者而言,Kafka只允许单个分区中的消息被一个消费者线程所消费,一个消费组的消费并行度完全依赖于所消费的分区数。如此看来,如果一个主题中的分区数越多,理论上所能达到的吞吐量就越大,那么事实真的如预想的一样么?不妨我们使用kafka-producer-perf-test.sh脚本和kafka-...原创 2019-06-26 19:59:58 · 4753 阅读 · 3 评论 -
如何提升网站的性能?
概述 性能是网站的一个重要指标,除非是没得选择(比如12306),否则用户无法忍受一个响应缓慢的网站。一个打开缓慢的网站会导致严重的用户流失,很多时候网站性能问题是网站架构升级优化的触发器。可以说性能是网站架构设计的一个重要方面,任何软件架构设计方案都必须考虑可能会带来的性能问题。 也正是因为性能问题几乎无处不在,所以优化网站性能的手段也非常多,从用户浏览器到数据库,影响用户请求的所有环节都原创 2016-02-18 12:27:05 · 4030 阅读 · 1 评论 -
浅析数据一致性
什么是数据一致性? 在数据有多分副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。 实践中,导致数据不一致的情况有很多种,表现样式也多种多样,比如数据更新返回操作失败,事实上数据在存储服务器已经更新成功。CAP定理 CAP定理是2000年,由 Eric Brewer 提出来的。Brewer认为在分布式的环境下原创 2016-02-19 15:27:38 · 40216 阅读 · 5 评论 -
LVS+Keepalived实现负载均衡和双机热备
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。1. 说明 在《keepalived实现Tomcat服务双机热备》中主要讲述如何安装及配置Keepalived来实现双机热备,主要功能是:MASTER和BACKUP两台服务器处于热备状态,对用户虚拟一个IP,屏蔽底层的真实IP...原创 2015-10-23 16:51:57 · 9443 阅读 · 0 评论 -
修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。上一篇博文主要讲述了如何使用Keepalived实现tomcat服务器的双机热备。这篇博文是对上一篇博文的扩展,主要讲述如何修改Keepalived的默认配置文件的路径以及重定向Keepalived日志的输出路径。关于如何安装keepaliv...原创 2015-10-23 08:58:51 · 28053 阅读 · 6 评论 -
keepalived实现Tomcat服务双机热备
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。项目中需要采用tomcat双机热备机制,以确保系统性能。本人通过查阅资料以及亲自实现完成,写下这篇博文,供个人读者参考。1. 规划1.1服务器环境规划负载服务器master及WEB服务器1真实IP:10.10.195.53...原创 2015-10-14 17:26:33 · 17800 阅读 · 4 评论 -
VRRP协议介绍
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 参考资料: RFC 37681. 前言VRRP(Virtual Router Redundancy Protocol)协议是用于实现路由器冗余的协议,最新协议在RFC3768中定义,原来的定义RFC2338被废除,新协议相对还简化了一些功能。2....转载 2015-09-29 16:19:40 · 5090 阅读 · 1 评论 -
亿级Web系统搭建:单机到分布式集群
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 当一个Web系统从日访问量10万逐步增长到1000万,甚至超过1亿的过程中,Web系统承受的压力会越来越大,在这个过程中,我们会遇到很多的问题。为了解决这些性能压力带来问题,我们需要在Web系统架构层面搭建多个层次的缓存机制。在不同的压力阶段,我们...转载 2015-09-24 10:21:24 · 9692 阅读 · 0 评论 -
MySQL Binlog解析
概述MySQL的安装可以参考:Linux(CentOS)中常用软件安装,使用及异常——MySQL, VmToolsMySQL关于Binlog的官方文档:The Binary Log基于Binlog的主备复制:MySQL主备复制原理、实现及异常处理什么是 BinlogMySQL Server 有四种类型的日志——Error Log、General Query Log、Bina...原创 2016-11-03 12:32:29 · 31629 阅读 · 0 评论 -
MySQL主备复制原理、实现及异常处理
复制概述MySQL支持三种复制方式:基于行(Row)的复制、基于语句(Statement)的复制和混合类型(Mixed)的复制。基于语句的复制早在3.23版本中就存在,而基于行的复制方式在5.1版本中才被加进来。这两种方式都是通过在主库上记录二进制日志、在备库重放日志的方式来实现异步的数据复制。混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的...原创 2016-09-14 11:29:04 · 13440 阅读 · 6 评论 -
谈谈对Canal(增量数据订阅与消费)的理解
概述canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql(也支持mariaDB)。起源:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获...原创 2016-09-08 22:10:30 · 22417 阅读 · 15 评论 -
大型分布式网站术语分析
1. I/O优化增加缓存,减少磁盘的访问次数。优化磁盘的管理系统,设计最有的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度。应用合理的RAID策略提升磁盘I/O。2. Web前端调原创 2016-06-02 08:46:21 · 16940 阅读 · 9 评论 -
Redis和Memcached的区别
说到redis就会联想到memcached,反之亦然。了解过两者的同学有那么个大致的印象:redis与memcached相比,比仅支持简单的key-value数据类型,同时还提供list,set,zset,hash等数据结构的存储;redis支持数据的备份,即master-slave模式的数据备份;redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用等等,这似乎原创 2016-04-13 20:14:52 · 38467 阅读 · 1 评论 -
Redis内存使用优化与存储
Redis数据类型 最为常用的数据类型主要有五种:String, Hash, List, Set和SortedSet. redis内部使用一个redisObject对象来表示所有的key和value。redisObject最主要的信息如下图所示: type代表一个value对象具体是何种数据类型,encoding是不同数据类型在redis内部的存储方式,比如:type=string代表value转载 2016-04-12 14:24:26 · 26525 阅读 · 3 评论 -
Redis简述
Redis 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis原创 2016-04-11 11:05:58 · 9295 阅读 · 6 评论 -
采用Memcached实现分布式Session
memcached-session-manager是一个开源的高可用的Tomcat session共享解决方案,它支持Sticky模式和Non-Sticky模式。Sticky模式表示每次请求都会被映射到同一台后端Web服务器,知道该Web服务器宕机,这样session可先存放在服务器本地,等到请求处理完成再同步到后端memcached服务器;而当Web服务器宕机时,请求被映射到其他Web服务器,这时原创 2016-04-06 19:29:37 · 13137 阅读 · 0 评论 -
Memcached安装与配置
memcached是danga.com的一个项目,它是一款开源的高性能的分布式内存对象缓存系统,最早是给LiveJournal提供服务的,后来逐渐被越来越多的大型网站所采用,用于在应用中减少对数据库的访问,提高应用的访问速度,并降低数据库的负载。 为了在内存中提供数据的高速查找能力,memcached使用key-value形式存储和访问数据,在内存中维护一张巨大的HashTable,使得对数据查询的原创 2016-04-06 19:18:04 · 5899 阅读 · 0 评论 -
LVS:三种负载均衡方式比较+另三种负载均衡方式
什么是LVS? 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程原创 2016-02-20 18:06:33 · 14964 阅读 · 0 评论 -
怎么确保网站的可用性
网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问。 实现上述高可用架构的主要手段是数据和服务的冗余备份及失效转移。 典型的分层模型是三层,即应用层、服务层、数据层;各层之间具有相对独立性,应用层主要负责具体页面逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储于访问。中小型网站在具体部署时,通常将应用层和服务层部署在一起,而数据层则另外原创 2016-02-20 16:00:38 · 2988 阅读 · 0 评论 -
使用VMware VSphere WebService SDK进行开发 (一)——基本信息阐述
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。网上对于VSphere WebService SDK的介绍比较少(至少我能查到的资料比较少),官方提供的也是英文版的api,而且没有注明使用方法。最近接触到关于VSphere WebService SDK的开发,刚开始也是烦躁,比如要获取一个cpu...原创 2015-11-11 10:54:41 · 25461 阅读 · 33 评论