zoukankan      html  css  js  c++  java
  • 微服务设计原则

    相比于单机服务与其他架构,微服务架构的主要特征是组件化、松耦合、独立、去中心化。主要表现在如下几个方面:

        细粒度的服务分解;将项目中每个模块/每个职责拆分出来,专注做好一件事情。
        独立部署运行和扩展;每个微服务又是一个单独的项目,独立运行在自己的进程里。它可以不依赖于其他服务进行单独使用和灵活扩展。这种运行和部署方式能够赋予系统灵活的代码组织和发布节奏,使得快速交互和应对变化成为可能。
        服务间轻量通讯;各个服务之间相互独立又通过协议进行通讯,协作完成更复杂的业务。
        去中心化,独立开发与自治;技术选型灵活,服务之间可以用不同的技术甚至不同的语言。



    三、微服务为我们解决了哪些问题

    相对于传统单机服务,微服务不仅解决了之前存在的问题,还拥有一些单机服务所不具备的优点:

        便于开发,降低复杂度;各个团队中分别维护各自服务,不会出现等待的无用功的间隙

    并且更新迭代的时候,不必再学习整个项目的业务代码,仅关注所在的服务模块即可

        业务解耦;各个服务间通过协议互相通讯,代码没有强耦合性,互不干扰
        独立部署;每个模块都可以单独部署,所以在上线新功能的时候只需发布相应的模块即可,既降低测试的工作量也降低了服务发布的风险(单服务情况下,新增需求可能就得把整个的流程测试再回归一下,并且上线失败的话整个项目都要回滚,而微服务则只需要回滚相应的模块即可)
        稳定性强;单个服务出现问题,其他服务仍可继续工作,这在技术潮流中是非常重要的一个进步,结合集群部署,我们完美的实现不停机更新

    例如订单服务故障,用户仍然通过商品服务可以浏览商品信息,查看评价等

        扩展性强;可以根据不同服务的流量和压力,进行自主扩展

    即商品服务流量高,而订单服务流量低,则可以部署两个商品服务,一个订单服务,更加灵活
    四、当前微服务面临的挑战

    在当前的场景中,微服务也不是万能的一种方案。至少在现阶段,它还存在着如下几个问题:

        运维成本增加;需要部署N个项目,对于单机服务来讲,只需要维护一个项目就行了。但是对于微服务来讲,由于项目是多个微服务构成的,每个模块都需要进行维护
        问题追踪难度增加;需要分析整个请求的调用链,逐步查看各个服务的状况,依此来定位和解决问题
        内容重复;对部分业务,流程大致相同时,如果不能很方便的将代码封装,就可能导致在多个服务中有些重复性的代码

    除此外还有日志重复,一个调用链可能要调用N个服务,在追踪问题时,每个服务都要对参数和响应进行记录。这样就导致同样一份内容在多个地方重复出现

        增加开支成本 , 标准的的微服务部署方案,应该是每一个服务部署到一个服务器上,各个服务器之间互不干扰,但这样的话无疑就需要更高的服务器成本

    当前的主流方案是利用docker采用单服务器多镜像隔离,但docker镜像并没有传统虚拟机的高度资源隔离水平,它仍然需要很多共享的东西。这就导致了如果其中一个docker内核崩溃或占用共享资源,其他容器也会受到影响

    四、当前微服务面临的挑战

    在当前的场景中,微服务也不是万能的一种方案。至少在现阶段,它还存在着如下几个问题:

        运维成本增加;需要部署N个项目,对于单机服务来讲,只需要维护一个项目就行了。但是对于微服务来讲,由于项目是多个微服务构成的,每个模块都需要进行维护
        问题追踪难度增加;需要分析整个请求的调用链,逐步查看各个服务的状况,依此来定位和解决问题
        内容重复;对部分业务,流程大致相同时,如果不能很方便的将代码封装,就可能导致在多个服务中有些重复性的代码

    除此外还有日志重复,一个调用链可能要调用N个服务,在追踪问题时,每个服务都要对参数和响应进行记录。这样就导致同样一份内容在多个地方重复出现

        增加开支成本 , 标准的的微服务部署方案,应该是每一个服务部署到一个服务器上,各个服务器之间互不干扰,但这样的话无疑就需要更高的服务器成本

    当前的主流方案是利用docker采用单服务器多镜像隔离,但docker镜像并没有传统虚拟机的高度资源隔离水平,它仍然需要很多共享的东西。这就导致了如果其中一个docker内核崩溃或占用共享资源,其他容器也会受到影响

    1 AKF拆分原则

    X轴  水平扩展    增加机器  负载均衡

    Y轴  功能、业务 拆分

    Z轴  数据分区   如按地域划分

    2 前后端分离原则  分工精细

    前端服务

    后端服务

    3 无状态服务

    不操作数据的部分    称为无状态的服务   前端

    操作数据的部分 称为有状态的服务    后端

    优点:容易扩展

    4 restful  通信风格

    无状态的通讯协议  http

  • 相关阅读:
    再谈iframe自适应高度
    一个软件外包老鸟对外包业的反思
    需求分析中减少客户摩擦的若干法则
    C# 进制转换
    'filter' is not a known css property name
    Ajax之ModalPopupExtender 的后台调用
    Microsoft SQL Server 中的小数数据类型
    ExtJS Combobox 如何设置默认和取值问题
    wp7 控制控件显隐
    wp7 MediaElement播放
  • 原文地址:https://www.cnblogs.com/jentary/p/11228852.html
Copyright © 2011-2022 走看看