基于ZooKeeper的持久和非持久节点,我们能够近乎实时地感知到后端服务器的状态(上线、下线、宕机)。通过集群间zab协议,使得服务配置信息能够保持一致。而ZooKeeper本身容错特性和leader选举机制,能保障我们方便地进行扩容。通过ZooKeeper来实现服务动态注册、机器上线与下线的动态感知,扩容方便,容错性好,且无中心性结构能够解决之前使用负载均衡设备所带来的单点故障问题,只有当配置信息更新时才会去ZooKeeper上获取最新的服务地址列表,其他时候使用本地缓存即可。
2.2.4 HTTP服务网关
相同的数据,相同的功能,在不同的平台上,没有必要进行重复的开发,可以很好的利用SOA体系(面向服务的体系架构),达成公共部分逻辑的复用,避免重复造轮子,降低开发和运维成本。由于客户端APP、第三方ISV(第三方软件厂商)都必须通过公共网络来发起客户端请求,考虑到HTTP协议其所包含的信息都是未经加密的明文,包括请求的参数、返回值、cookie、head等,外界能够通过对通信进行监听,模拟出请求和响应双方的格式,伪造请求与响应,修改和窃取各种信息。
这就需要用到网关(gateway),如下图所示,gateway接受外部各种APP的HTTP请求,完成相应的权限和安全校验。当校验通过后,根据传入的服务名称,到服务配置中心找到相应的服务名称节点,并加载对应服务者的地址列表,通过前面所提到的负载均衡算法,选取机器发起远程调用,将客户端参数传递到后端服务端。服务提供方根据所传入的参数,给出正确的响应,但gateway接收到响应后,再将响应输出给客户端app。
一方面通过gateway能够很好的解决安全问题,在恶意请求或者非授权请求到达后端服务器之前进行拦截和过滤。另一方面,gateway通过服务名称进行服务的路由和负载均衡调度,使得不同的平台之间能够很好的复用公共的业务逻辑,降低了开发和运维成本。
服务提供者是不直接对外提供服务的,因此,对于外部的APP来说,他依赖gateway进行服务的路由以及请求的转发,gateway是整个网络的核心节点,一旦gateway失效,所有的依赖他的外部APP都将无法使用。并且,所有的请求均经过gateway进行校验和请求转发,其流量是整个后端集群流量之和,流量非常的巨大。因此需要考虑到系统流浪的监控和容量规划,以及geteway集群的可扩展性,以便在流量达到极限之前,能够快速方便地进行系统扩容。
下图是一种网关集群的架构方案:一组对等的服务器组成网关集群,接受外部APP的http请求,当流量“水位”达到警戒值时,能够较为方便的增加机器进行扩容。网关的前面有两台负载均衡设备,负责对网关集群进行负载均衡。负载均衡设备之间进行心跳检测,一旦其中一台宕机,另一台则变更自己的地址,接管宕机的这台设备的流量。
2.3 分布式系统基础支撑
一个大型、稳健、成熟的分布式系统的背后,往往会涉及众多的支撑系统,这些支撑系统就称为分布式系统的基础支撑。支撑系统包括分布式缓存、持久化存储、分布式文件系统、分布式消息系统、搜索引擎、监控系统、日志收集系统、数据仓库、实时计算、离线计算、CDN系统、负载均衡系统、消息推送系统、自动化运维系统等,本节重点叙述分布式缓存、持久化存储、分布式文件系统的技术实现。
2.3.1 分布式缓存
分布式缓存能够高性能地读取数据、能够动态地扩展缓存节点、能够自动发现和切换故障节点、能够自动均衡数据分区,而且能够为使用者提供图形化的管理界面,部署和维护都十分方便。分布式缓存已经在分布式领域、云计算领域得到了广泛的应用。
分布式缓存出于如下考虑,首先是缓存本身的水平线性扩展问题,其次是缓存大并发下的本身的性能问题,再次避免缓存的单点故障问题(多副本和副本一致性)。分布式缓存的核心技术包括首先是内存本身的管理问题,包括了内存的分配,管理和回收机制。其次是分布式管理和分布式算法,其次是缓存键值管理和路由。
许多Web 应用程序都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。但随着数据量的增大,访问的集中,就会出现REBMS的负担加重,数据库响应恶化,网站显示延迟等重大影响。Memcached是高性能的分布式内存缓存服务器。一般的使用目的是通过缓存数据库查询结果,减少数据库的访问次数,以提高动态Web 应用的速度、提高扩展性。如图:
Memcached作为高速运行的分布式缓存服务器具有以下特点。
1、协议简单:memcached的服务器客户端通信并不使用复杂的MXL等格式,而是使用简单的基于文本的协议。
2、基于libevent的事件处理:libevent是个程序库,他将Linux 的epoll、BSD类操作系统的kqueue等时间处理功能封装成统一的接口。memcached使用这个libevent库,因此能在Linux、BSD、Solaris等操作系统上发挥其高性能。
3、内置内存存储方式:为了提高性能,memcached中保存的数据都存储在memcached内置的内存存储空间中。由于数据仅存在于内存中,因此重启memcached,重启操作系统会导致全部数据消失。另外,内容容量达到指定的值之后memcached回自动删除不适用的缓存。
4、Memcached不互通信的分布式:memcached尽管是“分布式”缓存服务器,但服务器端并没有分布式功能。各个memcached不会互相通信以共享信息。他的分布式主要是通过客户端实现的。
2.3.2 持久化存储
持久化存储就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称. 数据模型可以是任何数据结构或对象模型,存储模型可以是关系模型、XML、二进制流等。cmp和Hibernate只是对象模型到关系模型之间转换的不同实现。
持久化存储是解决程序与数据库之间交互访问的问题,使程序不直接访问数据库,而是直接访问Session会话,然后由Session会话与数据库“打交道”。只要确保,程序每次访问Session中的数据时,与数据库中的数据保持一致,就不会出现错误。下面以Mysql的扩展为例。
MySQL使用很广泛,企业可以根据业务规模的不同阶段,选择采用不同的系统架构,以应对逐渐增长的访问压力和数据量,并且随着业务的发展,需要提前做好系统的容灾规划,在系统的处理能力还未达到极限时,对系统进行扩容,以免带来损失。
1、业务拆分
业务发展初期为了便于快速迭代,很多应用都采用集中式的架构,随着业务规模的扩展,使系统变得越来越复杂,越来越难以维护,开发效率越来越低,并且系统的资源消耗也也越来越大,通过硬件提升性能的成本也越来越大,因此,系统业务的拆分是难以避免的。
首页 上一页 1 2 3 4 5 6 7 下一页 尾页 4/8/8
论JAVA分布式服务架构(四)由免费论文网(www.jaoyuw.com)会员上传。