一.什么是微服务

1) Martin Fowler论文对微服务的阐述(中文版)

2) 对单一应用进行拆分

3) 每一个独立的应用都有一个独立的进程

4) 拥有自己独立的数据库

5) 微服务化的核心就是讲传统的一站式应用,根据业务拆分成一个一个的服务,彻底地去耦合,每一个微服务提供单个业务功能的服务,一个服务处理一件事,从技术角度就是一种小而独立的处理过程,类似进程的概念,能够自行单独启动或销毁,拥有自己的数据库。

二.微服务与微服务架构

2.1 微服务架构

1) 类似于eclipse工具里面用maven开发的一个个独立的module,具体是使用springboot开发的一个小模块,一个模块就做一件功能。

2) 强调是整体,每一个个体完成一个具体的任务或者功能,把一个个的个体拼接起来,组成一个整体并对外暴露服务。

3) 微服务架构是一种架构模式,它提倡将单一的应用程序划分成一组小的服务,服务之间互相协调、互相配合,为用户提供最终价值。每个服务运行在其独立的进程中,服务与服务间采用轻量级的通信机制互相协作(通常是基于HTTP协议的RESTful API)。每个服务都围绕着具体业务进行构建,并且能够被独立的部署到生产环境、类生产环境等。另外,应当尽量避免统一的、集中式的服务管理机制。对具体的一个服务而言,应根据业务的上下文,选择合适的语言、工具对其进行构建。

2.2 微服务

强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭义地看,可以看做Eclipse里面的一个个微服务工程或者Module。

注意,微服务、微服务架构、Spring Cloud是三种不同的概念,不要弄混淆。

三.微服务的优缺点

3.1 微服务的优点

1) 每个服务足够内聚,足够小,代码容易理解这样能聚焦一个指定的业务。单机版的应用由于很多业务耦合在一起,修改代码时往往需要读懂一整块的业务功能,而微服务项目只需要了解其中一小块,由于项目足够小并且都是独立的,代码更容易理解,也更容易维

2) 开发简单,开发效率提高,精力集中,一个服务只做一件事。

3) 小团队也能单独开发,管理容易,管理成本降低。

4) 微服务是松耦合的,是有功能意义的服务,无论是在开发阶段还是在部署阶段都是独立的,这样可以防止某个项目出问题了其他服务项目不会受到影响。

5) 微服务能使用不同语言开发。

6) 易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,例如Jenkins,Hudson,bamboo。

7) 微服务易于被一个开发人员理解,修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。

8) 微服务允许你利用融合最新技术。

9) 微服务只是业务逻辑代码,不会和HTML,CSS或其他界面组件混合。

10) 每个微服务都有自己的存储能力,可以有自己的数据库,也可以有统一的数据库。可以灵活搭配,连接公共库+连接独立库。

3.2 微服务的缺点

1) 开发人员需要处理分布式系统的复杂性。

2) 多服务运维难度,随着服务的增加,运维的压力也在增大。

3) 系统部署依赖,一个模块调不通有可能影响到其他模块的使用。

4) 服务间通信成本变高。

5) 数据的一致性问题。

6) 系统集成测试变复杂。

7) 性能监控变困难。

四.微服务的技术栈有哪些

微服务技术栈是多种技术的集合体。

  • 服务开发:Spring Boot、Spring、Spring MVC

  • 服务的配置与管理: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、RabbitMQ、Kafka等发送接收消息)

  • 事件消息总栈:Spring Cloud Bus

五.分布式框架的对比

  • 选型依据

    • 整体解决方案和框架成熟度

    • 社区热度

    • 可维护性

    • 学习曲线

  • 当前IT公司用的微服务架构有哪些?

    • 阿里Dubbo/HSF

    • 京东JSF

    • 新浪微博Motan

    • 当当网DubboX

 结论:SpringCloud满足几乎所有的微服务技术维度要求。

