云原生技术分享系列内容第三篇之——微服务架构篇。

感兴趣的朋友也可以去看行云创新关于云原生技术介绍的其它文章:
《关于容器最通俗的解释,人人都能三分钟搞懂》
《技术分享|关于K8S的通俗解释,如何跨越K8S的使用门槛》

这一篇,我们来聊聊关于单体架构与微服务架构“相爱相杀”的故事。

微服务架构的通俗解释

微服务我们需要理解三个概念:

1、什么是"微"?

微,狭义来讲就是体积小。

2、什么是"服务"?

服务,一定要区别于系统,服务一个或者一组相对较小且独立的功能单元,是用户可以感知最小功能集。

3、微服务架构以外是什么样子的架构——单体架构

传统的单体架构,是以整个系统为单位进行部署。而微服务,则是以每一个独立组件(例如用户服务,商品服务)为单位进行部署。

对于单体应用,如果发现某一业务的请求量非常大,那么是无法单独扩展该业务的,只能拷贝整个单体应用,再部署一套环境,来实现集群。

正因为单体应用的缺陷,才有了微服务。

举个例子,如图:

有了上面的几个基础,我们再来看看微服务的定义:

微服务是指开发一个单个小型的但有业务功能的服务,每个服务都有自己的处理和轻量通讯机制,可以部署在单个或多个服务器上。微服务也指一种松耦合的、有一定的有界上下文的面向服务架构。也就是说,如果每个服务都要同时修改,那么它们就不是微服务,因为它们紧耦合在一起;如果你需要掌握一个服务太多的上下文场景使用条件,那么它就是一个有上下文边界的服务,这个定义来自DDD领域驱动设计。

简单来说,微服务就是将原来庞大的单体架构的各个业务模块变为独立的可运行的服务,一些微服务会暴露一个供其他微服务或应用客户端消费的 API,模块与模块之间通过API互相调用。各个业务模块都是一个服务,整个项目有众多服务组成,这就是微服务。

微服务的优缺点

优点

1、它解决了复杂问题。它把可能会变得庞大的单体应用程序分解成一套服务。虽然项目的功能数量不变,但是应用程序已经被分解成可管理的块或者服务。每个服务都有一个明确定义边界的方式,如远程过程调用(RPC)驱动或消息驱动 API。微服务架构模式强制一定程度的模块化,实际上,使用单体代码来实现是极其困难的。因此,使用微服务架构模式,个体服务能被更快地开发,并更容易理解与维护。

2、这种架构使得每个服务都可以由一个团队独立专注开发。开发者可以自由选择任何符合服务 API 契约的技术。当然,更多的组织是希望通过技术选型限制来避免完全混乱的状态。然而,这种自由意味着开发人员不再有可能在这种自由的新项目开始时使用过时的技术。当编写一个新服务时,他们可以选择当前的技术。此外,由于服务较小,使用当前技术重写旧服务将变得更加可行。

3、微服务架构模式可以实现每个微服务独立部署。开发人员根本不需要去协调部署本地变更到服务。这些变更一经测试即可立即部署。比如,UI 团队可以执行 A|B 测试,并快速迭代 UI 变更。微服务架构模式使得持续部署成为可能。

4、微服务架构模式使得每个服务能够独立扩展。您可以仅部署满足每个服务的容量和可用性约束的实例数目。此外,您可以使用与服务资源要求最匹配的硬件。

缺点
1、由于微服务是一个分布式系统,其使得整体变得复杂。开发者需要选择和实现基于消息或者 RPC 的进程间通信机制。此外,由于目标请求可能很慢或者不可用,他们必须要编写代码来处理局部故障。虽然这些并不是很复杂、高深,但模块间通过语言级方法/过程调用相互调用,这比单体应用要复杂得多。

2、分区数据库架构。在基于微服务的应用程序中,不同服务所用的数据库不同,开发者需要更新某一业务服务时会变得复杂。

3、测试微服务应用程序也将变得复杂。

4、微服务应用程序通常由大量的服务组成,因此部署基于微服务的应用程序也是相当复杂的。

