相比于单机服务与其他架构,微服务架构的主要特征是组件化、松耦合、独立、去中心化。主要表现在如下几个方面:
细粒度的服务分解;将项目中每个模块/每个职责拆分出来,专注做好一件事情。
独立部署运行和扩展;每个微服务又是一个单独的项目,独立运行在自己的进程里。它可以不依赖于其他服务进行单独使用和灵活扩展。这种运行和部署方式能够赋予系统灵活的代码组织和发布节奏,使得快速交互和应对变化成为可能。
服务间轻量通讯;各个服务之间相互独立又通过协议进行通讯,协作完成更复杂的业务。
去中心化,独立开发与自治;技术选型灵活,服务之间可以用不同的技术甚至不同的语言。
三、微服务为我们解决了哪些问题
相对于传统单机服务,微服务不仅解决了之前存在的问题,还拥有一些单机服务所不具备的优点:
便于开发,降低复杂度;各个团队中分别维护各自服务,不会出现等待的无用功的间隙
并且更新迭代的时候,不必再学习整个项目的业务代码,仅关注所在的服务模块即可
业务解耦;各个服务间通过协议互相通讯,代码没有强耦合性,互不干扰
独立部署;每个模块都可以单独部署,所以在上线新功能的时候只需发布相应的模块即可,既降低测试的工作量也降低了服务发布的风险(单服务情况下,新增需求可能就得把整个的流程测试再回归一下,并且上线失败的话整个项目都要回滚,而微服务则只需要回滚相应的模块即可)
稳定性强;单个服务出现问题,其他服务仍可继续工作,这在技术潮流中是非常重要的一个进步,结合集群部署,我们完美的实现不停机更新
例如订单服务故障,用户仍然通过商品服务可以浏览商品信息,查看评价等
扩展性强;可以根据不同服务的流量和压力,进行自主扩展
即商品服务流量高,而订单服务流量低,则可以部署两个商品服务,一个订单服务,更加灵活
四、当前微服务面临的挑战
在当前的场景中,微服务也不是万能的一种方案。至少在现阶段,它还存在着如下几个问题:
运维成本增加;需要部署N个项目,对于单机服务来讲,只需要维护一个项目就行了。但是对于微服务来讲,由于项目是多个微服务构成的,每个模块都需要进行维护
问题追踪难度增加;需要分析整个请求的调用链,逐步查看各个服务的状况,依此来定位和解决问题
内容重复;对部分业务,流程大致相同时,如果不能很方便的将代码封装,就可能导致在多个服务中有些重复性的代码
除此外还有日志重复,一个调用链可能要调用N个服务,在追踪问题时,每个服务都要对参数和响应进行记录。这样就导致同样一份内容在多个地方重复出现
增加开支成本 , 标准的的微服务部署方案,应该是每一个服务部署到一个服务器上,各个服务器之间互不干扰,但这样的话无疑就需要更高的服务器成本
当前的主流方案是利用docker采用单服务器多镜像隔离,但docker镜像并没有传统虚拟机的高度资源隔离水平,它仍然需要很多共享的东西。这就导致了如果其中一个docker内核崩溃或占用共享资源,其他容器也会受到影响
四、当前微服务面临的挑战
在当前的场景中,微服务也不是万能的一种方案。至少在现阶段,它还存在着如下几个问题:
运维成本增加;需要部署N个项目,对于单机服务来讲,只需要维护一个项目就行了。但是对于微服务来讲,由于项目是多个微服务构成的,每个模块都需要进行维护
问题追踪难度增加;需要分析整个请求的调用链,逐步查看各个服务的状况,依此来定位和解决问题
内容重复;对部分业务,流程大致相同时,如果不能很方便的将代码封装,就可能导致在多个服务中有些重复性的代码
除此外还有日志重复,一个调用链可能要调用N个服务,在追踪问题时,每个服务都要对参数和响应进行记录。这样就导致同样一份内容在多个地方重复出现
增加开支成本 , 标准的的微服务部署方案,应该是每一个服务部署到一个服务器上,各个服务器之间互不干扰,但这样的话无疑就需要更高的服务器成本
当前的主流方案是利用docker采用单服务器多镜像隔离,但docker镜像并没有传统虚拟机的高度资源隔离水平,它仍然需要很多共享的东西。这就导致了如果其中一个docker内核崩溃或占用共享资源,其他容器也会受到影响
1 AKF拆分原则
X轴 水平扩展 增加机器 负载均衡
Y轴 功能、业务 拆分
Z轴 数据分区 如按地域划分
2 前后端分离原则 分工精细
前端服务
后端服务
3 无状态服务
不操作数据的部分 称为无状态的服务 前端
操作数据的部分 称为有状态的服务 后端
优点:容易扩展
4 restful 通信风格
无状态的通讯协议 http