【成为架构师课程系列】怎样进行概念架构(Conceptual Architecture)?

news2024/9/21 22:50:22

目录

前言

什么是概念架构

概念架构阶段的3个步骤

 初步设计

高层分割

分层式概念服务架构

Layer:逻辑层 

Tier: 物理层

按通用性分层

技术堆叠

考虑非功能需求

【禅与计算机程序设计艺术:更多阅读】


前言

胜兵先胜而后求战,败兵先站而后求胜。 -- 孙子,《孙子兵法 . 形篇》

人们常常使用战术,而忽略了战略。战略要求从大局上把握整个架构与设计......架构错误的代价非常高。 -- Stephane Faroult, 《SQL语言艺术》

架构新手和有经验的架构师的区别之一,在于是否懂得,并能有效的进行概念架构设计作为架构新手,尤其害怕碰到自己没有做过的系统:系统较大时,一点祭出“架构 = 模块 + 接口”的发布却不太奏效,架构新手就往往乱了阵脚。

有经验的架构师不会一上来就关注与如何定义“接口”,他们在大型架构设计的早期,比较注重识别重大需求特色需求高风险需求(抓重点关键问题),据此来设计概念架构。

另外,概念架构设计还是投标及售后工作的有力武器。金牌售前和普通售前的一个重要区别是,能否清晰的讲解概念架构,并借此说明 “客户关系的价值如何实现、担心的问题如何解决”

”Use Case驱动“的观点既有积极意义,也有不利影响。从积极的方面看,Use Case这种需求描述方式确实有助于分析模型,设计模型,实现模型和测试模型的建立.....但是从另一方面看,OOSE对Use Case的依赖程度超出了它的实际能力。 -- 邵伟忠, 《面向对象的系统设计》

顶级设计者在设计中并不是按部就班地采用自顶向下(或自底向上)的方法,而是着眼于权重更大的目标。这些目标通常是难点问题,设计者不能轻易地看出这些问题的解决方案。为了得到整个的设计方案,设计者必须先致力于难点的设计并消除其中的疑惑。 -- Robert L. Glass, 《软件工程的事实与谬误》

概念架构是大型系统架构设计成败的关键。

什么是概念架构

下面是宏伟的金门大桥,这么复杂的架构,桥梁架构师是怎么“开始设计”的呢?

 

答案是:概念架构(Conceptual Architecture)。下图展示了斜拉桥的概念架构示意图。由此图可以看出,概念架构高屋建瓴的给出高层解决方案:索塔负责承重,斜拉索吊起刚性梁。

 

下面,来看看软件行业(来自Dana Bredemeyer等专家)中概念架构的定义:

概念性架构界定系统的高层组件,以及它们之间的关系。概念性架构意在对系统进行适当分解,而不陷入细节。借此,可以与管理人员、市场人员、用户等非技术人员交流架构。概念性架构规定了每个组件的非正规约及架构图,但不涉及接口细节。(The Conceptual Architecture identifies the high-level components of the system, and the relatiooonships among them. Its purpose is to direct attention at an appropriate decomposition of the system without delving into details. Moreover, it proovides a useful vehicle for coommunicating the architecture to non-technical audiences, such as management, marketing, and users. It consists oof the Architecutre Diagram (without interface detail) and an informal component specification for each component.)

根据定义,我们注意到如下几点:

  • 概念架构满足“架构 = 组件 + 交互”的基本定义,只不过概念架构仅关注高层组件(high-level components)。
  • 概念架构对高层组件的“职责”进行笼统的界定(informal specification),并给出了高层组件之间的相互关系(Architecture Diagram)。
  • 概念架构不应涉及接口细节(withouot iinterface detaiil)。

概念架构阶段的3个步骤

概念架构设计分为3个步骤:

  1. 初步设计:基于关键功能,借助鲁棒图进行以发现职责为目的的初步设计。这一步并不总是需要,但对于架构师而言,是“新系统”就必须重视这一步。
  2. 高层分割:对系统这个黑盒子进行高层切分,例如切分复杂系统为多个二级系统,或者直接切分系统为具体子系统。
  3. 考虑非功能需求概念架构 ≠ 理想化架构,所以不仅要考虑功能,也必须考虑非功能。

 初步设计

