一、分布式理论
1、什么是分布式系统?
分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关的系统;
分布式系统是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了使用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
注:只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候、且硬件的提升昂贵到得不偿失的时候,应用程序也无法将进一步优化时,才需要考虑分布式系统。主要因为分布式分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题,有需要引入更多的机制、协议,带来更多的问题。
2、单一应用架构
单一应用架构是指将所有的应用(业务)打包成一个独立的单元,并部署到一台服务器上运行。这种架构通常使用分层架构(layered-base)作为基础,所有的功能都被集成在一个项目工程中,并打包成一个war包部署到服务器上。应用与数据库是分开部署的,可以通过部署应用集群和数据库集群来提高系统的性能。
单一应用架构的优点包括技术栈单一、开发人员规模小、系统架构简单、运维管理、部署、人员招聘及人员管理都相对容易实现。然而,随着业务的拓展和业务量的提升,单一应用架构的问题也逐渐显现出来,如程序耦合严重、代码扩展性差、业务逻辑复杂导致需求响应变慢、业务容量存在瓶颈、服务扩展复杂、系统可用性差等。
3、垂直应用架构
垂直应用架构是一种将大型应用程序按照其不同的功能模块拆分成不同的垂直层的架构模式。在Java中,垂直应用架构通常指的是将应用程序按照业务功能模块进行拆分,每个模块都独立部署和维护。这种架构模式旨在提高应用程序的可维护性、可扩展性和可重用性。
在垂直应用架构中,每个模块都有自己的领域模型、业务逻辑和数据存储,并且模块之间通过接口进行通信。这种架构模式有助于实现模块的解耦和独立部署,使得每个模块都可以独立地进行开发、测试和部署。但是公共模块无法重复利用,开发性的浪费。
4、分布式服务架构
分布式服务架构是一种将应用程序拆分成多个独立的服务,这些服务运行在不同的进程中,并通过网络进行通信和协调的架构模式。在分布式服务架构中,每个服务都负责处理特定的业务功能,并且服务之间通过轻量级通信协议(如HTTP、RPC等)进行交互。
分布式服务架构的核心思想是将应用程序拆分成多个独立的服务,每个服务都是围绕特定的业务能力构建的,并且服务之间通过标准化的接口进行通信。这种架构模式有助于实现应用程序的解耦、可扩展性和高可用性。
在分布式服务架构中,每个服务都可以独立地运行在不同的进程或容器中,并且可以使用不同的技术栈和编程语言来实现。这使得每个服务都可以由专门的团队独立开发、测试和部署,提高了开发并行度和团队的协同开发效率。
当然,分布式服务架构也带来了一些挑战,如服务治理、服务间通信、数据一致性等问题。因此,在实施分布式服务架构时,需要采用合适的架构模式和工具来确保系统的稳定性和可靠性。
5、流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现出来,此时需要增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)[Service Oriented Architeture]是关键。
二、RPC
什么是RPC
RPC,全称为Remote Procedure Call,即远程过程调用。它是一种计算机通信协议,允许一个计算机程序通过网络调用另一个计算机程序中的子程序(也就是远程过程),并获取返回值。RPC是一种分布式计算的重要基础,使得分布式计算应用更加方便和高效。
在RPC中,客户端调用远程服务端的方法就像调用本地方法一样,客户端将参数传递给远程方法,远程方法执行后将结果返回给客户端。RPC的实现需要定义一个接口,客户端调用远程方法时,需要知道该方法的接口定义,以便于构造调用请求,并解析响应。
RPC通信需要跨服务器进行,因此需要使用网络编程实现。在RPC调用中,对输入参数对象与返回值对象进行序列化和反序列化是一个必须的过程。同时,RPC在大多数情况下是一个高并发的调用场景,因此网络通信的处理上大多数会选择IO多路复用的方式。
常见的RPC框架有Apache Thrift、gRPC、Dubbo等。这些框架提供了丰富的功能和性能优化,使得开发者能够更加方便地使用RPC进行分布式计算的开发。
总之,RPC是一种重要的分布式计算通信协议,使得计算机程序能够通过网络调用远程过程中的子程序,并获取返回值。它提高了分布式计算的效率和方便性,是现代分布式系统中的重要基石。
三、Dubbo的概念
什么是Dubbo?
Dubbo是阿里巴巴公司(2017年由Apache)开源的一个高性能优秀的服务框架,使得应用可通过高性能的RPC实现服务的输出和输入功能,可以和Spring框架无缝集成。
Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
DUbbo官网:https://cn.dubbo.apache.org/zh-cn/
Dubbo的概念
服务提供者(Provider):暴露服务的服务提供方,服务提供者在启动时,向注册中心注册自己提供的服务。
服务消费者(Consumer):调用远程服务的服务消费方,服务消费者在启动时,向注册中心订阅自己所需的服务,服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
注册中心(Registry):注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者
监控中心(Monitor):服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心
四、Dubbo环境搭建
dubbo推荐使用zookeeper注册中心
zookeeper是什么:zookeeper官方文档
window下安装zookeeper
1、下载zookeeper地址:https://www.apache.org/dyn/closer.lua/zookeeper/zookeeper-3.9.1/apache-zookeeper-3.9.1-bin.tar.gz
点击此处下载。
2、运行/bin/zkServer.cmd.初次运行会报错,因为没有zoo.cfg配置文件。
3.修改zoo.cfg配置文件
将conf文件下的zoo_sample.cfg复制一份,并改名为zoo.cfg即可
注意位置:
打开zoo.cfg可看到:
dataDir=./ 临时数据存储的目录(可写相对路径)
clientPort=2181 zookeeper的端口号
修改完成后再次启动zookeeper:
启动成功!
4、启动zkCli.cmd测试
ls / : 列出zookeeper根下保存的所有节点
create -e /learn 123 : 创建一个learn节点,值为123;
get/learn :获取/learn节点的值
再来查看一下节点:
window下安装Dubbo-admin
dubbo本身并不是一个服务软件。它其实就是一个jar包,能够帮助你的java程序连接到zookeeper,并利用zookeeper消费、提供服务。
为了让用户更好的管理监控众多的dubbo服务,官方提供了一个可视化的监控程序:dubbo-admin,不过这个监控即是不安装也不影响使用。
1、下载dubbo-admin
2、解压进入目录
修改 dubbo-admin-develop\dubbo-admin-server\src\main\resources\application.properties 指定zookeeper地址
spring.profiles.active=dev
server.port=38080
dubbo.protocol.port=30880
dubbo.application.qos-port=32222
# centers in dubbo, if you want to add parameters, please add them to the url
admin.registry.address=zookeeper://127.0.0.1:2181
admin.config-center=zookeeper://127.0.0.1:2181
admin.metadata-report.address=zookeeper://127.0.0.1:2181
3、在项目目录下打包dubbo-admin
mvn clean package -Dmaven.test.skip=true
第一次打包的过程有点慢,需要耐心等待。
执行 dubbo-admin-develop\dubbo-admin-server\target\dubbo-admin-server-0.7.0-SNAPSHOT.jar
\dubbo-admin-server\target>java -jar dubbo-admin-server-0.7.0-SNAPSHOT.jar
特别注意:需要先将zookeeper服务开启
执行完毕后,去访问 http://localhost:38080/,第一次登录需要输入登录账户和密码,默认为root-root;
登录成功后,查看界面
通过服务查询界面。即可查看服务的信息。
版权归原作者 are are are 所有, 如有侵权,请联系我们删除。