什么是微服务架构

  是系统架构上的一种设计风格,将独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间基于HTTP的RESTful API进行通信协作。

  每个小型服务都围绕各自的业务功能进行构建。每个服务都维护自身的数据存储、业务开发、自动化测试案例以及独立部署机制。

  注:由于有了轻量级的通信协作基础,所以这些微服务可以使用不同的语言编写。

与单体系统的区别

  随着业务增长与开发,单体系统会显得更加臃肿,且由于单体系统往往部署在一个进程中,修改一个小功能,为了部署上线会影响其他功能的运行。单体系统内各个模块的使用场景、并发量、消耗的资源类型都各不相同,对资源利用又互相影响,导致各个业务模块的系统容量很难评估。

  单体系统在初期可以实现比较方便地开发与使用,但是随着系统的发展,维护成本变大,且难以控制(这个是深有体会,当你一个系统业务复杂且架构设计不合理,同时以前的开发者之间没有什么规范的时候,这时候对于后来者来说对于功能的修改、维护、完善都是异常痛苦的)。

  为了解决单体系统的问题,微服务架构将不同的模块拆分成多个不同的服务,服务能够实现独立的部署与扩展,且不同的服务都运行在自己的进程内,由于部署存在稳定的边界,这样每个服务的更新都不会影响到其他服务的运行。

  同样由于是单独部署,我们可以更准确的为每个服务评估性能容量,通过配合服务间的协作流程可以更容易发现系统的瓶颈位置,以及给出较为准确的系统级性能容量评估。

微服务带来的新问题

  运维的新挑战:由于微服务框架中,需要维护的进程数量增大,运维的过程需要更多的自动化。

  接口的一致性:虽然拆分了服务,但业务逻辑的依赖不会消除,只是从单体应用的代码依赖变为了服务间的通信依赖。我们需要完善接口和版本管理,遵循更加严格的开闭原则。

  分布式的复杂性:网络延迟、分布式事务、异步消息。

微服务的九大特性

服务组件化:

  我们需要对服务进行组件化拆分。个人理解是,根据实际的业务需要,将业务耦合性强的业务内容放在一个服务中,然后不同的服务之间可以通过HTTP等通信协议进行协作。

  就类似于乐高积木。

按业务组织团队:

  这个目前跟我的领域无关,毕竟我现在只处于一个小兵的位置。

  需要说明的是,开发大型项目时,微服务团队拆分建议按业务线进行拆分。

做“产品”的态度:

  每个业务团队应该对其服务的整个生命周期负责,而不是以往的项目的模式。

智能端点与哑管道:

  在微服务架构中,通常会使用以下两种服务调用方式:

    1)使用HTTP的RESTful API或轻量级的消息发送协议,实现信息传递与服务调用的触发。

    2)通过轻量级消息总线上传递消息,类似于RabbitMQ等一些提供可靠异步交换的中间件。

去中心化治理:

去中心化管理数据:

  每个服务都有其自有的数据库,这就是数据管理的去中心化。

  对于分布式事务,在微服务架构间强调各服务间进行“无事务”的调用,而对于数据一致性,只要求数据在最后的处理状态是一致的即可;若在过程中发现错误,通过补偿机制来进行处理,使得错误数据能够达到最终的一致性。

基础设施自动化:

  在微服务架构中,务必从一开始就构建“持续交付”平台来支撑整个实施过程,该平台需要两大内容:

    1)自动化测试    2)自动化部署

容错设计:

  快速检测故障,并可能自动恢复服务是必须设计和考虑的。

演进式设计:

  可以在项目初期使用单体系统,随着项目演变逐步将业务进行拆分。

Spring Cloud介绍

Spring Cloud包含多个子项目:

  Spring Cloud Config:配置管理工具,支持使用Git存储配置内容,可以使用它实现应用配置的外部化存储,并支持客户端配置信息刷新,加密/解密配置内容。

  Spring Cloud Netflix:核心组件,对多个Netflix OSS开源套件进行整合。

    Eureka:服务治理组件,包含服务注册中心,服务发现和发现机制的实现。

    Hystrix:容错管理组件,实现断路器模式,帮助服务依赖中出现的延迟和故障提供强大的容错能力。

    Ribbon:客户端负载均衡的服务调用组件。

    Feign:基于Ribbon与Hystrix的声明式服务调用组件。

    Zuul:网关组件,提供智能路由、访问过滤    

  以上是能够搭建起一个基本项目所使用到的组件。

  

