重温了一遍周志明老师的《凤凰架构》,一方面是加深记忆一下里面的知识点,另外就是做个记录总结,方便后面忘记了在看。
全书一共有十六个章节,每个章节都相对独立又和后文有些关系。个人总结主要是围绕着微服务、架构演进以及容器编排等技术的发展来讲述的。很详细也很透彻,第一遍读的时候因为很多概念不是很清楚,比较耗时。读了后再回过头来看时候,发现顺利了不少。
第一章服务架构演进,从原始分布式时代到单体架构历史,SOA时代以及微服务时代,以及当前的云生无服务时代这些概念。主要是需要清楚里面的几个概念:
SOA:最早在1994年提出,当时不具备发展提交。直到2006年OSOA联盟的倡议与支持下,成立了Open CSA 组织。里面提出了很多的概念、思想都在今天的微服务中找到对应的身影,譬如服务之前的松散耦合、注册、发现、治理、隔离、编排等。
微服务时代:微服务最早2005年提出,指的是专注于单一职责的、和语音无关的细粒度web服务。但是一直到2014年,和SOA划清界限之后,才真正的崛起了。 现代的概念是:微服务是一种通过多个小型服务组合来构建单个应用的架构风格,这些服务围绕业务能力而非特定的技术标准来构建,各个服务可以采用不同的编程语言、不同的数据存储技术,运行在不同的进程之后。
后微服务时代:主要是以docker为代表的容器化技术的崛起,以及kubernetes成为容器编排解决的首要选择,标志着后微服务时代的开启。以kuberneters在集群中对外提供服务,以虚拟化容器技术对外提供方案的容器编排技术的完善和发展,以及服务网格(Service mesh)等技术的引入,微服务的概念也逐渐越加成熟。
无服务时代:主要是以云原生为主的元计算方面。也是作者预测以后云计算使用的一种主要的形式。
另外需要说下Sidecar Proxy的边车代理模式,这个是服务网格(Service mesh)里面用到的一种模式,下面很多章节都有介绍。
Sidecar Proxy(边车代理):在虚拟化场景中,边车指的是通信代理服务器,以类似网络安全里面中间人共计的方式进行流量劫持,在应用毫无感知的情况下,悄然接管应用所有对外通信。这个代理除了实现正常的服务间通信为(称为数据平面通信),还接收来自控制器的指令(称为控制平面通信),实现熔断、认证、度量、监控以及负载均衡等各种附加功能。 我理解就是不需要像传统方式那样,比如说一个java语音的程序,但是需要再Python或者go平台运行,传统方式需要一个jar包或者http之类的方式去调用后运行,但是这个功能交由系统级别来实现了。
第二章主要是介绍了远程服务调用(RPC)以及REST风格的设计。这个章节介绍了RPC的历史,概念有很多,毕竟RPC的历史也有几十年了。这个我理解需要了解的主要是知道现在一些主流的RPC吧,比如RMI(SUN/Oracle)、gRPC(Google)、Motan1/2(新浪)、Finagle(Twitter)、brpc(百度/Apache)、NetRemoting(微软)、Arvo(Hadoop)、JSON-RPC2.0)(JSON-RPC)等一些常见的协议和框架。
RESTFUL概念:restful和RPC的概念不尽相同,只是有些相似。本质上不是一类东西。 RPC是一种远程服务调用协议,而restful没有协议。虽然都是远程调用,REST是面向资源的思想,REST只是一种风格,不是一种规范,没有像RPC一样的协议
以作者举例来说明:
去医院预约
如果只是通过RPC调用,属于0级
如果定义了资源,比如能获取指定日期的预约结果,即拿到所有医生的信息 是一级
如果除了预约,还能取消、更换时间、以及结果能够根据统一code码进行判断的,并且考虑授权之类的,比如vip才能预约的,则称为二级
如果请求了一个,能返回所有的,则称为三级
restful 按照服务接口 rest的程序 从高到低,分为3级:
0级: 完全不REST
1级: 引入资源的概念
2级:统一引入接口,映射到http协议的方法上
3级: 超媒体控制,主要体现在返回信息里面包含所有的需要的信息,能做到服务端和客户端的api解耦。
另外就是restful的不足: rest和http 完全绑定,不适合高性能传输的常见、不利于事务、缺乏对资源批量处理等
第三章 主要是事务处理,这个章节是一些互联网公司经常面试的东西。
ACID(原子性、隔离性、持久性、一致性):事务的基本概念
原子性和持久性:默认是通过commit log来保证,但是commit log 有一个先天缺陷: 对数据的修改都必须发生在事务提交后,如果磁盘i/o足够空间,都不允许事务提交前修改磁盘数据,导致对提升数据库性能不利。 一种解决方案是: 增加Undo log的日志类型,记录修改数据位置以及修改的值,以便在事务回滚或者崩溃crash恢复时候根据undo log 对写入数据进行擦除。还有就是是 steal 和 force的一些概念
隔离性:通过数据库的读锁、写锁、范围锁 来解决,针对隔离级别里面序列化、可重复读、读已提交和读未提交。另外在可重复读和读已提交 还有MVCC机制来进行优化的场景,通过增加版本号的概念来进行。
全局事务: 为了解决分布式事务一致性问题,引入XA的处理事务架构。引入了全局的事务管理器,俗称2阶段提交和3阶段提交。
分布式事务:当前业界主流的。首先是CAP理论:即在分区容忍性下面,一致性(Consistency)和 可用性(Availability)只能保证一个。 针对分布式事务,有几种常用的方案:
队列:通过队列的方式,达到最终一致性
TCC: tyr-confirm-console,一般用的比较多的场景就是解决秒杀保证库位不会出现小于0的问题,超售的问题。缺点是 代码侵入强
SAGA事务:可以参考阿里开源的seata
第四章主要是缓存、域名解析、路由以及CDN分发、负载均衡的一些知识
主要是记一下CDN以及负载均衡的一些知识:
CDN 作用: 加速静态资源分发、安全防御、 协议升级(使用SSL证书)、状态缓存、修改资源、访问控制、诸如功能
负载均衡可以在数据链路做负载均衡、也可以在网络层和应用层做负载均衡,负载均衡算法可以使用加权、轮训、随机、一致性hash、最少连接数等方式
缓存的一些知识点:
吞吐量:使用OPS(每秒操作数)来衡量,反应了对缓存进行并发度、写操作的效率。
命中率: 成功从缓存返回结果次数与总请求次数的比值。
介绍了 Caffeine环形缓存(Ring buffer)的实现原理:以及缓存的淘汰策略:FIFO(优先淘汰)、LRU(优先淘汰最久未被访问的数据)、
标签:总结,事务,缓存,服务,概念,RPC,架构,凤凰 From: https://www.cnblogs.com/thinkingandworkinghard/p/18471784