SpringCloud实战一:前言

  成为一名架构师几乎是每个程序员的梦想,编程语言、技术、开源组件层出不穷(redis、CAT、Apollo等等),来解决某一领域的问题,架构师要做的是对这些技术、组件进行合理整合来应对快速发展的业务,而微服务架构是当今架构领域最受关注的话题,学好微服务技术栈将能带你从普通程序员成长为架构师。

  微服务演化过程:随着网站规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构势在必行,其中一些大公司开源了优秀的服务化组件,解决当时的问题,国内Dubbo是典型代表,但是随着网站访问量与复杂性进一步提高,单纯的服务化已无法满足要求,Martin Fowler发表《Microservices》后,慢慢出现微服务 一词,微服务是一种架构风格,就像是把一个单独的应用程序开发为一套小服务,每个小服务运行在自己的进程中,并使用轻量级机制通信,通常是 HTTP API,这些服务围绕业务能力来构建,并通过完全自动化部署机制来独立部署,这些服务使用不同的编程语言书写,以及不同数据存储技术,并保持最低限度的集中式管理。微服务架构需要完善的基础设施,如持续集成、自动化测试、持续交付、容器发布,devops(开发运维一体化)的概念就随之而来。

  • 我2012年初进入公司,接触的是 C# ASP.NET 开发的WEB应用,那时候流行三层架构,在项目中实际上有多层,部署方式是单体项目 + 数据库,是个典型的单体三层架构

  • 后面单体架构无法满足日益增长的访问,把登录会话抽离开来,部署 Nginx 做负载转发,转发到后面的单体架构上(发布多份),就是个巨大的单体应用,每次改动都要小心翼翼,怕引起其他地方报错,此方式优缺点明显

  • 同时,2011年阿里巴巴开源 Dubbo,但它是一个SOA服务化治理框架,致力于提供高性能和透明化的RPC远程服务调用方案,是一个服务治理框架。中间有几年没有更新,直到2018年9月12日开始疯狂更新,项目地址:https://github.com/apache/incubator-dubbo

  • 这个时期互联网还未如此火热,软件行业面向的大部分是传统企业,企业中可能有多个系统,不同厂商,多次开发,为解决不同厂商开发系统的对接问题,业界提出了SOA(面向服务架构)理念,可自行搜索

  • 直到2014年3月,Martin Fowler发表《Microservices》,通俗易懂的讲解了什么是微服务架构,自那以后微服务受到人们的关注

  • 2014年底,Spring 团队整合社区与Netflix的一些开源组件推出 SpringCloud,经过高速迭代和发展,SpringCloud至今已成为业界微服务的标准,它是一个优质的开源项目,很多组件结合了一些大厂 netflix 生产环境中开源的解决方案,项目地址:https://spring.io/projects/spring-cloud

  • 到现在,Spring Cloud 可以说是业界微服务开发的标准

  • 后面的博客将会介绍 Spring Cloud 开发微服务所用到的组件 , 以及社区或GitHub上比较火的组件

  • 微服务架构需要的功能或使用场景
    1:把整个系统根据业务拆分成几个子系统。
    2:每个子系统可以部署多个应用,多个应用之间使用负载均衡。
    3:需要一个服务注册中心,所有的服务都在注册中心注册,负载均衡也是通过在注册中心注册的服务来使用一定策略来实现。
    4:所有的客户端都通过同一个网关地址访问后台的服务,通过路由配置,网关来判断一个URL请求由哪个服务处理。请求转发到服务上的时候也使用负载均衡。
    5:服务之间有时候也需要相互访问。例如有一个用户模块,其他服务在处理一些业务的时候,要获取用户服务的用户数据。
    6:需要一个断路器,及时处理服务调用时的超时和错误,防止由于其中一个服务的问题而导致整体系统的瘫痪。
    7:还需要一个监控功能,监控每个服务调用花费的时间等。

  • SpringCloud 架构总览

SpringCloud实战一:前言_第1张图片

  • 核心架构图
    SpringCloud实战一:前言_第2张图片

  • SpringCloud特点
    1:约定优于配置
    2:开箱即用、快速启动
    3:适用于各种环境
    4:轻量级的组件
    5:组件支持丰富,功能齐全

  • SpringCloud 整合了多个核心组件(从服务注册中心、网关、熔断降级、限流、监控、配置中心等),而Dubbo 只是实现了服务治理,是服务化组件,很多其他功能无法实现,它是SpringCloud中的一个部分,但dubbo使用的rpc协议,数据序列化的效率比Http协议高多了。

Spring Cloud是基于SpringBoot开发的,进行封装,引入依赖后通过一个简单的注解启用某个组件,简单易用,因此想玩的朋友需要有SpringBoot基础

- Eureka 服务发现与注册中心
- Hystrix 负责监控服务之间的调用,熔断保护与降级。
- Hystrix dashboard 图形化监控
- Turbine 聚合服务负责监控 Hystrix 集群的熔断情况,并给予图形化的展示
- Spring Cloud Config 配置中心服务,依赖git的webhook钩子,适用于小型项目,配置文件发生变化的时候,Spring Cloud Bus 负责通知各服务去获取最新的配置信息,客户端需依赖rabbitmq
- Zuul网关转发请求,Spring Cloud Zuul目前是1.3几版本,Spring Cloud 今年5月推出了自家的 Spring Cloud Gateway第二代网关,没有整合Zuul2.0
- Ribbon与Feign,客户端负载调用业务服务
- Sleuth+Zipkin消息监控,方便我们进行后续分析
- Spring Cloud OAuth2.0认证、鉴权

上面是SpringCloud 全家桶系列组件,而上述组件适用场景可能无法满足大公司的业务场景,因此大厂开源了一些组件替换SpringCloud中的组件,来达到更高的可用性与稳定性,如:携程开源了Apollo配置中心,美团点评开源CAT监控等,这些开源出来的组件被很多一线互联网公司大规模使用,github上,已超过几千颗星,经过大厂的生产实践,如有需求在我们的项目中也可以使用

我会把真实线上环境中用到的SpringCloud 各个组件进行分享,除了上述SpringCloud官方推出的组件外,还会介绍一些国内大厂开源的微服务组件,如:携程开源了Apollo配置中心,美团点评开源CAT监控等,新接触微服务的朋友可以先看看一些前辈写的书籍
《Spring Boot》相关书籍
《Spring Cloud微服务实战》翟永超,博客:http://blog.didispace.com/
《Spring Cloud与Docker微服务架构实战》周立,博客:http://www.itmuch.com/

更多SpringCloud的文章,都在 ——> SpringCloud实战:目录

后面博客中项目的统一环境,博客的相关代码都提交到码云上了,点击查看 源码

Java8
Maven3
IDEA
SpringBoot 2.0.6.RELEASE
SpringCloud Finchley.SR2(非常新的版本)

下图是SpringCloud官方的主流版本,查看地址:https://spring.io/projects/spring-cloud
SpringCloud实战一:前言_第3张图片

你可能感兴趣的:(spring,cloud,SpringCloud实战,springcloud)