软考 系统架构设计师系列知识点之云原生架构设计理论与实践(13)

接前一篇文章:软考 系统架构设计师系列知识点之云原生架构设计理论与实践(12)

所属章节:

第14章. 云原生架构设计理论与实践

          第3节 云原生架构相关技术

14.3.2 云原生微服务

1. 微服务发展背景

过去开发一个后端应用最为直接的方式就是通过单一后端应用提供并集成所有的服务,即单体模式。随着业务发展与需求不断增加,单体应用功能愈发复杂,参与开发的工程师规模可能由最初几个人发展到十几人,应用迭代效率由于集中式研发、测试、发布、沟通模式而显著下滑。为了解决由单体应用模型衍生的过度集中式项目迭代流程,微服务模式应运而生。

微服务模式将后端单体应用拆分为松耦合的多个子应用,每个子应用负责一组子功能这些子应用称为“微服务”,多个“微服务”共同形成了一个物理独立但逻辑完整的分布式微服务体系。这些微服务相对独立,通过解耦研发、测试与部署流程,提高整体迭代效率。此外,微服务模式通过分布式架构将应用水平扩展和冗余部署,从根本上解决了单体应用在拓展性和稳定性上存在的先天架构缺陷。但也要注意到,微服务模型也面临着分布式系统的典型挑战:如何高效调用远程方法如何实现可靠的系统容量预估如何建立负载均衡体系如何面向松耦合系统进行集成测试如何面向大规模复杂关联应用的部署与运维

在云原生时代,云原生微服务体系将充分利用云资源的高可用和安全体系,让应用获得更有保障的弹性、可用性与安全性应用构建在云所提供的基础设施与基础服务之上,充分利用云服务所带来的敏捷性、稳定性,降低应用架构的复杂性等。云原生的微服务体系也将帮助应用架构全面升级,让应用天然具有更好的可观测性、可控制性、可容错性等特性。

2. 微服务设计约束

相较于单体应用,微服务架构的架构转变,在提升开发、部署等环节灵活性的同时,也提升了在运维、监控环节的复杂性。设计一个优秀的微服务系统应遵循以下设计约束

(1)微服务个体约束

一个设计良好的微服务应用,所完成的功能在业务领域划分上应是相互独立的。与单体应用强行绑定语言与技术栈相比,这样做的好处是不同业务域有不同的技术选择权。比如推荐系统采用Python实现效率可能比Java要高效得多。从组织上来说,微服务对应的团队更小,开发效率也更高。“一个微服务团队一顿能吃掉两张披萨饼”、“一个微服务应用应当能至少两周完成一次迭代”,都是对如何正确划分微服务在业务领域边界的隐喻和标准。总结来说,微服务的“微”并不是为了微而微,而是按照问题域对单体应用做合理拆分。

进一步地,微服务也应具备正交分解特性,在职责划分上专注于特定业务并将之做好,即SOLID原则中单一职责原则(Single Responsibility Principle,SRP)。如果当一个微服务修改或者发布时,不应该影响到同一系统里另一个微服务的业务交互。

(2)微服务与微服务之间的横向关系

在合理划分好微服务间的边界后,主要从微服务的可发现性和可交互性处理服务间的横向关系。微服务的可发现性是指当服务A发布和扩缩容的时候,依赖服务A的服务B如何在不重新发布的前提下,如何能够自动感知到服务A的变化?这里需要引入第三方服务注册中心来满足服务的可发现性;特别是对于大规模微服务集群,服务注册中心的推送和扩展能力尤为关键。微服务的交互性是指服务A采用什么样的方式可以调用服务B。由于服务自治的约束,服务之间的调用需要采用与语言无关的远程调用协议,比如REST协议很好地满足了“与语言无关”“标准化”两个重要因素,但在高性能场景下,基于IDL的二进制协议可能是更好的选择。另外,目前业界大部分微服务实践往往没有达到HATEOAS启发式的REST调用,服务与服务之间需要通过事先约定接口来完成调用。为了进一步实现服务与服务之间的解耦,为服务体系中需要有一个独立的元数据中心来存储服务的元数据信息,服务通过查询该中心来理解发起调用的细节。伴随着服务链路的不断变长,整个微服务系统也就变得越来越脆弱,因此面向失败设计的原则在微服务体系中就显得尤为重要了。对于微服务应用个体,限流、熔断、隔仓、负载均衡等增强服务韧性的机制成为了标配。为进一步提升系统吞吐能力、充分利用好机器资源,可以通过协程、Rx模型、异步调用、反压等手段来实现。

(3)微服务与数据层之间的纵向约束

(4)全局视角下的微服务分布式约束

更多微服务设计约束详情请看下回。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/790317.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CCF-CSP认证考试 202212-5 星际网络 52/68分题解

更多 CSP 认证考试题目题解可以前往:CSP-CCF 认证考试真题题解 原题链接: 202212-5 星际网络 时间限制: 5.0s 内存限制: 512.0MB 问题描述 23333 23333 23333 年,在经过长时间的建设后,一个庞大的星际网络…

深入解析:如何使用Xcode上传苹果IPA安装包至App Store?

目录 引言 摘要 第二步:打开appuploader工具 第二步:打开appuploader工具,第二步:打开appuploader工具 第五步:交付应用程序,在iTunes Connect中查看应用程序 总结 引言 在将应用程序上架到苹果应用商…

蓝桥杯-网络安全比赛(4)基础学习-JavaScript同步与异步、宏任务(MacroTask)与微任务、事件循环机制(MicroTask)

理解JavaScript的异步编程模型对于编写高效、健壮的Web应用程序至关重要。 在Web开发中,经常需要处理异步操作,如网络请求、定时器、文件读写等。 掌握同步和异步的概念,以及宏任务和微任务的处理顺序,可以帮助开发者更好地管理代…

