油鹳视频 Microservices explained - the What, Why and How?
https://www.youtube.com/watch?v=rv4LlmLmVWk&t=2s


microservices 是一种软件体系结构, microservices architecture(微服务架构) 是与传统的 monolithic architecture(整体式架构,一体式架构) 相对而言的。简单地说,微服务架构就是将一个大的 app 进行拆分,分成若干小的的应用程序,各自独立开发部署。

1 一体式架构 monolithic architecture

1.1 一体式架构的特点

  1. 所有组件都合属于一个单一的整体: user-auth, product-catalog, shopping-cart, payment…
  2. 所有组件都作为一个整体进行开发,部署以及扩展。
  3. App 各组件必须使用同一技术栈。
  4. 组件相互依存,各个组件开发团队必须小心避免影响到其他团队的开发。
  5. 一个组件被修改,整个 app 重新部署。

1.2 一体式架构面临的挑战

  1. app 太大太复杂
  2. 各个组成部分纠缠在一起
  3. 如果需要扩展就必须扩展整个 app,不能是单个模块,单个服务。
  4. 不同的组件依赖于相同的第三方组件,然而各自依赖的版本却不同,该如何解决这个问题?

  1. 任何组件发生改变,整个 app 必须重新测试,重新构建,重新部署。
  2. 任何模块的 bug 都能让整个 app crash。

为了应对如上问题,出现了 microservices architecture 微服务软件架构 。

2 微服务架构 microservices architecture

使用微服务架构,将一体式的 app 进行拆分,分成多个更小的、独立的应用程序 / 微服务,这些相互独立的微应用程序共同组成一个大型的 app。

这些不同的微服务可以由不同的 team 使用不同的技术栈独立进行开发部署。

要使用这种架构,需要考虑如下问题:

  1. 如何拆分 app?

  2. 要拆分成多少个 microservices?

  3. microservices 的规模?

  4. 如何组织这些 microservices?

  5. 这些被拆分的 microservices 之间如何通信?

2.1 app 的拆分

根据业务功能对 app 进行拆分,以在线购物 app 为例,拆成 user, products, shopping carts, checkout 等不同的 micorservice,一个 micorservice 负责一项特定的工作。
各个 micorservice 高内聚,micorservice 之间低耦合,各个 micorservice 的开发、部署与扩展与其他 micorservice 互相独立。各个 micorservice 也因此拥有各自独立的版本,发布周期各自独立,如果更新并部署 一个 micorservice,其他 micorservice 不受影响。

2.2 微服务之间如何通信

2.2.1 使用 API 调用通信

各个微服务之间使用 API 通信,这种通信方式为同步通信

2.2.2 使用 Message Broker 通信

一种 Message Broker: RabbitMQ

微服务首先与 Message Broker 通信,再由 Message Broker 转发,这种通信方式为异步通信

2.2.3 使用服务网格 service mesh 进行通信

这种通信方式也被 Kubernetes 广为使用。

3 微服务架构的缺点以及解决方案

微服务架构本质上是一个分布式系统,这种体系结构比整体式架构复杂。首先需要配置各个微服务之间的通信,而且监视分布在多个服务器上的微服务实例也非易事。

Kubernetes 是运行大型微服务应用程序的完美平台, 除此以外, HashiCorp 也可以用于微服务架构开发。

4 微服务的 CI/CD 管道

CI /CD: Continuous Integration/ Continuous Delivery
持续集成 / 持续交付,
( delivery: 分发,交付,部署 )

一些大型应用程序由上百个 microservice 组成,每天进行数千次的部署,CI/CD 管道用于配置 release 过程。

5 代码管理:Monorepo vs Polyrepo

组织和管理代码有两种方法, Monorepo (单个库) vs Polyrepo (多个库)

1, 使用单个 git 库,存放若干工程代码。缺点,容易产生高耦合代码,代码库巨大,push pull 等操作变慢,需额外设置 CI/CD 管道。(CI/CD 平台有 gitlab, jenkens) 虽有缺点,但 Google 就使用 monorepo.

2,使用多个 git 库,一个库一个微应用程序。
Gitlab 使用 group 将多个共属于一个app的工程放到相同的组。

Polyrepo 也有缺点,例如多个项目之间资源共享变得困难,项目之间的切换变得繁琐等等。

所以这两种方法各有优缺点,基本的原则是,小的项目使用单个库 monorepo,如果开发大型 app,有多个 team,使用多个库 polyrepo 则是更好的选择。


  1. https://aws.amazon.com/cn/microservices/

