AKF服务拆分原则
AKF服务拆分原则在设计微服务的时候,我们一般会遵循以下4个原则:
1)AKF拆分原则
2)前后端分离原则
3)无状态服务
4)restful的通信风格
下面我们来详细了解以下AKF拆分原则。
1 AKF拆分原则 业界对可扩展系统架构设计有一个朴素的概念,就是:**通过加机器可以解决容量和可用性问题(如果一台不行就两台)
这一理念在“云计算”概念疯狂流行的今天。得到了广泛的认可。对于一个规模迅速增长的系统而言。容量和性能问题当然是首当其冲的。但是随着时间的向前,系统规模的增长,除了面对性能与容量的问题外,还需要面对功能与模块数量上增长带来的系统复杂性问题。以及业务变化带来的提供差异化服务问题。而许多系统在架构设计时并未充分考虑到这些问题,导致系统的重构成为常态。从而影响业务交付能力,还浪费人力财力。对此《可扩展的艺术》一书提出了一个更加系统的可扩展模型—-AKF可扩展立方。这个立方体中沿着三个坐标轴设置分别为X,Y,Z。
2 Y轴功能Y轴扩展会将庞大的整体应用拆分为多个服务。每个服务实现一组相关的功能。如订单管理,客户管理等。在工程上常见的方案是服务化架构(SOA),比如对于一个电子商 ...
CAP定理
CAP定理CAP理论概述 一个分布式系统最多只能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)这三项中的两 项。
CAP的定义Consistency 一致性
一致性指“all nodes see the same data at the same time”,即所有节点在同一时间的数据完全一致。
一致性是因为多个数据拷贝下并发读写才有的问题,因此理解时一定要注意结合考虑多个数据拷贝下并发读写的场景。
对于一致性,可以分为从客户端和服务端两个不同的视角。
客户端
从客户端来看,一致性主要指的是多并发访问时更新过的数据如何获取的问题。
服务端
从服务端来看,则是更新如何分布到整个系统,以保证数据最终一致。
对于一致性,可以分为强/弱/最终一致性三类
从客户端角度,多进程并发访问时,更新过的数据在不同进程如何获取的不同策略,决定了不同的一致性。
强一致性
对于关系型数据库,要求更新过的数据能被后续的访问都能看到,这是强一致性。
弱一致性
如果能容忍后续的部分或者全部访问不到,则是弱 ...
缓存的过期策略
缓存的过期策略LFU,FIFO,LRU
FIFO(First In First out):先见先出,淘汰最先近来的页面,新进来的页面最迟被淘汰,完全符合队列。
按照“先进先出(First In,First Out)”的原理淘汰数据,正好符合队列的特性,数据结构上使用队列Queue来实现。 新访问的数据插入FIFO队列尾部,数据在FIFO队列中顺序移动; 淘汰FIFO队列头部的数据;
LRU(Least recently used):最近最少使用,淘汰最近不使用的页面
(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。最常见的实现是使用一个链表保存缓存数据 , 新数据插入到链表头部; 每当缓存命中(即缓存数据被访问),则将数据移到链表头部; 当链表满的时候,将链表尾部的数据丢弃。
LFU(Least frequently used): 最近使用次数最少, 淘汰使用次数最少的页面
(Least Frequently Used)算法根据数据的历史访问频率来淘汰数据,其 ...
redis
redisredis介绍Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。
redis常用的数据类型{"t":"heading","d":1,"v":"redis常用的数据类型","c":[{"t":"heading","d":2,"v":"String","c":[{"t":"heading","d":3,"v":" ...
java中的位和位移运算符
位和位移运算符
运算符
描述
例子
&
如果相对应的位数都是1,则结果为1,否则为0
(1100&1101) = 1100
|
如果对应的位数有一个是1,则结果是1,否则为0
(1100&1101) = 1101
^
如果相对应 位的值相同则取0,否则取1
(1100&1101) = 0001
~
按位取反运算符,反转操作数的每一位,即0变成1,1变成0
~ 1100 = 0011
<<
按位左移运算符,按照指定的位数左移,不分正负数,低位补0,带符号位移,高位移出,低位补0,移动位数超过该类型的最大位数,则进行取模,如对Integer型左移34位,实际上只移动了两位。左移一位相当于乘以2的一次方,左移n位相当于乘以2的n次方。
1100 << 1 = 1000
>>
按位右移运算符。按照指定的位数右移并以符号位填空 ,如果该数为正,则高位补0,若为负数,则高位补1;带符号右移
1100 >>1 = 1110
>>>
按位右移补0操作,按照指定的位数右移并 ...
Keepalived
KeepalivedLVS集群的缺点
LVS能够实现四层负载,能够支持足够大的并发量,但使用LVS负载均衡集群有以下两个缺点。
① 如果调度器(Director)挂了(不可用),将会导致整个系统不可用,从而调度器成为了单点故障(SPOF)。
② 调度器(Director)无法对后端RealServer做健康状态检测。因此,如果后端的某一台RealServer挂了,前端调度器将无法得知,仍然会向该RealServer调度请求,导致服务不可用;另外,如果某一台挂了的RealServer但已经恢复正常并重新提供服务时,前端调度器也无法得知,并将其加入调度队列。
因此,为了能够使前端调度器(Director)能够冗余、使Director能够对后端各RS做健康状态检测,并按需增删RS,需要引入高可用集群的解决方案。以下介绍的是Keepalived高可用软件。
Keepalived的介绍
什么是keepalived呢?keepalived是实现高可用的一种轻量级的技术手段,主要用来防止单点故障(单点故障是指一旦某一点出现故障就会导致整个系统架构的不可用)的发生。
Keepalived的高可用功能是 ...
LVS
LVS的介绍LVS是什么?LVS(Linux Virtual Server,Linux虚拟服务器)是由章文嵩开发的一款开源软件(遵循GPL协议)。LVS工作在layer 4,又称为四层路由/四层交换,能够根据请求报文的目标IP地址和目标PORT将其调度转发至后端的某台服务器上,调度转发是根据调度算法来进行的。
LVS由两部分组成,分别是工作在内核空间的ipvs框架和工作在用户空间的ipvsadm命令。ipvsadm是工作在用户空间的命令行工具,用于管理集群服务及集群服务上的Real Server(RS),而ipvs则是工作于内核上的netfilter的INPUT钩子上的程序,其功能是根据用户定义的集群实现对请求报文的转发。
LVS支持基于TCP、UDP、SCTP、AH、EST、AH_EST等协议进行调度。
为什么要使用LVS?
LVS是负载均衡能力最强的一款软件,对于选择LVS作为负载均衡的原因总结如下。
1、相比于Nginx、Haproxy等负载均衡器,LVS支持较大的并发量。Nginx、Haproxy是工作在七层的负载均衡器,因此需要监听在一个端口上,同时对于每一个客户端都需要打开 ...
LVS三种搭建模式
lvs的三种搭建模型
NAT模式优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
不足:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。
TUN模式我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能 ...
tcpip协议
Tcp/ip协议 TCP/IP传输协议,即传输控制/网络协议,也叫作网络通讯协议
三次握手为了对每次发送的数据量进行跟踪与协商,确保数据段的发送和接收同步,根据所接收到的数据量而确认数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP第一次握手: 建立连接时,客户端发送syn包(seq=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。第二次握手: 服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(seq=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。第三次握手: 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
为什么需要三次 ...
http协议
http协议HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。
HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出。
HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
http协议的特点1、简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单, ...