SpringCloud与微服务Ⅱ --- 微服务概述的更多相关文章

  1. SpringCloud学习(二):微服务入门实战项目搭建

    一.开始使用Spring Cloud实战微服务 1.SpringCloud是什么? 云计算的解决方案?不是 SpringCloud是一个在SpringBoot的基础上构建的一个快速构建分布式系统的工具 ...

  2. dubbo初认知(dubbo和springCloud关系,在微服务架构中的作用等)(持续更新中)

    一:dubbo是什么? dobbuo是阿里开源的一个高性能优秀的服务框架, 可通过高性能的 RPC 实现服务的输出和输入功能,使得应用可以和 高性能的rpc实现输入和输出的功能,可以了  Spring ...

  3. SpringCloud实战 | 第五篇:SpringCloud整合OpenFeign实现微服务之间的调用

    一. 前言 微服务实战系列是基于开源微服务项目 有来商城youlai-mall 版本升级为背景来开展的,本篇则是讲述SpringCloud整合OpenFeign实现微服务之间的相互调用,有兴趣的朋友可 ...

  4. SpringColud微服务-微服务概述

    一.什么是微服务架构 微服务架构是一种架构模式,它提倡讲单一应用程序划分为一组小的服务,服务之间互相协调.互相配合,为用户提供最终价值.每个服务运行在单独的进程当中,服务与服务之间采用轻量级的通信机制 ...

  5. 微服务之服务注册与发现--Eureka(附代码)

    该贴为入门贴,看完可快速知道服务注册与发现是什么?怎么用?至于深入的内容不在此篇文章所述之内,请自行百度. 内容来自:https://blog.csdn.net/nanbiebao6522/artic ...

  6. 《吃透微服务》 - 服务容错之Sentinel

    大家好,我是小菜. 一个希望能够成为 吹着牛X谈架构 的男人!如果你也想成为我想成为的人,不然点个关注做个伴,让小菜不再孤单! 本文主要介绍 SpringCloud中Sentinel 如有需要,可以参 ...

  7. [转]系统架构演变--集中式架构-垂直拆分-分布式服务-SOA(服务治理)-微服务

    一.系统架构演变 1.1. 集中式架构 当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本.此时,用于简化增删改查工作量的数据访问框架(ORM)是影响项目开发的关键. 存在的 ...

  8. SOA、微服务与服务网格

    SOA架构解析 SOA 全称是: Service Oriented Architecture,中文释义为 “面向服务的架构”,它是一种设计理念,其中包含多个服务, 服务之间通过相互依赖最终提供一系列完 ...

  9. 微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh

    微服务, 架构, 服务治理, 链路跟踪, 服务发现, 流量控制, Service Mesh 微服务架构   本文将介绍微服务架构和相关的组件,介绍他们是什么以及为什么要使用微服务架构和这些组件.本文侧 ...

随机推荐

  1. WWDC2018 之 高性能 Auto Layout

    1. 关于 Auto Layout 的历史渊源 上世纪 90 年代,名叫 Cassowary的布局算法,通过将布局问题抽象成线性不等式,并分解成多个位置间的约束,解决了用户界面的布局问题. Apple ...

  2. Joomla 3.9.13 二次注入分析(CVE-2019-19846)

    目录 前言 分析 更好的注入 利用 总结 补丁分析 前言 这一个需要管理员权限的二次SQL注入,利用起来比较鸡肋.这里仅分享一下挖洞时的思路,不包含具体的poc. 分析 漏洞触发点在component ...

  3. 精选腾讯技术干货200+篇,云加社区全年沙龙PPT免费下载!

    2019年已经过去,小编为大家整理了这一年以来云加社区发布的 200多篇腾讯干货,点击文章标题即可跳转到原文,请速速收藏哦~ 看腾讯技术: 腾讯成本优化黑科技:整机CPU利用率最高提升至90%: 腾讯 ...

  4. 大数据框架开发基础之Zookeeper入门

    Zookeeper是Hadoop分布式调度服务,用来构建分布式应用系统.构建一个分布式应用是一个很复杂的事情,主要的原因是我们需要合理有效的处理分布式集群中的部分失败的问题.例如,集群中的节点在相互通 ...

  5. 再也不怕和老外交流了!我用python实现一个微信聊天翻译助手!

    前言 在前面的一篇文章如何用python“优雅的”调用有道翻译中咱们清楚的写过如何一层一层的解开有道翻译的面纱,并且笔者说过那只是脑洞的开始.现在笔者又回来了.当你遇到一些外国小哥哥小姐姐很心动.想结 ...

  6. VMware 完成 27 亿美元的 Pivotal 收购 | 云原生生态周报 Vol. 34

    作者 | 汪萌海.王思宇.李鹏 业界要闻 VMware 完成 27 亿美元的 Pivotal 收购 VMware 在 12 月 30 日宣布,已完成 27 亿美元的 Pivotal 收购,同一天 Pi ...

  7. linux下安装OpenCV-2.4

    OpenCV(Open Source Computer Vision Library),是一个跨平台计算机视觉库,实现了图像处理和计算机视觉方面的很多通用算法. OpenCV由一系列 C 函数和少量 ...

  8. POJ 2456 Aggressive cows (二分)

    题目传送门 POJ 2456 Description Farmer John has built a new long barn, with N (2 <= N <= 100,000) s ...

  9. file_get_contents函数获取不到数据的一种情况

    问题:  file_get_contents($url) 获取不到数据,尽管URL地址正确,函数使用正确.如下代码 $url = "https://www.baidu.com"; ...

  10. Java类成员之方法

    方法含义: 1. 方法是类或对象行为特征的抽象,用来完成某个功能操作. 2.在某些语言中也称为函数或过程. 3.将功能封装为方法的目的是简化代码,可以实现代码重用. 4.在Java里的方法不能独立存在 ...