自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 搜索

一、缘起《深入浅出搜索架构(上篇)》详细介绍了前三章:(1)全网搜索引擎架构与流程(2)站内搜索引擎架构与流程(3)搜索原理与核心数据结构《深入浅出搜索架构(中篇)》介绍了:(4)流量数据量由小到大,常见搜索方案与架构变迁(5)数据量、并发量、扩展性架构方案本篇将讨论:(6)百度为何能实时检索出15分钟之前新出的新闻?58同城为何能实时检索出1秒钟之...

2019-09-21 18:47:03 147

原创 搜索

一、缘起《深入浅出搜索架构(上篇)》详细介绍了:(1)全网搜索引擎架构与流程(2)站内搜索引擎架构与流程(3)搜索原理与核心数据结构本文重点介绍:(4)流量数据量由小到大,常见搜索方案与架构变迁(5)数据量、并发量、扩展性方案只要业务有检索需求,本文一定对你有帮助。二、检索需求的满足与架构演进任何互联网需求,或多或少有检索需求,还是以58同...

2019-09-21 18:45:54 164 1

原创 MQ

一、缘起一切脱离业务的架构设计与新技术引入都是耍流氓。引入一个技术之前,首先应该解答的问题是,这个技术解决什么问题。就像微服务分层架构之前,应该首先回答,为什么要引入微服务,微服务究竟解决什么问题(详见《互联网架构为什么要做微服务?》)。最近分享了几篇MQ相关的文章:《MQ如何实现延时消息》《MQ如何实现消息必达》《MQ如何实现幂等性》不少网友询问...

2019-09-21 18:43:32 181

原创 配置中心

《小小的ip,大大的耦合》提到,因为"变更ip,导致上游重启一大片"的不合理架构,可以使用“内网域名代替内网ip”的方式解耦。这一次,随着流量的越来越大,一个服务集群由3个节点增加到5个节点,扩容增加了两个ip,居然也要调用方修改配置,重启一大片?因为调用服务集群配置关联在一起,导致下游服务扩容时上游需要配合重启,是一个耦合的典型案例。一、场景还原user-ser...

2019-09-21 18:42:54 162

原创 MQ

