1. 强一致性 1.1. 最终一致数据库通过跨多台机器分区和复制数据集来获得可扩展性,其代价是要跨副本维持强数据一致性以及允许冲突写入 1.1.1. 在更新数据对象后,不同的客户端可能会看到该对象的旧值或新值,直到所有副本都收敛到最新值 1.2. 另一类分布式数据库提供一种可替代的模型,即强一致性数 ...
1. 最终一致性 1.1. 在一些应用领域,通常谈论的是银行和金融行业,最终一致性根本不合适 1.2. 事实上,最终一致性在银行业已经使用了很多年 1.2.1. 支票需要几天时间才能在你的账户上进行核对,而且你可以轻松地开出比账户余额多的支票 1.2.2. 当处理检查并建立一致性后,你才能看到一些后 ...
大家好,我是汤师爷~ 今天聊聊SaaS架构中的流程架构分析。 业务流程的概念 业务流程是企业为实现目标而制定的一套系统化的工作方法。它由一系列有序的业务活动组成,按照既定规则将资源(输入)转化为有价值的结果(输出)。这一过程需结合企业的具体情况和可用资源,旨在为客户创造价值,同时达成企业目标。 通过 ...
1. 可扩展数据库基础 1.1. 绝大多数应用程序都是基于关系数据库技术构建的 1.2. 数据库必须存储大量数据,为分布在全球的客户端提供快速的查询响应,并且全天候可用 1.3. NoSQL数据库采用简单的数据模型,可以复制和分区以支持海量数据集和请求量 1.4. Facebook以使用MySQL管 ...
1. 微服务 1.1. 微服务的起源可以追溯到2008年左右 1.1.1. 在Amazon,“两个比萨原则”成为一个单系统组件团队规模的管理原则,后来被称为微服务 1.1.1.1. 每个内部团队都应该小到可以用两个比萨饼喂饱 1.1.2. Amazon和Netflix是微服务架构的先驱,他们在20 ...
1. 无服务器的魅力 1.1. 对于某些应用程序,负载在工作时间可能很高,而在非工作时间可能很低或者不存在 1.2. 其他应用程序后台流量可能在99%的时间里都很低 1.2.1. 一旦到了一些大型节目的门票发布时间,负载需求可能会在数小时内飙升至平均水平的10000倍,然后回落至正常水平 1.3. ...
1. 异步消息传递 1.1. 通信是分布式系统的基础,也是架构师需要纳入其系统设计的主要问题 1.2. 客户端发送请求并等待服务器响应 1.2.1. 这就是大多数分布式通信的设计方式,因为客户端需要得到即时响应后才能继续 1.2.2. 并非所有系统都有这个要求 1.3. 使用异步通信的方式,客户端( ...
1. 分布式缓存 1.1. 缓存存在于应用程序的许多地方 1.1.1. 行应用程序的CPU具有高速多级硬件缓存,可以减少相对较慢的主内存访问 1.1.2. 数据库引擎可以利用主内存来缓存数据存储的内容,这样在许多情况下查询就可以不用访问速度相对较慢的磁盘 1.2. 分布式缓存是可扩展系统的重要组成部 ...
1. 应用服务 1.1. 任何系统的核心都在于实现应用需求的特定业务逻辑 1.2. 服务是可扩展软件系统的核心 1.2.1. 它们将契约定义为一个API,向客户端声明它们的能力 1.3. 应用服务器高度依赖于编程语言,但通常都会提供多线程编程模型,允许服务同时处理许多请求 1.4. 多服务配置意味着 ...
商业模式 商业模式是帮助企业成功的“秘诀”,它通过整合企业内外部的多种要素,构建起一个全面、高效且具有独特竞争优势的运营体系。这一体系的目的是满足市场的需求,实现各利益相关者价值最大化,并确保企业的长期盈利能力。 商业模式的核心架构由三个紧密相连的环节构成:创造价值、传递价值和获取价值。 创造价值: ...
1. 通信基础 1.1. 每个分布式系统都包含通过网络进行通信的软件组件 1.2. 硬件 1.2.1. 全球互联网就是一台异构机器,由不同类型的网络通信通道和设备组成,它们每秒将数百万条消息通过网络传送到预定目的地 1.2.2. 对于单个光纤链路,可以提供每秒超过70 Tbps的总带宽 1.2.3. ...
大家好,我是汤师爷~ 在工作当中,我们经常会听到以下说法: 产品负责人说,现在的业务架构太复杂,需要仔细梳理下。 技术领导说,这个项目很复杂,需要做下系统架构方案评审。 研发经理说,这次秒杀活动访问量非常大,需要用到高并发架构方案。 一线研发说,互联网大厂都会用到微服务架构,我要学学微服务架构设计。 ...
1. 系统架构基础 1.1. 几乎所有大规模系统都是从小规模开始,在成功路上逐渐发展壮大 1.2. 通信使用标准的应用层网络协议,通常是HTTP 1.3. Java EE和Java的Spring框架 1.4. Python的Flask 1.5. 随着应用程序的特性变得更加丰富,单体应用程序的复杂性往 ...
1. 简介 1.1. 在过去20年里,软件系统的规模、复杂性和容量都出现了前所未有的增长 1.2. 代码是容器、数据库、消息传递系统和其他组件的一部分,通过调用API和构建指令,构成你的应用程序 1.3. 可扩展(scalable)是软件工程中用来描述软件系统能够适应增长的术语 1.3.1. 可扩展 ...
对程序员来说,架构是一个常见词汇。如果想成为一名架构师,对架构概念的理解必须清晰。否则,在制定架构方案时,肯定会漏洞百出,问题频发,这将对你的面试、晋升和团队领导产生负面影响。 我们看下维基百科关于架构的定义: 软件架构是抽象描述系统的一组结构,以及构建这些结构的规则。这些结构包括:软件要素、要素之 ...
JDBC JDBC(Java DataBase Connectivty,Java数据库连接)API,是一种用于执行Sql语句的Java API,可以为关系型数据库提供统一的访问,其由一组Java编写的类和接口组成. JDBC驱动程序 起初,SUN公司推出JDBC API希望能适用于所有数据库,但实际 ...
@目录1.流程2.自定义发布数据2.1 std_msgs内置类型2.2 编写.msg文件2.3 修改package.xml文件2.3.1 完整的package.xml文件2.4 修改CMakeLists.txt文件2.4.1 修改find_package指令2.4.2 添加add_message_f ...
@目录1.launch文件有哪些标签2.node标签2.1 必选属性2.2 可选属性2.3 可选子级标签3.include标签3.1 必选属性3.2 可选属性3.3 可选子级标签4.remap标签4.1 必选属性5.param标签5.1 必选属性5.2 可选属性6.rosparam标签6.1 必选属 ...
@目录1.工作空间目录2.加载环境变量3.打开CLion4.配置CLion5.编译和调试软件包 1.工作空间目录 我们的一个工作空间目录应该是这样的 2.加载环境变量 先进入工作空间再加载 source ./devel/setup.bash 3.打开CLion 一定要在第二步的同一个终端下 clio ...
@目录1.流程2.自定义请求和响应的数据2.1 std_msgs内置类型2.2 编写.srv文件2.3 修改package.xml文件2.4 修改CMakeLists.txt文件2.4.1 修改find_package指令2.4.2 添加add_message_files指令2.4.3 添加gene ...