首页 > 其他分享 >凤凰架构总结

凤凰架构总结

时间:2024-10-17 12:00:07浏览次数:7  
标签:总结 事务 缓存 服务 概念 RPC 架构 凤凰

     

 

          重温了一遍周志明老师的《凤凰架构》,一方面是加深记忆一下里面的知识点,另外就是做个记录总结,方便后面忘记了在看。

           全书一共有十六个章节,每个章节都相对独立又和后文有些关系。个人总结主要是围绕着微服务、架构演进以及容器编排等技术的发展来讲述的。很详细也很透彻,第一遍读的时候因为很多概念不是很清楚,比较耗时。读了后再回过头来看时候,发现顺利了不少。

         第一章服务架构演进,从原始分布式时代到单体架构历史,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

相关文章

  • Flink_基础架构信息
    几个重要的特新1、Checkpoint,这个机制保证了Flink分布式的语义一致2、有关Flink分布式,流处理的话题似乎在大数据的领域中,做离线数据处理是很平常的事情流、批处理很适合这种生产环境批处理的特点是有界、持久、大量,批处理非常适合需要访问全套记录才能完成的计......
  • SQL语句——日期题目总结
    第一题:查询本周考试的学生成绩。 DATA_ADD()语法:date就是要操作的日期,INTERVAL就是要间隔的日期expr可以写数字,unit用来写单位,比如DATE_ADD(CURDATE(),INTERVAL7DAY)就是当前日期加上一星期。CURDATE()就是当前日期,格式:DATE_ADD(date,INTERVALexprunit)代码解释:就......
  • 芯片架构
    ‌RISC-V架构‌:基于精简指令集计算(RISC)原理的开放指令集架构(ISA),具有模块化设计、完整工具链和大量的开源实现,适用于物联网、嵌入式系统和服务器等领域‌2。‌ARM架构‌:以低功耗、低成本和高性能著称,广泛应用于移动通讯和消费性电子产品,如智能手机和平板电脑等‌3。‌X86架构‌:......
  • 盘点.NET支持的 处理器架构
    在一个会议上,中国招投标协会的技术负责人居然当着很多领导的面说.NET不能在国产服务器上运行,可以说这个技术负责人非蠢即坏。国产服务器的处理器架构主要包括x86、ARM、LoongArch、risc-v。这些国产服务器处理器架构各有特点,ARM架构在自主可控和生态建设方面具有优势,x86架构则在现......
  • 近期计划总结 && 未来长久打算
    以下的话全是我写给自己看的,算是对自己的自省目前,经过了三个月的集中学习,unity还算是入门了,C#也堪堪达到入门水准//但是,作为一个大龄学生,现在脑子也没有以前那么好用了,所以记了很多博客//不过,我发现有点被所谓的任务裹挟了,记录时间甚至持平学习时间,这就倒反天罡了//所......
  • # 学期(如2024-2025-1) 学号(如:20241402) 《计算机基础与程序设计》第4周学习总结
    学期(如2024-2025-1)学号(如:20241402)《计算机基础与程序设计》第4周学习总结作业信息这个作业属于哪个课程<班级的链接>(如2024-2025-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(如2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标<写上......
  • Java日总结 --- 数据库连接池&Druid使用
    简介:数据库连接池是一个容器,负责分配管理数据库连接;允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个好处有:资源重用,提升系统相应速度,避免数据库连接遗漏他是一个现成的数据库连接,只需要调用连接访问,不需要再次创建,当访问完毕后,会返还这个连接,可以提高效率;当连......
  • 2024年10月16日总结
    今天英语只复习了单词,由于数据结构需要,下午系统复习了链表方面内容,以下是我整理的一个链表模版。includeincludeusingnamespacestd;/*指针可以解决数组增删改麻烦的问题,还有数据的样本量不确定的问题链表从第一个数据开始,依靠指针遍历;链表访问某一单个数据,效率不如数组......
  • 10.16 总结
    T1赛时拿的30分暴力,没想到60分,但是预期:30pts,实际:30pts正解把一个人劈成四瓣,然后用树状数组维护不是\(i\)这个人以外的\(0,a_{(i,0)},a_{(i,1)},a_{(i,1)}+a_{(i,0)}\)以上的所有人的个数,最后除以\(16\),就行了。T2赛时时正解,然后因为没有写check然后就小样例......
  • 专项训练dp总结
    作者在做题的时候深感自己dp水平的低下(几近为零),于是尝试逼迫自己搞懂每道题并写一点做题记录,本质上是为了避免自己成为只会抄题解的机器。。1.[PA2021]Oddeskidodeski首先,对于一个合法的序列f,若f+x为合法序列,那么f+x+x必然也为合法序列。其次状态设计,设\(f_{i,j,0/1}\)......