一个架构常识:当调用方需要关心执行结果,通常使用RPC调用。ret = PassportService::userAuth(name, pass);switch(ret){case(YES) : return YesHTML();case(NO) : return NoHTML();case(JUMP) : return 304HTML():default...

2019-09-21 18:42:17 92

原创 网关

假设你正在开发一个电商网站,那么这里会涉及到很多后端的微服务,比如会员、商品、推荐服务等等。那么这里就会遇到一个问题,APP/Browser怎么去访问这些后端的服务? 如果业务比较简单的话,可以给每个业务都分配一个独立的域名(https://service.api.company.com),但这种方式会有几个问题: 每个业务都会需要鉴权、限流、权限校验等逻辑,如果每个...

2019-09-21 18:41:18 136

原创 MYSQL锁

这个月花了一些功夫写InnoDB:并发控制,MVCC,索引,锁...有朋友留言:你TM讲了这么多,锁分了这么多类型,又和事务隔离级别相关,又和索引相关,究竟能不能直接告诉我,一个SQL到底加了什么锁!?我竟无言以对。好吧,做过简单梳理之后,今天尝试着直接回答,尽量做到不重不漏,各种SQL语句究竟加了什么锁。一、普通select(1)在读未提交(Read...

2019-09-21 18:40:15 85

原创 Mysql事务

事务ACID特性,其中I代表隔离性(Isolation)。什么是事务的隔离性?隔离性是指,多个用户的并发事务访问同一个数据库时,一个用户的事务不应该被其他用户的事务干扰,多个并发事务之间要相互隔离。一个事务怎么会干扰其他事务呢?咱们举例子来说明,假设有InnoDB表:t(id PK, name);表中有三条记录:1, shenjian2, zhan...

2019-09-21 18:39:24 78

转载 数据库索引,到底是什么做的?

问题1. 数据库为什么要设计索引?图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去?于是,图书管理员设计了一套规则:(1)一楼放历史类,二楼放文学类,三楼放IT类…(2)IT类,又分软件类,硬件类…(3)软件类,又按照书名音序排序…以便快速找到一本书。与之类比,数据库存储了1000W条数据,要从中找到name=”shenjia...

2019-09-21 18:38:34 80

原创 缓存,究竟是淘汰,还是修改?

允许cache miss的场景,不管是memcache还是redis,当被缓存的内容变化时,是改修改缓存,还是淘汰缓存?这是今天将要讨论的话题。问:KV缓存都缓存了一些什么数据?答:(1)朴素类型的数据,例如:int(2)序列化后的对象,例如:User实体,本质是binary(3)文本数据,例如:json或者html(4)...问:淘汰缓存中的这些数据,修改缓存中的这些...

2019-09-21 18:37:39 201

原创 memcache / redis

昨天发布的《缓存架构,到底设计些什么?》一文,评论里问“究竟啥时候用memcache,啥时候用redis”的比较多。评论的回复中,我提到,自己会在面试中问候选人这个问题。不少同学质疑,问这个问题有什么意义,究竟想考察的是什么。这个问题很严肃,且很重要,它脱离了mc和redis本身,涉及到技术人的自我要求。我在面试中,会如何向候选人提问?一般,我不会预设任何问题,更不会问我擅...

2019-09-19 22:20:07 99

原创 数据库主从不一致

在聊数据库与缓存一致性问题之前,先聊聊数据库主库与从库的一致性问题。问:常见的数据库集群架构如何?答:一主多从,主从同步,读写分离。如上图:(1)一个主库提供写服务(2)多个从库提供读服务,可以增加从库提升读性能(3)主从之间同步数据画外音:任何方案不要忘了本心,加从库的本心,是提升读性能。问:为什么会出现不一致?答:主从同步有时延,这个时延期间...

2019-09-19 22:18:54 102

原创 缓存与数据库的操作时序

缓存与数据库的操作时序,不管是《Cache Aside Pattern》中的方案,还是《究竟先操作缓存,还是数据库?》中的方案,都会遇到缓存与数据库不一致的问题。今天聊聊这个问题。一、数据库主从不一致先回顾下,无缓存时,数据库主从不一致问题。如上图,发生的场景是,写后立刻读:(1)主库一个写请求(主从没同步完成)(2)从库接着一个读请求,读到了旧数据(3)最后,主...

2019-09-19 22:18:03 202

原创 分布式事务

多个数据要同时操作,如何保证数据的完整性,以及一致性?答:事务,是常见的做法。举个栗子:用户下了一个订单,需要修改余额表,订单表,流水表,于是会有类似的伪代码:start transaction;CURD table t_account; any Exception rollback;CURD table t_order; any Exception ...

2019-09-19 22:17:05 66

原创 CAP

分布式系统非常关注三个指标: 数据一致性 系统可用性 节点连通性与扩展性 关于一致性数据“强一致性”,是希望系统只读到最新写入的数据,例如:通过单点串行化的方式,就能够达到这个效果。关于session一致性,DB主从一致性,DB双主一致性,DB与Cache一致性,数据冗余一致性,消息时序一致性,分布式事务一致性,库存扣减一致性,详见文章《究竟啥才是...

2019-09-19 22:15:18 50

原创 负载均衡

什么是负载均衡?负载均衡(Load Balance)是分布式系统架构设计中必须考虑的因素之一,它通常是指,将请求/数据均匀分摊到多个操作单元上执行,负载均衡的关键在于均匀。常见的负载均衡方案有哪些?常见互联网分布式架构如上,分为: 客户端层 反向代理层 站点层 服务层 数据层 可以看到,每一个下游都有多个上游调用,只需要做到,每...

2019-09-19 22:14:48 69

原创 RPC

服务化有什么好处?服务化的一个好处就是,不限定服务的提供方使用什么技术选型,能够实现大公司跨团队的技术解耦,如下图所示: 服务A:欧洲团队维护,技术背景是Java 服务B:美洲团队维护,用C++实现 服务C:中国团队维护,技术栈是go 服务的上游调用方,按照接口、协议即可完成对远端服务的调用。但实际上,大部分互联网公司,研发团队规模有限,大都使用同一...

2019-09-19 22:13:50 112

原创 搜索

可能99%的同学不做搜索引擎,但99%的同学一定实现过检索功能。搜索,检索,这里面到底包含哪些技术的东西,希望本文能够给大家一些启示。全网搜索引擎架构与流程如何?全网搜索引擎的宏观架构如上图,核心子系统主要分为三部分(粉色部分):(1)spider爬虫系统;(2)search&index建立索引与查询索引系统,这个系统又主要分为两部分: 一部分用于生成...

2019-09-19 22:12:51 156

原创 高并发

什么是高并发?高并发(High Concurrency)是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求。高并发相关的常见指标有哪些? 响应时间(Response Time) 吞吐量(Throughput) 每秒查询率QPS(Query Per Second) 并发用户数 什么是响应时间...

2019-09-19 22:11:05 67

原创 高可用

一、什么是高可用高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间。假设系统一直能够提供服务,我们说系统的可用性是100%。如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可用性是99%。很多公司的高可用目标是4个9,也就是99.99%,这就意味着,系统的年停机时...

2019-09-19 22:09:56 65

原创 MYSQL夸库分页

为什么需要研究跨库分页?互联网很多业务都有分页拉取数据的需求,例如:(1)微信消息过多时,拉取第N页消息;(2)京东下单过多时,拉取第N页订单;(3)浏览58同城,查看第N页帖子;这些业务场景对应的消息表,订单表,帖子表分页拉取需求,都有这样一些共同的特点:(1)有个业务主键id,msg_id,order_id,tiezi_id;(2)分页按照非业务...

2019-09-18 21:47:46 140

原创 MYSQL扩容

上次《百亿级数据DB秒级平滑扩容!》之后,很多朋友提问,说如果不是“双倍”扩容,能否做到平滑迁移,不影响服务呢?适用什么场景?互联网有很多“数据量较大,并发量较大,业务复杂度较高”的业务场景,其典型系统分层架构如下:(1)上游是业务层biz,实现个性化的业务逻辑;(2)中游是服务层service,封装数据访问;(3)下游是数据层db,存储固化的业务数据;服务...

2019-09-18 21:43:01 1779 1

原创 MQ顺序性

很多业务都需要考虑消息投递的顺序性: 单聊消息投递,保证发送方发送顺序与接收方展现顺序一致 群聊消息投递,保证所有接收方展现顺序一致 充值支付消息,保证同一个用户发起的请求在服务端执行序列一致 消息顺序性是分布式系统架构设计中非常难的问题,有什么常见优化实践呢?折衷一:以客户端或者服务端的时序为准不管什么情况,都需要一个标尺来衡量时序的先后顺序,可以根据...

2019-09-18 21:37:27 588

原创 负载均衡

面对大量用户访问、高并发请求,海量数据,可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器,采用高效率的编程语言比如(Go,Scala)等,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题。从单机网站到分布式网站,很重要的区别是业务拆分和分布式部署,将应用拆分后,部署到不同的机器上,实现大规模分布式系统。分布式和业务拆分解决...

2019-09-18 21:36:37 239

原创 JVM

JVM结构与机制JVM类加载

2019-09-17 22:28:27 45

原创 微服务架构—优雅停机方案

1 介绍微服务架构中的应用优雅停机主要是指应用实例有计划而平滑(即不产生需要处理的事故)的退出。应用服务器的停机主要分为两类:主动停机和被动停机,而其中主动停机和大部分的被动停机都是可以实现优雅停机。如果应用不做优雅停机,则会带来以下情况:而我们微服务的优雅升级的目标就是避免以上几种情况,从而避免人工干预的工作量和提升微服务架构的服务高可靠。2...

2019-09-17 22:26:33 267

原创 多线程

并发与并行并行,表示两个线程同时做事情。并发,表示一会做这个事情,一会做另一个事情,存在着调度。单核 CPU 不可能存在并行(微观上)。临界区临界区用来表示一种公共资源或者说是共享数据,可以被多个线程使用。但是每一次,只能有一个线程使用它,一旦临界区资源被占用,其他线程要想使用这个资源,就必须等待。阻塞与非阻塞阻塞和非阻塞通常用来形容多线程间的相互影响。比如一个线程...

2019-09-17 22:24:49 46

原创 分布式锁

锁和分布式锁在计算机中,锁的作用是解决在并发状态下的共享资源互斥问题,保证在同一时间只有一个进程/线程可以掌握资源的控制权。例如以下几种情况: 文件锁的实现是为了解决不同用户同时读写同一文件的并发问题而出现的,防止导致文件的内容被破坏。 使用数组实现的队列,在 push 操作的地方一般需要加锁来解决槽位的争夺问题,防止出现多次 push 冲突从而导致数据丢失问题。 ...

2019-09-17 22:23:36 87

原创 快速正确的搭建一个微服务架构需要了解的那几个点

一、微服务架构四大特性好的微服务架构是什么样的呢?想要搭建好一个微服务架构,必须要具备一下四个特征: 服务的粒度需根据业务功能来划分,对于某些复杂的业务来说,可能粒度较大,对于相对简单的业务而言,可能粒度较小。总之,服务的粒度可大可小,但往往我们更希望它尽可能的小,但又不希望服务之间有任何的依赖,因此粒度的划分是非常考验架构师水平的事情。 我们需要确保每个微服务只做一件事情,也...

2019-09-17 22:21:19 208 1

原创 war包跟jar包的区别

war是一个可以直接运行的web模块,通常用于网站,打成包部署到容器中。以Tomcat来说,将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了WAR文件代表了一个Web应用程序,JAR是类的归档文件。...

2019-09-17 22:19:38 291

原创 jenkins docker k8s

jenkins:拉取最新代码,编译打包,构建镜像,发送至docker容器docker:发布程序的容器k8s: docker容器集群管理系统,说白了,我们用kubernetes去管理Docker集群,即可以将Docker看成Kubernetes内部使用的低级别组件...

2019-09-17 22:18:27 288

原创 TCP的三次握手与四次挥手理解及面试题

dns:域名解析http:应用层协议tcp: 传输层协议ip:网络层协议本文经过借鉴书籍资料、他人博客总结出的知识点,欢迎提问序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。...

2019-09-17 22:16:02 268

原创 CAP

计算机界有很多高大上又难于理解的术语,CAP就是其中之一, 什么一致性(Consistency), 可用性(Availability), 分区容错性(Partition tolerance) 就很难理解了, 再加上CAP定理更是让人云里雾里, 今天咱们试图通俗的演绎一下。一致性:某个节点挂掉之后,数据同步/数据复制相关操作的的服务都要停掉,保证数据的一致性可用性:某个节点挂掉后,等待恢复就...

2019-09-17 22:11:46 83

原创 微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比

前言服务注册中心本质上是为了解耦服务提供者和服务消费者。对于任何一个微服务,原则上都应存在或者支持多个提供者,这是由微服务的分布式属性决定的。更进一步,为了支持弹性扩缩容特性,一个微服务的提供者的数量和分布往往是动态变化的,也是无法预先确定的。因此,原本在单体应用阶段常用的静态LB机制就不再适用了,需要引入额外的组件来管理微服务提供者的注册与发现,而这个组件就是服务注册中心。CAP理论CA...

2019-09-17 22:08:27 150

原创 Mybatis源码中用到了哪些设计模式?

Mybatis至少遇到了以下的设计模式的使用:Builder模式,例如SqlSessionFactoryBuilder、XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder、CacheBuilder; 工厂模式,例如SqlSessionFactory、ObjectFactory、MapperProxyFactory;...

2019-09-16 20:49:57 909

原创 分库分表

面试题现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?面试官心理分析你看看,你现在已经明白为啥要分库分表了,你也知道常用的分库分表中间件了,你也设计好你们如何分库分表的方案了(水平拆分、垂直拆分、分表),那问题来了,你接下来该怎么把你那个单库单表的系统给迁移到分库分表上去?所以这都是一环扣一环的,就是看你有没有全流程经历过这个过程。...

2019-09-16 20:48:49 66

原创 MySQL 读写分离

面试题你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题?面试官心理分析高并发这个阶段,肯定是需要做读写分离的,啥意思?因为实际上大部分的互联网公司,一些网站,或者是 app,其实都是读多写少。所以针对这个情况,就是写一个主库,但是主库挂多个从库,然后从多个从库来读,那不就可以支撑更高的读并发压...

2019-09-16 20:47:29 86

原创 Eureka和zookeeper

zookeeper保证了CP(C:一致性,P:分区容错性),Eureka保证了AP(A:高可用) 1.当向注册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接down掉不可用。也就是说,服务注册功能对高可用性要求比较高,但zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新选leader。问题在于,选取leader时间...

2019-09-16 20:46:40 423

原创 Redis 的并发竞争问题是什么?

面试题Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?面试官心理分析这个也是线上非常常见的一个问题,就是多客户端同时并发写一个 key,可能本来应该先到的数据后到了,导致数据版本错了;或者是多客户端同时获取一个 key,修改值之后再写回去,只要顺序错了,数据就错了。而且 redis 自己就有天然解决这个问题的 CAS 类的乐观锁方案。...

2019-09-16 20:44:22 276

原创 redis 的雪崩、穿透和击穿

面试题了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?面试官心理分析其实这是问到缓存必问的,因为缓存雪崩和穿透,是缓存最大的两个问题,要么不出现,一旦出现就是致命性的问题,所以面试官一定会问你。面试题剖析缓存雪崩对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4...

2019-09-16 20:43:18 70

空空如也

空空如也

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

TA关注的人

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