好的开始是成功的一半。 -- 谚语

所谓鲁棒性分析时这样一种方法: 通过分析用例规约中的事件流,识别出实现用例规定的功能所需要的主要对象及其职责,形成以职责模型为主的初步设计 -- 温昱,《软件架构设计》

Conceptual Architecture阶段包含3个步骤:

  • 第1步,初步设计。
  • 第2步,高层分割。
  • 第3步,考虑非功能需求。

 

高层分割

复杂性是层次化的。 -- Frederick.P.Brooks,《人月神话》

分析与综合是思维方向相反的过程。一部是先分析后综合,没有分析就不能综合;没有综合的分析,也只有片面的分析。 -- 肖纪美,《梳理人、事、物的纠纷:问题分析方法》

“架构 = 模块 + 接口”的做法,其不足可概括为两点。

第一,忽视了多视图。“模块 + 接口”仅是逻辑架构设计视图的核心内容,而软件系统的架构设计还可能涉及开发视图、运行视图、物理视图、数据视图等多方面的考虑。

第二,忽略了概念架构设计。对规模较大的系统而言,都必须先根据重大风险(包含功能方面、质量方面、约束方面),有针对性的制定包括“高层分割”在内的设计决策,然后才是“模块 + 接口”一级的设计。

那么,如何对软件系统进行“高层分割”呢?这属于Conceptual Architecture阶段第2步的工作。

例子:PM系统的高层分割,采用了经典的4层架构方式。

 

分层式概念服务架构

人们常说,“分层式最流行的架构模式”。从字面上理解,这似乎意味着大家所进行的“分层”在思想层面上是一致的。但事实并非如此。在实践中,分层有不同的角度,并且互不矛盾。通常会总结为“3 + 1”流派。

  • Layer:逻辑层
  • Tier:物理层
  • 按通用性分层
  • 技术堆叠

Layer:逻辑层 

逻辑层(Layer)重视职责的划分,职责之间常常是上层使用下层的关系--但是根本不关心上层和下层是否“能分布”在不同机器上。

 

图片来源:Layered Business Architectures: Logical Structures

  • 图中的Services层对下层Domain Model部分的访问,是一种跨机器的远程访问吗?

答案是:不知道,也不关心。整个架构图中的箭头表示的是逻辑上服务使用关系,而对物理角度是否是跨机器的访问方式并不关心。

Layer分层 ≠ 按Tier分层。

  • 图中的User InterfaceServicesDomain ModelPersistent Data是通用性逐渐增加吗?(”通用性越大,所处层次就越靠下“是按通用性分层的常见方式。)

答案是:无法确定那一层更通用。例如,作为最下层的Persistent Data层本来支持硬盘,但后来要支持磁盘阵列,再后来要支持SAN(存储区域网络),这都要求存Persistent Data层要有针对性的进行改变。

Layer分层 ≠ 按通用性分层。

Tier: 物理层

物理层(Tier)指”能分布“在不同机器上的软件单元,不同的物理层之间必须有跨机器访问的能力--可以通过远程调用、或通讯协议等方式。

 

图片来源:Oracle Application Server Containers for J2EE

关于Tier这种分层方式, 最需要强调的是,几层(Tier)架构是看”能分布“的能力,不是看”实际部署情况“。

我们常说的Java EE应该是N-Layer的,因为从逻辑上来看,Java EE里面有表现层、业务逻辑层和数据持久层。从物理上而言,这3层可以在不同的Tier上(表现层在PC上,业务逻辑层在应用服务器上,数据持久层在数据库服务器上),也可以在一个Tier上,比如Martin说过,如果把数据库、应用服务器和浏览器都装在一台电脑上,那么3-layer就在1-tier上了。

这段话问题不小。

