网站架构相关技术
文章平均质量分 67
大型分布式网站架构设计
朱小厮
你知道的越多 你不知道的也就越多
展开
-
大家所推崇的Redis分布式锁真的就万无一失吗?
在单实例JVM中,常见的处理并发问题的方法有很多,比如synchronized关键字进行访问控制、volatile关键字、ReentrantLock等常用方法。但是在分布式环境中,上述方法却不能在跨JVM场景中用于处理并发问题,当业务场景需要对分布式环境中的并发问题进行处理时,需要使用分布式锁来实现。分布式锁,是指在分布式的部署环境下,通过锁机制来让多客户端互斥的对共享资源进行访问。目前比较常...原创 2019-06-22 10:37:23 · 5345 阅读 · 4 评论 -
基于数据库实现的分布式锁
概述在单机时代,虽然不需要分布式锁,但也面临过类似的问题,只不过在单机的情况下,如果有多个线程要同时访问某个共享资源的时候,我们可以采用线程间加锁的机制,即当某个线程获取到这个资源后,就立即对这个资源进行加锁,当使用完资源之后,再解锁,其它线程就可以接着使用了。例如,在JAVA中,甚至专门提供了一些处理锁机制的一些API(synchronize/Lock等)。但是到了分布式系统的时代,这种线程...原创 2019-06-20 00:43:21 · 30975 阅读 · 13 评论 -
一文详解TCP
记得以前面试的时候被面试官问起TIME_WAIT有什么痛点,当时只记得TCP三次握手、四次挥手之类的,至于其中的某个状态还真是记不起来,之前也没有过多关注过,还有对于拥塞控制的概念也比较模糊。TCP报文格式TCP大家都知道是什么东西,这个协议的具体报文格式如下:标志位URG:指示报文中有紧急数据,应尽快传送(相当于高优先级的数据)。PSH:为1表示是带有push标志的数据,指示接收方...原创 2018-11-13 00:36:18 · 11832 阅读 · 9 评论 -
文件句柄(file handles) & 文件描述符(file descriptors)
1.概述在实际工作中会经常遇到一些bug,有些就需要用到文件句柄,文件描述符等概念,比如报错: too many open files, 如果你对相关知识一无所知,那么debug起来将会异常痛苦。在linux操作系统中,文件句柄(包括Socket句柄)、打开文件、文件指针、文件描述符的概念比较绕,而且windows的文件句柄又与此有何关联和区别?这一系列的问题是我们不得不面对的。博主通过翻...原创 2017-03-07 20:23:58 · 36100 阅读 · 15 评论 -
采用OpenReplicator解析MySQL binlog
Open Replicator是一个用Java编写的MySQL binlog分析程序。Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析binlog,最终将分析得出的binlog events以回调的方式通知应用。Open Replicator可以被应用到MySQL数据变化的实时推送,多Master到单Slave的数据同步等多种应用场景...原创 2016-11-07 21:51:28 · 12556 阅读 · 16 评论 -
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 · 31521 阅读 · 0 评论 -
sbt安装与配置
下载地址:http://www.scala-sbt.org/download.html当前版本:sbt-0.13.13.tgz安装1.解压并赋予权限[root@hidden util]# tar -zxvf sbt-0.13.13.tgz sbt-launcher-packaging-0.13.13/sbt-launcher-packaging-0.13.13/conf...原创 2016-11-02 22:40:22 · 19380 阅读 · 0 评论 -
数据库相关中间件收录集
数据库中间件这里主要介绍互联网行业内有关数据库的相关中间件。数据库相关平台主要解决以下三个方面的问题:为海量前台数据提供高性能、大容量、高可用性的访问为数据变更的消费提供准实时的保障高效的异地数据同步应用层通过分表分库中间件访问数据库,包括读操作(Select)和写操作(update, insert和delete等,DDL, DCL)。写操作会在数据库上产生变更记录,MySQL...原创 2016-10-09 18:15:09 · 21400 阅读 · 2 评论 -
什么是Zero-Copy?
概述考虑这样一种常用的情形:你需要将静态内容(类似图片、文件)展示给用户。那么这个情形就意味着你需要先将静态内容从磁盘中拷贝出来放到一个内存buf中,然后将这个buf通过socket传输给用户,进而用户或者静态内容的展示。这看起来再正常不过了,但是实际上这是很低效的流程,我们把上面的这种情形抽象成下面的过程:read(file, tmp_buf, len);write(socket,原创 2016-09-19 21:28:17 · 27542 阅读 · 11 评论 -
MySQL主备复制原理、实现及异常处理
复制概述MySQL支持三种复制方式:基于行(Row)的复制、基于语句(Statement)的复制和混合类型(Mixed)的复制。基于语句的复制早在3.23版本中就存在,而基于行的复制方式在5.1版本中才被加进来。这两种方式都是通过在主库上记录二进制日志、在备库重放日志的方式来实现异步的数据复制。混合类型的复制:默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的...原创 2016-09-14 11:29:04 · 13353 阅读 · 6 评论 -
谈谈对Canal(增量数据订阅与消费)的理解
概述canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了mysql(也支持mariaDB)。起源:早期,阿里巴巴B2B公司因为存在杭州和美国双机房部署,存在跨机房同步的业务需求。不过早期的数据库同步业务,主要是基于trigger的方式获取增量变更,不过从2010年开始,阿里系公司开始逐步的尝试基于数据库的日志解析,获...原创 2016-09-08 22:10:30 · 22314 阅读 · 15 评论 -
Linux(CentOS)中常用软件安装,使用及异常——XManager, 中文支持,JDK
XManager图形化界面远程连接采用Xshell的方式可以不用在CentOS系统中配置即可以相连,主要原理就是SSH连接的方式,但是XManager图形化界面远程连接是需要修改CentOS系统的。安装桌面有些CentOS系统没有安装图形化界面,那么在此之前需要安装图形化界面。 测试有没有安装:rpm -qa | grep gnome或者yum list instal...原创 2016-08-30 14:30:05 · 2203 阅读 · 5 评论 -
记一次在LAMP中遇到的问题
平常都是用Java的,工作需要翻看一下php的代码,所以临时拿起LAMP(Linux+Apache+MySQL+Php)来。在使用LAMP中遇到一些异常情况,首先从一个demo说起: [11.php代码如下]<?php date_default_timezone_set('Asia/Shanghai'); phpinfo(); $conn = mysql_connect(原创 2016-08-23 19:44:46 · 1730 阅读 · 0 评论 -
Linux(CentOS)中常用软件安装,使用及异常——MySQL, VmTools
本文主要是为了记录在工作中遇到的常用软件的安装过程,方便以后遇到相同情形时可以快速的查阅。主要讲述了MySQL, VMTools的安装。 本文的操作系统采用的是CentOS,可以采用shell命令查阅:lsb_release -a. Mysql的安装Mysql的安装mysql的下载地址:http://dev.mysql.com/downloads/mysql/#down...原创 2016-08-21 15:54:22 · 2820 阅读 · 0 评论 -
大型分布式网站术语分析
1. I/O优化增加缓存,减少磁盘的访问次数。优化磁盘的管理系统,设计最有的磁盘方式策略,以及磁盘的寻址策略,这是在底层操作系统层面考虑的。设计合理的磁盘存储数据块,以及访问这些数据库的策略,这是在应用层面考虑的。例如,我们可以给存放的数据设计索引,通过寻址索引来加快和减少磁盘的访问量,还可以采用异步和非阻塞的方式加快磁盘的访问速度。应用合理的RAID策略提升磁盘I/O。2. Web前端调原创 2016-06-02 08:46:21 · 16875 阅读 · 9 评论 -
Redis和Memcached的区别
说到redis就会联想到memcached,反之亦然。了解过两者的同学有那么个大致的印象:redis与memcached相比,比仅支持简单的key-value数据类型,同时还提供list,set,zset,hash等数据结构的存储;redis支持数据的备份,即master-slave模式的数据备份;redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用等等,这似乎原创 2016-04-13 20:14:52 · 38000 阅读 · 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 · 26461 阅读 · 3 评论 -
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 · 42314 阅读 · 11 评论 -
Redis简述
Redis 简介Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点:Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。Redis原创 2016-04-11 11:05:58 · 9264 阅读 · 6 评论 -
采用Memcached实现分布式Session
memcached-session-manager是一个开源的高可用的Tomcat session共享解决方案,它支持Sticky模式和Non-Sticky模式。Sticky模式表示每次请求都会被映射到同一台后端Web服务器,知道该Web服务器宕机,这样session可先存放在服务器本地,等到请求处理完成再同步到后端memcached服务器;而当Web服务器宕机时,请求被映射到其他Web服务器,这时原创 2016-04-06 19:29:37 · 12892 阅读 · 0 评论 -
Memcached安装与配置
memcached是danga.com的一个项目,它是一款开源的高性能的分布式内存对象缓存系统,最早是给LiveJournal提供服务的,后来逐渐被越来越多的大型网站所采用,用于在应用中减少对数据库的访问,提高应用的访问速度,并降低数据库的负载。 为了在内存中提供数据的高速查找能力,memcached使用key-value形式存储和访问数据,在内存中维护一张巨大的HashTable,使得对数据查询的原创 2016-04-06 19:18:04 · 5853 阅读 · 0 评论 -
keepalived实现Tomcat服务双机热备
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。项目中需要采用tomcat双机热备机制,以确保系统性能。本人通过查阅资料以及亲自实现完成,写下这篇博文,供个人读者参考。1. 规划1.1服务器环境规划负载服务器master及WEB服务器1真实IP:10.10.195.53...原创 2015-10-14 17:26:33 · 17704 阅读 · 4 评论 -
修改Keepalived配置文件位置以及重定向Keepalived日志的输出路径
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。上一篇博文主要讲述了如何使用Keepalived实现tomcat服务器的双机热备。这篇博文是对上一篇博文的扩展,主要讲述如何修改Keepalived的默认配置文件的路径以及重定向Keepalived日志的输出路径。关于如何安装keepaliv...原创 2015-10-23 08:58:51 · 27919 阅读 · 6 评论 -
LVS+Keepalived实现负载均衡和双机热备
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。1. 说明 在《keepalived实现Tomcat服务双机热备》中主要讲述如何安装及配置Keepalived来实现双机热备,主要功能是:MASTER和BACKUP两台服务器处于热备状态,对用户虚拟一个IP,屏蔽底层的真实IP...原创 2015-10-23 16:51:57 · 9393 阅读 · 0 评论 -
Cookie 和 Session机制详解
欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。 原文地址:http://blog.csdn.net/fangaoxin/article/details/6952954 会话(Session)跟踪是Web程序中常用的技术,用来跟踪用户的整个会话。常用的会话跟踪技术是Cookie与S...转载 2016-01-12 18:42:22 · 7133 阅读 · 1 评论 -
Hash算法
概述Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 Hash主要原创 2016-02-17 18:18:57 · 4351 阅读 · 1 评论 -
信息指纹
信息指纹的由来 信息有“指纹”吗?信息要“指纹”做什么呢? ”指纹”一般特指我们识别人所采用各种方式的一个总称。生活中我们需要辨认出周围的每一个人,即使是非常相似的双胞胎,因为辨别是我们进行相互交流的前提。无论是通过名字、长相、声音的辨认,还是通过有技术依据的指纹与虹膜辨认,甚至是通过DNA鉴定,目的都只有一个,就是能准确确认对方。 可见指纹的首要用途就是识别个体,当然作为指纹特征,需转载 2016-02-18 12:15:11 · 2403 阅读 · 0 评论 -
如何提升网站的性能?
概述 性能是网站的一个重要指标,除非是没得选择(比如12306),否则用户无法忍受一个响应缓慢的网站。一个打开缓慢的网站会导致严重的用户流失,很多时候网站性能问题是网站架构升级优化的触发器。可以说性能是网站架构设计的一个重要方面,任何软件架构设计方案都必须考虑可能会带来的性能问题。 也正是因为性能问题几乎无处不在,所以优化网站性能的手段也非常多,从用户浏览器到数据库,影响用户请求的所有环节都原创 2016-02-18 12:27:05 · 4000 阅读 · 1 评论 -
浅析数据一致性
什么是数据一致性? 在数据有多分副本的情况下,如果网络、服务器或者软件出现故障,会导致部分副本写入成功,部分副本写入失败。这就造成各个副本之间的数据不一致,数据内容冲突。 实践中,导致数据不一致的情况有很多种,表现样式也多种多样,比如数据更新返回操作失败,事实上数据在存储服务器已经更新成功。CAP定理 CAP定理是2000年,由 Eric Brewer 提出来的。Brewer认为在分布式的环境下原创 2016-02-19 15:27:38 · 40058 阅读 · 5 评论 -
怎么确保网站的可用性
网站的高可用架构设计的主要目的就是保证服务器硬件故障时服务依然可用、数据依然保存并能够被访问。 实现上述高可用架构的主要手段是数据和服务的冗余备份及失效转移。 典型的分层模型是三层,即应用层、服务层、数据层;各层之间具有相对独立性,应用层主要负责具体页面逻辑处理;服务层负责提供可复用的服务;数据层负责数据的存储于访问。中小型网站在具体部署时,通常将应用层和服务层部署在一起,而数据层则另外原创 2016-02-20 16:00:38 · 2939 阅读 · 0 评论 -
LVS:三种负载均衡方式比较+另三种负载均衡方式
什么是LVS? 首先简单介绍一下LVS (Linux Virtual Server)到底是什么东西,其实它是一种集群(Cluster)技术,采用IP负载均衡技术和基于内容请求分发技术。调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程原创 2016-02-20 18:06:33 · 14909 阅读 · 0 评论