自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 如何构建高可用的系统(三):服务治理篇

在如何构建高可用的系统(一):Overview中, 我提到了以下几点: 系统依赖的一切下游系统都是不可靠的, 它们随时可能出问题 系统的上游可能有多个, 而且每个上游的行为都是不可预知的。如果某个上游抽风把我的系统搞崩, 那么就会影响所有的上游 高可用是有前提条件的,一个系统对当前的负载能提供高...

2019-01-19 19:32:16 461 0

原创 如何构建高可用的系统(二): 消除单点与自动故障转移

前一篇文章我们讲到, 一切单点都是不可靠的, 如果系统中某个地方可能会出问题(就算概率很低),那么它迟早会出问题。 也就是我们常说的Murphy’s Law。如果要提高系统的可用性, 那么就必须尽可能消灭掉系统中所有的单点,并且在发生故障时,把流量自动转移到运行正常的节点。 在这篇文章中, 我会以...

2019-01-12 21:01:07 538 0

原创 如何构建高可用的系统(一):Overview

1. What 首先,我们需要对"可用性"下一个定义。 业界常用SLA(Service Level Agreement)来描述一个系统的可用性, SLA包含很多信...

2018-12-22 17:44:49 678 0

原创 全球异地多活架构设计(二): 数据层的支持

要做到全球异地多活, 一定要在数据层支持多机房写入, 并且对大多数业务场景提供最终一致性的解决方案。原因如下: 跨洲的网络延迟在100ms的数量级,如果只有单点写, 对于用户体验是种灾难 对于高频操作来说, 如果做强一致性,那么任然受限于网络延迟, 对于用户体验是种灾难 那么随之而来就有两个...

2018-12-01 15:43:43 1728 0

原创 全球异地多活架构设计(一): Why and How

很多全球化的产品, 比如facebook、twitter, 它们的用户遍布世界各地。 工程师们往往会在全球设立多个数据中心(DC)供用户访问, 我们可以称之为异地多活。在后续一段时间里, 我会写一系列的博客,和大家一起探索异地多活架构。 这篇文章主要是讨论我们为什么需要异地多活, 以及实现这种架构...

2018-11-04 18:20:37 2636 0

原创 对微信《Scalable Overload Control for Large-scale Microservice Architecture》论文的解读

这几年微服务大行其道,随之而来也伴随着很多问题: 服务注册和发现(常见解决方案如Consul, ZK, etcd) 熔断和降级 (如Hystrix) … 在服务过载时, 一个常见的解决方案是熔断。以前的熔断方案基本都是各个服务独自处理的, 即如果一个服务无法处理所有的请求, 那么就抛弃一...

2018-08-12 22:02:26 603 1

翻译 《设计数据密集型应用/DDIA》精要翻译(七) :Linearizability

