参照来源 :https://blog.csdn.net/forezp/article/details/70148833

1、简介

目前来说,SpringCloud是比较完整的微服务解决方案框架。不像其他rpc远程调用框架,只是解决某个微服务中的问题。

2、微服务框架搭建

2.1、服务的注册与发现Eureka(Finchley版本)

本次采用Eureka作为服务注册与发现的组件。

2.1.1、创建服务注册中心

首先创建一个空的maven工程,在其pom文件引入依赖,

Spring Boot 版本采用  2.0.3.RELEASE。

Spring Cloud 版本采用 Finchley.RELEASE。

这个pom文件作为父pom文件,起到依赖版本控制的作用,其他module工程继承该pom

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>com.ucredit</groupId>
  8. <artifactId>dataPlatform</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10.  
  11. <parent>
  12. <groupId>org.springframework.boot</groupId>
  13. <artifactId>spring-boot-starter-parent</artifactId>
  14. <version>2.0.3.RELEASE</version>
  15. <relativePath/>
  16. </parent>
  17.  
  18. <modules>
  19. <module>eureka-server</module>
  20. <module>eureka-client</module>
  21. </modules>
  22.  
  23. <properties>
  24. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  25. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
  26. <java.version>1.8</java.version>
  27. <spring-cloud.version>Finchley.RELEASE</spring-cloud.version>
  28. </properties>
  29.  
  30. <dependencies>
  31. <dependency>
  32. <groupId>org.springframework.boot</groupId>
  33. <artifactId>spring-boot-starter-test</artifactId>
  34. <scope>test</scope>
  35. </dependency>
  36. </dependencies>
  37.  
  38. <dependencyManagement>
  39. <dependencies>
  40. <dependency>
  41. <groupId>org.springframework.cloud</groupId>
  42. <artifactId>spring-cloud-dependencies</artifactId>
  43. <version>${spring-cloud.version}</version>
  44. <type>pom</type>
  45. <scope>import</scope>
  46. </dependency>
  47. </dependencies>
  48. </dependencyManagement>
  49.  
  50. <build>
  51. <plugins>
  52. <plugin>
  53. <groupId>org.springframework.boot</groupId>
  54. <artifactId>spring-boot-maven-plugin</artifactId>
  55. </plugin>
  56. </plugins>
  57. </build>
  58.  
  59. </project>

2.1.2 创建两个model工程

一个model工程作为服务注册中心,即Eureka Server,另一个作为 Eureka Client 。

先创建server,邮件工程 -> 创建 model  ->  选择 spring initializr(如图)

下一步 -> 选择 cloud discovery -> eureka server ,然后一直下一步就行了。

创建完成后的工程,其pom.xml继承了父pom文件,并引入  spring-cloud-starter-netflix-eureka-server 的依赖,代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.3.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.ucredit</groupId>
  12. <artifactId>eureka-server</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>eureka-server</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
  20. </properties>
  21.  
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.cloud</groupId>
  25. <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
  26. </dependency>
  27.  
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33. </dependencies>
  34.  
  35. <dependencyManagement>
  36. <dependencies>
  37. <dependency>
  38. <groupId>org.springframework.cloud</groupId>
  39. <artifactId>spring-cloud-dependencies</artifactId>
  40. <version>${spring-cloud.version}</version>
  41. <type>pom</type>
  42. <scope>import</scope>
  43. </dependency>
  44. </dependencies>
  45. </dependencyManagement>
  46.  
  47. <build>
  48. <plugins>
  49. <plugin>
  50. <groupId>org.springframework.boot</groupId>
  51. <artifactId>spring-boot-maven-plugin</artifactId>
  52. </plugin>
  53. </plugins>
  54. </build>
  55.  
  56. </project>

2.1.3 启动一个服务注册中心

只需要一个注解  @EnableEurekaServer,这个注解需要加在SpringBoot工程的启动 Application 类上加载:

  1. /**
  2. * eureka server 是有界面的,启动工程,打开浏览器访问:
  3. * http://localhost:8761
  4. */
  5. @SpringBootApplication
  6. @EnableEurekaServer
  7. public class EurekaSeverApplication {
  8.  
  9. public static void main(String[] args) {
  10. SpringApplication.run(EurekaSeverApplication.class, args);
  11. }
  12. }

