zoukankan      html  css  js  c++  java
  • 分布式服务框架原理与实践_李林锋著_笔记

    原文章:

    分布式服务框架原理与实践_李林锋著_笔记

    https://www.cnblogs.com/xiaoliangyuu/p/13234039.html

    第20章 微服务架构 264

    1、微服务架构产生的历史背景:
        1、代码重复率高。进而导致需求变更困难、代码维护困难
        2、部署效率低。2.1一个小功能的变更导致打整个war包  2.2编译时间长 2.3测试工作量大
        3、由于以上原因,导致新需求上线周期长
        
    2、微服务架构带来的改变:
        1、应用解耦
        2、分而治之:水平拆分、垂直拆分
        3、敏捷交付。敏捷性的产生,是将运行中的系统解耦为一系列功能单一服务的结果
     
    3、微服务划分原则:单一职责原则,简单的、原子的微型服务,专注于做一件事
    4、开发微服务:
    5、基于docker容器部署微服务:
        1、docker优势:快速(性能)和可移植性
        2、docker的4个优点:
            1、线上和线下环境等同性(容易排查线上bug;相对于虚拟机占用资源少,可在开发环境模拟)
            2、与特定的云提供商解耦
            3、提升运维效率。docker是标砖化容器,在任意环境实现统一的部署体验
            4、敏捷性。秒级扩容
            
    6、治理和运维微服务
        微服务导致运维成本大幅提高,服务拆分粒度越细,运维和治理成本就越高。
        主要方案为 分布式和自动化。
            1、分布式如:分布式性能数据采集、分布式日志检索、分布式报表展示。
            2、自动化就是将以前人工操作的运维工作逐步标准化、流程化和规范化。如自动扩容
            
    7、微服务优点总结:
        1、开发、测试和运维简单
        2、局部修改很容易部署,有利于持续集成和持续交付
        3、技术选择更灵活,不与特定语言和工具绑定
        4、有利于小团队作战,敏捷交付

    第21章 服务化最佳实践 280

    1、远程服务调用相对于本地调用会有性能和时延问题:
        1、客户端对消息序列化,服务端反序列化,会占用cpu资源
        2、序列化时需要创建二进制数组,占用jvm堆内存或堆外内存
        3、客户端发送请求消息和接受反馈消息,占用网络带宽
    2、远程服务调用性能影响因素有3个:
        1、I/O调度模型:同步阻塞I/O(BIO)还是非阻塞IO(NIO)
        2、序列化框架的选择:文本协议、二进制协议或压缩二进制协议
        3、线程调度模型:串行调度还是并行调度,锁竞争还是无锁化算法(高性能的Reactor线程模型)
        
    3、netty优势总结(详见书):零拷贝、内存池、无锁化的串行设计、高效的并发编程
     
    4、序列化框架的影响因素:
        1、序列化后的码流大小(网络带宽的占用)
        2、序列化&反序列化的性能(CPU资源占用)
        3、是否支持跨语言(异构系统的对接和开发语言切换)
        4、并发调用的性能表现:稳定性、线性增长、偶现的时延毛刺等
        
    5、服务化高性能实践总结:
        1、合理设置线程池线程个数。因为JDK的线程池默认采用N个线程争用一个同步阻塞队列方式,过多的线程数会导致激烈的锁竞争,导致性能下降
        2、尽量减小传输码流的大小,无用的字段尽量不要传输
        3、设置合适的客户端超时时间,防止业务高峰期多个线程排队,占用服务器资源
        4、核心服务与非核心服务做隔离
        5、尽量使用Docker,而不是虚拟机。避免虚拟化导致的超过20%的性能损耗
        6、设置合理的服务调度优先级,并根据线上性能监控数据做实时调整
        
    6、分布式事务:
        本地服务时,多个sql可以放在一个事务块中,如果有异常,则全部进行回滚。而服务化之后,多个sql分散在了多个服务中,事务性无法保证。
        服务化之后事务不一致主要是由服务分布式部署导致的,因此也被称为分布式事务问题
        设计方案:两阶段提交
        
        其他:在大多数的业务场景中,我们可以使用最终一致性替代传统的强一致性,尽量避免使用分布式事务
        
    7、研发团队协作问题:
        1、共用服务注册中心。正在开发的服务不可以发布到注册中心
        2、2.1 前向兼容性规范指定。 2.2 支持新增、删除、修改字段  2.3 字段定义位置无关性  2.4 码流支持乱序
  • 相关阅读:
    ICONS-图标库
    图形资源
    vue项目中,如果修改了组件名称,vscode编辑器会在引入修改组件的名字处提示红色波浪线 The file is in the program because:Imported via xxx Root file specified for compilation .
    接口在dev环境报跨域问题(has been blocked by CORS policy:Response to preflight request doesn't pass access control check:No 'Access-Control-Allow-Origin' header ispresent on the requested resource.),qa环境正常
    阿里云occ的图片文件URL用浏览器直接打开无法访问,提示This XML file does noe appear to have any style information associated with it. The document tree is shown below.
    vue 项目使用element ui 中tree组件 check-strictly 用法(父子不互相关联的反显情况)
    高德地图进行线路规划绘制标记点操作(vue)
    vue中实现拖拽调整顺序功能
    2021-01-22 浏览器相关知识
    2021-01-22 js 相关知识点
  • 原文地址:https://www.cnblogs.com/xiaoliangyuu/p/13234039.html
Copyright © 2011-2022 走看看