前言

  本篇文章简单介绍一下什么是微服务、微服务的优点、SpringCloud的微服务架构核心组件选型等;

一、什么是微服务?

  微服务的提出者Martin Fowler是这样描述微服务的(原文:https://martinfowler.com/articles/microservices.html):

   In short, the microservice architectural style [] is an approach to developing a single application as a suite of small services, each running in its own process and communicating with lightweight mechanisms, often
an HTTP resource API. These services are built around business capabilities and independently deployable by fully automated deployment machinery. There is a bare minimum of centralized management of these services,
which may be written in different programming languages and use different data storage technologies.

  翻译过来(译文:http://blog.cuicc.com/blog/2015/07/22/microservices/):

     简单来说,微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并且可通过全自动部署机制独立部署。这些服务共用一个最小型的集中式的管理,
服务可用不同的语言开发,使用不同的数据存储技术。

  故微服务架构应具有以下特性:

    1、每个微服务可独立运行在自己的进程里,即独立部署;

    2、一系列独立运行的微服务共同构建起整个系统,即分布式系统架构;

    3、每个服务为独立的业务开发,一个微服务只关注某个特定的功能,即业务服务层的高内聚低耦合,业务的模块化;

    4、微服务之间通过轻量级的通信机制通信,即使用RestFul调用;

    5、可使用不同的语言和数据存储技术;

    6、自动化部署;

  总结:

    装逼版:微服务,即基于独立的业务模块化单元的单机应用进行的完整、成熟的分布式架构;(个人理解)

    白话版:微服务,即多个微小的独立部署的应用单元组成的,各个服务之间互不影响的一套完整的系统;(个人理解)

二、微服务的优点

  1、易于开发和维护:一个微服务只会关注特定的业务功能,所以业务清晰,代码量少,易维护;

  2、局部部署:微服务是独立部署的,所以它部署时不会影响其他服务;

  3、可扩展性强:由于微服务是独立部署的,当产品有新的需求时,就可以重新建立一套微服务,完全解耦;

  4、支持多语言:技术选型不在受限,完全可以一个系统中有多个语言存在;

  最大的优点就是规避了单体应用缺点,复杂性高,部署频率低,扩展受限,可靠性差等。

三、SpringCloud的微服务架构核心组件选型

      

   1、服务网关:由于是微服务,不可避免的会有很多的接口,这样的会互相访问时会出现很多问题,例如:存在跨域请求,客户端辉多次请求不同的微服务,增加可客户端的复杂性和不可维护性,难以重构等问题,所以我们需要一个服务网关来管理这些请求,微服务网关是介于客户端和服务端之间的中间层,这样我们就可以做一些额外的功能如:认证安全,压力测试,监控,负载均衡等;在SpringCloud建议使用Zuul,它是Netflix开源的微服务网关;

   2、客户端负载均衡:在微服务中,部署时各个微服务都会部署多个实例,这样我们就需要将请求分摊到各个具体的实例上;在SpringCloud建议使用Ribbon,他也是Netflix开源的负载均衡器;

   3、服务注册中心:使用微服务构建的是分布式系统,微服务之间通过网络进行通信,而随着系统体积的增加,服务也会增加,这样我们就需要一个服务管理中心去管理这些服务;在SpringCloud中建议使用Eureka;

   4、熔断器:微服务架构的应用系统通常会有多个服务层,而各个微服务之间又有着业务关系,难免存在依赖,而如果其中一个微服务发生故障时也会导致其他微服务的不可用,从而引起级联故障也就是雪崩效应,所以我们需要一个断路保护机制,来保证不会出现雪崩效应;在SpringCloud中建议使用Hystrix;

   5、配置中心:由于微服务较多,不同环境配置也不尽相同,所以非常有必要将配置文件统一管理,所以需要一个配置中心来管理配置文件;在SpringCloud中建议使用SpringCloudConfig;

参考书籍:《SpringCloud与Docker微服务架构实战》周力著

SpringCloud-初识微服务(一)的更多相关文章

  1. 用SpringCloud进行微服务架构演进

    在<架构师必须要知道的阿里的中台战略与微服务> 中已经阐明选择SpringCloud进行微服务架构实现中台战略,因此下面介绍SpringCloud的一些内容,SpringCloud已经出来 ...

  2. 基于Spring-Cloud的微服务框架设计

    基于Spring-Cloud的微服务框架设计 先进行大的整体的框架整理,然后在针对每一项进行具体的详细介绍

  3. SpringCloud学习--微服务架构

    目录 微服务架构快速指南 SOA Dubbo Spring Cloud Dubbo与SpringCloud对比 微服务(Microservice)架构快速指南 什么是软件架构? 软件架构是一个包含各种 ...

  4. springCloud搭建微服务集群+Zuul服务器端负载均衡

    概述 最近研究了一下springCloud的微服务集群,主要用到了SpringCloud的服务发现和服务器端负载均衡,所有的项目都是用的springboot,可以和springCloud无缝对接. 技 ...

  5. SpringCloud与微服务系列专栏

    一. 前置知识 学习SpringCloud之前需要具备和掌握如下框架和工具的使用:SpringMVC,Spring,Spring Boot,Mybatis,Maven,Git. SpringCloud ...

  6. springCloud进阶(微服务架构&Eureka)

    springCloud进阶(微服务架构&Eureka) 1. 微服务集群 1.1 为什么要集群 为了提供并发量,有时同一个服务提供者可以部署多个(商品服务).这个客户端在调用时要根据一定的负责 ...

  7. 一个C#开发者学习SpringCloud搭建微服务的心路历程

    前言 Spring Cloud很火,很多文章都有介绍如何使用,但对于我这种初学者,我需要从创建项目开始学起,所以这些文章对于我的启蒙,帮助不大,所以只好自己写一篇文章,用于备忘. SpringClou ...

  8. SpringCloud的微服务网关:zuul(理论)

    参考链接:https://springcloud.cc/spring-cloud-dalston.html 一.概念与定义 1.为什么要引入API网关 后期维护:路由规则和服务实例列表困难 系统架构: ...

  9. springcloud 新增微服务

    个人记录 记录公司微服务项目,模块添加的步骤 一  创建Module 选择maven groupid和artifactid 参考 pom文件 <project xmlns="http: ...

  10. 深入理解SpringCloud与微服务构建

    旭日Follow_24 的CSDN 博客 ,全文地址请点击: https://blog.csdn.net/xuri24/article/details/81742534 目录 一.SpringClou ...

随机推荐

  1. 在html的JavaScript部分计算,保留小数点后面的位数

    例: f_pbf = ((f_boday_fat/f_weight)*100).toFixed(1);      注:例子中的.toFixed(1)是所用函数,确保在所得结果中保留小数点后面一位数,若 ...

  2. ORACLE RAC节点意外重启Node Eviction诊断流程图(11.2+)

  3. 使用Docker构建AspNetCore应用

    #Build Image Stage FROM microsoft/aspnetcore-build:2 AS build-env WORKDIR /api # 以下为优化还原,因为项目文件不常变动D ...

  4. Oracle恢复删除数据

    可以通过SCN和时间戳两种方法来恢复. 一.通过SCN恢复删除且已经提交的数据 查询当前SCN select current_scn from v$database; 如图: 缩小范围进行查询 查询到 ...

  5. C++用法总结

    1.C++的绝对值符号 如果是整形的,就是abs() 如果是浮点型的,是fabs() 这两个函数都从属于库函数math.h #include <cmath> or #include< ...

  6. 个人作业2:APP案例分析--腾讯动漫

    第一部分 调研,评测 个人第一次上手体验 以往看漫画就是在浏览器直接搜索在网页上看,直到用了腾讯动漫APP,我才摒弃这个很low的方法.腾讯动漫直接用qq就可以登陆,有更齐全的漫画分类,更清晰的画质, ...

  7. python处理数据(一)

    CSV数据处理 csv文件格式 逗号分隔符(csv),有时也称为字符分隔值,因为分隔字符也可以不是逗号,其文件以纯文本的形式存储表格数据(数字和文本).纯文本意味着该文件是一个字符序列,不含必须像二进 ...

  8. MySQL开发规范和原则大全

    一. 表设计 库名.表名.字段名必须使用小写字母,“_”分割. 库名.表名.字段名必须不超过12个字符. 库名.表名.字段名见名知意,建议使用名词而不是动词. 建议使用InnoDB存储引擎. 存储精确 ...

  9. JDK1.6在LINUX下的安装配置[转]

    JDK1.6在LINUX下的安装是如何进行的呢,让我们开始我们的演示: Ubuntu Linux下jdk的安装与配置 1.JDK1.6安装准备 从sun公司网站www.sun.com下载linux版本 ...

  10. 看懂shebang吧,只需一点点shell知识,从此再也不犯强迫症

    Python2: 开启一个terminal,输入下面命令: yshuangj@ubuntu:~$ vim helloA.py 在vim编辑器中,进入编辑模式(按i),输入下面的代码,然后退出编辑模式( ...