Spring Cloud系列(1)Spring Cloud概述

本站小福利 点我获取阿里云优惠券

原文作者:杨大仙的程序空间

1 Spring Cloud概述

        本文要点

             传统应用的问题

             微服务与Spring Cloud

             本书介绍

        本章将会简述Spring Cloud的功能,描述什么是Spring Cloud,它能为我们带来什么,为后面学习该框架的知识打下理论的基础。

1.1 传统的应用

1.1.1 单体应用

        在此之前,笔者所在公司开发Java程序,大都使用Struts、Spring、Hibernate(MyBatis)等技术框架,每一个项目都会发布一个单体应用。例如开发一个进销存系统,将会开发一个war包部署到Tomcat中,每一次需要开发新的模块或添加新功能时,都会在原来的基础上不断的添加。若干年后,这个war包不断的膨胀,程序员在进行调试时,服务器也可能需要启动半天,维护这个系统的效率极为低下。这样一个war包,涵盖了库存、销售、会员、报表等模块,如图1-1。

图1-1 单体应用

        这样的单体应用隐患非常多,任何的一个bug,都有可能导致整个系统宕机。笔者印象最深刻的是,曾经有一客户在高峰期,导出一张销售明细报表(数据量较大),最终造成整个系统瘫痪,前台的销售人员无法售卖。维护这样一个系统,不仅效率极低,而且充满风险,项目组的各个成员惶惶不可终日,我们需要本质上的改变。

1.1.2 架构演进

        针对以上的单体应用的问题,我们参考SOA架构,将各个模块划分独立的服务模块(war),并且使用了数据库的读写分离,架构如图1-2。

图1-2 架构演进

        各个模块之间会存在相互调用的依赖关系,例如销售模块会调用会员模块的接口,为了减少各个模块之间的耦合,我们加入了企业服务总线(ESB),各模块与ESB之间的架构如图1-3所示。

图1-3 ESB

        加入ESB后,各个模块将服务发布到ESB中,它们与ESB之间使用SOAP协议进行通信。图1-2与图1-3的架构实现后,整个系统的性能有了明显的提升,各个模块的耦合度也降低了。运行了一段日子后,又出现了新的问题,由于销售终端数量的增多,销售模块明显超过其承受能力,为了保证销售前端的正常运行,我们使用了Nginx做负载均衡,请见图1-4。

图1-4 使用Nginx

        随着销售模块的增多,带来了许多问题,例如管理这些模块,对于运维工程师来说,是一项艰巨的任务,一旦销售模块有所修改,他们将通宵达旦进行升级。另外,企业服务总线也有可能成为性能的瓶颈,虽然目前仍未出现该问题,但我们需要未雨绸缪。

1.1.3 架构要求

        从前面的架构演进可知,应用中的每一个点,都有可能成为系统的问题点。随着互联网应用的普及,在大数据、高并发的环境下,我们的系统架构需要面对更为严苛的挑战,我们需要一套新的架构,它起码能满足以下要求:

              高性能:这是应用程序的基本要求。

              独立性:其中一个模块出现bug或者其他问题,不可以影响其他模块或者整个应用。

              容易扩展:应用中的每一个节点,都可以根据实际需要进行扩展。

              便于管理:对于各个模块的资源,可以轻松进行管理、升级,减少维护成本。

              状态监控与警报:对整个应用程序进行监控,当某一个节点出现问题时,能及时发出警报。

        为了能解决遇到的问题、达到以上的架构要求,我们开始研究Spring Cloud。

1.2 微服务与Spring Cloud

1.2.1 什么是微服务

        微服务一词来源Martin Fowler的“Microservices”一文,微服务是一种架构风格,将单体应用划分为小型的服务单元,微服务之间使用HTTP的API进行资源访问与操作。

        在对单体应用的划分上,微服务与前面的SOA架构有点类似,但是SOA架构侧重于将每个单体应用的服务集成到ESB上,而微服务做得更加彻底,强调将整个模块变成服务组件,微服务对模块的划分粒度可能会更细。以我们前面的销售、会员模块为例,在SOA架构中,只需要将相应的服务发布到ESB容器就可以了,而在微服务架构中,这两个模块本身,将会变为一个或多个的服务组件。SOA架构与微服务架构,请见图1-5与图1-6。