2.1.4 修改配置文件

Eureka 是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成),在默认情况下 eureka server 也是一个

eureka client ,必须要指定一个server。 eureka server的配置文件 application.yml:

  1. server:
  2. port: 8761
  3.  
  4. eureka:
  5. instance:
  6. hostname: localhost
  7. client:
  8. registerWithEureka: false
  9. fetchRegistry: false
  10. serviceUrl:
  11. defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  12.  
  13. spring:
  14. application:
  15. name: eurka-server

通过 eureka.client.registerWithEureka:false,和 fetchRegistry:false来表明自己是一个eureka server。

2.1.5 eureka server 是有界面的,启动工程,打开浏览器访问: http://localhost:8761/,界面如下:

No application available 没有服务被发现 ...

因为没有注册服务当然不可能有服务发现了 。。。

2.1.6 创建一个服务提供者(eureka client)

当client 向server注册时,它会提供一些元数据,例如主机和端口,URL,主页等。eureka server 从每个client实例接收心跳信息。如果心跳超时,则通常将该实例从注册中心删除。

创建过程同server类似,创建完pom.xml如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.4.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11.  
  12. <groupId>com.ucredit</groupId>
  13. <artifactId>eureka-client</artifactId>
  14. <version>0.0.1-SNAPSHOT</version>
  15. <name>eureka-client</name>
  16. <description>Demo project for Spring Boot</description>
  17.  
  18. <properties>
  19. <java.version>1.8</java.version>
  20. <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
  21. </properties>
  22.  
  23. <dependencies>
  24. <dependency>
  25. <groupId>org.springframework.cloud</groupId>
  26. <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  27. </dependency>
  28.  
  29. <dependency>
  30. <groupId>org.springframework.boot</groupId>
  31. <artifactId>spring-boot-starter-test</artifactId>
  32. <scope>test</scope>
  33. </dependency>
  34. <dependency>
  35. <groupId>org.springframework.boot</groupId>
  36. <artifactId>spring-boot-starter-web</artifactId>
  37. </dependency>
  38. </dependencies>
  39.  
  40. <dependencyManagement>
  41. <dependencies>
  42. <dependency>
  43. <groupId>org.springframework.cloud</groupId>
  44. <artifactId>spring-cloud-dependencies</artifactId>
  45. <version>${spring-cloud.version}</version>
  46. <type>pom</type>
  47. <scope>import</scope>
  48. </dependency>
  49. </dependencies>
  50. </dependencyManagement>
  51.  
  52. <build>
  53. <plugins>
  54. <plugin>
  55. <groupId>org.springframework.boot</groupId>
  56. <artifactId>spring-boot-maven-plugin</artifactId>
  57. </plugin>
  58. </plugins>
  59. </build>
  60.  
  61. </project>

通过注解 @EnableEurekaClient 表明自己是一个eurekaclient。

  1. package com.ucredit.eurekaclient;
  2.  
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.boot.SpringApplication;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  7. import org.springframework.web.bind.annotation.RequestMapping;
  8. import org.springframework.web.bind.annotation.RequestParam;
  9. import org.springframework.web.bind.annotation.RestController;
  10.  
  11. @SpringBootApplication
  12. @EnableEurekaClient
  13. @RestController
  14.  
  15. /**
  16. * 通过注解@EnableEurekaClient 表明自己是一个eurekaclient.
  17. * 仅仅@EnableEurekaClient是不够的,还需要在配置文件中注明自己的服务注册中心的地址
  18. */
  19. public class EurekaClientApplication {
  20.  
  21. public static void main(String[] args) {
  22. SpringApplication.run(EurekaClientApplication.class, args);
  23. }
  24.  
  25. //读取配置文件
  26. @Value("${server.port}")
  27. String port;
  28.  
  29. @RequestMapping("/hi")
  30. public String home(@RequestParam(value = "name", defaultValue = "forezp") String name) {
  31. return "hi " + name + " ,i am from port:" + port;
  32. }
  33. }

仅仅@EnableEurekaClient 是不够的,还需要在配置文件中注明自己的服务注册中心的地址。

  1. server:
  2. port: 8762
  3.  
  4. spring:
  5. application:
  6. name: eureka-client
  7.  
  8. eureka:
  9. client:
  10. serviceUrl:
  11. defaultZone: http://localhost:8761/eureka

