架构实战营毕业总结
一、概念
什么是集群消费和广播消费?
集群消费就是同一个消息只会被集群里的一个消费消费,广播消费就是同一个消息会被集群里的每个消费消费。
去 IOE
它是阿里巴巴造出的概念。其本意是,在阿里巴巴的 IT 架构中, I 是指“IBM”,O 是指“Oracle”,E 是“EMC”。去 IOE 就是去掉 IBM 的小型机、Oracle 数据库、EMC 存储设备,代之在开源软件基础上开发的系统。
以 IBM、Oracle 和 EMC 为代表的三大国际巨头组成的 IT 系统一直是中国企业信息化的“黄金搭档”,随着云计算和开源软件技术的成熟应用,这种高大上的“黄金搭档”必将走下神坛。
OLAP、OLTP 的区别
数据处理大致可以分成两大类:联机事务处理 OLTP(On-line transaction processing)、联机分析处理 OLAP(On-Line Analytical Processing)。OLTP 是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易。OLAP 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLAP 是数据仓库系统的主要应用,支持复杂的分析操作,侧重决策支持,并且提供直观易懂的查询结果。
OLTP 是传统的关系型数据库的主要应用,主要是基本的、日常的事务处理,例如银行交易;
时间局部性
这一时间访问的数据,下一时间很可能也会被访问
空间局部性
这个位置的数据被访问,下一个位置的数据很可能也会被访问。
分布式事务的 3 中形式
事件表
分布式消息队列
TCC 代码入侵新很强,每个接口都要实现成 3 个接口
架构设计 4 类图
系统架构图
系统黑盒图
系统白盒图
系统序列图(时序图)
二、技巧
分库是为了解决单实例连接数限制的。如果并发不高,不需要分库。
加 kafka 一般是为了对接多个需要同步的系统,或者为了批量刷盘。
日志型、流水型、动态型、轨迹型的数据都可以用 redis,比如说用户的浏览历史,滴滴司机的轨迹。
备选架构设计:先排列组合创造,然后再评估,评估就是 trade-off,所以架构设计/软件设计 = 创造 + 取舍(trade-off)。
读写分离是为了解决单机的读性能瓶颈,分库分表是为了解决单机的写性能瓶颈。
如果是 P5/P6,是很有可能通过跳槽来提升等级的,但是如果你现在已经是 P7/P8,几乎不可能通过跳槽来提升等级。
所有的存储系统介绍:https://db-engines.com/en/
将开源项目的架构图重新画一遍,会有更深入的理解。
一致性保证:牛逼就自己实现 Raft 算法、不牛逼就直接使用 Zookeeper。
F5 至少 2 台,否则会出现单点故障。
VIP(Virtual IP Address)用来做高可用。
在计算服务性能时,忽略 CPU 频率的差异,忽略内存的影响,主要是计算性能和存储性能。
存储空间不是瓶颈,因此机房之间可以互备数据,也就是说每个机房都可以有全量数据。
库存是强一致性,不会两个机房都写同一份数据,同一个用户的库存每次都会写到同一个机房,并且这个用户的库存也只会从这个机房里读取,其他机房可能有这个用户的库存信息,但是那只是为了备份数据。
内存和硬盘相对来说不值钱,所以不用刻意去计算。
SOA 在传统行业应用:异构、变化慢,微服务应用于互联网企业:同构,变化快。
SOA 服务相对比较大,一个系统就是一个服务。
微服务其实应该是小服务,并不是微服务,因为服务太多会产生通信成本、维护成本等等。
微服务架构师端对端分层架构的业务层,单个微服务可以是整洁架构、微内核架构等。
租户的 2B 平台可做成微服务,因为平台一般是同一家公司开发的。
爬虫平台:抓取服务、存储服务、解析服务、分析服务。
网络调用大于 CPU 的计算时间。
微服务架构和单体架构的区别是微服务是分布式架构,需要拆分、分布。
只拆分代码不拆分数据不算微服务,只算微服务演进的中间状态。
全链路跟踪(比如 Skywalking,普罗米修斯?)只是在检测错误的时候使用,不能一直开着。
使用 v1/v2 路径版本,可以拷贝代码来实现。
数据中台用 dataworks,maxcompute 等。
三、问答
备选方案从哪里来?
头脑风暴得出 5、6 个,最后确定 3 个。
为啥 canal 不直接到 es, 还要加个 Kafka, 是因为 es 的刷盘速度跟不上 canal 吗?
有多个系统需要 binlog 消息。
业务系统在不影响整体复杂度的时候,高性能是不是越高越好?
不是,复杂系统的高性能很难估算,一般都是上线之后进行优化。
备选架构哪个得分最多就选哪个吗?
不是,要按优先级排序。
一个架构系统中即用 Kafka,也用 RocketMQ 吗?
事件和日志用 kafka,例如用户点击和操作,用户轨迹、大数据的数据传递等;业务消息用 RocketMQ,例如用户充值成为 VIP 后,一系列的后续通知。
什么时候使用广播消费?
这种消费往往应用在有状态的服务,比如缓存服务器去消费消息更新自己的缓存数据,那么每一台缓存服务器都需要拿到消息。
有哪些常用分片方式?
ID 分段
ID Hash/Range
时间分段,适合日志、流水等。
每次都要自己测试性能的话,很耗费时间和精力,怎么办?
参考官方测试数据,但不能全信;
第三方性能测试对比,相对更客观
多少数据算 Big Data?
1T 容量以上
多级负载均衡对性能有影响吗?
性能影响可以忽略不计。
ClickHouse 和 Hadoop 有什么优缺点
Hadoop 生态强大,ClickHouse 支持 SQL 查询,很适合配合 MySQL 使用。
改成分区存储有什么不同?
分区之后有可能可以使用单机
视频网站的带宽成本是主要成本,用 CDN 并没有减少总体访问带宽,那么为何用 CDN 可以降低带宽成本?
微服务按业务拆分步骤
业务专家/业界案例/先粗后细划分业务领域
按三个火枪手决定拆分几个微服务
使用多对一、一对一、一对多的微服务拆分方式
微服务按性能拆分
按流量拆分,提升性能
按业务重要程度(比如支付、监管、安全等等),降低业务间的影响程度
按可用性,比如经常出问题的服务
按稳定性,业务是否在不断迭代
合并微服务的技巧
使用多对一方式合并,不能使用多对多方式,也就是合并的过程中不要拆分服务,否则就太复杂了
逐步合并
四、灵感
可以做一个系统出来,专门用来辅助系统架构设计。架构师只需要输入一些关键数据,然后系统就能生成多个备选方案。像中间件多维度的对比,其实都是通用的信息,系统做起来很简单。中间件的特性也可以根据时间的推移不断更新。而且相关参数可以由操作员自己来调整。
评论