微服务架构的诞生并非偶然。是由于互联网的快速发展,技术的日新月异,传统架构无法适应快速变化等多重因素推动下诞生的产物。互联网时代的产品通常具有两类特征:需求变化快和用户群体庞大。随着用户的增多,如何保证系统的可扩展性和高可用性成为对系统架构的挑战。如果仍沿用以往的传统开发模式,很难开发出规模庞大、综合性强的系统来满足市场对技术的需求。随着架构向SOA架构发展,服务不断拆分分解,粒度越来越小,直到微服务架构诞生。微服务架构是对SOA架构的继承,但最本质的区别之一是微服务是真正分布式和去中心化的。把包括路由、消息解析在内的所有“会思考”的逻辑都放在服务内部,去掉一个统一的ESB,服务之间轻通信,是比SOA更彻底的拆分。微服务架构的重点是业务系统需要彻底的组件化和服务化。将原来单一的业务系统拆分成多个可以独立开发、设计、运行和维护的小应用。这些小应用程序通过服务连接完成交互和集成。从2009年左右开始,Netflix彻底重新定义了自己的应用开发和运营模式,拉开了微服务探索的第一步,直到2014年3月MartinFowler写的一篇微服务文章以一种更通俗易懂的形式为大家定义了什么是微服务架构.在文章中,MartinFowler阐述了他对微服务架构的设想。他认为微服务架构是一种架构模式。它提倡将单个应用程序划分为一组小服务。各项服务相互协调配合,为用户提供最终价值。.每个服务都运行在自己独立的进程中,服务之间使用轻量级通信机制(通常是基于HTTP的RESTfulAPI)进行通信。每个服务都围绕特定的业务构建,可以独立部署到生产环境、类生产环境等。另外,要尽量避免统一集中的服务管理机制。对于具体的服务,要根据业务上下文选择合适的语言和工具来构建。微服务架构与数据治理随着微服务架构的落地,人们发现微服务架构虽然改进了开发模式,但也引入了一些问题。在所有问题中,最重要的是即将面临的问题。这是数据的问题。在微服务架构上,我们强调彻底的组件化和服务化。每个微服务都可以独立部署并投入生产。其实就是很多微服务都有自己独立的数据库。整个业务数据分散在各个子服务之后,会出现两个最明显的问题:1.业务管理系统完成数据的查询后,如何整合数据,比如分页查询,多条件查询,ETC。?2、如何进一步分析和挖掘数据?这些需求可能需要对全量数据进行分析,分析不能影响当前业务。在技??术方案上,我们一般有两种选择来处理这些问题。第一种是在线处理数据,第二种是离线处理数据。在线数据处理的方案是按照微服务的标准接口来进行的,后台需要哪个系统的数据可以通过调用某个微服务提供的接口来获取。后端管理平台根据前端的需求去不同的微服务系统获取数据,然后对返回的数据进行处理,返回数据。这种方案有两个缺点:1)一方面微服务数据方需要提供数据接口,另一方面数据使用方需要编写调用方法,调用方需要编写大量代码用于数据处理;微服务在检索数据时,会影响微服务正常的业务处理性能。离线数据处理方案是将业务数据准实时同步到另一个数据库,在同步过程中进行数据集成处理,满足业务方的数据需求。数据同步后,提供另一个服务接口。负责对外数据输出。该方案有两个特点:1)数据同步方案是关键,技术方案很多,如何选择适合公司业务的技术方案;2)离线数据处理不影响微服务的正常业务处理。两种方案在我之前的工作中都实现过,个人更倾向于使用第二种方案。MongoDB与数据分析MongoDB被称为对开发者最友好的数据库,不再强调传统关系型数据库中的行和列,整个表可以看做一个Json文档,MongoDB也被认为是最像Nosql的关系型数据库在Nosql数据库中保留了数据库(DataBase)、集合(Collection)和文档对象(Document),类似于关系型数据库。MongoDB是目前最流行的非关系数据库之一。在最新的数据库排名中位列第五,在所有非关系型数据库中排名第一。广泛应用于国内外互联网公司。MongoDB最大的特点就是支持的查询语言非常强大。它的语法有点类似于面向对象的查询语言。几乎可以实现大部分类似关系型数据库单表查询的功能,还支持对数据建立索引。MongoDB对高可用和读写负载均衡的实现非常简单友好。MongoDB自带副本集的概念。通过设计合适的副本集和驱动,可以轻松实现高可用性和读写负载均衡。MongoDB的这些特性对于数据的高性能查询非常方便。MongoDB支持Aggregate和Mapreduce使用分而治之的概念来处理大规模数据分析。SpringBoot对MongoDB的支持非常友好,使用SpringBoot处理MongoDB的查询和操作非常方便。SpringBoot也提供了组件包来支持MongoDB的使用。MongoDB4.0宣布正式支持ACID事务,未来MongoDB的想象空间会更大!因此,MongDB+SpringBoot是微服务架构下进行数据分析的理想选择之一。说说SpringBootSpringBoot是Pivotal团队提供的一个新框架,旨在简化新的Spring应用的初始构建和开发过程。该框架使用特定的配置方法,使开发人员不再需要定义样板配置。使用SpringBoot可以大大简化开发模型。所有你想集成的常用框架都有相应的组件支持。SpringBoot是基于Spring开发的。SpringBoot本身并不提供Spring框架的核心特性和扩展功能,只是用来快速敏捷地开发基于Spring框架的新一代应用。也就是说,它不是一个替代Spring的解决方案,而是一个与Spring框架紧密结合,提升Spring开发者体验的工具。同时集成了大量常用的第三方库配置(如Redis、MongoDB、Jpa、RabbitMQ、Quartz等)。SpringBoot应用程序中的这些第三方库几乎可以零配置开箱即用。大多数SpringBoot应用只需要极少量的配置代码,开发者可以更专注于业务逻辑。SpringBoot一经推出就受到了开源社区的追捧。SpringBoot官方提供了很多Starters方便第三方产品的集成,很多主流框架也积极集成,比如Mybatis。Spring官方非常重视SpringBoot的发展,Spring官网首页的重点推荐和介绍是Spring官方的重点开发项目之一。SpringBoot本身发展非常快。自2014年4月发布SpringBoot1.0以来,版本更新非常频繁。我在2016年用的是1.3.X,现在SpringBoot已经发布了SpringBoot2.0。SpringBoot2.0集成引入了很多最好的技术和新特性,SpringBoot1.0的API也得到了极大的优化。SpringBoot一经推出,便迅速成为一项流行的技术。从下图也可以看出这个结论:上图是2014-2018年SpringBoot的百度指数,可以看出SpringBoot2.0的推出引发了搜索高峰。.随着Spring的不断发展,SpringBoot和微服务架构涉及的领域越来越多。项目集成开发需要配合各种文件,逐渐变得不那么好用和简单,违背了最初的理念,甚至被称为配置地狱。SpringBoot就是在这样的背景下抽象出来的开发框架。目的是为了让大家更方便的使用Spring,集成各种常用的中间件和开源软件;另一方面,在SpringBoot诞生之时,随着微服务概念的慢慢酝酿,SpringBoot的研发融合了微服务架构的理念,实现了微服务架构在Java领域落地的技术支撑。SpringBoot作为一个全新的框架,出自Spring家族,拥有Spring的所有功能,使用起来更加简单;SpringBoot采用了约定大于配置的核心思想,它帮我们做了很多默认的设置。大多数SpringBoot应用程序只需要很少的Spring配置。SpringBoot开发了很多支持大部分开源软件的应用集成包,让我们能够以极低的成本集成其他主流的开源软件。SpringBoot特性:使用Spring项目引导页面,几秒即可构建项目,方便对外输出各种形式的服务,如RESTAPI、WebSocket、Web、Streaming、Tasks非常简单的安全策略集成,支持关系型数据库和非关系型数据库支持运行时嵌入容器,如Tomcat、Jetty,强大的开发包,支持自动热启动管理,依赖内置应用监控,支持各种IED,如IntelliJIDEA、NetBeans、SpringBoot,这些功能非常方便,可以快速搭建独立的微服务。所以我们使用SpringBoot来开发项目,这会给我们传统的开发带来很大的方便。可以说,如果你用过SpringBoot开发过项目,你就不会再愿意用以前的方式开发项目了。综上所述,使用SpringBoot至少可以为我们带来以下改进:SpringBoot让编码更简单,SpringBoot提供了丰富的解决方案,快速集成各种解决方案,提高开发效率。SpringBoot使配置更容易。SpringBoot提供了丰富的Starters,集成主流开源产品往往只需要简单的配置。SpringBoot使部署更容易。SpringBoot本身内置了一个启动容器,只需要一条命令就可以启动项目。结合Jenkins和Docker很容易实现自动化运维。SpringBoot让监控更简单。SpringBoot自带监控组件,使用Actuator可以很方便的监控服务的状态。综上所述,SpringBoot是Java领域最好的微服务架构实现技术,没有之一。三者的纠葛在了解了微服务架构、SpringBoot、大数据治理之后,我们发现了这样一个有趣的东西:微服务架构是一种架构思想,是架构不断发展的必然结果。具有构建灵活、易于扩展、应用快速、可扩展性、高可用性等特点;微服务架构的引入对技术有更高的要求。在这样的背景下,SpringBoot应运而生,而SpringBoot也诞生于名门望族。站在比较高的起点,经过几年的发展,生态已经足够完善,SpringBoot当之无愧地成为了Java领域最炙手可热的技术。在微服务架构下,数据被分离到N个独立的微服务中。如何处理市场和业务对大量数据的查询和分析变得十分紧迫。使用SpringBoot和MongoDB可以轻松解决这个问题。通过技术手段将拆分成N个微服务的数据同步到MongoDB集群中,并在同步过程中进行数据清洗,满足公司各种业务需求。SpringBoot对MongoDB的支持非常友好。一方面,SpringData技术预先生成了很多常用的方法,方便使用。另一方面,SpringBoot封装了分布式计算的相关功能,可以让我们以更简洁的方式实现统计查询。SpringBoot是Java领域最新的微服务架构实现技术,SpringBoot+MongoDB方案是微服务架构下数据治理的最佳方案之一。当然,如果我们不熟悉微服务架构、SpringBoot、MongoDB,可能需要走很多弯路。错误的技术方案会给微服务后期的实现带来很大的麻烦,增加额外的开发工作量。我深刻体会到一个合适的技术方案可以节省60%以上的工作量。
