前言: 热辣滚烫的微服务一直在拨撩着程序员的心,然而很多人对微服务架构不甚明了,单纯的为了用而用。只是把现有的单体拆点东西出来,例如商品服务,然后彼此间用上RPC就算微服务了。恕我直言,其实这还相差甚远!

阅读本文你将收获:

  1. 了解什么是微服务架构。
  2. 了解微服务架构有哪些内容。
  3. 了解微服务架构中遇到的问题。
  4. 这些问题的解决方案

大纲:

  1. 什么是微服务?
  2. 微服务架构是什么?
  3. 微服务架构的各个组成怎么解决问题的?

一、什么是微服务?

1.1 在谈论什么是微服务的时候,我们先说说为什么需要微服务?

单体之痛:

  • 团队开发协作巨麻烦
    多人协同开发的时候,会因为同时修改了代码导致编译不通过,各种重来。

  • 系统可用性差
    因为某个同学代码质量问题,成为整个系统的瓶颈所在,影响整个系统的可用性。

  • 部署效率低下
    代码越来越多,所涉及的相关资源也越来越多,打包编译一次的时间都能撩个妹了。

  • 难以扩展
    当系统需要伸缩的时候,必须对应用程序进行扩容,不能做到对某个功能点单独扩容。

  • 我要用微服务
    当你想用微服务的时候,单体的问题你能找出千千万。但是,如果你一定要用,请先通读此文后,做到心中有B-tree了在用!

1.2 微服务解决了什么问题?

当然,微服务能解决上述单体应用出现的问题,不然我写这么多干啥呢~o( ̄︶ ̄)o(手动狗头)

1.3 微服务带来了哪些问题?

任何事情都有两面性,微服务有其优点,必然有其缺点。只有充分了解了其优缺点,结合自身业务和开发能力的实际情况,再来做出权衡取舍,用不用微服务!

微服务的缺点:

  • 需要点亮devops技能
    硬实力!

  • 分布式系统带来的复杂度几何级上升
    硬实力!

  • 对开发人员素质要求变高了
    不再是CRUD就能安安稳稳过日子了

1.4 什么是微服务

维基百科对微服务的定义:

微服务(Microservices) 是一种软件架构风格,它是以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础,利用模组化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关 (Language-Independent/Language agnostic) 的 API 集相互通讯。

是的,你没看错,这就完了~

二、微服务架构是什么?

看图说话:

微服务架构的六大组成部分:

  1. 服务描述
    解决了如下问题:

    • 对外提供一个服务,那么这个服务的服务名叫什么?
    • 调用这个服务需要哪些信息?
    • 调用这个服务返回的是什么格式?
    • 该如何解析?
  2. 注册中心
    有了服务接口的描述,下一步要解决的问题就是服务发布和订阅。

    • 服务发布:服务提供者将自己提供的服务以及地址登记到注册中心。
    • 服务订阅:服务消费者则从注册中心查询所需要调用的服务地址,然后发起请求
  3. 服务框架
    解决了如下问题:

    • 服务通信采用什么协议?
    • 数据传输采用什么方式?
    • 数据压缩采用什么格式?
  4. 服务监控
    一旦服务提供者和服务消费者能够正常发起服务调用,需要对调用情况进行监控,以了解服务是否正常。

  5. 服务追踪
    除了对服务调用情况进行监控之外,需要记录服务调用经过的每一层链路,以便问题追踪和故障定位。

  6. 服务治理
    服务监控能够发现问题,服务追踪能够定位问题,解决问题就靠服务治理!

三、微服务架构的各个组成怎么解决问题的?

1. 服务描述

常用的服务描述方式:
- RESTful API: 常用于HTTP协议的服务描述
- XML配置:多用作RPC服务的协议描述
- IDL文件:通常用作Thirft和gRPC这类跨语言服务框架中。

2. 注册中心

注册中心的工作流程:
- 服务提供者在启动时,根据服务发布文件中配置的发布信息向注册中心注册自己的服务。
- 服务消费者在启动时,根据消费者配置文件中的配置信息向注册中心订阅自己所需要的服务。
- 注册中心返回服务提供者地址列表给服务消费者。
- 当服务提供者发生变化,比如节点新增或销毁,注册中心将变更通知给服务消费者。

3. 服务框架

服务通信协议:

  • 四层TCP/UDP协议
  • 七层HTTP协议

数据传输方式:

  • 同步
  • 异步
  • 单连接上传输
  • 多路复用

数据压缩格式:

  • JSON序列化
  • JAVA对象序列化
  • Protobuf序列化

4. 服务监控

要了解服务监控首先要明白有哪些监控对象?具体监控哪些指标?从哪些维度监控?

这个话题有点大,在我做的思维导图里面有详细的概述,希望读者朋友能够结合思维导图一起看!

5. 服务追踪

  • 服务消费者发起调用前,会在本地按照一定的规则生成一个requestid,发起调用时,将requestid当做请求参数的一部分,传递给服务提供者。
  • 服务提供者收到请求后,记录下本次的requestid,然后处理请求。
  • 如果服务提供者继续请求其他服务,会在本地生成一个requestid,然后把这两个requestid当做参数继续往下传递。