毕竟,”N-Tiers架构“的一大好处是可伸缩性--业务量小的时候将NTier都部署在同一台机器上 ,等业务量大的时候再为每个Tier单独安排一台或一组机器,这恰恰是"N-Tiers架构"的目标!所以,一个系统如果架构设计时是”4-Tiers架构“的,并且开发时也实现了这一点,那么把它们部署在同一台机器上并没有改变”4-Tiers架构“。最终,工程师的实际部署方案觉得了系统是几层(Tier)架构,这未免荒唐。

其实,总结出”3级“映射关系(而不是”两级“)就清楚了:

逻辑层Layer -> 物理层Tier -> 一台或一组计算机

关于按Tier分层 ,再看一例:微软的Azure虚拟网络系统,很明确的进行了不同的tier的划分,各层之间必然是能以进行跨机器方式的协议互相通讯的(只不过每个Tier的部署规模比较大罢了)。

图片来源:Azure中具有Apache Cassandra的Linux多層式架構 (N-tier) 應用程式

按通用性分层

严格来讲,按通用性分层是另一种Layer,但是,绝对有必要让它”独立门户“以引起实践者的足够重视。

按通用性分层式只:将通用性不同的部分划归不同的层,以此作为系统的总体切分方式。

一般而言,通用程度越大,所处层次就越靠下。

 

不同,嵌入式系统的分层架构有所不同:通用性最强的层位于中间,硬件相关的部分,以及应用特点部分分布位于下层和上层。

 

这种“中间通用、上下专用”的分层方式对可移植性关键的通信系统、控制系统、软件平台等情况都非常重要。

技术堆叠

技术堆叠不是独立的架构,而是基于分层架构(或其他架构模式)提供的进一步说明。

下面这个两个架构模式都是按Tier分层,并明确了各个技术点。

图片来源:I Love the Java Jive: J2EE for Oracle Technologists

图片来源:Category Archives: Day 15. Understanding J2EE Architecture

另一个例子,基本架构模式是基于通用性分层的,也加入技术堆叠的描述。

图片来源:Java SpringMVC

考虑非功能需求

架构不仅仅是系统功能需求的结果 -- Len Bass, 《软件架构实践(第二版)》

在我们当中,有不少人一厢情愿的认为:只要所开发出的系统完成了用户期待的功能,项目就算成功了,但这并不符合实际。 -- 温昱,《软件架构设计》

《软件架构设计》一书中指出,“其实任何作为复合整体的复杂事物,都有可能有架构,比如一本书”。“非功能目标的考虑”在ADMEMS方法中不是一个阶段,而是一个贯穿环节。

我们接下来讨论的重点是贯穿案例 -- PASS系统概念架构设计的第3步,考虑非功能需求。

概念架构 ≠ 理想化架构

  • 重大需求塑造概念架构。这里的 “重大需求”应涵盖功能需求、质量及约束3类需求中的关键部分
  • 概念架构是一个“架构设计阶段”,必须在细化架构设计阶段之前,针对重大需求、特色需求、高风险需求,形成稳定的高层架构设计成果
  • 如果只考虑“功能需求”来设计概念架构,将导致概念架构沦为“理想化架构”,这个脆弱的架构不久就会面临“大改”的压力,甚至直接导致投标等工作失败。