“单身好”还是“入微好”呢?

单体架构和微服务各有各的优缺点,并不是说谁好谁坏,更重要的是根据项目做架构选型。

比如,单体架构模式只适用于简单、轻量级的应用程序,如果使用它来构建复杂应用,最终会陷入痛苦的境地。微服务架构模式虽然真正应用起来复杂,但是长远来看,它是复杂、持续发展应用的一个更好的选择。

在云原生的时代,企业需要快速,持续,可靠,规模化地交付业务软件,为了更好的利用云环境带来的弹性能力,微服务架构逐渐成为了中大型企业应用架构的不二选择。

但是由于微服务架构的复杂性,企业想要管理好基于微服务架构的应用,也需要具备更高的能力。单单只是进行微服务的治理,已经显得有点单薄,无法解决企业的症结。企业的IT管理者开始重视微服务从定义、开发、质量到使用的全方位管理,另外由于微服务架构具备的复用性优势,在企业中建立微服务的运营能力也成为了一种诉求。

如何解决微服务的缺点?

以往对于微服务人们更加强调微服务的治理,行云创新认为一个服务涉及到创建、开发、发布、使用、运营等多个阶段,单单强调在使用阶段的微服务治理是不够全面的,因此我们提出了服务全生命周期管理模型:

服务的创建
服务的定义
服务的开发
服务的质量
服务的上架
服务的使用
服务的监控
服务的治理
服务的运营
服务的运用

CloudOS将通过全面的产品能力,帮助企业对一个服务的全部生命周期进行管理,帮助企业更好的建设微服务为核心的IT架构:

1、问题:微服务架构模块调用复杂,应用发布、测试复杂。

·进行API规范化定义,围绕API文档进行开发、研发变更管理、调试。API文档可追踪、可找回、可切换。

·实现API管理、版本管理、API订阅、API变更、API通知、API对比、API导入导出。

·API Mock功能,有效解决调试依赖问题,提升研发效率。
·支持HTTP、TCP、GRPC、Web socket等协议。

·实现AP用例管理、API自动化测试、测试报告生成、测试通知、报表统计等。


2、问题:微服务应用管理运维困难

·灰度发布:根据设定的流量策略来控制流量访问不同的版本。

·限流、熔断、降级:根据服务的请求数和响应时间设置流量策略,保证服务,不会出错导致系统瘫痪。

·链路追踪:展示流量在服务与服务之间、服务与网关之间转发的全路径

……

行云创新CloudOS更多相关介绍,请咨询下载技术解决方案白皮书。

《CloudOS解决方案技术白皮书》 (www.Cloudtogo.cn 咨询在线客服即可免费获取)

