一文读懂Spring Boot、微服务架构和大数据治理之间的故事(文末有彩蛋!)

微服务架构

微服务的诞生并不是偶然,它是在互联网高速发展,技术突飞猛进的变化以及传统架构没法适应快速变化等多重因素的推进下诞生的产物。互联网时代的产品一般有两类特色:需求变化快和用户群体庞大,在这种状况下,如何从系统架构的角度出发,构建灵活、易扩展的系统,快速应对需求的变化;同时,随着用户的增长,如何保证系统的可伸缩性、高可用性,成为系统架构面临的挑战。html

若是还按照之前传统开发模式,开发一个大型而全的系统已经很难知足市场对技术的需求,这时候分而治之的思想被提了出来,因而咱们从单独架构发展到分布式架构,又从分布式架构发展到 SOA 架构,服务不断的被拆分和分解,粒度也愈来愈小,直到微服务架构的诞生。前端

微服务架构是 SOA 架构的传承,但一个最本质的区别就在于微服务是真正的分布式的、去中心化的。把全部的“思考”逻辑包括路由、消息解析等放在服务内部,去掉一个大一统的 ESB,服务间轻通讯,是比 SOA 更完全的拆分。微服务架构强调的重点是业务系统须要完全的组件化和服务化,原有的单个业务系统会拆分为多个能够独立开发,设计,运行和运维的小应用,这些小应用之间经过服务完成交互和集成。sql

大约 2009 年开始,Netflix 彻底从新定义了它的应用程序开发和操做模型,拉开了微服务探索的第一步,直到2014年3月 Martin Fowler 写的一篇文章 Microservices 以更加通俗易懂的形式为你们定义了什么是微服务架构。Martin Fowler 在文中阐述了对微服务架构的设想,认为微服务架构是一种架构模式,它提倡将单一应用程序划分红一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。数据库

每一个服务运行在其独立的进程中,服务和服务间采用轻量级的通讯机制互相沟通(一般是基于 HTTP 的 RESTful API)。每一个服务都围绕着具体业务进行构建,而且可以被独立地部署到生产环境、类生产环境等。另外,应尽可能避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行构建。后端

微服务架构和数据治理

随着微服务架构的落地,人们发现微服务架构虽然改进了开发模式,但同时也引入了一些问题,在这全部的问题中,最重要的也是立刻要面临的一个问题就是数据的问题。在微服务架构中咱们强调完全的组件化和服务化,每一个微服务均可以独立的部署和投产,其实也就意味着不少的微服务有本身独立的数据库。安全

整个业务数据被分散在各个子服务以后会带来两个最明显的问题:一、业务管理系统对数据完整的查询,好比分页查询、多条件查询等,数据被割裂后如何来整合?二、如何对数据进一步的分析挖掘?这些需求可能须要分析全量的数据,而且在分析时不能影响到当前业务。架构

从技术方案来说,咱们通常有两种选择来处理这些问题,第一种是在线处理数据,第二种是离线处理数据。负载均衡

在线处理数据的方案就是按照微服务的标准接口来进行,后端须要哪一个系统的数据就去调用某个微服务提供的接口来获取。后端管理平台根据前端的需求去不一样的微服务系统去获取数据,而后将返回的数据进行处理后将数据返回。这种方案有两个弊端:1)一方面微服务数据方须要提供数据接口,一方面数据的使用者须要去写调用方法,而且调用者须要编写大量的代码进行数据处理;2)在对各个微服务进行调取数据时会影响微服务的正常业务处理性能。框架

离线处理数据方案,就是将业务数据准实时的同步到另一个数据库中,在同步的过程当中进行数据整合处理,以知足业务方对数据的需求,数据同步过来后,再提供另一个服务接口专业负责对外输出数据信息。这种方案有两个特色:1)数据同步方案是关键,技术选型有不少,如何选择切合公司业务的技术方案;2)离线数据处理对微服务正常业务处理没有影响。运维

在我以往的工做中两种方案都实施过,我的更倾向于使用第二种方案。

MongoDB 和数据分析

MongoDB 称之为对开发人员最友好的数据库,再也不强调传统关系数据库中的行和列,整个表能够看做一个 Json 文档,MongoDB 也被认为在 Nosql 中最像关系数据库的 Nosql 数据库,保留了相似关系数据库的数据库(DataBase)、集合(Collection)、文档对象(Document)。