定义和理解 Linearizability是常用的一致性模型(对于一致性模型,笔者后续会有专门的文章来讨论)之一,Linearizability也可以被称为原子一致性(atomic consistency),强一致性(strong consistency),立即一致性(immediate con...

2018-04-14 14:28:40 334 0

翻译 《设计数据密集型应用/DDIA》精要翻译(六) :分布式系统中的问题

这一章我们会讨论分布式系统中一些常见的问题,在下一章中我们会讨论这些问题的解决办法。 1.故障与部分失败 在分布式系统中,系统的部分组件常常会以以某种未知的方式被破坏,我们称之为部分失败/部分故障。而我们的目标就是在不可靠的组件上构建一个可靠的系统。 为了容忍部分失败: 第一...

2018-04-07 20:13:08 464 0

翻译 《设计数据密集型应用/DDIA》精要翻译(五) :事务

1. 事务的ACID 虽然ACID我们已经说滥了,这里我想再说一下一致性和隔离性。 一致性 一致性在不同的术语中有不同的含义: 在前面那篇博客中,我们讨论了副本之间的一致性(比如最终一致性、读已之写一致性等) 在CAP中,一致性表示可线性化(即只要有一个客户端成功写入,别的客户端后续...

2018-04-05 22:26:17 357 0

翻译 《设计数据密集型应用/DDIA》精要翻译(四) :副本机制

从这一章开始,我们就正式从单机应用转向了分布式应用的旅程! ps: 其实DDIA这书我1月份已经看完了,只不过那会儿实在没有心力去翻译。前段时间太太太忙了,对几千万日活的系统做了技术栈迁移、跨洲数据中心无缝平移。后续也会写文章来分享我们是怎么做的,欢迎持续关注。 副本机制的意思...

2018-03-31 15:15:20 309 0

翻译 《设计数据密集型应用/DDIA》精要翻译(三) :数据的存储和获取之底层数据结构

看了这三章,我最大的收货并不是说学到了什么新的知识,而是对以前通过各种渠道所掌握的知识重新进行了梳理和归纳,使它们有种脉络相通的感觉。 一、驱动你的数据库的数据结构 这也许是世界上最简单的数据库实现: db_set () { echo "$1,$2&...

2018-01-15 01:03:27 1978 2

翻译 《设计数据密集型应用/DDIA》精要翻译(二) :数据模型和查询语言

当我们在设计kafka、mysql这样的数据密集型应用时,数据模型也许是最为重要的一个考虑点。因为它不仅影响了代码的写法,还影响着我们解决问题的思维方式。这是第一章第二节的读书笔记,介绍了几种不同的数据模型以及数据查询语言。 (其实看目录就知道前两章都是小打小闹热热身,但是既然是神书,还...

2018-01-13 16:39:52 722 0

翻译 《设计数据密集型应用/DDIA》精要翻译(一) :reliability, scalability, maintainability

之前一段时间在看Kafka的源码分析,想学着做个分布式消息系统。后来听说 《设计数据密集型应用》这本书是2017年的神书,对这样的数据系统的内在精髓有很好的讲解。 看完这本书之后再看kafka之类的数据系统能事半功倍。因此,虽然每天忙于搬砖,但还是要抽出时间来拜读一下!这本书暂时还没有中文版...

2018-01-11 13:51:17 2121 0

原创 关于负载均衡的一些总结

之前只了解Nginx相关的负载均衡,前段时间写RPC框架的时候涉及到LB这块,就去详细学习了些,在这里做个简单的总结。 参考资料: http://blog.51cto.com/virtualadc/591396 http://www.jianshu.com/p/8a61de3f8be9 ...

2017-11-28 01:38:59 477 0

原创 如何写一个RPC框架(六):负载均衡

在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第六篇文章, 主要讲述了RPC中负载均衡这一块的内容。 常见的LB策略常见的LB策略有很多: RoundRobin (RR): 一个列表中轮着来 WeightedRoundRobin (WRR): 带权重的RR Loc...

2017-11-19 13:50:01 2339 0

原创 如何写一个RPC框架(五):服务器端实现

在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架(我已经实现了一个示例框架, 代码在我的github上)。 这是系列第五篇文章, 主要讲述了服务器端的实现。 在前面的几篇文章里, 我们已经实现了客户端创建proxy bean, 并利用它来发送请求、处理返回的全部流程: ...

2017-11-13 23:52:38 780 0

原创 如何写一个RPC框架(四):网络通信之客户端篇

在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第四篇文章, 主要讲述了客户端和服务器之间的网络通信问题。 模型定义我们需要自己来定义RPC通信所传递的内容的模型, 也就是RPCRequest和RPCResponse。@Data @Builder public cla...

2017-11-12 14:36:13 1680 1

原创 如何写一个RPC框架(三):服务注册与服务发现

在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第三篇文章, 主要讲述了服务注册和服务发现这一块。 在系列的第一篇文章中提到,我们的RPC框架需要有一个服务注册中心。 通过这个中心,服务可以把自己的信息注册进来,也可以获取到别的服务的信息(例如ip、端口、版本信息等)。...

2017-11-01 23:29:03 2671 1

原创 如何写一个RPC框架(二):利用Bean容器和动态代理简化客户端代码

在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第二篇文章, 主要讲述了如何利用Spring以及Java的动态代理简化调用别的服务的代码。 在本系列第一篇文章中,我们说到了RPC框架需要关注的第一个点,通过创建代理的方式来简化服务调用代码。如果不使用代理?如果我们不用代...

2017-10-28 18:39:12 1614 3

原创 如何写一个RPC框架(一):关注点与我的实现

开始造轮子之旅, 本期轮子:RPC框架。 在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第一篇文章, 主要从整体角度讲述了一个RPC框架组成结构与关注点, 并且附上了我的RPC框架的实现作为参考。 RPC框架的关注点首先,什么是RPC?RPC的全称是Remote...

2017-10-28 14:52:47 2551 0

原创 一次频繁Full GC的排查过程

问题描述最近公司的线上监控系统给我推送了一些kafka lag持续增长的消息,我上生产环境去看了相应的consumer的情况,发现几台机器虽然还在处理消息,但是速度明显慢了很多。问题猜测与验证我猜测是JVM频繁做Full GC,导致进程也跟着频繁卡顿,处理消息的速度自然就慢了。为了验证这个想法,先...

2017-10-03 13:22:34 11120 3

转载 Netty线程模型

《Netty实战》这本书对于Netty的线程模型讲的还是太浅了,后来我找到一篇不错的文章。原文链接:http://www.infoq.com/cn/articles/netty-threading-model?utm_source=infoq&utm_campaign=user_page&...

2017-09-24 19:29:51 461 0

原创 Netty实战读书笔记四:Bootstrapping

在深入地学习了 ChannelPipeline、ChannelHandler 和 EventLoop 之后,你接下来的问题可能是:“如何将这些部分组织起来,成为一个可实际运行的应用程序呢?” 答案是, 引导(Bootstrapping)。 Bootstrap 类引导类的层次结构包括一个抽...

2017-09-24 19:13:42 414 0

原创 Netty实战读书笔记三:EventLoop和线程模型

EventLoop 接口运行任务来处理在连接的生命周期内发生的事件是任何网络框架的基本功能。与之相应的编 程上的构造通常被称为事件循环— 一个 Netty 使用了 interface io.netty.channel. EventLoop 来适配的术语。代码清单 7-1 中说明了事件循环的基本思想...

2017-09-24 17:45:41 379 0

原创 Netty实战读书笔记二:ChannelHandler和ChannelPipeline

ChannelHandler家族Channel生命周期Interface Channel 定义了一组和 ChannelInboundHandler API 密切相关的简单但 功能强大的状态模型,表 6-1 列出了 Channel 的这 4 个状态。 Channel 的正常生命周期如图 6-1 所...

2017-09-24 16:41:20 394 0

原创 Netty实战读书笔记一:Netty的组件和设计以及它的传输

工作中用到了GRPC, 而它又用到了Netty, 所以最近在学习Netty的相关内容。 第三章 Netty的组件和设计Channel 接口基本的 I/O 操作(bind()、connect()、read()和 write())依赖于底层网络传输所提 供的原语。在基于 Java 的网络编程中,其基...

2017-09-23 15:08:25 342 0

原创 Consul实现原理系列文章3: Consul的整体架构

工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理。在前几篇文章介绍完了Consul用到的两个关键性东西Raft和Gossip之后,这篇文章会讲述Consul的整体架构。本文基于一篇别的译文,并做了一些改进和完善。 术语表 代理(agent): 代...

2017-09-07 22:37:01 4756 3

原创 Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播

工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理。这篇文章会讲述Consul是如何使用Gossip来做集群成员管理和消息广播的。 Consul使用Gossip协议来管理集群中的成员关系,以及把消息广播到集群中。而这些Gossip的特性是利用Serf...

2017-09-06 22:47:18 1090 0

原创 Consul实现原理系列文章1: 用Raft来实现分布式一致性

工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理。在前一篇文章中,我介绍了Raft算法。这篇文章会讲讲Consul是如何使用Raft算法来实现分布式一致性的。 Consul中的Raft只有以server模式运行的Consul节点,才会被认为是Raf...

2017-09-03 14:48:47 4686 0

原创 分布式一致性之Raft算法

最近工作中用到了Consul,在学习过程中,发现它是基于Raft来做分布式一致性的。正巧以前学习过Raft, 那么就正好借此机会复习一下吧!

2017-09-02 19:44:29 1272 3

原创 我在分布式session上的一些实践

这篇文章大致讲解了用Nginx+Tomcat+Spring+Redis实现分布式session。 Spring项目地址:https://github.com/hshenCode/spring_redis_exercise 1. 系统拓扑 1台Redis服务器,用来存储session。2台T...

2017-06-09 15:10:06 447 0

转载 使用消息队列需要注意的几个关键问题

工作的项目中使用了消息队列,需要注意几个关键问题: 消息的顺序问题 消息的重复问题事务消息 看了一篇不错的文章,以下是那篇文章部分内容: 一、顺序消息 消息有序指的是可以按照消息的发送顺序来消费。例如:一笔订单产生了 3 条消息,分别是订单创建、订单付款、订单完成。消费...

2017-04-19 23:58:48 17013 4

原创 RabbitMQ中的Exchange Types

整理自: https://www.rabbitmq.com https://www.cloudamqp.com/blog/2015-09-03-part4-rabbitmq-for-beginners-exchanges-routing-keys-bindings.html 《RabbitMQ...

2017-04-16 20:09:34 1757 0

原创 Linux的一点回顾

最近在看鸟哥的Linux私房菜,用来补充自己在操作Linux系统方面的一些不足,这里是对书中一些内容的整理。

2017-04-16 00:48:11 486 0

原创 微服务架构(十): 一些别的问题

除了前面的文章所提到的话题,还有一些别的在微服务架构中非常重要的问题,比如 安全测试(单个组件的测试、集成测试)CI/CD(持续集成,持续交付/持续部署) 这些话题,在这占个坑,留给日后再讨论。

2017-04-04 17:44:00 822 0

翻译 微服务架构(九): 数据管理

工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,这篇文章主要讲述了微服务架构中的数据管理。

2017-04-04 17:19:39 2607 0

翻译 微服务架构(八): 断路器

工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。 这篇文章主要讲述了微服务架构中的断路器。 翻译和整理自: http://microservices.io/patte...

2017-04-04 14:06:43 3062 0

翻译 微服务架构(七): 服务发现与服务注册

工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。 这篇文章主要讲述了微服务架构中的API Gateway。 翻译和整理自: http://microservices....

2017-04-04 13:21:13 9316 0

翻译 微服务架构(六): API Gateway

工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。 这篇文章主要讲述了微服务架构中的API Gateway。 翻译和整理自: http://microser...

2017-04-03 22:57:23 4708 0

翻译 微服务架构(五): 服务间通信方式

工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。 这篇文章主要讲述了微服务架构中服务间的通信方式。 翻译和整理自: http://microservices....

2017-04-03 22:16:15 12900 3

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