技术分享|“单身”还是“入微”?一起聊聊微服务的二三事相关推荐

  1. 技术分享|基于图神经网络的微服务系统调用链和日志融合异常检测方法

    基于图神经网络的微服务系统调用链和日志融合异常检测方法 微服务系统运行时环境具有高度的复杂性和动态性,由此带来的各种问题导致微服务系统常常出现各种故障.为了尽早发现故障,快速准确的异常检测方法成为保证 ...

  2. 聊聊微服务架构及分布式事务解决方案

    转载自   聊聊微服务架构及分布式事务解决方案 分布式事务场景如何设计系统架构及解决数据一致性问题,个人理解最终方案把握以下原则就可以了,那就是:大事务=小事务(原子事务)+异步(消息通知),解决分布 ...

  3. 全网疯传,阿里 P8 技术官的架构笔记外泄:微服务分布式架构实践手册

    前言 阿里 P8 大佬的架构笔记:微服务分布式架构实践手册从企业的真实需求出发,理论结合实际,深入讲解 Spring Cloud 微服务和分布式系统的知识. 整份笔记共分为 4 部分: 第一部分:概述 ...

  4. 【华为云技术分享】浅谈服务化和微服务化(上)

    微服务是近期非常热门的话题,芸芸众生言必谈微服务.但是,在实践过程中,我们发现一些项目,貌似用着微服务的技术,但做出了非服务化的应用,非但没有达到目的,反而徒增了架构的复杂性,让人汗颜.因此,在微服务 ...

  5. 【华为云技术分享】浅谈服务化和微服务化(下)

    [摘要] 服务化来自于真实世界的映射.对于微服务,我们也要寻找真实世界的隐喻. 上篇主要讲服务化,下篇我们谈谈微服务.很显然,服务化来自于真实世界的映射.对于微服务,我们也要寻找真实世界的隐喻. 1. ...

  6. 扫盲帖:聊聊微服务与分布式系统

    今天和大家聊一聊分布式系统的相关概念及其常见分布式组件和设计思想(不涉及计算机科学中分布式系统的技术理论之类的东西),之前为了准备这次的面试我是把市面上的很多分布式组件都看了一遍,我们公司所用的分布式 ...

  7. 微服务架构(二):融入微服务的企业集成架构

    上一篇文章介绍了微服务架构的起源.定义.通用特性.常见概念误区.微服务架构与SOA架构比较.微服务架构收益以及企业引入微服务架构的策略. 本文将介绍融入微服务的企业集成架构的演进,并描述交互式系统的微 ...

  8. 聊聊微服务架构中的多级缓存设计

    大家好,我是不才陈某~ 今天我们来聊聊缓存这个话题,看看在微服务环境下如何设计有效的多级缓存架构.主要涉及三方面内容: Web 应用的客户端缓存: 应用层静态资源缓存: 服务层多级缓存. 首先,咱们先 ...

  9. 聊聊微服务环境中的可观察性和弹性

    Kubernetes 简化了微服务的管理和扩展工作.但对于开发人员和运维团队而言,跟踪如此多的活动部件往往是一大挑战.弄清楚对系统进行了哪些变更,以及变更由谁所做这样的简单过程逐渐成了不可能完成的任务 ...

最新文章

  1. 教你在Python中构建物体检测系统(附代码、学习资料)
  2. 高精度惯性传感器如何实现全球自动化愿景?
  3. powershell设置了权限依旧无法运行脚本_没用的知识汇总+1 Windows 权限维持汇总...
  4. python 虚拟环境创建
  5. Java快速入门学习笔记7 | Java语言中的类与对象
  6. 【转载】Makefile教程
  7. 转载 OAuth认证协议原理分析及使用方法
  8. tree方法php,jsTree详细使用说明
  9. 实验楼挑战:备份日志
  10. python在单词表中查找包含所有元音字母aeiou的单词并打印
  11. JAVA学习第十一课:java绘图
  12. 怎样把计算机里的W0rd放到电脑桌面,电脑怎么把Word图标放到桌面?把Word图标放到桌面的设置方法...
  13. 有一分数序列,2/1, 3/2, 5/3, 8/5, 13/8, 21/13,……,请编程求出这个数列的前20项之和。
  14. Python-爬取今日头条美图
  15. js去除字符串中的所有空格(包括前后,中间存在的所有空格),清除前后空格(手机输入框实用),es6新方法
  16. 如何选择日本云服务器
  17. 杰理之修改提高摄像头源视频输出帧率,确定摄像头源输出高帧率【篇】
  18. 7-11 排座位(并查集)
  19. hapi.js入门系列(一)——一个简单的Hello World程序
  20. Windows vista home basic 不支持iis服务

热门文章

  1. 时间状语前不用介词的几种情况
  2. 数据库系统概论 (王珊.第五版)第六章关系数据库理论习题答案
  3. UEFI开发探索02 – 环境搭建1
  4. 《国家智能制造标准体系建设指南(2018年版)》发布(附全文)
  5. pptx文件无法读取_如何在未安装Office的情况下查看PPTX,DOCX或XLSX文件中的图像...
  6. 大多数人付出的辛勤比得到的回报少得多。
  7. 洛谷P6599 「EZEC-2」异或【题解】
  8. RxSwift的第一印象
  9. 应用在手机消毒领域中的紫外线传感器
  10. android仿ios开关按钮