凤凰架构
通读全书,我得到了什么?
回顾一下,我读这本书的初衷,与其说初衷,不如说是一个契机,在有意的安排下,我接触到了这本书,当时的我,已经大大小小接触过几个公司的业务系统了,本以为我对系统设计有了自己的理解,现在想来,也不过是技术栈丰富后的堆积产物罢了。
为何如此锐评自己?因为在读这本书前,如果我接到一个构建系统的任务,我应该不会考虑这个系统的成本,或者说会默认我想要的总是存在的;应该也不一定会想到未来如何接入监控系统。以及一些我现在都无法考虑到的点。
为什么会有这种感觉?可以说是经验不足所带来的心虚,也可以说是纸上谈兵终究是纸上谈兵,理论精英不等于实践不会出错。
本文中,周老师主讲的还是以分布式系统为主的分布式架构设计,有关分布式的起源,发展,以及随之而来的种种问题,扩展到为了解决这些问题而研究出的新技术,具体如如何保证分布式服务下的数据一致性。
架构要考虑哪些方面?
业务角度
我认为设计一个系统最重要的莫过于其初衷及未来规划,也就是其业务出发点,我感觉也可以理解为业务价值。
技术角度
所选技术栈,正如本书所讲的大部分内容,从基础设施到方法论,从方法论再到具像化的设计。
资源角度
人力资源,成本,时间,
其他云云
不要过度设计
看待架构的不同角度
从技术角度看待架构
一个完美的架构最终也不过是服务于一个系统(单体或分布式系统),终究是逃不出系统的边界,如何设计一个合理又完美的系统
不再扯远了,以上只是我在一个较长的时间线中,阅读到其他架构相关的文章随记,如下回归主题。
章节:演进中的架构
提问:什么是架构?
针对这个问题,在网上我找到一篇文章,比较符合我预期的答案,架构漫谈(一):什么是架构?。
提问:什么是软件架构?
提问:什么是分布式?
我们一提到架构就会想到分布式,感觉分布式架构才是一个词?这之间的详细关系是什么?分布式架构优劣是什么?
章节:架构师的视角--访问远程服务
什么是RPC?什么是REST?
RPC
Remote Procedure Call,远程服务调用。
顾名思义,RPC就是用来调用远程服务的,那么为什么需要调用远程服务呢?为什么不用本地服务呢?
本地服务调用,也可以叫进程间通信,本地进程共享内存
REST
我们参考官方文档给我们的解释, 参考:
- https://aws.amazon.com/cn/compare/the-difference-between-rpc-and-rest/
- https://zhuanlan.zhihu.com/p/636491028
所以REST与RPC的区别是什么?
两者都是,先将我个人理解的答案,以一个案例来说
在开发过程中,对后端接口进行请求时,我们会有POST、GET、UPDATE、DELETE四种最常见的请求方式,其余几种请求方式暂不讨论。
假如有一个需求需要查看某篇文章的信息
- 按照RPC的原则,
章节:架构师的视角--事务处理
在印象中,事务发生的场景只存在于数据库,消息队列,其他场景很少会遇到,基本没有遇到过。在目前遇到的事务处理过程中,通常来说,通过数据库配置+代码(锁)就可以解决99%的问题了,另外1%不知道是否存在,目前本人还没遇到过。
按照周老师的说法,如上情况还处在事务的内部一致性阶段。
什么是内部一致性?
引用周老师的话来说:“当一个服务只使用一个数据源时,通过 A、I、D 来获得一致性是最经典的做法,也是相对容易的。此时,多个并发事务所读写的数据能够被数据源感知是否存在冲突,并发事务的读写在时间线上的最终顺序是由数据源来确定的,这种事务间一致性被称为“内部一致性”。”
CAID or ACID
C(Consistency):一致性 A(Atomic):原子性 I(Isolation):隔离性 D(Durablity):持久性
C是目的,AID是手段。
如何实现持久性 原子性?
持久性:即持久,简单理解,对数据库而言,写入磁盘的数据才有持久这一特性,而没有写入磁盘的数据则没有持久这一特性。
实现持久性的方法还是蛮多的,市面上常见的有
原子性:原子不可拆分,原子性即一个操作(CRUD)是一个整体,不可拆分,要么整个操作都不执行,如果执行,那么一整个操作都要执行。
提问:什么是CAP?
- C(Consistency):一致性
- A(Available):可用性
- P(partition Tolerance):分区容错,无法避免
CAP定理指出,在一个分布式系统中,涉及数据共享问题时,如上三个特性最多只能同时满足其中三个。
分布式事务
章节:架构师的视角--分流
章节:架构师的视角--安全性
最简单的安全实现,就是"闭关锁国"。通过不将自己的服务暴露到外网,以及将一切外网拉入黑名单就是最简单的安全实现(对外不对内)。
章节:分布式的基石--分布式共识算法
TODO 算法的实现
Paxos
Multi Paxos
Gossip
Raft
章节:分布式的基石--从类库到服务
章节:分布式的基石--流量治理
章节:分布式的基石--可靠通讯
章节:分布式的基石--可观测性
本章节主要是讲可视化操作,包括日志的可视化,监控的可视化,任务执行的链路追踪,这些可视化操作对于一个完整的系统来说,是不可或缺的部分。