架构
文章平均质量分 78
沈鸿斌
爱生活,爱Coding
展开
-
自己动手写一个web框架(二):实现AOP
系列文章:自己动手写一个web框架(一):实现IOC与MVC一、基本介绍实现功能:controller中所有的方法被调用时,计算调用所耗时长。基本技术:动态代理二、实现思路既然要代理所有的controller类,那就用注解来区分是否为controller。定义一个Aspect注解:@Target(ElementType.TYP原创 2015-11-16 18:23:59 · 2889 阅读 · 2 评论 -
关于负载均衡的一些总结
之前只了解Nginx相关的负载均衡,前段时间写RPC框架的时候涉及到LB这块,就去详细学习了些,在这里做个简单的总结。参考资料: http://blog.51cto.com/virtualadc/591396http://www.jianshu.com/p/8a61de3f8be9http://blog.csdn.net/column/details/load-balancing.原创 2017-11-28 01:38:59 · 943 阅读 · 0 评论 -
《设计数据密集型应用/DDIA》精要翻译(四) :副本机制
从这一章开始,我们就正式从单机应用转向了分布式应用的旅程! ps: 其实DDIA这书我1月份已经看完了,只不过那会儿实在没有心力去翻译。前段时间太太太忙了,对几千万日活的系统做了技术栈迁移、跨洲数据中心无缝平移。后续也会写文章来分享我们是怎么做的,欢迎持续关注。副本机制的意思是,在多台通过网络互连的机器上保存同一份数据的多份拷贝。我们为什么需要副本:让用户在地理上离数据...翻译 2018-03-31 15:15:20 · 774 阅读 · 0 评论 -
如何写一个RPC框架(一):关注点与我的实现
开始造轮子之旅, 本期轮子:RPC框架。 在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第一篇文章, 主要从整体角度讲述了一个RPC框架组成结构与关注点, 并且附上了我的RPC框架的实现作为参考。RPC框架的关注点首先,什么是RPC?RPC的全称是Remote Procedure Call,远程过程调用。RPC框架有很多,比如hsf、dubbo等等。借助RPC框原创 2017-10-28 14:52:47 · 3512 阅读 · 0 评论 -
如何写一个RPC框架(二):利用Bean容器和动态代理简化客户端代码
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第二篇文章, 主要讲述了如何利用Spring以及Java的动态代理简化调用别的服务的代码。在本系列第一篇文章中,我们说到了RPC框架需要关注的第一个点,通过创建代理的方式来简化服务调用代码。如果不使用代理?如果我们不用代理去帮我们操心那些服务寻址、网络通信的问题,我们的代码会怎样? 我们每调用一次远端服务,就要在业务代码中原创 2017-10-28 18:39:12 · 2112 阅读 · 3 评论 -
如何写一个RPC框架(四):网络通信之客户端篇
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第四篇文章, 主要讲述了客户端和服务器之间的网络通信问题。模型定义我们需要自己来定义RPC通信所传递的内容的模型, 也就是RPCRequest和RPCResponse。@Data@Builderpublic class RPCRequest { private String requestId; pr原创 2017-11-12 14:36:13 · 2071 阅读 · 1 评论 -
如何写一个RPC框架(五):服务器端实现
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架(我已经实现了一个示例框架, 代码在我的github上)。 这是系列第五篇文章, 主要讲述了服务器端的实现。在前面的几篇文章里, 我们已经实现了客户端创建proxy bean, 并利用它来发送请求、处理返回的全部流程: 扫描package找出需要代理的service通过服务注册中心和Load Balancer获取se原创 2017-11-13 23:52:38 · 1044 阅读 · 0 评论 -
如何写一个RPC框架(六):负载均衡
在后续一段时间里, 我会写一系列文章来讲述如何实现一个RPC框架。 这是系列第六篇文章, 主要讲述了RPC中负载均衡这一块的内容。常见的LB策略常见的LB策略有很多:RoundRobin (RR): 一个列表中轮着来WeightedRoundRobin (WRR): 带权重的RRLocalFirst:本地服务优先Random:随机选择ConsistentHash: 一致性哈希这些策原创 2017-11-19 13:50:01 · 3337 阅读 · 0 评论 -
全球异地多活架构设计(一): Why and How
很多全球化的产品, 比如facebook、twitter, 它们的用户遍布世界各地。 工程师们往往会在全球设立多个数据中心(DC)供用户访问, 我们可以称之为异地多活。在后续一段时间里, 我会写一系列的博客,和大家一起探索异地多活架构。这篇文章主要是讨论我们为什么需要异地多活, 以及实现这种架构所需要解决的问题。一、异地多活的好处1. 提高用户体验一个产品最重要的是提供良好的用户体验,这对...原创 2018-11-04 18:20:37 · 4393 阅读 · 0 评论 -
全球异地多活架构设计(二): 数据层的支持
要做到全球异地多活, 一定要在数据层支持多机房写入, 并且对大多数业务场景提供最终一致性的解决方案。原因如下:跨洲的网络延迟在100ms的数量级,如果只有单点写, 对于用户体验是种灾难对于高频操作来说, 如果做强一致性,那么任然受限于网络延迟, 对于用户体验是种灾难那么随之而来就有两个问题需要解决:跨机房的数据同步多点写入时的数据冲突处理一 、数据同步数据的同步有几个核心问...原创 2018-12-01 15:43:43 · 3021 阅读 · 0 评论 -
如何构建高可用的系统(一):Overview
1. What首先,我们需要对"可用性"下一个定义。 业界常用SLA(Service Level Agreement)来描述一个系统的可用性, SLA包含很多信息(服务内容、故障恢复时间、可用性等), 在这里我们笼统的用“N个9”来指代,比如4个9指的是99.99%的可用性、 5个9指的是99.999%的可用性。假如一个系统声称它的年可用性是4个9, 那它提供的可用性承诺原创 2018-12-22 17:44:49 · 1416 阅读 · 0 评论 -
如何构建高可用的系统(二): 消除单点与自动故障转移
前一篇文章我们讲到, 一切单点都是不可靠的, 如果系统中某个地方可能会出问题(就算概率很低),那么它迟早会出问题。 也就是我们常说的Murphy’s Law。如果要提高系统的可用性, 那么就必须尽可能消灭掉系统中所有的单点,并且在发生故障时,把流量自动转移到运行正常的节点。在这篇文章中, 我会以互联网产品后端常见的架构为例, 讲述如何达到这个目标。1.常见系统架构互联网后端应用的常见架构可...原创 2019-01-12 21:01:07 · 1484 阅读 · 0 评论 -
Consul实现原理系列文章3: Consul的整体架构
工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理。在前几篇文章介绍完了Consul用到的两个关键性东西Raft和Gossip之后,这篇文章会讲述Consul的整体架构。本文基于一篇别的译文,并做了一些改进和完善。术语表代理(agent): 代理是Consul集群上每个成员的守护进程,它是由consul agent开始运行。代理能够以客户端或服务原创 2017-09-07 22:37:01 · 6107 阅读 · 3 评论 -
Consul实现原理系列文章2: 用Gossip来做集群成员管理和消息广播
工作中用到了Consul来做服务发现,之后一段时间里,我会陆续发一些文章来讲述Consul实现原理。这篇文章会讲述Consul是如何使用Gossip来做集群成员管理和消息广播的。Consul使用Gossip协议来管理集群中的成员关系,以及把消息广播到集群中。而这些Gossip的特性是利用Serf这个lib来实现的。下面,我们先来看看什么是Gossip协议。Gossip协议 在学习Gossip的原创 2017-09-06 22:47:18 · 1768 阅读 · 0 评论 -
自己动手写一个web框架(一):实现IOC与MVC
最近这段时间在研究怎么写一个web框架,自己也动手写了个雏形,在这个过程中受益良多。写个文章记录下思路。另外,强烈推荐《架构探险:从零开始写Java Web框架》这本书,虽然我现在只看了第三章和第四章的一点点,但是所获颇丰。一、基本介绍语言:java基本技术: 反射,注解用到工具: maven已实现功能: ioc,mvc待实现:aop如何一边写框架一边使用框架:原创 2015-11-12 17:40:13 · 3196 阅读 · 2 评论 -
微服务架构(一):单一应用架构与微服务架构
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。这篇文章是对 http://microservices.io/patterns/monolithic.html 和 http://microservices.io/patterns/microservices.html 的翻译 2017-04-01 19:34:42 · 9778 阅读 · 0 评论 -
微服务架构(二): 如何把应用分解成多个服务
工作中使用了微服务,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。上一篇文章详细说明了单一应用架构与微服务架构各自的优缺点,这篇文章是对 http://microservices.io/patterns/decomposition/decompose-by-business-capabi翻译 2017-04-02 13:59:51 · 18695 阅读 · 0 评论 -
微服务架构(三): 部署
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。这篇文章主要讲述了部署一个微服务架构的应用有哪些可选方案。翻译和整理自:http://microservices.io/patterns/deployment/single-service-per-翻译 2017-04-02 21:34:36 · 4300 阅读 · 1 评论 -
微服务架构(四): 横切关注点/普适性问题
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。这篇文章主要讲述了微服务架构的应用普遍需要关注的点。翻译和整理自:http://microservices.io/patterns/microservice-chassis.htmlhttp://micro翻译 2017-04-03 21:31:23 · 1761 阅读 · 0 评论 -
微服务架构(五): 服务间通信方式
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。这篇文章主要讲述了微服务架构中服务间的通信方式。翻译和整理自:http://microservices.io/patterns/communication-style/rpi.htmlhttp://mi翻译 2017-04-03 22:16:15 · 16412 阅读 · 4 评论 -
微服务架构(六): API Gateway
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。这篇文章主要讲述了微服务架构中的API Gateway。翻译和整理自:http://microservices.io/patterns/apigateway.html一、问题微服翻译 2017-04-03 22:57:23 · 5389 阅读 · 0 评论 -
微服务架构(七): 服务发现与服务注册
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。这篇文章主要讲述了微服务架构中的API Gateway。翻译和整理自:http://microservices.io/patterns/client-side-discovery.htmlhttp://翻译 2017-04-04 13:21:13 · 10576 阅读 · 0 评论 -
微服务架构(八): 断路器
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,同时我也会在github上写一个microservices的应用框架(地址会在后续文章给出)。这篇文章主要讲述了微服务架构中的断路器。翻译和整理自:http://microservices.io/patterns/reliability/circuit-breaker.html翻译 2017-04-04 14:06:43 · 3562 阅读 · 0 评论 -
微服务架构(九): 数据管理
工作中使用了微服务架构,接下来的一段时间里,我会写一系列的文章来介绍微服务架构,这篇文章主要讲述了微服务架构中的数据管理。翻译 2017-04-04 17:19:39 · 3350 阅读 · 0 评论 -
我在分布式session上的一些实践
这篇文章大致讲解了用Nginx+Tomcat+Spring+Redis实现分布式session。Spring项目地址:https://github.com/hshenCode/spring_redis_exercise1. 系统拓扑1台Redis服务器,用来存储session。2台Tomcat服务器,访问Redis进行session存储。1台Nginx服务器,作为反向代原创 2017-06-09 15:10:06 · 552 阅读 · 0 评论 -
如何构建高可用的系统(三):服务治理篇
在如何构建高可用的系统(一):Overview中, 我提到了以下几点:系统依赖的一切下游系统都是不可靠的, 它们随时可能出问题系统的上游可能有多个, 而且每个上游的行为都是不可预知的。如果某个上游抽风把我的系统搞崩, 那么就会影响所有的上游高可用是有前提条件的,一个系统对当前的负载能提供高可用, 不代表负载上升之后仍然高可用如果把这几个问题,映射到现在非常流行的“微服务架构”下,就可以...原创 2019-01-19 19:32:16 · 1292 阅读 · 2 评论