什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务( 二 )


四、服务划分【什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务】横向拆分:按照不同的业务域进行拆分,例如订单、营销、风控、积分资源等 。形成独立的业务领域微服务集群 。
纵向拆分:把一个业务功能里的不同模块或者组件进行拆分 。例如把公共组件拆分成独立的原子服务,下沉到底层,形成相对独立的原子服务层 。这样一纵一横,就可以实现业务的服务化拆分 。
要做好微服务的分层:梳理和抽取核心应用、公共应用,作为独立的服务下沉到核心和公共能力层,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求
总之,微服务的设计一定要渐进式的,总的原则是服务内部高内聚,服务之间低耦合 。

微服务特点:
按照业务划分服务,单个服务代码量小,业务单一,易于维护 每个微服务都有自己独立的基础组件,例如数据库、缓存等且运行在独立的进程中 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除 单个微服务能够集群化部署,并且有负责 均衡的能力 整个微服务系统应该有完整的安全机制,包括用户验证,权限验证,资源保护 整个微服务系统有链路追踪的能力 有一套完整的实时日志系统
1. 给数据库带来的挑战
随着服务拆分后,我们遇到最大的问题就是后台管理的联合查询,每个微服务都有自己独立的数据库,那么后台该怎么处理?
这里一般有如下几种方式:
  1. 严格按照微服务的划分来做,微服务相互独立,各微服务数据库也独立,后台需要展示数据时,调用各微服务的接口来获取对应的数据,再进行数据处理后展示出来,这是标准的用法,也是最麻烦的用法 。
  2. 将业务高度相关的表放到一个库中,将业务关系不是很紧密的表严格按照微服务模式来拆分,这样既可以使用微服务,也避免了数据库分散导致后台系统统计功能难以实现,是一个折中的方案 。
  3. 数据库严格按照微服务的要求来切分,以满足业务高并发,实时或者准实时将各微服务数据库数据同步到NoSQL数据库中,在同步的过程中进行数据清洗,用来满足后台业务系统的使用,推荐使用MongoDB、HBase等 。
三种方案在不同的公司我都使用过,第一种方案适合业务较为简单的小公司;第二种方案,适合在原有系统之上,慢慢演化为微服务架构的公司;第三种适合大型高并发的互联网公司 。
五、熔断器为了解决分布式系统的雪崩效应,分布式系统引进了熔断器机制 。
当一个服务的处理用户请求的失败次数在一定时间内小于设定的阀值时,熔断器出于关闭状态,服务正常 。
当服务处理用户请求失败次数在一定时间内大于设定的阀值时,说明服务出现故障,打开熔断器,这是所有的请求会快速失败,不执行业务逻辑
当处于打开状态的熔断器时,一段时间后出于半打开状态,并执行一定数量的请求,剩余的请求会执行快速失败,若执行请求失败了,则继续打开熔断器,若成功了,则将熔断器关闭

什么是分布式微服务架构?三分钟彻底弄懂什么是分布式和微服务

文章插图
 
熔断器不仅能防止系统的“雪崩”效应,还具有以下作用
  • 将资源进行隔离
  • 服务降级的功能
  • 自我修复能力
六、服务网关在微服务系统中,API 接口资源通常是有服务网关(也称API网关)统一暴露,内部服务不直接对外提供API资源的暴露 。好处在于隐藏内部服务,保护系统安全
网关层通常以集群的形式存在 。并在服务网关层前通常会加上Nginx 用来负载均衡
网关意义:
  • 网关将所有服务的API接口资源统一聚合,对外统一暴露
  • 网关可以做一些用户身份认证,权限认证,防止非法请求操作API 接口,对内部服务起到保护作用
  • 网关可以实现监控功能,实时日志输出、对请求进行记录
  • 网关可以用来做流量监控,在高流量的情况下,对服务进行降级
  • API 接口从内部服务分离出来,方便做测试
当然,网关实现这些功能,需要做高可用,否则网关很可能成功架构的瓶颈,最常用的网关组件Zuul、Nginx
七、服务配置统一管理在微服务架构中,需要有统一管理配置文件的组件,例如:SpringCloud Config组件、阿里的Diamond、百度的Disconf、携程的Apollo等


推荐阅读