洛谷B3735题解

题目描述 圣诞树共有 n 层,从上向下数第 1 层有 1 个星星、第 2 层有 2 个星星、以此类推,排列成下图所示的形状。 星星和星星之间用绳子连接。第 1,2,⋯,n−1 层的每个星星都向下一层最近的两个星星连一段绳子,最后一层的相邻星星之间连一段…

【linux】join命令

join命令用于将两个文件中,指定栏位内容相同的行连接起来。 找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。 命令的参数如下: -a1或者-a2表示先输出合并后相同部分内容,然后再输…

No supported authentication methods available (server sent: publickey)

先说折腾方式:以下修改ssh配置以后旧的ssh连接不要断开,重启ssh服务以后都用新连接去测试,万一有问题的话旧的ssh连接不会断开还可以继续修改配置文件,要不都断了就惨了。 ubuntu server 22,使用秘钥方式可以正常登录…

发明专利申请条件

1、新颖性:是指在申请日以前没有同样的发明或者实用新型在国内外出版物上公开发表过,没有在国内公开使用过或者以其他方式为公众所知,也没有同样的发明或者实用新型由他人向国家专利行政部门提出过申请并且记载在申请日以后公布的专利申请文件…

什么是json?json可以存放哪几种数据类型

JSON指的是JavaScript对象表示法(avaScript Object Notation),是轻量级的文本数据交换格式,独立于语言: JSON使用JavaScript语法来描述数据对象,但是JSON仍然独立于语言和平台,JSON解析器和JSON库支持许多不同的编程语言&#xff…

Python学习从0到1 day20 第二阶段 面向对象 ③ 继承

循此苦旅,以达天际 —— 24.4.3 一、继承的基础语法 学习目标: ① 理解继承的概念 ② 掌握继承的使用方式 ③ 掌握pass关键字的作用 单继承 语法: class 类名(父类名): 类内容体 继承分为:单继承和多继承 继承表示:将从…

WE博客代码系统

WE博客代码系统 说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net mvc架构和sql server数据库,并采用EF实体模型开发。 三层架构并采用EF实体模型开发 功能模块: WE博客代码系统 WE博客代码系…

Vue指令之v-model

调了半天没反应,结果是没引用Vue,我是伞兵。 v-model的作用是将视图与数据双向绑定。一般情况下,Vue是数据驱动的,即数据发生改变后网页就会刷新一次,更改对应的网页内容,即数据单向绑定了网页内容。而使用…

每日一题————P5725 【深基4.习8】求三角形

题目: 题目乍一看非常的简单,属于初学者都会的问题——————————但是实际上呢,有一些小小的坑在里面。 就是三角形的打印。 平常我们在写代码的时候,遇到打印三角形的题,一般简简单单两个for循环搞定 #inclu…

【C++第三阶段】模板类模板通用数组实现案例

以下内容仅为当前认识,可能有不足之处,欢迎讨论! 文章目录 模板怎么使用模板函数模板注意事项普通函数与函数模板的区别普通函数与函数模板调用规则函数模板限制 类模板类模板语法类模板与函数模板区别类模板中成员函数创建时机类模板对象做函…

MySQL日志探索——redo log和bin log的刷盘时机详解

我们先简单了解一下大致的刷盘时机,然后配合两阶段提交和组提交来看 redo log的刷盘时机 MySQL 正常关闭时;当 redo log buffer 中记录的写入量大于 redo log buffer内存空间的一半时,会触发落盘; PS:为什么这里要到…

Google Chrome 常用设置

Google Chrome 常用设置 References 转至网页顶部 快捷键:Home 转至内容设置 chrome://settings/content 清除浏览数据 历史记录 -> 清除浏览数据 关于 Chrome 设置 -> 关于 Chrome chrome://settings/help References [1] Yongqiang Cheng, https:/…

关于ansible的模块 ③

转载说明:如果您喜欢这篇文章并打算转载它,请私信作者取得授权。感谢您喜爱本文,请文明转载,谢谢。 接《关于Ansible的模块①》和《关于Ansible的模块②》,继续学习ansible的user模块。 user模块可以增、删、改linux远…

回溯算法|491.递增子序列

力扣题目链接 class Solution { private:vector<vector<int>> result;vector<int> path;void backtracking(vector<int>& nums, int startIndex) {if (path.size() > 1) {result.push_back(path);// 注意这里不要加return&#xff0c;要取树上…

MySQL 索引优化(二)

书接上文&#xff0c;继续使用上次创建的 student 表&#xff0c;表里已经被我们装填了大量数据&#xff0c;接下来做分页查询的索引优化。 分页查询优化 普通的分页查询语句&#xff1a; SELECT * FROM student LIMIT 10000,10;这条语句是从 student 表中取出 10001 行开始…

面向对象进阶5:类和泛型

内部类 在一个类的内部定义的类,内部类可以访问外部类的成员变量和成员方法,包括私有成员,内部类可以分为成员内部类,局部内部类,静态内部类和匿名内部类 public class InnerClass {class InnerC{} }1,成员内部类 定义在类中方法外的类,可以访问外部类的所有成员变量和方法,…

人脸识别seetaface6 windows + cmake + vs编译,踩坑指南

遇到问题冷静分析&#xff0c;没有解决不了的问题&#xff0c;只是需要时间。与君共勉 环境准备 要在windows 上编译c 源码&#xff0c;需要准备如下软件。省去了详细的安装过程。 visual studio 2022 (社区免费版链接)mingw64 下载路径 (安装后&#xff0c;记得添加系统路径…