1. 集中式开发
原有开发逻辑是当业务功能增多后,如果打包、部署、周期变长,高并发,高访问量这一系列问题出现,就会导致服务器压力越来越大,传统思维就是一个人挑水累了,就多喊一人来应对。虽然可以短时间解决问题,但是成本也是随之变高的。
2.横向拆分和纵向拆分
目前针对系统架构的设计主要采用拆分,将服务尽可能去拆分,从而实现更好的独立性、可扩展性、隔离性。而拆分方式主要采用:横向拆分、纵向拆分。
2.1 横向拆分
横向拆分:将系统按照功能业务进行水平拆分,每个模块都能独立运行,相互之间通过接口进行通信。
优势:
- 提高系统的伸缩性:通过将系统拆分独立的功能模块,可以根据需求的多少,来决定模块的数量。
- 提高系统的可用性:各个模块之间独立运行,不会影响到其他模块的正常运行。
- 提高开发效率:各个团队可以根据各自所负责的模块进行开发。
横向拆分的实现:
- 微服务架构:将系统拆分一系列小型、独立运行的服务,每个服务负责一个特定的业务功能,通过接口进行通信。
- 分布式架构:将系统拆分成多个独立的节点,每个节点负责一个特定的业务功能,节点之间通过网络进行通信。
- 分层架构:将系统按照功能层次进行拆分,例如数据层、业务逻辑层、表示层分别独立拆分不同的模块。
2.2 纵向拆分
纵向拆分:通过对业务进行梳理,根据业务把应用进行拆分,不同的业务化为一个模块进行独立部署,例如:学生信息、学生行为划分为学生管理模块。
优势:
- 提高系统可维护性:通过系统不同层级或者组件进行拆分,可以是每个层次或组件独立开发,测试和维护,降低了系统的复杂度。
- 提高开发效率:不同团队根据自己业务模块进行开发。
- 提高系统的可扩展性:每个层级或者组件都是独立扩展的,根据需求的增多在对应的集群中增加新的功能模块或减少功能模块。
纵向拆分的实现:
- 分层架构:将系统按照功能层次进行拆分,例如数据层、业务逻辑层、表示层分别独立拆分不同的模块。
- 组件化架构:将系统按照业务组件进行拆分,每个组件负责对应的业务模块。
- 微服务架构:将架构按照业务功能进行拆分,每个微服务负责一个特定的业务功能。通过接口进行通信。
3.分布式服务框架设计
分布式服务框架在市面上存在许多:
Apache Dubbo:高性能的RPC框架,支持多种协议和序列化方式,由阿里提供。
Spring Cloud:基于Spring Boot的微服务架构,提供服务发现、负载均衡、熔断等服务。
Apache Kafka: 一个高吞吐量的分布式消息队列。常用用于构建实施流处理应用。
Apache ZooKeeper:开源的分布式协调服务框架,提供分布式锁、配置管理等服务。
Netifix EureKa:Netifix开源的服务框架,与Spring Cloud集成,提供了服务注册和发现功能
以上这些就是我们经常在工作和学习中听到的分布式服务框架,但目前建议多花点时间学习Spring Cloud,毕竟Spring全家桶的实力懂的都懂,对一个了解深了那么其余的上手速度也很快。
下面就是就是分布式服务框架的逻辑图。大体上分为三层,服务层,过滤层,RPC服务调用层。
-
Service:该层主要是Java的动态代理,主要作用就是将服务提供者提供的接口封装成能够被其他服务消费者调用的远程接口。其次就是Java的反射,根据消费着请求消息中的接口名、参数、方法名反射调用服务提供者的接口本地实现类。(核心思想就是让接口能够被远程调用)
-
Filter Chain:FilterChain层用于处理请求和响应的过滤和处理。通常位于应用程序的中间层,用于处理网络请求和响应的过程。
-
RPC:一般包含底层通信框架、序列化、反序列化等。实现分布式系统中的远程调用,RPC层允许不同的服务或应用程序之间通过网络进行通信,实现跨节点的函数调用。
RPC层设计通常包含如下几个组件:
服务接口定义了远程调用的接口和参数,用于描述服务的功能和调用方式。
Stub(存根):存根就是客户端与服务端之间的一个中介
服务端存根:当客户端发送请求后,由服务端存根来处理请求
- 从网络接收序列化后的请求数据。
- 反序列化这个请求以获取原始的方法调用和参数。
- 调用实际的服务实现。
- 将结果序列化并发送回客户端。
客户端存根:当客户端希望调用远程服务时,它实际上首先调用的是客户端存根。
- 将调用的方法和参数序列化为一种格式,这个格式能够通过网络传输。
- 通过网络发送这个序列化后的请求到服务器端。
- 接收服务器的响应,然后反序列化该响应以转换为客户端可用的格式。
网络通信:RPC层使用网络协议进行通信,例如TCP/IP、HTTP等,通信可以是同步的或异步的取决于具体的实现。
负载均衡和故障恢复:RPC层通常支持负载均衡和故障恢复机制,以提高系统的性能和可靠性。负载均衡可以根据各个节点情况选择最优的节点进行调用,而故障恢复可以在节点出现故障时自动切换到备用节点。
分布式服务框架主要包含服务治理中心、服务注册中心。其中服务注册中心主要负责服务的发布和通知,一般支持集群部署,即使一个集群服务器发生宕机情况,也不会影响到其他服务器的正常使用。最坏的整个服务注册中心都出现宕机情况,也只是影响新服务的注册和发步,不影响已经发布的服务。
服务治理中心是分布式架构中一个重要组件,用于管理和监控服务的注册、发现、路由、负载均衡、故障恢复等功能。服务治理中心还提供了一种集中管理和控制服务的方式,可以提高系统的可靠性、可扩展性和可维护性。
4.总结
虽然市面上关于分布式的框架有许多,业务上也存在差异,但是大体上底层相差无异。所以大家可以根据自己的实际需求去学习对应的分布式架构。