【禅与计算机程序设计艺术:更多阅读】

  1. 2023,程序员的出路在哪里?_禅与计算机程序设计艺术的博客-CSDN博客_程序员出路
  2. 写给新手程序员的一封信_禅与计算机程序设计艺术的博客-CSDN博客 
  3. 程序员职业生涯系列:关于技术能力的思考与总结_禅与计算机程序设计艺术的博客-CSDN博客
  4. 【思维模型】概率思维的价值:找到你的人生算法,实现阶级跃迁!_禅与计算机程序设计艺术的博客-CSDN博客
  5. 【企业架构设计实战】业务架构设计_禅与计算机程序设计艺术的博客-CSDN博客
  6. 【企业架构设计实战】技术架构设计指南_禅与计算机程序设计艺术的博客-CSDN博客
  7. 【企业架构设计实战】应用架构设计_禅与计算机程序设计艺术的博客-CSDN博客 
  8. 【企业架构设计实战】大数据架构最佳实践_禅与计算机程序设计艺术的博客-CSDN博客
  9. 软件架构师的10项重要技能_禅与计算机程序设计艺术的博客-CSDN博客
  10. 【计算机程序设计思想与方法】1 什么是计算?_禅与计算机程序设计艺术的博客-CSDN博客
  11. 【计算机程序设计思想与方法】2 什么是计算思维?_禅与计算机程序设计艺术的博客-CSDN博客
  12. 【架构师必知必会系列】系统架构设计需要知道的5大精要(5 System Design fundamentals)..._禅与计算机程序设计艺术的博客-CSDN博客
  13. 【成为架构师课程系列】架构师的核心能力地图_禅与计算机程序设计艺术的博客-CSDN博客
  14. 【成为架构师课程系列】一线架构师:6个经典困惑及其解法_禅与计算机程序设计艺术的博客-CSDN博客
  15.  【成为架构师课程系列】怎样进行高性能高可用的高并发系统的设计?_禅与计算机程序设计艺术的博客-CSDN博客
  16.  【成为架构师课程系列】高并发系统设计的三大目标:高性能、高可用、可扩展_禅与计算机程序设计艺术的博客-CSDN博客
  17.  【成为架构师课程系列】消息队列:秒杀时如何处理每秒上万次的下单请求?_禅与计算机程序设计艺术的博客-CSDN博客【成为架构师课程系列】架构分层:我们为什么一定要这么做?_禅与计算机程序设计艺术的博客-CSDN博客
  18.  【成为架构师课程系列】架构设计中的核心思维方法_禅与计算机程序设计艺术的博客-CSDN博客
  19. 【成为架构师课程系列】数据库优化方案 1:查询请求增加时,如何做主从分离?_禅与计算机程序设计艺术的博客-CSDN博客 
  20. 【成为架构师课程系列】数据库性能优化:写入数据量增加时,如何实现分库分表?如何保证分库分表后 ID 的全局唯一性?_禅与计算机程序设计艺术的博客-CSDN博客 【成为架构师课程系列】性能优化技术之“池化技术”:如何减少频繁创建数据库连接的性能损耗?_禅与计算机程序设计艺术的博客-CSDN博客
  21.  【成为架构师课程系列】高性能系统设计之分布式缓存_禅与计算机程序设计艺术的博客-CSDN博客
  22. 【成为架构师课程系列】NoSQL:在高并发场景下,数据库和NoSQL如何做到互补?_禅与计算机程序设计艺术的博客-CSDN博客 
  23. 【成为架构师课程系列】大数据技术体系精华总结【值得收藏!】_禅与计算机程序设计艺术的博客-CSDN博客 
  24. 【软件架构思想系列】模块化与抽象_禅与计算机程序设计艺术的博客-CSDN博客 
  25. 【软件架构思想系列】从伟人《矛盾论》中悟到的软件架构思想真谛:“对象”即事物,“函数”即运动变化..._禅与计算机程序设计艺术的博客-CSDN博客 
  26.  【软件架构思想系列】分层架构_禅与计算机程序设计艺术的博客-CSDN博客
  27. 软件架构图和模式_禅与计算机程序设计艺术的博客-CSDN博客 
  28. 一切系统都是分布式的:Everything is distributed_禅与计算机程序设计艺术的博客-CSDN博客 
  29. 《人月神话》(The Mythical Man-Month)看清问题的本质:如果我们想解决问题,就必须试图先去理解它..._禅与计算机程序设计艺术的博客-CSDN博客 
  30. 【模型↔关系思考法】如何在一个全新的、陌生的领域快速成为专家?模仿 + 一万小时定律 + 创新..._禅与计算机程序设计艺术的博客-CSDN博客 
  31. BloomFilter 布隆过滤器思想原理和代码实现_禅与计算机程序设计艺术的博客-CSDN博客 
  32.  每个程序员都需要掌握的 7 项基本技能_禅与计算机程序设计艺术的博客-CSDN博客
  33. 我问 ChatGPT:怎样成为优秀的架构师?看它怎么回答的……_禅与计算机程序设计艺术的博客-CSDN博客 
  34. 彻底搞懂分布式系统服务注册与发现原理_禅与计算机程序设计艺术的博客-CSDN博客 
  35. Elasticsearch 架构设计及说明_禅与计算机程序设计艺术的博客-CSDN博客_elasticsearch 架构设计
  36. Elasticsearch 数据的读写流程,掌握到这个程度就够用了_禅与计算机程序设计艺术的博客-CSDN博客
  37. 【成为架构师课程系列】作为一名大数据架构师该掌握的技能清单:_禅与计算机程序设计艺术的博客-CSDN博客 ​​​​​​数据思维:开启数据认知素养之旅_禅与计算机程序设计艺术的博客-CSDN博客
  38. MySQL 体系架构简介_禅与计算机程序设计艺术的博客-CSDN博客
  39. 通用大数据架构体系介绍_禅与计算机程序设计艺术的博客-CSDN博客 
  40. HBase系统架构及数据结构_禅与计算机程序设计艺术的博客-CSDN博客
  41. HBase 架构原理-数据读取流程解析_禅与计算机程序设计艺术的博客-CSDN博客 
  42. HBase 架构详解及数据读写流程_禅与计算机程序设计艺术的博客-CSDN博客 
  43. HBase架构详解及读写流程_禅与计算机程序设计艺术的博客-CSDN博客 
  44. 【图文详解】HDFS 系统架构与文件数据读写流程_禅与计算机程序设计艺术的博客-CSDN博客 
  45. Apache Flink 实现原理:容错机制_禅与计算机程序设计艺术的博客-CSDN博客 
  46. Elasticsearch 索引原理_禅与计算机程序设计艺术的博客-CSDN博客
  47. Spark / Hive / ClickHouse 向量化查询执行原理分析(Vectorization Query Execution)_禅与计算机程序设计艺术的博客-CSDN博客 
  48. Hive常用DDL(数据定义语言)操作_禅与计算机程序设计艺术的博客-CSDN博客 
  49. MySQL 的执行计划 explain 详解_禅与计算机程序设计艺术的博客-CSDN博客
  50. MySQL 存储引擎 - InnoDB 实现原理介绍_禅与计算机程序设计艺术的博客-CSDN博客 
  51. 【史上最全】MySQL各种锁详解:一文搞懂MySQL的各种锁_禅与计算机程序设计艺术的博客-CSDN博客 
  52. 大数据存储引擎 NoSQL极简教程 An Introduction to Big Data: NoSQL_禅与计算机程序设计艺术的博客-CSDN博客 
  53. Redis 作者 Antirez 讲如何实现分布式锁?Redis 实现分布式锁天然的缺陷分析&Redis分布式锁的正确使用姿势!..._禅与计算机程序设计艺术的博客-CSDN博客 【架构师必知必会】常见的NoSQL数据库种类以及使用场景_禅与计算机程序设计艺术的博客-CSDN博客
  54. 【极简教程】Linux Shell 脚本编程_禅与计算机程序设计艺术的博客-CSDN博客 
  55. 业务驱动的企业级数据架构设计_禅与计算机程序设计艺术的博客-CSDN博客
  56. Hive 系统架构_禅与计算机程序设计艺术的博客-CSDN博客 
  57. 读多写少业务场景的缓存设计重构实战_禅与计算机程序设计艺术的博客-CSDN博客 
  58. 神奇的 Go 语言:Go 极简教程_禅与计算机程序设计艺术的博客-CSDN博客 
  59. 【精华文章】深入理解 Java 内存模型_禅与计算机程序设计艺术的博客-CSDN博客 
  60. 简洁代码的艺术【The Art of Clean Code】_禅与计算机程序设计艺术的博客-CSDN博客 
  61. 干净的代码——一种实用的方法_禅与计算机程序设计艺术的博客-CSDN博客 
  62. 清洁代码之道:一份实用关于如何编写和维护干净整洁的好代码的的方法 The Art Of Clean Code..._禅与计算机程序设计艺术的博客-CSDN博客 
  63. 更快地编写更好的代码:5 分钟阅读_禅与计算机程序设计艺术的博客-CSDN博客 
  64. ClickHouse 合并树表引擎 MergeTree 原理分析_禅与计算机程序设计艺术的博客-CSDN博客
  65. 【精华收藏】ClickHouse 系统架构、存储引擎、 查询引擎原理分析_禅与计算机程序设计艺术的博客-CSDN博客 ClickHouse 合并树表引擎 MergeTree 索引与数据存储方式_禅与计算机程序设计艺术的博客-CSDN博客
  66. 成为软件架构师需要什么?_禅与计算机程序设计艺术的博客-CSDN博客
  67. 产品经理(Product Manager)工作主要是做什么的?没想到产品经理也分这么多种类型!_禅与计算机程序设计艺术的博客-CSDN博客 
  68. 十年技术进阶路:让我明白了三件要事。关于如何做好技术 Team Leader?如何提升管理业务技术水平?(10000字长文)..._禅与计算机程序设计艺术的博客-CSDN博客
  69. 程序员技术练级攻略:Build Your Programming Technical Skills_禅与计算机程序设计艺术的博客-CSDN博客

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

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

