大型分布式网站架构设计与实践1

第1章 面向服务的体系架构(SOA)

分布式应用架构的演变:单一应用架构--->垂直应用架构----->分布式应用架构

1.1 基于TCP协议的RPC

1.1.1 RPC名词解释

1、RPC:remote process call,远程过程调用,有RMI、WebService等诸多成熟的方案

2、如果服务提供煮 一个集群而非单台机器,则需要根据相应的负载均衡策略,选取其中一台进行调用。

1.1.2 对象的序列化

1、无论是何种类型的数据,最终都转换成二进制流在网络上进行传输,数据的发送方需要将对象转换成为二进制流,才能在网络上进行传输,而数据的接收方则需要把二进制流再恢复为对象

2、序列化与反序列化

对象------>二进制流=====对象的序列化

二进制流---------->对象======对象的反序列化

3、Java的序列化与反序列化

1.1.3 基于TCP协议实现RPC

java的socketAPI使用

1.2 基于Http协议的RPC

1.2.1 HTTP协议栈

1、HTTP协议属于应用层协议,它是构建在TCP和IP协议之上,处于TCP/IP体系架构中的顶端。

2、HTTP网络协议栈:网络接口层---->IP(网络层)---->TCP(传输层)---->HTTP(应用层)

3、协议请求和响应的格式

Request:

encode:0(0表示GBK,1表示UTF8)

commandlength:5

command:HELLO

 

Response:

encode:0(0表示GBK,1表示UTF8)

responselength:5

response:HELLO

1.2.2 http请求与响应

1、Web浏览器与Web服务器之间的一次HTTP请求与响应过程,需要以下几个步骤

<1>浏览器端根据所使用的http协议,解析出url对应的域名

<2>通过DNS域名解析,查询出应该域名对应的IP地址

<3>通过url解析出对应的端口号(如果是80端口,默认可以省略)

<4>浏览器发起并建立到IP所对应的80端口连接

<5>浏览器向服务器发送Get请求

<6>服务器响应浏览器的请求,浏览器读取响应,渲染网页

<7>浏览器关闭与服务器的连接

1.2.3 通过httpclient发送http请求

httpclient是Apache基金会下的一个子项目,它对http协议通信的过程进行了封装,提供高效且功能丰富的客户端编程工具包

1.2.4 使用HTTP协议的优势

优点:TCP协议实现的RPC过于底层,基于HTTP的屏蔽了底层细节,使用便捷和简单

缺点:比TCP协议传输的字节数更多

1.2.5 JSON和XML

将对象序列化成为JSON或XML格式,也可以在网络上非常方便地进行传输

1.2.6 RESful和RPC

1、RPC风格:http://hostname/provider.do?service=com.http.sayhello&format=json&timestamp=2013-07-07-13-22-09&arg1=arg1&arg2=arg2

2、RESTful风格的URL

post、get、put、delete

1.2.7 基于HTTP协议的RPC的实现

1.3 服务的路由和负载均衡

1.3.1 服务化的演变

1、SOA架构中,服务消费者通过服务名称,在众多服务中找到要调用的服务的地址列表,称为服务的路由

2、在请求到来时,为了将请求均衡地分配到后端服务器,负载均衡程序将从服务对应的地址列表中,通过相应的负载均衡算法和规则,选取一台服务器进行访问,这个过程称为服务的负载均衡。

3、负载均衡:硬件:F5,软件:LVS,Nginx等

4、一个能够动态注册和获取服务信息的地方,来统一管理服务名称和其对应的服务器列表信息,称之为服务配置中心。

5、zookeeper的持久和非持久节点,可以让我们实时地感知到后端服务器的状态。

1.3.2 负载均衡算法

1、轮询法

算法:将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

缺点:轮询时,负载均衡算法无法获知是否有新增机器或下线机器

2、随机法

算法:通过系统随机函数,根据后端服务器列表的大小值来随机选取其中一台进行访问

3、源地址哈希法

算法:源地址哈希的思想是获取客户端访问的IP地址值,通过哈希函数计算得到一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是要访问的服务器的序号。一IP一机器。

4、加权轮询法

算法:配置高、负载低的机器配置更高的权重,让其处理更多的请求,而低配置、负载高的机器,则给其分配较低的权重,降低其系统负载。

5、加权随机法

算法:与加权轮询法类似,但不同的是,它是按照权重来随机选取服务器的,而非顺序。

6、最小连接数法

算法:根据后端服务器当前的连接情况,动态地选取其中当前积压连接数最小的一台服务器来处理当前请求,尽可能地提高后端服务器的利用效率,将负载合理地分流到每一台机器。

1.3.3 动态配置规则

groovy脚本+zookeeper的watch机制来实现动态配置规则

1.3.4 zookeeper介绍与环境搭建

1、zookeeper是一个针对大型分布式系统的可靠的协调系统,集群间通过zab协议来保持数据一致性。

1)配置维护

2)名字服务

3)分布式同步

4)组服务

详细见zookeeper的章节

1.3.5 zookeeper api使用简介

详细见zookeeper的章节

1.3.6 zkclient的使用

详细见zookeeper的章节

1.3.7 路由和负载均衡的实现

1、LVS、Nginx等负载均衡软件

2、通过zookeeper创建的节点,配合watcher机制,来实现服务注册及获取服务上下线的状态。

1.4 HTTP服务网关

1、网关的作用:

1)相应的权限与安全校验

2)到服务配置中心找到相应的服务名称节点

3)加载对应服务提供者的地址列表

4)根据负载均衡算法,发起远程调用

5)接收服务端响应,再输出给客户端app

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
分布式数据库是指将一个大型数据库拆分为多个子数据库,这些子数据库可以分布在不同的服务器或地域上,并通过网络连接实现数据共享与交互的一种架构。其中,mycat中间件是一种支持分布式数据库架构的开源mysql集群代理,可以对多个mysql数据库进行分片、读写分离、负载均衡等优化,提高了数据库的性能和可扩展性。 企业实践中,分布式数据库架构主要应用于如电子商务、金融、游戏等高并发场景,将数据分散到多台服务器上,避免单点故障和瓶颈的发生,保证了数据库的高可用性和可靠性。同时,通过mycat中间件对读写请求进行分离,解决了热点数据的问题,有效提升了数据库的读写性能。此外,mycat可以通过数据分片的方式实现数据的水平扩展,满足企业的业务需求。 例如,支付宝就使用了分布式数据库架构,并在mycat的基础上进行了二次开发。支付宝的数据库集群包括了多个分片节点,并通过mycat对访问进行路由和负载均衡,实现了近乎线性的扩展性。在2017年双十一的购物狂欢节中,支付宝的交易额达到了1207亿,没有发生任何事故,这得益于他们稳定的分布式数据库架构。 总之,分布式数据库架构和mycat中间件已经广泛应用于企业实践中,成为了提高数据库性能和可扩展性的有力工具。同时,随着大数据、云计算等新技术的发展,分布式数据库架构的重要性和应用前景将会越来越广阔。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值