图1-5 SOA架构

图1-6 微服务架构

        在微服务的架构上,Martin Fowler的文章肯定了Netflix的贡献,接下来,我们了解一下Netflix OSS。

1.2.2 关于Netflix OSS

        Netflix是一个互联网影片提供商,在几年前,Netflix公司成立了自己的开源中心,名称为Netflix Open Source Software Center,简称Netflix OSS。这个开源组织专注于大数据、云计算方面的技术,提供了多个开源框架,这些框架包括大数据工具、构建工具、基于云平台的服务工具等。Netflix所提供的这些框架,很好的遵循微服务所推崇的理念,实现了去中心化的服务管理、服务容错等机制。

1.2.3 Spring Cloud与Netflix

        Spring Cloud并不是一个具体的框架,大家可以把它理解为一个工具箱,它提供的各类工具,可以帮助我们快速的构建分布式系统。

        Spring Cloud的各个项目基于Spring Boot,将Netflix的多个框架进行封装,并且通过自动配置的方式将这些框架绑定到Spring的环境中,从而简化了这些框架的使用。由于Spring Boot的简便,使得我们在使用Spring Cloud时,很容易的将Netflix各个框架整合进我们的项目中。Spring Cloud下的“Spring Cloud Netflix”模块,主要封装了Netflix的以下项目:

              Eureka:基于REST服务的分布式中间件,主要用于服务管理。

              Hystrix:容错框架,通过添加延迟阀值以及容错的逻辑,来帮助我们控制分布式系统间组件的交互。

              Feign:一个REST客户端,目的是为了简化Web Service客户端的开发

              Ribbon:负载均衡框架,在微服务集群中为各个客户端的通信提供支持,它主要实现中间层应用程序的负载均衡

              Zuul:为微服务集群提供过代理、过滤、路由等功能。

1.2.4 Spring Cloud的主要模块

        除了Spring Cloud Netflix模块外,Spring Cloud还包括以下几个重要的模块:

              Spring Cloud Config:为分布式系统提供了配置服务器和配置客户端,通过对它们的配置,可以很好的管理集群中的配置文件。

              Spring Cloud Sleuth:服务跟踪框架,可以与Zipkin、Apache HTrace和ELK等数据分析、服务跟踪系统进行整合,为服务跟踪、解决问题提供了便利。

              Spring Cloud Stream:用于构建消息驱动微服务的框架,该框架在Spring Boot的基础上,整合了“Spring Integration”来连接消息代理中间件。

              Spring Cloud Bus:连接RabbitMQ、Kafka等消息代理的集群消息总线。

1.3 本章小结

        本章的1.1小节,对传统的单体应用、SOA架构做了一个简单的总结,在此过程中分析我们所遇到的问题。在1.2小节,简单介绍了微服务与Spring Cloud。接下来,我们正式开始讲述本书的知识点。

我的官网

我的官网http://guan2ye.com

我的CSDN地址http://blog.csdn.net/chenjianandiyi

我的简书地址http://www.jianshu.com/u/9b5d1921ce34

我的githubhttps://github.com/javanan

我的码云地址https://gitee.com/jamen/

阿里云优惠券https://promotion.aliyun.com/ntms/act/ambassador/sharetouser.html?userCode=vf2b5zld&utm_source=vf2b5zld

时间: 2024-08-31 22:35:43

Spring Cloud系列(1)Spring Cloud概述的相关文章

Dekel Tankel 谈 Cloud Foundry 与 Spring 前景

来自 特约记者 丁雪丰 的报道: 2015年12月2日至3日,CloudFoundry峰会首次来到了中国上海,在会场上我们有幸采访到了Pivotal的CloudFoundry全球 用户组负责人Dekel Tankel,与他探讨了Pivotal CloudFoundry及Spring在这一年里的发展情况. 2015年12月2日至3日,CloudFoundry峰会首次来到了中国上海,两天的会议围绕着CloudFoundry平台及其落地场景与运用展开了多场讨论分享.在会场上我们有幸采访到了Pivota