MongoDB 是目前最热门非关系数据库的之一,在最新的数据库排行榜中 MongoDB 排名第五,在全部的非关系数据库中排名第一,很是普遍的应用于国内外的互联网公司。

MongoDB 最大的特色是支持的查询语言很是强大,其语法有点相似于面向对象的查询语言,几乎能够实现相似关系数据库单表查询的绝大部分功能,并且还支持对数据创建索引。MongoDB 在高可用和读写负载均衡上的实现很是简洁和友好,MongoDB 自带了副本集的概念,经过设计恰当的副本集和驱动程序,能够很是便地实现高可用、读写负载均衡。

MongoDB 的这些特性很是方便对数据进行高性能查询,MongoDB 支持 Aggregate 和 Mapreduce 利用分而治之的理念来处理大规模数据分析。Spring Boot 对 MongoDB 的支持很是友好,使用 Spring Boot 很是便利的处理对 MongoDB 查询和操做,Spring Boot 也提供了组件包来支持对 MongoDB的使用。

MongoDB 4.0 宣布将正式支持 ACID 事务,将来 MongoDB 的想象空间更加巨大!所以 MongDB + Spring Boot 是微服务架构中数据分析的理想选择之一。

再来聊聊 Spring Boot

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员再也不须要定义样板化的配置。采用 Spring Boot 能够大大的简化开发模式,全部你想集成的经常使用框架,它都有对应的组件支持。

Spring Boot 基于 Spring 开发,Spirng Boot 自己并不提供 Spring 框架的核心特性以及扩展功能,只是用于快速、敏捷地开发新一代基于 Spring 框架的应用程序。也就是说,它并非用来替代 Spring 的解决方案,而是和 Spring 框架紧密结合用于提高 Spring 开发者体验的工具。同时它集成了大量经常使用的第三方库配置(例如 Redis、MongoDB、Jpa、RabbitMQ、Quartz 等等),Spring Boot 应用中这些第三方库几乎能够零配置的开箱即用,大部分的 Spring Boot 应用都只须要很是少许的配置代码,开发者可以更加专一于业务逻辑。

Spring Boot 一经推出就受到开源社区的追捧,Spring Boot 官方提供了不少 Starters 方便集成第三方产品,不少主流的框架也纷纷进行了主动的集成,好比 Mybatis。Spring 官方很是重视 Spring Boot 的发展,在 Spring 官网首页进行重点推荐介绍,是目前 Spring 官方重点发展的项目之一。

一文读懂Spring Boot、微服务架构和大数据治理之间的故事(文末有彩蛋!)

Spring Boot 自己发展特别快,自从 2014 年 4 月发布 Spring Boot 1.0 以后,版本更新很是频繁,我在 2016 年使用的时候是 1.3.X,到如今 Spring Boot 已经发布了 Spring Boot 2.0,Spring Boot 2.0 集成了不少最新优秀的技术和新特性,而且对 Spring Boot 1.0 的 API 进行了大幅优化。Spring Boot 一经推出就迅速的成为一门热门的技术,从下图也能够看出这个结论:

一文读懂Spring Boot、微服务架构和大数据治理之间的故事(文末有彩蛋!)

上图为2014年到2018年 Spring Boot 的百度指数,能够看出 Spring Boot 2.0 的推出引起了搜索高峰。

Spring Boot 和 微服务架构

随着 Spring 不断的发展,涉及的领域愈来愈多,项目整合开发须要配合各类各样的文件,慢慢变得不那么易用简单,违背了最初的理念,甚至人称配置地狱。Spring Boot 正是在这样的一个背景下被抽象出来的开发框架,目的为了让你们更容易的使用 Spring 、更容易的集成各类经常使用的中间件、开源软件;另外一方面,Spring Boot 诞生时,正处于微服务概念在慢慢酝酿中,Spring Boot 的研发融合了微服务架构的理念,实现了在 Java 领域内微服务架构落地的技术支撑。

Spring Boot 做为一套全新的框架,来源于 Spring 你们族,所以 Spring 全部具有的功能它都有,并且更容易使用;Spring Boot 以约定大于配置的核心思想,默认帮咱们进行了不少设置,多数 Spring Boot 应用只须要不多的 Spring 配置。Spring Boot 开发了不少的应用集成包,支持绝大多数开源软件,让咱们以很低的成本去集成其余主流开源软件。