相关文章

HTTPSHandler SSL Error

我在服务器ubuntu中,尝试使用pip3,但是出现下面的报错 ImportError: cannot import name HTTPSHandler 通过查询资料,发现报错的原因是,该pip3.5中没有安装好openssl. 我尝试在python3.5中使用import ssl, 确实是会显示下面的报错…

推广传单制作工具

临近节日如何制作推广活动呢?没有素材制作满减活动宣传单怎么办?小编教你如何使用在线设计工具乔拓云,轻松设计商品的专属满减活动宣传单,不仅设计简单,还能自动生成活动分享链接,只需跟着小编下面的设计步…

动态规划,这将是你见过最详细的讲解

文章目录一、为什么要讲动态规划呢?二、什么是动态规划三、感受一下递归算法、备忘录算法、动态规划递归算法带备忘录的递归解法(自定向下)自底向上的动态规划四、动态规划的解题套路1. 穷举分析2. 确定边界3. 确定最优子结构4. 写出状态转移…

sql 优化

sql 优化1. mysql 基础架构1.1 mysql 的组成2. mysql 存储引擎2.1MyISAM2.2 InnoDB2.3 MyISAM 和 InnoDB 的对比3. mysql 索引3.1 Hash 索引3.2 B-Tree 索引3.3 BTree 索引3.4 R-Tree 索引3.5 Full-Text 索引4. sql 优化4.1 避免 select *4.2 避免在where子句中使用or来连接条件…