6. 服务治理

服务治理就是通过一系列手段保证在各种意外的情况下,服务调用能够正常进行。可分为:

  • 单机故障
  • 单IDC故障
  • 依赖服务不可用

终极杀器

思维导图:

总结:

本文大部分成果总结于极客时间-《从0开始学微服务》胡忠想老师的专栏。一文只是简述阿忠伯的课程,其精华难以概括,有兴趣的同学可以上极客时间订阅该课程!

https://github.com/FristResponder/MindMapping.git

上面是本人学习总结的所有思维导图,喜欢的麻烦给个star​

听说你想了解微服务架构相关推荐

  1. 胡忠想|微博微服务架构的Service Mesh实践之路

    前言 说到Service Mesh,在如今的微服务领域可谓是无人不知.无人不晓,被很多人定义为下一代的微服务架构. Service Mesh在诞生不到两年的时间里取得令人瞩目的发展,在国内外都涌现出一 ...

  2. WeText项目:一个基于.NET实现的DDD、CQRS与微服务架构的演示案例

    最近出于工作需要,了解了一下微服务架构(Microservice Architecture,MSA).我经过两周业余时间的努力,凭着自己对微服务架构的理解,从无到有,基于.NET打造了一个演示微服务架 ...

  3. 微服务架构到底是什么鬼?

    戳蓝字"CSDN云计算"关注我们哦! 摘自<微服务架构设计模式> 作者::[美] (Chris Richardson) 译者:喻勇 导语:微服务架构如何与更广泛的软件架 ...

  4. 阿里高级技术专家邱小侠:微服务架构的理论基础 - 康威定律

    邱小侠 阿里高级技术专家 读完需要 10 分钟 速读仅需 4 分钟 邱小侠,阿里巴巴集团客户体验事业群高级技术专家,阿里花名肥侠.2014年加入阿里巴巴,现在负责客户体验驱动及创新中心有关商家业务的开 ...

  5. Uber——面向领域的微服务架构

    介绍 最近,围绕面向服务的架构(尤其是微服务架构)的缺点进行了大量讨论.虽然就在几年前,采用微服务架构是比较流行的,因为它们提供了许多好处,例如以独立部署的形式带来的灵活性.职责清晰.系统稳定性和更好 ...

  6. 【关于分布式系统开发和微服务架构自我心得小记

    一.一个完整项目为何要分布式开发? 完整项目业务实现是相当庞大,程序员在修改一个业务程序的的代码时,可能会影响整个项目的启动和部署,项目代码一个地方修改会产生很多问题,不利于程序的开发,同时项目的启动 ...

  7. 要想下班早,微服务架构少不了

    摘要: "一分钟,我要这个人的全部信息",霸道总裁拍了拍你. 本文分享自华为云社区<[测试工具技术解密]大规模数据如何实现数据的高效追溯>,作者: 敏捷的小智. 网上流 ...

  8. 微服务架构的优势与不足

    2019独角兽企业重金招聘Python工程师标准>>> 英文原文:Introduction to Microservices 这篇文章作者是Chris Richardson,他是早期 ...

  9. 思考:王者荣耀为什么不使用微服务架构?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | hongjic93.brice 来源 | zh ...

最新文章

  1. rust高级矿场_高级 Rust 所有权管理
  2. 实战 :为自己的公号搭建一个数据运营指标体系
  3. [转载]常用CASE工具介绍
  4. 【Java】Java运行cmd命令直接导出.sql文件
  5. JAX-RS 2.0中的透明PATCH支持
  6. 深度学习“炼丹”难?三分钟带你了解国产丹炉旷视天元
  7. wireshark windows版数据过滤插件安装及使用
  8. 面对系统的稳定性、我们如何做好系统稳定性建设?
  9. 哈希函数(Hash Functions - 散列函数)的基本介绍(SHA-2,SHA-256,MD-5,Scrypt,BCrypt等)
  10. python设置黑色主题_Python背景色与语法高亮主题配置
  11. 将bean转换成键值列表
  12. ruby rails
  13. 计算机禁止安装游戏软件,win10禁止安装,手把手教你win10如何设置禁止安装软件...
  14. 用javascript实现节假日自动切换风格
  15. 无法复制到远程计算机,远程桌面无法复制粘贴【解答思路】
  16. vivo手机计算机怎么开语音,vivo怎么打开语音助手
  17. Python常用数据分析工具
  18. BZOJ2828 : 火柴游戏
  19. Windows10 java JDK1.8安装及环境配置
  20. 谷歌使用AndroidX代替Android支持库

热门文章

  1. js模块化:详解与面试
  2. 【用户头像】功能实现学习记录
  3. LS-DYNA中的流固耦合
  4. SpingBoot中创建动态和静态定时任务
  5. (转)图解Intel电脑组装过程
  6. 条形码打印机驱动安装win(内部使用)
  7. [蓝桥杯] 剪邮票 (Python 实现)
  8. 网络编程-tcp/udp
  9. centos7 BBR加速
  10. BGP团体属性 选路原则