注:本篇所有架构图,服务框架理论知识均来源于互联网。
知识点:远程调用服务的技术原型就是SOA(Service-Oriented Architecture)
网站架构总图
远程调用架构图:
远程调用管理组件是一个独立的服务系统,为了保证该系统的稳定性,它也一定是一个分布式的系统,但是这个分布式系统和Web的分布式系统是完全不同的分布式系统,传统Web应用集群是基于HTTP协议的无状态的特点设计的,因为每个HTTP请求都是一个独立的事务,不同请求之间是没有任何关系的,所以我们可以将Web应用部署到不同服务器上,请求不管到了那台服务器,都能正常的给用户提供相应的服务,但是Web应用的session机制是有状态的,所以传统Web集群都是要有session同步的操作,大型网站往往会把session功能抽象为独立的缓存系统,但是这里的远程调用管理组件的集群原理或者说分布式原理是有别于Web应用集群分布式原理的,远程调用管理组件可以当做一个注册中心,它会记录下服务提供者和服务调用者的相关信息,并将这些信息推送给服务提供者或者服务调用者,为了保证系统的执行效率,这些注册信息都是记录在内存里,我们试想下,如果这些注册信息丢失,整个系统将会不可用,因此远程调用管理组件的集群是一种保证数据可靠性和服务提供健壮性的集群,而不是建立在HTTP无状态特性基础上的集群。我们这里假想下远程调用服务的集群运行场景,我们假如有5台服务器作为远程调用服务运行的服务器,那么每台服务器都必须有注册信息的冗余备份,当服务运行时候其中一台服务器发生了故障,这台故障的服务器上的数据不会丢失,此外集群应该还要有一个检查故障的机制,当发现有台服务器不可用的时候,能及时剔除该服务器,而zookeeper就是解决这种问题的技术框架。此外除了保证系统的稳定性和可用性外,集群的数据存储方式也是很重要的,前面我讲到集群的数据存储要有一个冗余机制,除了冗余机制还要有一个很适合快速访问和读写的数据模型,而zookeeper正好包含这种数据模型,所以这个远程调用服务是一个很适合zookeeper应用的场景
远程调用管理组件还有一个心跳机制,心跳机制的作用是检测服务提供者的健康性及服务提供者是否可用,服务提供者启动时候会将自己的注册信息发送给远程调用管理组件,这个注册信息里包含服务端的ip地址和端口号,远程调用管理组件会启动一个线程,根据定时对这个ip地址和端口号去ping这个ip和端口号对应的应用是否可用,如果不可用远程调用管理组件会反复尝试几次,这个次数和多久检测心跳都是可以配置的,如果反复几次还是不通,那么就认定该服务不可用了。
远程调用服务还需要一个重要的技术就是通讯技术,这里的通讯技术我推荐netty,netty是个非常好的选择,讲到通讯是个复杂的课题,如果以后有空我再做详细介绍,通讯层的东西是封装到服务提供者和服务调用者引入的jar包里,但是通讯的ip地址和端口号则是需要远程调用管理组件推送过来的。
淘宝HSF远程调用服务的架构设计
设计的知识点有:负载均衡(failover,随机规则,第七层路由,路由规则,权重规则,TP限流)
软负载体系(负载均衡算法(随机,权重) )
淘宝可伸缩高性能互联网架构
设计到的知识点:
1, 淘宝session框架
集群,不仅有负载均衡,更重要的是要有失效恢复failover,比如tomcat采 用的集群节点广播复制,jboss采 用的配对复制等session状 态复制策略,
淘宝的session框架采用的是client cookie实现,主要将状态 保存到了cookie里 面,这样就使得应用节点本身不需要保存任何状态信息,这样在系统用户变多的时候,就可以通过增加更多的应用节点来达到水平扩展的目的.
2, 淘宝系统拆分
系统对整个系统进行了水平和垂直两个方向的拆分,水平方向上,按照功能分为交易,评价,用户,商品等系统,同样垂直方向上,划分为业务系统,核心业务 系统以及以及基础服务,这样以来,各个系统都可以独立维护和独立的进行水平伸缩,比如交易系统可以在不影响其它系统的情况下独立的进行水平伸缩以及功能扩展。
3,数据库拆分(TDDL)
一个大型的互联网 应用必然会经过一个从单一DB server,到Master/salve,再到垂直分区(分 库),然后再到水平分区(分表,sharding)的过程,而在这个过程中,Master/salve 以 及垂直分区相对比较容易,对应用的影响也不是很大,但是分表会引起一些棘手的问题,比如不能跨越多个分区join查 询数据,如何平衡各个shards的 负载等等,这个时候就需要一个通用的DAL框架来屏蔽底层数据存储对应用逻辑的影响,使得底层数据的访问对应用透明化。
淘宝根据自己的业务特点也开发了自己的TDDL框架,此框架主要解决了分库分表对应用的透明化以及异构数据库之间的数据复制。
4,异步通信(Notify)
统之间异步通信以后可以大大提高系统的响应时间,使得每个请求的响应时间变短,从而提高用户体验,因此异步在 提高了系统的伸缩性以及可用性的同时,也大大的增强了请求的响应时间
5,非结构化数据存储 (NOSQL)
NOSQL。我们都知道根据CAP理论,一致性,可用性和分区容错性3者 传统的关系数据采用了ACID的事务策略,而ACID的 事务策略更加讲究的是一种高一致性而降低了可用性的需求,但是互联网应用往往对可用性的要求要略高于一致性的需求,这个时候我们就需要避免采用数据的ACID事 务策略,转而采用BASE事 务策略,BASE事 务策略是基本可用性,事务软状态以及最终一致性的缩写,通过BASE事务策略,我们可以通过最终一致性来提 升系统的可用性,这也是目前很多NOSQL产品所采用的策略,包括facebook 的cassandra,apache hbase,google bigtable等,这些产品非常适合一些非结构化的数据,比如key-value形 式的数据存储,并且这些产品有个很好的优点就是水平伸缩性。
Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
其核心部分包含:
1,远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换方式。
2,集群容错: 提供基于接口方法的透明远程过程调用,包括多协议支持,以及软负载均衡,失败容错,地址路由,动态配置等集群支持。
3,自动发现: 基于注册中心目录服务,使服务消费方能动态的查找服务提供方,使地址透明,使服务提供方可以平滑增加或减少机器。
Dubbo能做什么?
1,透明化的远程方法调用,就像调用本地方法一样调用远程方法,只需简单配置,没有任何API侵入。
2,软负载均衡及容错机制,可在内网替代F5等硬件负载均衡器,降低成本,减少单点。
3,服务自动注册与发现,不再需要写死服务提供方地址,注册中心基于接口名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Dubbo涉及的知识点:
1,服务注册:
对于服务提供方,它需要发布服务,而且由于应用系统的复杂性,服务的数量、类型也不断膨胀;对于服务消费方,它最关心如何获取到它所需要的服务,而面对复杂的应用系统,需要管理大量的服务调用。而且,对于服务提供方和服务消费方来说,他们还有可能兼具这两种角色,即既需要提供服务,有需要消费服务。
通过将服务统一管理起来,可以有效地优化内部应用对服务发布/使用的流程和管理。服务注册中心可以通过特定协议来完成服务对外的统一。Dubbo提供的注册中心有如下几种类型可供选择:
a,Multicast注册中心 b,Zookeeper注册中心 c,Redis注册中心 d,Simple注册中心
2, 远程通信与信息交换
远程通信需要指定通信双方所约定的协议,在保证通信双方理解协议语义的基础上,还要保证高效、稳定的消息传输。Dubbo继承了当前主流的网络通信框架,主要包括如下几个:
a:Mina b:Netty c:Grizzly
3,Dubbo支持多种协议
Dubbo协议
Hessian协议
HTTP协议
RMI协议
WebService协议
Thrift协议
Memcached协议
Redis协议
A,最底部的为dubbo服务的集群(服务者),即对外界暴露服务,dubbo本身就
是支持集群模式,而且支持多种通信协议(dubbo,rmi,http...)。主要部署核心的业务代码。
B,右边的注册中心,dubbo提供了也是提供了多种注册中心, zookeeper注册中心是其中一
种同样无单点故障问题,dubbo服务依赖于注册中心,在dubbo服务启动时,回向注册中心
去进行一个服务的注册(发布服务)。对服务进行管理。
C,接下来看tomcat集群,主流的tomcat集群搭配(nginx+tomcat+redis/memcache)都是非常
的简单的,所有控制器都放到其中,控制器中依赖的服
务实现是来之后端dubbo集群的,而dubbo服务是注册到zookeeper上的,只需要连上注册
中心就获取到了我们所需要的服务,并且进行调用。主要是对控制器层做一个集群,提高
可用性和性能。
D,tomcat左下角是一个NOSQL集群,主要是处理一个session的共享/分布式缓存。
E,最上层是nginx的集群主要是把静态页面全都放到nginx中即可,注意,如果使用restful风
格,并且使用JS MVC框架的话!完全不需要把页面部署到tomcat中,让tomcat只跑控制代
码即可。restful架构的话页面时全静态,数据全都走json的方式即可。
F,上诉扩展瓶颈在nginx上,解决的方式就算使用在nginx之前套LVS吧,或者硬件做一个负载。
相关推荐
Surging 是一款强大的分布式微服务框架,其核心特性在于提供了高性能的RPC(Remote Procedure Call)远程服务调用机制。在微服务架构中,服务间的通信是至关重要的,Surging 正是为了解决这一问题而设计。通过使用 ...
分布式软件开发是现代IT行业中一个重要的技术领域,它允许分布在不同地理位置的系统组件协同工作...通过学习和实践这个实例,开发者可以深入理解.NET框架下的分布式软件开发和远程调用机制,提升构建分布式系统的技能。
总之,通过Java实现分布式系统和远程方法调用是一项强大的技术,可以极大地提升应用程序的性能和可扩展性。通过深入理解RMI的工作机制和最佳实践,开发者可以构建出健壮且高效的分布式应用。而提供的资源文件可以...
Java远程调用框架是分布式系统中关键的技术,它允许运行在不同计算机上的应用程序相互通信,协同完成任务。本文探讨的是一种基于动态代理的Java远程调用框架,旨在解决传统远程调用技术如RMI(Remote Method ...
分布式服务框架是现代大型互联网应用的核心技术之一,它旨在解决单体系统在高并发、海量数据场景下的扩展性问题。《分布式服务框架原理与实践》这本书深入浅出地讲解了分布式服务的基础理论和实际操作,对于想要深入...
Hessian远程调用框架是基于Java的轻量级RPC(Remote Procedure Call)解决方案,它允许开发者在分布式系统中实现高效、便捷的跨网络对象方法调用。本教程将引导你入门Hessian,通过一个简单的JAVA demo来理解其工作...
而Dubbo是阿里巴巴开源的高性能服务框架,专注于服务之间的远程调用。 最后,书中可能会讲解如何设计和实施分布式服务架构,包括服务的拆分原则、服务接口设计、服务依赖管理以及测试策略。此外,还会讨论在实际...
本资源提供了“从零开始写分布式服务框架”的最新版源码,对于想要深入理解分布式系统设计和服务化架构的开发者来说,是一个宝贵的实践学习材料。 分布式框架的核心目标是实现服务的解耦、负载均衡、容错处理以及...
Dubbo作为一个优秀的开源框架,由阿里巴巴贡献,专门用于实现高性能、轻量级的RPC(远程过程调用)服务。本项目通过整合Dubbo、Zookeeper和SpringMVC,构建了一个完整的分布式服务治理框架,以实现高效的服务注册、...
Java远程调用(Remote Method Invocation,RMI)是Java平台中一种重要的分布式计算技术,它允许在不同网络环境中的Java对象之间进行透明的交互。在本文中,我们将深入探讨三种不同的RMI实现方法:原始方式、Spring...
本资源提供了从零开始编写分布式服务框架的源码,涵盖了书籍中的各个技术点,对于想要深入理解分布式服务框架设计与实现的开发人员来说,这是一个宝贵的资料库。 在学习这些源码之前,首先需要了解分布式服务框架的...
服务框架学习路线 ...服务框架学习路线旨在帮助开发者快速掌握微服务架构的知识,从注册中心、服务网关到分布式服务调用、缓存技术、异步通信技术、搜索技术、微服务保护、DevOps和分布式事务等。
DCOM(分布式组件对象模型)是微软提供的一个远程调用框架,它使用OleVariant作为数据封包格式。虽然有人认为OleVariant的效率较低,但MIDAS(Microsoft Data Access Components)等技术仍然依赖于它。当调用远程...
3. 服务调用:RPC(远程过程调用)框架如gRPC、Dubbo、Thrift等简化了跨网络的服务间通信,它们提供了接口定义、序列化、服务代理等能力。 4. 服务治理:包括熔断、降级、限流和隔离等机制,用于保护系统免受雪崩...
在IT领域,远程调用对象(Remote Procedure Call, RPC)是一种常见的通信机制,它允许一个程序在不关心网络细节的...对于想要深入理解网络编程和分布式应用的开发者来说,学习和实践远程调用对象是一个重要的里程碑。
分布式RPC系统框架-Dubbo(2.7)教程涵盖了在现代软件开发中至关重要的技术领域,主要涉及分布式系统、远程过程调用(RPC)以及相关的中间件和服务治理。Dubbo是阿里巴巴开源的一款高性能、轻量级的RPC框架,它极大地...
1. **Dubbo**: Dubbo是阿里巴巴开源的一款高性能、轻量级的服务治理框架,它致力于提供面向接口的远程调用能力,具有服务注册、服务发现、负载均衡、容错、监控等核心功能。Dubbo支持多种协议,如RPC(Remote ...
### RCF 远程调用框架详解 #### 一、RCF 概览 ##### 1.1 什么是RCF? RCF(Remote Call Framework)是一个高性能、功能丰富的远程过程调用框架,它允许开发者轻松地创建分布式应用程序,提供了一种高效的方式来实现...
通过深入理解这些知识点,开发者可以构建出一个可靠的、可扩展的远程调用框架,有效地处理分布式环境中的服务交互。在实际项目中,"rmi-zookeeper-master"这样的压缩包可能包含了实现这一框架的源代码、配置文件和...
《NET分布式应用程序 集成XML Web服务与.NET远程处理》这本书深入探讨了.NET框架下构建分布式应用程序的关键技术和策略。分布式应用是现代企业级软件系统的核心组成部分,它允许不同的组件和系统之间通过网络进行...