zoukankan      html  css  js  c++  java
  • 微服务-浅谈

    单体架构的优势:
    
     便于开发:只需要借助IDE的开,调试功能即可完成
     易于测试:只需要通过单元测试或浏览器即完成测试 
     易于部署:打包成单一可执于jar/war包,执jar/war包即可部署
    
    
    单体架构的不足:
     
        复杂性高
            代码难以理解,各个模块逻辑复杂。
            难以理解导致代码质量低,复杂性进一步增加
                代码难以被修改和重构
            内存泄露可能导致整个应用的崩塌(微服务可避免)
            
           交付效率低:
            构建和部署耗时长,难以定位问题,开发效率低
            代码复杂和变更影响难以理解,需要数天完成全量测试
            全量部署耗时长,影响范围广,风险大,发布步频次低
            不能独立布署,用户体验差
            
        
        伸缩性(横向扩展)差:
            单体只能按整体横向扩展,无法分模块垂直扩展
            IO密集型模块和CPU密集模块无法独立升级和扩容
        
        可靠性差:
            一个bug有可能引整个应用的崩溃。
            难以定位问题
        阻碍技术创新:
            受技术栈限制,团队成员使用同一框架和语言,很难扩展
            升级和变更技术框架变得困难,牵一发动全身。
            尝试新语言变得困难(太重),新需求,重构导致开发成本高。
    
    微服务架构
        将单体应用拆分为多个高内聚低耦合的小型服务
    每个小服务运动在独立进程,由不同的团队开发和维护,
    服务间采用轻量级通信机制,独立自动部署,可以采不同的语言及存储。(不影响进度,各司其职)
    
    
    优势:
        易于开发和维护,
        微服务相对单体应用体量更小,易于理解。
        启动调试时间短,开发周期短。交付时间短。
    
        独立部署:
            不同的服务,并行迭代。(同时进行)不同于单体应用。从上至下,从1到2.
            一个微服务的修改不需要协调其它服务。相对于单体应用往往存在,改一处多处报错(整个系统故障)。互不影响
            单体应用往往会有改一处BUG引发多处BUG,高耦合,依赖性强。
            相比微服务单体调试周期长,部署时间长,连锁反应大。
            
        伸缩性强:
            每个服务都可以在横向和纵向上扩展(单体受垂直(纵向)影响)
            每个服务都可以按硬件资源的需求进行独立扩容或升级。延伸
        
        与组织结构相匹配:
            微服务架构可以更好将架构和组织相匹配(根椐不同的模块化分给不同的团队);
            每个团队独立负责哪些服务(模块),获得更高的效率(生产力)    
    
        技术异构性:
            使用最适合该服务的技术(跨语言实现),提供接口即可(服务者,消费者)
            降低尝试新技术的成本(尝试新语言更容易)不受架构的影响
            根椐不同的服务实现方式采用不同的技术栈
            容错性高
    
    
    微服务之间通信技术:
        1.rcp
        2.restful
       3.异步
    服务拆分:
        微服务拆分原则:领域模型,组织架构,康威定律,单一职责
        微服务拥有独立的数据库,技术栈。
        微服务之间确定服务边界, 高内聚,低耦合。
    
    微服务面临的问题
        
        数据一致性(多服务,多事务)
            可靠性事件模式    
            补偿模式-sagas模式
        
        服务通信
            通信方案:
                同步机制(http协议):RPC vs REST
                    跨语言,学习成本低,易上手
                异步机制(通常基于TCP):AMQP(异步消息)
                    不方便测试 ,调试。
        服务注册和发现:
            注册中心:
                Eureka,ZK.Consul 等等三方框架
        负载均衡
            nginx ,ribbon
    
        服务网关(服务通信)
            API Gateway(聚合作用,应避免业务代码)
                 身份认证,路由服务,安全过滤,流量控制,日志统计        
        高可观察
            健康检测,集中监控,聚合输出
            日志聚合及检索(脚手架)
            分布式追踪(定位问题,优化),服务故障
        可靠性
            流量控制,超时控制。保证下游服务正常
            舱避隔离,熔断机制(服务出错,调用次数过多)关闭服务调用功能
                    请求转移,
            服务降级,幂等重试
                服务降级策略,(网络问题),服务重试。
                接口幂等性。
                
        
  • 相关阅读:
    Android Service启动原理分析
    线程池原理分析
    仿EventBus做一个简单的基于订阅发布的事件总线
    EventBus原理以及源代码分析
    Android从点击Launcher图标开始到App打开流程分析
    使用LruCache和DiskLruCache手写一个ImageLoader
    OkHttp2连接池复用原理分析
    OkHttp执行流程源码分析
    Android使用动态代理模仿Retrofit的create方法,使其可以返回任意的接口类型
    Android模仿Retrofit的建造者模式
  • 原文地址:https://www.cnblogs.com/1-Admin/p/8672589.html
Copyright © 2011-2022 走看看