需要指明 spring.application.name 和这个很重要,这在以后的服务与服务之间相互调用一般都是根据这个name。

启动工程,打开 http://localhost:8761/ ,即 eureka server的网址。

你会发现一个服务已经注册在服务中了,服务名为 EUREKA-CLIENT,端口号是 8762。这时打开浏览器 http://localhost:8762/hi?name=forezp ,

会在浏览器中看到:

2.2 服务消费者(rest+ribbon)(Finchley版本)

2.2.1 讲了服务的注册与发现。在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于htttp restful的。

Spring Cloud 有两种服务的调用方式:一种是ribbon + restTemplate,另一种是feign。在此讲述基于 ribbon + rest。

Ribbon 是一个负载均衡客户端,可以很好的控制http和tcp的一些行为。

Feign 默认集成了ribbon。

2.2.2 准备工作

这一篇基于上一篇的工程,启动 eureka-server工程,启动 server-client工程,它的端口号为8762,将server-client的配置文件的端口改为8763,并启动,这时你会发现:

server-client 在 eureka-server 注册了2个实例,这就相当于一个小的集群了。

如何一个工程启动多实例,请看:

https://blog.csdn.net/forezp/article/details/76408139

2.2.3 建一个服务消费者。

重新新建一个spring-boot工程,取名service-ribbon,在它的pom.xm继承了父pom文件,并引入了以下依赖:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  4. <modelVersion>4.0.0</modelVersion>
  5. <parent>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-parent</artifactId>
  8. <version>2.1.3.RELEASE</version>
  9. <relativePath/> <!-- lookup parent from repository -->
  10. </parent>
  11. <groupId>com.ucredit</groupId>
  12. <artifactId>server-ribbon</artifactId>
  13. <version>0.0.1-SNAPSHOT</version>
  14. <name>server-ribbon</name>
  15. <description>Demo project for Spring Boot</description>
  16.  
  17. <properties>
  18. <java.version>1.8</java.version>
  19. <spring-cloud.version>Greenwich.SR1</spring-cloud.version>
  20. </properties>
  21.  
  22. <dependencies>
  23. <dependency>
  24. <groupId>org.springframework.cloud</groupId>
  25. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  26. </dependency>
  27.  
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-test</artifactId>
  31. <scope>test</scope>
  32. </dependency>
  33. <dependency>
  34. <groupId>org.springframework</groupId>
  35. <artifactId>spring-web</artifactId>
  36. <version>4.3.18.RELEASE</version>
  37. </dependency>
  38. <dependency>
  39. <groupId>org.springframework.cloud</groupId>
  40. <artifactId>spring-cloud-netflix-eureka-client</artifactId>
  41. <version>RELEASE</version>
  42. </dependency>
  43. </dependencies>
  44.  
  45. <dependencyManagement>
  46. <dependencies>
  47. <dependency>
  48. <groupId>org.springframework.cloud</groupId>
  49. <artifactId>spring-cloud-dependencies</artifactId>
  50. <version>${spring-cloud.version}</version>
  51. <type>pom</type>
  52. <scope>import</scope>
  53. </dependency>
  54. </dependencies>
  55. </dependencyManagement>
  56.  
  57. <build>
  58. <plugins>
  59. <plugin>
  60. <groupId>org.springframework.boot</groupId>
  61. <artifactId>spring-boot-maven-plugin</artifactId>
  62. </plugin>
  63. </plugins>
  64. </build>
  65.  
  66. </project>

在工程的配置文件指定服务的注册中心地址为  http://localhost:8761/eureka

程序名称为 eureka-ribbon,程序端口为8764。配置文件 application.yml 如下:

  1. server:
  2. port: 8764
  3.  
  4. spring:
  5. application:
  6. name: eureka-ribbon
  7.  
  8. eureka:
  9. client:
  10. serviceUrl:
  11. defaultZone: http://localhost:8761/eureka

在工程的启动类中,通过 @EnableDiscoveryClient 向服务中心注册,并且向程序IOC注入一个bean:restTemplate