PTA L1-046 整除光棍(详解)

前言:内容包括四大模块:题目,代码实现,大致思路,代码解读 题目: 这里所谓的“光棍”,并不是指单身汪啦~ 说的是全部由1组成的数字,比如1、11、111、1111等。传说任何一个光棍都能被…

【数据库】sql函数和多表关联查询

目录 一,SQL函数 1,聚合函数 1, count函数 2, AVG函数 3, SUM函数 4, MAX函数 5, MIN函数 6,数据分组——GROUP BY 7,限定组的结果,HAVING 8&#x…

在线支付系列【23】支付宝开放平台产品介绍

有道无术,术尚可求,有术无道,止于术。 文章目录前言支付产品App 支付手机网站支付电脑网站支付新当面资金授权当面付营销产品营销活动送红包会员产品App 支付宝登录人脸认证信用产品芝麻 GO芝麻先享芝麻免押芝麻工作证安全产品交易安全防护其…

Centos7上Docker安装

文章目录1.Docker常识2.安装Docker1.卸载旧版本Docker2.安装Docker3.启动Docker4.配置镜像加速前天开学啦~所以可以回来继续卷了哈哈哈,放假在家效率不高,在学校事情也少点(^_−)☆昨天和今天学了学Docker相关的知识,也算是简单了解了下&…

