前言:

本文内容:定时执行任务、分布式系统理论、什么是RPC

推荐免费SpringBoot基础教程视频:【狂神说Java】SpringBoot最新教程通俗易懂_哔哩哔哩_bilibili

定时执行任务

1
2
3
4
5
TaskScheduler 任务调度者
TaskExecutor 任务执行者

@EnableScheduling //开启定时功能注解
@Scheduled // 执行 使用Cron表达式
  1. 在service包下新建ScheduledService

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    package com.jokerdig.service;

    import org.springframework.scheduling.annotation.EnableScheduling;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Service;

    /**
    * @author Joker大雄
    * @data 2022/7/30 - 10:38
    **/
    @Service
    @EnableScheduling // 开启定时
    public class ScheduledService {


    // hello在特定的时间执行 cron计划任务
    // cron 表达式 可以通过在线生成指定的cron表达式
    // 秒 分 时 日 月 星期(0-7)
    // @Scheduled(cron = "30 57 10 * * ?")
    @Scheduled(cron = "0/2 * * * * ?") // 每两秒执行一次
    public void hello(){
    System.out.println("hello 现在被执行了");
    }
    }
  2. 到指定时间后,就会执行hello方法

    1
    hello 现在被执行了

分布式系统理论

什么是分布式系统

分布式系统是若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统

分布式系统是由一组通过网络进行通信,为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。

Dubbo2.x

文档 2.x | Apache Dubbo

随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构的趋势,急需一个治理系统架构保证其有条不紊的严谨

dubbo-architecture-roadmap

单一应用架构

当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。

垂直应用架构

当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,提升效率的方法之一是将应用拆成互不相干的几个应用,以提升效率。此时,用于加速前端页面开发的Web框架(MVC)是关键。

分布式服务架构

当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。

流动计算架构

当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。

Dubbo3.x

文档 | Apache Dubbo

背景

  1. 首先,如何更好的满足企业实践诉求
  2. 其次,适配云原生技术栈的发展

总体目标

Dubbo3 依旧保持了 2.x 的经典架构,以解决微服务进程间通信为主要职责,通过丰富的服务治理(如地址发现、流量管理等)能力来更好的管控微服务集群;Dubbo3 对原有框架的升级是全面的,体现在核心 Dubbo 特性的几乎每个环节,通过升级实现了稳定性、性能、伸缩性、易用性的全面提升。

architecture-1

  • 通用的通信协议。 全新的 RPC 协议应摒弃私有协议栈,以更通用的 HTTP/2 协议为传输层载体,借助 HTTP 协议的标准化特性,解决流量通用性、穿透性等问题,让协议能更好的应对前后端对接、网关代理等场景;支持 Stream 通信模式,满足不同业务通信模型诉求的同时给集群带来更大的吞吐量。
  • 面向百万集群实例,集群高度可伸缩。 随着微服务实践的推广,微服务集群实例的规模也在不停的扩展,这得益于微服务轻量化、易于水平扩容的特性,同时也给整个集群容量带来了负担,尤其是一些中心化的服务治理组件;Dubbo3 需要解决实例规模扩展带来的种种资源瓶颈问题,实现真正的无限水平扩容。
  • 更丰富的编程模型,更小的业务侵入。 在开发态业务应用面向 Dubbo SDK 编程,在运行态 SDK 与业务应用运行在同一个进程,SDK 的易用性、稳定性与资源消耗将在很大程度上影响业务应用;因此 3.0 应该具备更抽象的 API、更友好的配置模式、更少的侵占业务应用资源、具备更高的可用性。
  • 更易用、更丰富的服务治理能力。 微服务的动态特性给治理工作带来了很高的复杂性,而 Dubbo 这方面一直做的不错,是最早的一批治理能力定义者与实践者;3.0 需面向更丰富的场景化,提供诸如可观测性、安全性、灰度发布、错误注入、外部化配置、统一的治理规则等能力。
  • 全面拥抱云原生

什么是RPC

概述

RPC[Remote Procedure Call]是指远程过程调用,是一种进程见通信方式,他是一种技术的思想,而非规范。程序调用另一个地址空间(通常是共享网络的另一台机器)的过程或函数,而不用程序员显式编码这个远程调用的细节,即程序员无论调用本地还是远程的函数,本质上编写的调用代码基本相同。

RPC的核心模块

通信

  1. RPC的远程调用为了保证数据的可靠性,默认采用TCP传输

  2. 网络传输的数据必须是二进制数据,但调用方请求的出入参数都是对象,对象无法在网络中传输,所以需要序列化。

  3. 服务方根据协议格式就可以从二进制数据中分割出不同的请求来,同时根据请求类型和序列化类型,把二进制的消息体逆向还原成请求对象,称为反序列化

  4. 服务方根据反序列化出来的请求对象找到对应的实现类,完成真正的方法调用,再将结果传输序列化之后通过 TCP 传输给调用方

  5. 调用方再反序列化即可获得应答对象

序列化

序列化就是将对象转换成二进制数据的过程,而反序列就是反过来将二进制转换为对象的过程。