并通过 @LoadBalanced 注解表名这个 restTemplate开启负载均衡的功能。

  1. package com.ucredit.serverribbon;
  2.  
  3. import org.springframework.boot.SpringApplication;
  4. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  5. import org.springframework.boot.autoconfigure.SpringBootApplication;
  6. import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
  7. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
  8. import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
  9. import org.springframework.context.annotation.Bean;
  10. import org.springframework.web.client.RestTemplate;
  11.  
  12. @SpringBootApplication
  13. @EnableDiscoveryClient
  14. @EnableEurekaClient //表名自己是一个eureka客户端
  15. public class ServerRibbonApplication {
  16.  
  17. public static void main(String[] args) {
  18. SpringApplication.run(ServerRibbonApplication.class, args);
  19. }
  20.  
  21. @Bean
  22. @LoadBalanced
  23. RestTemplate restTemplate() {
  24. return new RestTemplate();
  25. }
  26.  
  27. }

写一个测试类,HelloService,通过之前注入ioc容器的restTemplate来消费 eureka-client 服务的 "/hi" 接口,在这里我们直接用的程序名替代了具体的url地址,在ribbon中它会根据服务名来选择具体的服务实例,根据服务实例在请求的时候回用具体的url替换掉服务名。

  1. package com.ucredit.serverribbon.service;
  2.  
  3. import org.springframework.beans.factory.annotation.Autowired;
  4. import org.springframework.stereotype.Service;
  5. import org.springframework.web.client.RestTemplate;
  6.  
  7. @Service
  8. public class HelloService {
  9. @Autowired
  10. RestTemplate restTemplate;
  11.  
  12. public String hiService(String name) {
  13. return restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
  14. }
  15.  
  16. }

写一个controller ,在controller中调用 HelloService

  1. package com.ucredit.serverribbon.controller;
  2.  
  3. import com.ucredit.serverribbon.service.HelloService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.GetMapping;
  6. import org.springframework.web.bind.annotation.RequestParam;
  7. import org.springframework.web.bind.annotation.RestController;
  8.  
  9. @RestController
  10. public class HelloControler {
  11. @Autowired
  12. HelloService helloService;
  13.  
  14. @GetMapping(value = "/hi")
  15. public String hi(@RequestParam String name) {
  16. return helloService.hiService( name );
  17. }
  18.  
  19. }

在浏览器中访问 http://localhost:8764/hi?name=forezp ,浏览器交替显示:

  1. 这说明当我们调用 restTemplate.getForObject("http://eureka-client/hi?name="+name,String.class);
  1. 方法时,已经做了负载均衡,访问了不同的端口的服务实例。

    2.2.4 此时的架构

一个服务注册中心,eureka server,端口为8761

service-hi 工程跑了两个实例,端口分别为8762,8763,分别向服务注册中心注册。

service-ribbon 端口为8764,向服务注册中心注册。

当service-ribbon 通过 restTemplate 调用 service-hi的 hi 接口时,因为ribbon 进行了负载均衡,会轮流的调用 service-hi:8762和8763两个端口的hi接口。

  1.  