SpringCloud微服务实战——第一章序言读书笔记的更多相关文章

  1. SpringCloud微服务实战——第二章Springboot

    Spring Boot项目工程 src/main/java:主程序入口HelloApplication,可以通过直接运行该类来启动Spring Boot应用. src/main/resources:配 ...

  2. springcloud微服务实战--笔记

    目前对Springcloud对了解仅限于:“用[注册服务.配置服务]来统一管理其他微服务” 这个水平.有待提高 Springcloud微服务实战这本书是翟永超2017年5月写的,时间已经过去了两年,略 ...

  3. SpringCloud学习(SPRINGCLOUD微服务实战)一

    SpringCloud学习(SPRINGCLOUD微服务实战) springboot入门 1.配置文件 1.1可以自定义参数并在程序中使用 注解@component @value 例如 若配置文件为a ...

  4. SpringCloud微服务实战——第三章服务治理

    Spring Cloud Eureka 服务治理 是微服务架构中最核心最基本的模块.用于实现各个微服务实例的自动化注册与发现. 服务注册: 在服务治理框架中,都会构建一个注册中心,每个服务单元向注册中 ...

  5. 【SpringCloud微服务实战学习系列】服务治理Spring Cloud Eureka

    Spring Cloud Eureka是Spring Cloud Netflix微服务中的一部分,它基于NetFlix Sureka做了二次封装,主要负责完成微服务架构中的服务治理功能. 一.服务治理 ...

  6. Spring-cloud微服务实战【三】:eureka注册中心(中)

      回忆一下,在上一篇文章中,我们创建了两个springboot项目,并且在consumer项目中通过restTemplate进行HTTP通信,成功访问到了producer提供的接口,思考一下这样的实 ...

  7. Spring-cloud微服务实战【九】:分布式配置中心config

      回忆一下,在前面的文章中,我们使用了spring cloud eureka/ribbon/feign/hystrix/zuul搭建了一个完整的微服务系统,不管是队内还是对外都已经比较完善了,那我们 ...

  8. Spring-cloud微服务实战【二】:eureka注册中心(上)

    ## 前言   本系列教程旨在为大家演示如何一步一步构建一整套微服务系统,至于其中的数据库用什么,订单ID如何保持唯一,分布式相关问题等等不在我们讨论范围内,本教程为了方便大家后续下载代码运行测试,不 ...

  9. SpringCloud微服务实战——搭建企业级开发框架(二):环境准备

    这里简单说明一下在Windows系统下开发SpringCloud项目所需要的的基本环境,这里只说明开发过程中基础必须的软件,其他扩展功能(Docker,k8s,MinIO,XXL-JOB,EKL,Ke ...

随机推荐

  1. 【Head First Servlets and JSP】笔记19:JavaBeans与JSP动作元素(<jsp:setProperty.....>、<jsp:getProperty.....>)

    内容来自imooc. 1.什么是JSP动作元素 2.在JSP页面中如何使用Javabeans <jsp:......>表示这是一个JSP动作元素 3.使用JSP动作元素创建JavaBean ...

  2. 【Head First Servlets and JSP】笔记5:HttpServletResponse resp

    [HttpServletResponse resp] [由servlet处理响应] 1.一般可以用通过resp获得一个输出流(writer),然后通过输出流将HTML写入响应.例如: resp.set ...

  3. java hasmap对象的深复制实现:字节码复制和对象序列化成字符串复制比较。

    /** * Created by Administrator on 2016/11/23. */ public class test { public static void main(String[ ...

  4. Linux嵌入式 -- Bootloader , Uboot

    1. Bootloader作用 PC机中的引导加载程序由BIOS(其本质是一段固件程序)和GRUB或LILO一起组成.BIOS在完成硬件检测和资源分配后,将硬盘中的引导程序读到系统内存中然后将控制权交 ...

  5. javaScript中的DOM补充

    一.DOM树 二.DOM节点 DOM 是这样规定的:    整个文档是一个文档节点     每个 HTML 标签是一个元素节点     包含在 HTML 元素中的文本是文本节点     每一个 HTM ...

  6. 安装Linux应该知道的十件事

    硬件,软件及其之间的一切 Linux机器的硬件和软件之间一切都由内核主宰. 内核负责硬件和软件的连接,每隔几个礼拜就可以在Internet上获取 更新的内核: 如果你自己安装内核并非易事,这时,就轮到 ...

  7. ES6-Set和Map数据结构学习笔记

    Set和Map数据结构 Set 基本用法 ES6提供了新的数据结构--Set,类似于数组,但是成员的值是唯一的,没有重复的值,Set本身是一种构造函数,用来生成Set数据结构 var s = new ...

  8. lucene中facet实现统计分析的思路——本质上和word count计数无异,像splunk这种层层聚合(先filed1统计,再field2统计,最后field3统计)lucene是排序实现

    http://stackoverflow.com/questions/185697/the-most-efficient-way-to-find-top-k-frequent-words-in-a-b ...

  9. SpringBoot_06_使用Swagger2构建强大的RESTful API文档

    二.参考资料 1.Spring Boot中使用Swagger2构建强大的RESTful API文档 2.

  10. Struts2(1)

    一.struts概述 1.struts2框架应用在javaee三层结构中web层框架 2.struts2框架在struts1和webwork基础之上发展全新的框架 二.struts2环境搭建 1.导包 ...