SpringCloud

什么是微服务?

要想学习微服务,首先需要知道什么是微服务?为什么会有微服务?相信看完架构的发展史读者就会明白

架构发展史

单体应用架构

如图所示:将所有的模块,所有内容(页面、Dao、Service、Controller)全部写入一个项目中,放在一个Tomcat容器中启动适用于小型项目

优点:开发速度快,可以利用代码生成工具快速的开发一个项目

缺点:不易扩展,代码耦合度高,且不容错(当某部分出错后整个服务就会停止运行)

垂直架构

既然原来单体架构中代码耦合度高,不利于维护和运行,人们自然就想到将不同的内容分开。最简单合理的方式就是将系统按照功能划分成不同的模块,然后将各模块独立放入不同的Web容器中,这就形成了垂直架构

优点:代码耦合度降低,且不同模块之间可以独立运行。一旦某个模块压力过大,可以针对性的搭集群

缺点:模块之间有可能不是那么完全独立,导致实体类或者其他层代码不能复用,需要多出粘贴,不方便日后维护。如果直接通过HTTP调用又不是很合理。

分布式架构/分布式SOA架构

分布式架构顾名思义就是分散部署在不同的机器上的服务,一个服务可能负责几个功能,是一种面向SOA架构的,服务之间也是通过rpc来交互或者是webservice来交互的架构。从开发的角度看就是Controller层(服务消费者)和Service层(服务提供者)分成不同的项目,部署在不同的服务器上,通过RPC(远程方法调用)来实现交互。阿里巴巴著名的Dubbo框架就是作为分布式架构的框架。一般推荐使用Zookeeper作为服务的注册中心,负责注册和发现服务的提供者,并供服务的消费者消费

微服务

微服务的提出者马丁·福勒关于微服务的论文中文翻译版

单体架构和微服务的比较图示:

微服务的核心就是将传统的一站式应用,根据业务拆分成一个个原子应用。彻底地去耦合,一个服务只做一件事情,从技术角度讲就是一个服务就是一个进程,可以单独启动或销毁,拥有独立的数据库。并且通过配置中心可以方便的切换数据库等。

优点:

  • 每个服务足够内聚,足够小,代码容易理解,一个服务可能就是专一的只干一件事。开发简单、开发效率提高
  • 微服务能够被小团队单独开发,这个小团队可以是由2到5人的开发人员组成
  • 微服务能使用不同的语言开发。易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins, Hudson, bamboo 。微服务允许你利用融合最新技术。
  • 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。

缺点:

  • 开发人员要处理分布式系统的复杂性,会面临分布式事务、分布式一致性等问题
  • 多服务运维难度,随着服务的增加,运维的压力也在增大
  • 服务间通信成本变高

微服务的技术栈

微服务条目 落地技术 备注
服务开发 Springboot、Spring、SpringMVC
服务配置与管理 Netflix公司的Archaius、阿里的Diamond等
服务注册与发现 Eureka、Consul、Zookeeper等
服务调用 Rest、RPC、gRPC
服务熔断器 Hystrix、Envoy等
负载均衡 Ribbon、Nginx等
服务接口调用(客户端调用服务的简化工具) Feign等
消息队列 Kafka、RabbitMQ、ActiveMQ等
服务配置中心管理 SpringCloudConfig、Chef等
服务路由(API网关) Zuul等
服务监控 Zabbix、Nagios、Metrics、Spectator等
全链路追踪 Zipkin,Brave、Dapper等
服务部署 Docker、OpenStack、Kubernetes等
数据流操作开发包 SpringCloud Stream(封装与Redis,Rabbit、Kafka等发送接收消息)
事件消息总线 Spring Cloud Bus

什么是Spring Cloud

Spring Cloud 是实现微服务思想落地开发的一整套技术的集合

Spring Cloud和Dubbo的区别图解

Spring Cloud开发者文档中文版:

https://springcloud.cc/spring-cloud-dalston.html

Spring Cloud中国社区

http://springcloud.cn/

Spring Cloud中文网

https://springcloud.cc/