microservices 简介相关推荐

  1. 微服务(Microservices)和服务网格(Service Mesh)架构概念整理

    微服务(Microservices) 在过去的 2016 年和 2017 年,微服务技术迅猛普及,和容器技术一起成为这两年中最吸引眼球的技术热点.而以 Spring Cloud 为代表的传统侵入式开发 ...

  2. soa面向服务体系结构_服务和面向微服务的体系结构简介

    soa面向服务体系结构 by Pulkit Kumar 通过Pulkit Kumar 服务和面向微服务的体系结构简介 (An introduction to service and micro-ser ...

  3. 容器化技术最佳实践1--容器化技术简介与Docker入门

    容器化技术最佳实践1–容器化技术简介与Docker入门 文章目录 容器化技术最佳实践1--容器化技术简介与Docker入门 容器化简介 通过虚拟化了解容器化 对开发和运维的好处 容器化部署特点 什么情 ...

  4. Spring Cloud Contract 初识之一 :简介

    1.简介 Spring Cloud Contract 是一个包含解决方案的综合项目,帮助用户成功地向 Consumer Driven Contracts 进行处理.目前,Spring Cloud Co ...

  5. spring boot入门简介-微服务简介 03

    一,微服务简介 [按: 本文作者为笔者在ThoughtWorks的两位同事James Lewis和老马(Martin Fowler).老马已经邮件许可笔者进行翻译,并要求笔者在译文中提供原文链接和翻译 ...

  6. Soring Cloud -- Resilience4j简介

    参考: GitHub - resilience4j/resilience4j: Resilience4j is a fault tolerance library designed for Java8 ...

  7. etcd 笔记(01)— etcd 简介、特点、应用场景、常用术语、分布式 CAP 理论、分布式原理

    1. etcd 简介 etcd 官网定义: A highly-available key value store for shared configuration and service discov ...

  8. Docker学习(一)-----Docker简介与安装

    一.Docker介绍 1.1什么是docker Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源 Docker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植 ...

  9. 【Spring】框架简介

    [Spring]框架简介 Spring是什么 Spring是分层的Java SE/EE应用full-stack轻量级开源框架,以IOC(Inverse Of Control:反转控制)和AOP(Asp ...

最新文章

  1. 【SpringCloud】配置中心简介及其搭建
  2. linux或Jetson nano上安装torchvision或安装pillow报错:The headers or library files could not be found for jpeg
  3. 40个良好用户界面Tips
  4. 一个强大的工具来模拟数百万​​并发用户负载测试:Gryphon
  5. LindDotNetCore~职责链模式的应用
  6. 为什么python提示没有clock_python – 为什么time.clock比time.time给出更长的时间?
  7. 谷歌提出新型自动语音识别数据增强大法,直接对频谱图“动刀”,提升模型表现...
  8. 配置使用4台主机实现12台主机的集群
  9. hdu 4536 dfs
  10. *第二周*数据结构实践项目一【交换】
  11. LINUX下载编译vorbis
  12. P2504 [HAOI2006]聪明的猴子-题目详解
  13. 教你用直播大师在局域网内发布组播节目
  14. leetcode881.救生艇(中等)
  15. 4台机器完全分布式安装hadoop,bigbrother的补充
  16. 世事洞明职场“行”(上篇)——刘墉力作《我不是教你诈》花絮采撷
  17. FonePaw Data Recovery for Mac(数据恢复)
  18. 计算机三维设计大作业模型图,计算机辅助设计大作业(DOC).doc
  19. 对电化学稳态阻抗谱(EIS)的数据进行自动化处理并可视化作图/画图(科研投稿)
  20. 【艾特淘】手淘搜索新时代来了,开启搜索短视频时代,都是免费流量

热门文章

  1. XMLHttpRequest.onreadystatechange.readyState一直是1解决的一些方法
  2. java编程atm取款机实验报告_ATM自动取款机JAVA程序
  3. Windows10 CodeWarrior安装
  4. SAS-异常排查QA
  5. html如何设置文本框透明度,div设置透明度
  6. 阿尔卡特交换机使用真的方便吗
  7. SUMO轨迹图的绘制和traci接口的简单使用
  8. CF1698B Rising Sand 题解
  9. Mysql数据库查询超时,这样优化快速解决问题
  10. 什么是WebSocket?