微服务设计原则

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

1 AKF拆分原则

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

Y轴  功能、业务 拆分

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

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

前端服务

后端服务

3 无状态服务

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

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

优点:容易扩展

4 restful  通信风格

无状态的通讯协议  http

原文地址:https://www.cnblogs.com/jentary/p/11228852.html