近期在网上学了一些微服务的培训课程,写个笔记对自己理解的微服务知识进行记录,以期待不断进步。
概念
微服务片设计及理论,是分布式架构的一种。
不侧重代码,主要根据各种框架和中间件来实现,主要是根据内部业务进行设计的思想。
难点在于服务的拆分。和传统的单体应用不同,微服务需要根据对内部业务的理解进行设计。
服务化是把单机中本地方法调用改成RPC/API远程方法调用。
服务拆分主要分为横向拆分和纵向拆分。
横向拆分:公共且独立,例如权限认证模块、邮件发送、短信发送服务等
纵向拆分:业务维度,1)根据关联程度进行分拆2)根据领域建模DDD进行拆分
拆分的服务数还需要根据开发人数来定,一般项目建议拆分3-5个服务。
微服务中间关键节点
1 服务模块
微服务架构通过将单体结构拆分成多个小的服务,以此实现架构的解耦。给个微服务模块都有自己的服务模块和数据库,通过将服务地址注册到注册中心,实现等待调用。
2 注册中心
汇总各个子服务模块的服务地址,已实现服务汇总,等待网关的调用。
3 网关
连接PC、APP、Web客户端和服务,接收客户端请求后,从注册中心找到服务地址(服务发现),再进行服务调用。
微服务中间流程
服务模块将地址注册到注册中心,各客户端访问网关,网关从注册中心中找到匹配的服务名称地址,以实现服务的调用。
服务注册:服务启动后,自动注册到注册中心
服务发现:消费者启动后,自动订阅。从注册中心根据负载均衡等策略选一个服务地址进行调用
负载均衡:调用服务前,先查询节点上的服务列表
微服务定位问题、同时调用多个微服务后,之间的调用链及监控服务指标问题等
服务雪崩:重试轮询 熔断降级
架构层面的负载均衡策略
应用在微服务内部,其他负载均衡还有网关负载均衡、DNS地域负载均衡等
1) 随机:较大的访问请求时,随机可以应付
2) 轮询:所有的服务都可以被访问
3) 加权轮询:根据服务器性能加权
4) 动态轮询:服务监控下,根据服务器压力动态设置权重
5) 最少活动连接:服务监控下,链接数最少的
6) 一致性HASH:对于同一个来源,服务链选择同一主机的服务
7) 自使用负载均衡:最快算法(跨网络)、观察算法(最小和最快)、预判算法(趋势记录)
consul
分布式服务发现及配置中间件
排除不健康的服务