设计模式C++实现12:抽象工厂模式

参考大话设计模式; 详细内容参见大话设计模式一书第十五章,该书使用C#实现,本实验通过C语言实现。 抽象工厂模式(Abstract Factory),提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们…

Python之字符串精讲(下)

前言 今天继续讲解字符串下半部分,内容包括字符串的检索、大小写转换、去除字符串中空格和特殊字符。 一、检索字符串 在Python中,字符串对象提供了很多用于字符串查找的方法,主要给大家介绍以下几种方法。 1. count() 方法 count() 方法…

CHAPTER 5 Jenkins SonarQube

Jenkins & SonarQube5.1 安装SonarQube1. 下载镜像2. 导出到其他服务器3. 准备工作4. docker-compose文件5. 启动容器5.2 登录SonarQube1.登录2. 安装中文语言插件3. 安装其他插件5.3 部署扫描器sonar-scanner1. 部署sonar-scanner2. 新建项目3. 扫描代码4. 查看报告5.4 Je…

Prometheus 的介绍和安装

介绍 Prometheus 是一个开源的监控和报警系统,最初由SoundCloud于2012年创建,随着越来越多的公司采用Prometheus以及非常活跃的社区,Prometheus于2016年加入云原生基金会,成为Kubernetes之后的第二个托管项目,并于2018年毕业。 特点 通过PromQL来对基于指标名称和键值对…

独立产品灵感周刊 DecoHack #047 - 安卓手机上最有用的APP

本周刊记录有趣好玩的独立产品设计开发相关内容,每周发布,往期内容同样精彩,感兴趣的伙伴可以点击订阅我的周刊。为保证每期都能收到,建议邮件订阅。欢迎通过 Twitter 私信推荐或投稿。💻 产品推荐 1. Bouncer Tempor…

算法训练营 day45 动态规划 0-1背包理论 分割等和子集

算法训练营 day45 动态规划 0-1背包理论 分割等和子集 0-1背包理论 有n件物品和一个最多能背重量为w 的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。 在下面的讲解中&…

python 使用 thrift 教程

一、前言:   Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift 进行通信的,然后写自动化脚本之前研究了一下。 需要定义一个xxx.thrift的文件&…

【C++】十分钟带你入门C++

目录零 内容概括一 C关键字二 命名空间2.1 命名空间定义2.2 命名空间的使用三 C输入和输出四 缺省参数4.1 缺省参数的概念4.2 缺省参数分类五 函数重载5.1 函数重载的概念六 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 使用场景6.5 效率比较6.6 引用和指针的区别七 内联函数7.…

最简易的教程 -一篇文章教会你 用Python打包文件

前言 嗨嗨,好久不见,我是 我叫 … emmm你们好 我是一堆英文字母(名字乱打的不好yi shi ~) 看到文章的人多不多,我不知道 ,招呼我还是要打一个的 👍 今天文章很简单,打包改图标 用…

C++关键字之const、inline、static

C 关键字总结 1.const const是 constant 的缩写,本意是不变的、不易改变的意思。在C中用来修饰内置类型变量,自定义对象,成员函数,返回值,函数参数使用如下: //修饰普通类型变量 const int a 7; int ba;…

人工智能对教育的冲击有多大?

人工智能对教育有巨大冲击 高考改革也会发生重大变化 教育系统其实是一个坚固的堡垒 再坚固也要适应未来 趣讲大白话:让我未来更有竞争力 *********** 创造和创新的意识和能力 复杂性和不确定性的适应能力 应该是改革的方向 【安志强趣讲信息科技】74期 掌握信息科…

【人工智能】对贝叶斯网络进行吉布斯采样

问题 现要求通过吉布斯采样方法,利用该网络进行概率推理(计算 P(RT|SF, WT)、P2(CF|WT)的概率值)。 原理 吉布斯采样的核心思想为一维一维地进行采样,采某一个维度的时候固定其他的维度,在本次实验中,假…