
分布式架构
服务端开发
这个作者很懒,什么都没留下…
展开
-
异地多活的设计思路
一. 什么是异地多活异地多活是系统高可用的一种解决方案,它通过在多个不同机房建立多个数据中心,并且使这多个数据中心都可以同时在线提供服务来避免当出现机房断电、光纤被挖断等场景出现服务不可用的场景,实现服务高可用,同时这多个数据中心之间需要进行数据相互同步来保证数据的最终一致性。二. 哪些业务需要异地多活,哪些可以做到异地多活通过异地多活实现高可用并不是在所有场景下都可以做到的,通常需要结合业务重要程度,以及业务是否存在全局逻辑,以及异地多活场景中解决全局逻辑的成本来考虑是否需要做异地多活,同时需要考虑原创 2020-05-30 12:53:32 · 1787 阅读 · 0 评论 -
浅析数据高可用之异地多活
一、高可用的解决方案异地多活是服务高可用的一种解决方案,具体为在不同城市建立数据中心,即数据机房,然后各数据中心之间互相同步数据,相对于“冷备”而言,“多活”是指任意一个数据中心宕机了,可以马上切换到另外一个数据中心,继续提供服务,如修改负载均衡器的配置,将流量切换到另外一个机房。除了高可用外,异地多活还可以使不同地区的用户访问不同的数据中心,提高了访问速度,从而提高了用户体验。二、适用的业务类型异地多活一般适合于能容忍数据存在短暂不一致的业务,如用户中心,但是像金钱之类的业务则不太适合,如假原创 2020-05-27 11:36:07 · 1200 阅读 · 0 评论 -
分布式系统设计概述
概述分布式系统主要用于解决单机在处理高并发请求,海量数据存储和海量数据计算分析时的瓶颈,通过将系统拆分为各个子系统,各个子系统可以在各自的机器上部署从而来实现整个系统的横向拓展。其中针对系统业务的差异,分布式系统设计的思路也会存在差异,以下主要是针对企业级应用服务,数据存储访问,数据计算分析服务来做个分析。1. 企业应用服务集群部署应对高并发请求的处理,同一个服务部署多个节点来解决单...原创 2019-07-03 11:52:26 · 3739 阅读 · 0 评论 -
分布式系统设计之高性能、高可用与高并发
概述在现代的互联网应用设计当中,通常会提到应用系统需要达到高性能,高可用和高并发这三“高”目标,其中这三个概念既有联系又有区别。高性能首先高性能是指应用系统对于客户端请求的处理速度快,响应时间短,对于用户来说就是该应用的操作流畅,拥有良好的用户体验。所以高性能是应用系统所需要具备的基本条件,不过不同业务的高性能的定义会有差别,如在线网络游戏需要保证在毫秒级别的响应时间,否则会让用户感觉...原创 2019-07-27 11:47:02 · 5832 阅读 · 0 评论 -
分布式系统设计之CAP理论
一、概述CAP理论是美国加州大学的计算机科学家 Eric Brewer 在1998年提出的,该理论主要指出了分布式系统设计中存在两个质量指标:数据强一致性(Consistent)和服务高可用(Avaliability),以及一个不可避免的缺陷:网络分区,以及对应的网络分区容忍(Partition tolerance),其中数据一致性和服务可用性在分布式系统中是不能同时存在的,即要么保证数据的强...原创 2019-07-07 09:59:23 · 3017 阅读 · 0 评论 -
分布式系统设计之容错机制
前言由于分布式系统是由多个分布在不同网络节点的子系统或者称为子服务组成,在处理客 户端请求时,服务之间需要通过网络来进行相互调用,所以如果某个服务由于宕机或者其他 原因导致不可用,则服务调用方需要采取一定的容错机制来避免该不可用服务影响了当前服 务的请求处理。即一个服务可能会通过 RPC 调用多个其他服务,如果其中某个服务不可用, 则需要保证另外的多个服务的处理结果,以及当前发起 RPC 服...原创 2019-11-19 12:03:02 · 6011 阅读 · 0 评论 -
分布式系统设计之负载均衡算法
概述在分布式系统设计当中,一般会对服务进行集群部署,集群中的多个节点提供相同的服务,所以可以将对该服务的请求分发给集群的任意一个节点来处理。为了将请求合理分发给集群的节点进行处理,即既要保证集群的每个节点都能够分配到请求,又能够实现不会给某个节点分配过多请求,导致超过节点处理能力,所以需要基于一定的规则来进行请求分发,这个规则也称为负载均衡算法。以下详细分析几种常见的负载均衡算法的工作原理。...原创 2019-07-11 23:26:47 · 3511 阅读 · 0 评论 -
Nginx七层负载均衡原理解析
一、网络协议:应用层七层负载均衡主要工作在网络七层ISO协议的第七层,即应用层。由于在应用层主要是处理对应的应用层协议的相关数据,如HTTP协议,而无法操作传输层TCP连接相关细节,故在七层负载均衡当中,负载均衡器主要是基于应用层协议的相关数据来进行请求转发,如对于HTTP协议,则主要是基于HTTP的Header头部信息、URL信息、Cookies等信息来进行集群节点的选择。由于负载均衡器需要...原创 2019-09-22 11:11:29 · 3544 阅读 · 0 评论 -
LVS四层负载均衡原理解析
一、网络层协议网络协议是由七层ISO协议定义,自底向上分为物理层、数据链路层、网络层、传输层、会话层、表现层和应用层。四层负载均衡主要工作在网络七层ISO协议的第四层,即传输层。传输层的代表协议为TCP。相对于网络层,传输层对于数据包的区分,除了包含IP地址外,还包含端口号,并且TCP实现的是通过在不同机器的两个进程之间建立连接来进行通信。二、集群节点选择与连接建立所以四层负载均衡...原创 2019-09-21 08:05:20 · 3771 阅读 · 0 评论 -
分布式系统设计之限流算法剖析:漏桶与令牌桶
前言限流机制主要用于对流入系统的请求流量进行限制,保证在任何时候进入系统的请求流 量都是可控的。即不能超过系统预设的最大流量值,超过则需要排队等待或者直接拒绝,从 而避免高并发流量全部涌入系统,导致超出了系统的处理能力而出现系统机器宕机和服务不 可用问题。限流机制在实现层面,一般是基于漏桶算法或令牌桶算法来实现的,如下对这两种算法进行具体分析。漏桶算法对于漏桶算法,首先可以抽象为在业务服务...原创 2019-11-24 10:31:24 · 2424 阅读 · 0 评论 -
秒杀系统设计思路与实战(含源码实现)
一、限流与降级客户端限流按钮置灰js控制每秒只能发送一个请求站点层限流1. Nginx限流Nginx官方版本限制IP的连接和并发分别有两个模块:limit_req_zone: 用来限制单位时间内的请求数,即速率限制,采用的漏桶算法。limit_req_conn: 用来限制同一时间连接数,即并发限制。2. 站点层限流客户端限流一般可以限制住普通用户,对于高端用户,则可能使...原创 2019-05-08 22:38:15 · 16032 阅读 · 19 评论 -
多租户系统设计之权限控制
概述业务层面的隔离是用户可以直接感知的隔离,也是多租户系统必须实现的隔离,在上篇文章中提到的数据隔离主要是针对数据存储层面而言的,用户一般感知不到,所以如“基于数据行的租户唯一标识”方案中,即使存储在相同的数据表也是可以的。在系统设计层面,业务隔离就是需要做好权限控制。基于RBAC模式的权限模型设计多租户系统的权限控制也是基于RBAC模式来设计的,即用户,角色,权限和资源(针对简单业务可以将...原创 2020-03-13 21:29:54 · 11504 阅读 · 0 评论 -
多租户系统设计之数据存储隔离
一、多租户架构的理解核心定义多租户架构的核心定义包括两点,第一点是一个服务,或者更通俗地讲是一套代码,被多方客户共用,第二点是不同客户之间的数据在逻辑上是隔离的,即每方客户拥有自己独立的数据空间,并在这个独立的数据空间内完成自身的业务行为。其中客户的群体需要根据这个服务的类型来区分,如 Saas 服务提供商的客户一般是不同的企业,而企业内部系统的客户则一般是不同的团队或者是不同的产品业务线。...原创 2020-03-07 11:20:58 · 4812 阅读 · 0 评论 -
跨语言RPC框架:Gprc和protobuf的使用例子分析(包含完整项目源码)
概述Grpc是Google开发的一款高性能、跨语言的RPC框架,使用Google的数据序列化框架protobuf作为IDL(接口定义语言)跨语言的服务接口定义,以及数据序列化。在通信层面基于HTTP3.0实现,这是与大多数RPC框架基于TCP实现不一样的,主要原因是HTTP2.0在性能方面有了比较大的提升。除此之外,Grpc的设计的其中一个目的就是提供移动客户端与服务端的RPC调用,所以基于H...原创 2019-07-21 11:57:53 · 4600 阅读 · 0 评论 -
跨语言RPC框架:Thrift的使用例子解析(包含完整项目源码)
概述Thrift是由FaceBook于2007年开发的一款高性能,跨语言的RPC框架,支持多种不同语言之间的RPC调用,如Java,C++等,以下基于一个HelloWorld项目来展示Thrift框架的基本使用方法,项目的完整代码请参见:Thrift项目:Github thrift-IDLHelloWorld demo项目:Github thrift-demo1. 创建Thrift项目...原创 2019-07-20 01:03:45 · 3514 阅读 · 0 评论 -
本地缓存与分布式缓存的优缺点、适用场景与实现分析
一、缓存的概念在服务端编程当中,缓存主要是指将数据库的数据加载到内存中,之后对该数据的访问都在内存中完成,从而减少了对数据库的访问,解决了高并发场景中数据库容易成为性能瓶颈的问题;以及基于内存的访问速度高于磁盘的访问速度的原理(数据库读取数据一般需要从磁盘读取),提高了数据的访问速度和程序性能。根据缓存是否与应用进程属于同一进程,可以将内存分为本地缓存和分布式缓存。本地缓存是在同一个进程内的...原创 2019-10-13 12:16:44 · 10912 阅读 · 0 评论