SprngCloud微服务框架搭建(一)的更多相关文章

  1. 简单Spring Cloud 微服务框架搭建

    微服务是现在比较流行的技术,对于程序猿而言,了解并搭建一个基本的微服务框架是很有必要滴. 微服务包含的内容非常多,一般小伙伴们可以根据自己的需求不断添加各种组件.框架. 一般情况下,基本的微服务框架包 ...

  2. SpringCloud微服务框架搭建

    一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通过负载均衡设备共同对外提供服务 1.3 ...

  3. springCloud 微服务框架搭建入门(很简单的一个案例不喜勿扰)

    Spring cloud 实现服务注册及发现 服务注册与发现对于微服务系统来说非常重要.有了服务发现与注册,你就不需要整天改服务调用的配置文件了,你只需要使用服务的标识符,就可以访问到服务. clou ...

  4. 微服务框架---搭建 go-micro环境

    1.安装micro 需要使用GO1.11以上版本 #linux 下 export GO111MODULE=on export GOPROXY=https://goproxy.io # windows下 ...

  5. springcloud微服务架构搭建

    SpringCloud微服务框架搭建 一.微服务架构 1.1什么是分布式 不同模块部署在不同服务器上 作用:分布式解决网站高并发带来问题 1.2什么是集群 多台服务器部署相同应用构成一个集群 作用:通 ...

  6. 使用Yii2的Web框架搭建微服务框架

    方法 使用自己的Yii2镜像作为基础 使用Yii2的Web框架搭建,为了节省搭建Yii2框架的时间,直接使用现有的Yii2项目,删除了业务相关的逻辑类,将这个代码库作为搭建微服务框架的基础,本身已经积 ...

  7. 【微服务】使用spring cloud搭建微服务框架,整理学习资料

    写在前面 使用spring cloud搭建微服务框架,是我最近最主要的工作之一,一开始我使用bubbo加zookeeper制作了一个基于dubbo的微服务框架,然后被架构师否了,架构师曰:此物过时.随 ...

  8. 十分钟搭建微服务框架(SpringBoot +Dubbo+Docker+Jenkins源码)

    本文将以原理+实战的方式,首先对“微服务”相关的概念进行知识点扫盲,然后开始手把手教你搭建这一整套的微服务系统. 这套微服务框架能干啥? 这套系统搭建完之后,那可就厉害了: 微服务架构 你的整个应用程 ...

  9. 手把手0基础项目实战(一)——教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)...

    原文:手把手0基础项目实战(一)--教你搭建一套可自动化构建的微服务框架(SpringBoot+Dubbo+Docker+Jenkins)... 本文你将学到什么? 本文将以原理+实战的方式,首先对& ...

随机推荐

  1. java网络编程基础——TCP网络编程二

    1.半关闭的Socket 前面的服务器和客户端通信时总是以行为最小数据单位,但是在某些协议里,通信的数据单位可能是多行的,当出现多行数据时就 出现一个问题:Socket输出流如何表示输出数据已经结束. ...

  2. 分别在Update和FixedUpdate使用GetKeyDown

    测试目的 探究分别在Update和FixedUpdate使用GetKeyDown执行次数,会不同的 测试开始 在Update测试 我们先在Update测试,很正常是一帧重置一下状态,以防止点击一下执行 ...

  3. 2021 NOI冬令营

    2021 NOI冬令营 -- 本来想写得稍微文艺一点的,但是停课这么久已经退化到不会写文章了. 毕竟省选了我才来补的,时间也过去很久了. 毕竟这次我没有获得任何奖项. 我唯一的获得就是-- --好好看 ...

  4. 【Lucas组合数定理】组合-FZU 2020

    组合 FZU-2020 题目描述 给出组合数C(n,m), 表示从n个元素中选出m个元素的方案数.例如C(5,2) = 10, C(4,2) = 6.可是当n,m比较大的时候,C(n,m)很大!于是x ...

  5. YsoSerial 工具常用Payload分析之CC5、6(三)

    前言 这是common-collections 反序列化的第三篇文章,这次分析利用链CC5和CC6,先看下Ysoserial CC5 payload: public BadAttributeValue ...

  6. springmvc学习指南 之---第27篇 spring如何实现servlet3.0无web.xml 配置servlet对象的

    writedby 张艳涛 基于web.xml配置,有人说麻烦,tomcat给按照servlet3.0,实现了基于注解@WebServlet,有人说springmvc的springmvc.xml配置麻烦 ...

  7. 手写RPC

    服务端代码 package com.peiyu.rpcs.bios; import java.io.IOException; public interface IRpcServers { void s ...

  8. DC-9靶机

    仅供个人娱乐 靶机信息 下载地址:http://www.five86.com/downloads/DC-9.zip 一.主机扫描 二.信息收集 三.漏洞查找和利用 发现search的地方可能有sql注 ...

  9. 8.8考试总结(NOIP模拟33)[Hunter·Defence·Connect]

    无法逃避的是自我,而无法挽回的是过去. 前言 还算可以,不过 T1 少 \(\bmod\) 了一下挂了 25pts,T2 没看清题面挂了 27pts. 下回注意吧.. T1 Hunter 解题思路 感 ...

  10. 探究Presto SQL引擎(1)-巧用Antlr

    一.背景 自2014年大数据首次写入政府工作报告,大数据已经发展7年.大数据的类型也从交易数据延伸到交互数据与传感数据.数据规模也到达了PB级别. 大数据的规模大到对数据的获取.存储.管理.分析超出了 ...