Spring Boot 特性:

  • 使用 Spring 项目引导页面能够在几秒构建一个项目
  • 方便对外输出各类形式的服务,如 REST API、WebSocket、Web、Streaming、Tasks
  • 很是简洁的安全策略集成
  • 支持关系数据库和非关系数据库
  • 支持运行期内嵌容器,如 Tomcat、Jetty
  • 强大的开发包,支持热启动
  • 自动管理依赖
  • 自带应用监控
  • 支持各类 IED,如 IntelliJ IDEA 、NetBeans

Spring Boot 的这些特性很是方便、快速构建独立的微服务。因此咱们使用 Spring Boot 开发项目,会给咱们传统开发带来很是大的便利度,能够说若是你使用过 Spring Boot 开发过项目,就不会再愿意以之前的方式去开发项目了。

总结一下,使用 Spring Boot 至少能够给咱们带来如下几方面的改进:

  • Spring Boot 使编码变简单,Spring Boot 提供了丰富的解决方案,快速集成各类解决方案提高开发效率。
  • Spring Boot 使配置变简单,Spring Boot 提供了丰富的 Starters,集成主流开源产品每每只须要简单的配置便可。
  • Spring Boot 使部署变简单,Spring Boot 自己内嵌启动容器,仅仅须要一个命令便可启动项目,结合 Jenkins 、Docker 自动化运维很是容易实现。
  • Spring Boot 使监控变简单,Spring Boot 自带监控组件,使用 Actuator 轻松监控服务各项状态。

总结,Spring Boot 是 Java 领域最优秀的微服务架构落地技术,没有之一。

三者之间的纠葛

了解完微服务架构、Spring Boot、大数据治理以后,咱们就发现这样一个有趣的事情:微服务架构是一种架构思想,是架构不断发展的必然结果,具备构建灵活、易扩展、快速应用、可伸缩性、高可用等特色;微服务架构思想的推出对技术有了更高的要求,在这样的背景下 Spring Boot 孕育而生,Spring Boot 出生名门,从一开始就站在一个比较高的起点,又通过这几年的发展,生态足够完善,Spring Boot 已经当之无愧成为 Java 领域最热门的技术。

微服务架构下,数据被分隔到 N 个独立的微服务中,如何应对市场、业务对大量数据的查询、分析就变的很是急迫,利用 Spring Boot 和 MongoDB 能够轻松的解决这个问题,经过技术手段将分裂到 N 个微服务的数据同步到 MongoDB 集群中,在同步的过程当中进行数据清洗,来知足公司的各项业务需求。Spring Boot 对 MongoDB 的支持很是友好,一方面 Spring Data 技术预生成不少经常使用方法便于使用,另外一方面 Spring Boot 封装了分布式计算的相关函数,可让咱们以较简洁的方式来实现统计查询。

Spring Boot 是 Java 领域微服务架构最优落地技术,Spring Boot+MongoDB 方案是在微服务架构下数据治理的最佳方案之一。

固然若是咱们对微服务架构、Spring Boot 、MongoDB 不熟悉的话,可能须要走不少的弯路。错误的技术方案会对后期的微服务落地带来很是大的困扰,增长额外的开发工做量,我本身深有体会,合适的技术方案能够节省60%以上的工做量。

为此我特地写了一个专栏《微服务技术架构和大数据治理实战》,讲解微服务架构和大数据治理的技术落地。将工做中实践过最具实战表明性的一些内容整理出来,以 51CTO 专栏的形式来展示。课程内容将站在全局的角度去看待微服务实践和数据分析,讲解微服务架构、Spring Boot、MongoDB、同步方案、数据分析等内容,帮助广大的技术朋友们少走弯路,掌握微服务和数据分析的技术。

本专栏共18节课程,围绕四大块内容:

  • 1、微服务架构和 Spring Boot;
  • 2、Spring Boot 和 MongoDB 实战详解,介绍实战中遇到的典型问题;
  • 3、微服务架构下的数据治理,数据同步、实时变动;
  • 4、微服务架构实践的经验和教训。

认真学完此专栏以后,会对微服务架构实践、Spring Boot 和 MongoDB 使用、微服务架构下数据处理有进一步的了解,具有使用 Spring Boot 开发微服务项目、利用相关技术解决微服务架构中数据治理的疼点。

专栏地址:微服务技术架构和大数据治理实战
一文读懂Spring Boot、微服务架构和大数据治理之间的故事(文末有彩蛋!)

相关文章
相关标签/搜索