Spring框架系列相关面试问题

1.说说你了解的Spring中的设计模式  第一种:简单工厂 又叫做静态工厂方法(StaticFactory Method)模式,但不属于23种GOF设计模式之一.  简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类.  spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得bean对象,但是否是在传入参数后创建还是传入参数前创建这个要根据具体情况来定.如下配置,就是在 HelloItxxz 类中创建一个 itxxzBean. 1

Spring实战5-基于Spring构建Web应用

主要内容 将web请求映射到Spring控制器 绑定form参数 验证表单提交的参数 写在前面:关于Java Web,首先推荐一篇文章--写给java web一年左右工作经验的人,这篇文章的作者用精练的话语勾勒除了各种Java框架的缘由和最基本的原理.我们在学习Spring的过程中也要切记,不仅要知道怎么做?还要深究背后的思考和权衡. 对于很多Java程序员来说,他们的主要工作就是开发Web应用,如果你也在做这样的工作,那么你一定会了解到构建这类系统所面临的挑战,例如状态管理.工作流和参数验证等

通向架构师的道路(第二十天)万能框架spring(二)maven结合spring与ibatis

一.前言 上次讲了Struts结合Spring并使用Spring的JdbcTemplate来搭建工程框架后我们面临着jar库无法管理,工程发布不方便,jar包在工程内太占空间,jar包冲突,管理,甚至漏包都问题.于是我们在讲"万能框架spring(二)"前,传授了一篇番外篇,即讲利用maven来管理我们的jar库. 从今天开始我们将结合"万能框架spring(一)"与番外篇maven来更进一步丰富我们的ssx框架,那么今天讲的是使用iBatis3结合SS来构建我们的

请教一个关于spring mvc如何取得Spring管理的bean的问题

问题描述 请教一个关于spring mvc如何取得Spring管理的bean的问题 请教一个关于spring mvc的问题: 关于http://elf8848.iteye.com/blog/875830/这个博文的第"十七.如何取得Spring管理的bean"中的第三个方法和第一种有什么区别和冲突? 第一种指明了启动加载的配置文件,而使用第三种,难道就不需要指明启动加载的配置文件么? 解决方案 不知道,不可以吧.好好加油 解决方案二: 应该是在web.xml中配置 > <l

漫谈Spring(一)-Spring简介

声明漫谈肯定是不拘泥与形式,我也是看的别人的东西,然后说下自己的理解. spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架. 然而,Spring的用途不仅限于服务器端的开发.从简单性.可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益. Spring的核心是个轻量级容器(Container),实现了IoC(Inversion of Contro

使用 Spring Boot 快速构建 Spring 框架应用,PropertyPlaceholderConfigurer

Spring 框架对于很多 Java 开发人员来说都不陌生.自从 2002 年发布以来,Spring 框架已经成为企业应用开发领域非常流行的基础框架.有大量的企业应用基于 Spring 框架来开发.Spring 框架包含几十个不同的子项目,涵盖应用开发的不同方面.如此多的子项目和组件,一方面方便了开发人员的使用,另外一个方面也带来了使用方面的问题.每个子项目都有一定的学习曲线.开发人员需要了解这些子项目和组件的具体细节,才能知道如何把这些子项目整合起来形成一个完整的解决方案.在如何使用这些组件上

mybatis 高级映射和spring整合之与Spring整合(6)

mybatis 高级映射和spring整合之mybatis与Spring整合 3.0 mybatis和spring整合(掌握) 3.1 整合思路 需求spring通过单例方式管理SqlSessionFactory. spring和mybatis整合生成代理对象,使用SqlSessionFactory创建SqlSession.(spring和mybatis整合自动完成) 持久层的mapper都需要有spring进行管理. 3.2 整合环境 创建一个新的java工程(接近实际开发的工程结构) jar

spring4 1 5-Struts 2.3.20 + spring 4.1.5 + spring JDBC 的搭建

问题描述 Struts 2.3.20 + spring 4.1.5 + spring JDBC 的搭建 都要那些JAR包? 还有struts.xml 的action 和 from 的namespace的问题? 弄了一天了还是没解决,,, 哪位大神给个demo也可以.