Spring Cloud学习之-什么是Spring Cloud?的更多相关文章

  1. Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目

    Spring MVC 学习笔记2 - 利用Spring Tool Suite创建一个web 项目 Spring Tool Suite 是一个带有全套的Spring相关支持功能的Eclipse插件包. ...

  2. SSM(spring mvc+spring+mybatis)学习路径——1-1、spring入门篇

    目录 1-1 Spring入门篇 专题一.IOC 接口及面向接口编程 什么是IOC Spring的Bean配置 Bean的初始化 Spring的常用注入方式 专题二.Bean Bean配置项 Bean ...

  3. Spring Boot学习(一)——Spring Boot介绍

    Spring Boot介绍 Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式 ...

  4. Spring Framework 学习笔记——核心技术之Spring IOC

    Spring Framework 官网文档学习笔记--核心技术之Spring IOC 官方文档 spring-framework-5.3.9 1. Spring Framework 核心技术 1.1 ...

  5. spring boot 学习入门篇【spring boot项目的搭建以及如何加载jsp界面】

    [ 前言]  Spring Boot 简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...

  6. Spring框架学习(7)spring mvc入门

    内容源自:spring mvc入门 一.spring mvc和spring的关系 spring mvc是spring框架提供的七层体系架构中的一个层,是spring框架的一部分,是spring用于处理 ...

  7. Spring框架学习(1)Spring简介

    内容源自:Spring 框架简介 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序 ...

  8. spring Boot 学习(六、Spring Boot与分布式)

    一.分布式应用在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用 全栈的Spring,Spring Boot+Spring Cloud 分布式系统: 单一应用 ...

  9. Spring框架学习(4)spring整合hibernate

    内容源自:spring整合hibernate    spring整合注解形式的hibernate 这里和上一部分学习一样用了模板模式, 将hibernate开发流程封装在ORM层提供的模板类Hiber ...

随机推荐

  1. ES6必须 知道的小知识

    1.函数的默认参数 一般 我们给函数设置默认参数的时候  会在函数里用 || 运算符 比如 function show(width,height ....){ var height = height ...

  2. location对象相关

    JS是由DOM(文档对象模型).BOM(浏览器对象模型).以及ECMA组成,而location对象是BOM中的一个非常重要的对象,所有关于地址栏信息的内容都在这里.了解location对象之前让我们先 ...

  3. C#面试题整理(不带答案)

     1.维护数据库的完整性.一致性.你喜欢用触发器还是自写业务逻辑?为什么?  2.什么是事务?什么是锁?  3.什么是索引,有什么优点?  4.视图是什么?游标是什么?  5.什么是存储过程?有什么优 ...

  4. Android APP开发内容图片不显示

    I/Glide: Root cause (1 of 1) Cause (1 of 1): class java.io.FileNotFoundException: No content provide ...

  5. UE4 中的 C++ 与 蓝图交互

    1.Unreal 引擎提供了两种创建新 Gameplay 元素的方法:C++ 和 蓝图视觉脚本. 通过 C++,程序员构建基础游戏系统:设计师可以基于此系统为场景 / 游戏创建自定义的游戏玩法. 这种 ...

  6. 学习Java第六周

    1.内存结构 Java程序在运行时,需要在内存中的分配空间为提高运算效率,空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式. 栈内存 ·用于存储局部变量,当数据使用完,所占 ...

  7. 关于hibernate5的映射文件和配置文件改变(转)

    转自:https://blog.csdn.net/m0_37840000/article/details/78823716 配置文件: <!DOCTYPE hibernate-configura ...

  8. javascript DOM 编程艺术 札记2 平稳退化

    定义 指的是即便浏览器不支持javascript,页面的基础展示功能也不会受到影响的做法. 不能平稳退化的实例 javascript:这种伪协议,它可以通过链接调用javascript函数.比如< ...

  9. 分析CPU使用率不断增加的原因

    工程中发现引起的问题: 结合别的朋友的意见,我的优化思路是: 1.排查是否内存泄漏 经过反复查询代码,未发现有内存泄漏(可以自己百度搜索C#内存泄漏的原因).可以通过任务管理器分析是否有内存泄漏,打开 ...

  10. leetcode.1275找出井字棋的获胜者

    A 和 B 在一个 3 x 3 的网格上玩井字棋. 井字棋游戏的规则如下: 玩家轮流将棋子放在空方格 (" ") 上.第一个玩家 A 总是用 "X" 作为棋子, ...