微服务架构全组件解析思路
微服务
核心架构:负载均衡(Nginx) +网关(Ocelot) +服务注册与发现(consul) +内部服务调用(Grpc) +重试 断路 超时 故障恢复等策略(polly) +鉴权授权中心(id4)
功能性组件:链路追踪(SkyWorking)+分布式日志系统(ELK)+分布式配置中心(Apollo)
运维组件:容器化部署(Docker)+容器化编排(k8s)+代码管理(Git)+代码自动发布(Jenkins CI/CD)+性能监控资源使用率(Grafana,Prometheus)
扩展组件:分布式锁(Redis),分布式缓存(Redis),分布式事务(RabbitMQ),分布式数据库(MonggoDB)
演变思路:
●单体程序业务扩展>分布式
发现问题:业务扩张,加服务器的内存和提高CPU,
解决思路:水平扩展,负载均衡请求到不同的服务器。垂直扩展:不用服务器干不同的事情-协作完全全部业务-这里其实就是变成分布式
好处:稳定了业务增长的需求,
缺点:越到后面加服务器越来越贵
● 单体程序扩展成多服务器运行之后>微服务
发现问题:扩展好多个服务器后上百人团队操作相同一套代码造成混乱,并且 高并发大数量量情况下加服务器太贵了,想进行代码重复用,功能拆分,独立部署。
解决思路:开始根据业务拆分单独的功能服务,如用户服务,支付服务,仓储服务等.
好处:代码复用,功能解耦,独立部署
缺点:各个服务节点的调用稳定性,请求延迟,分布式一致性,分布式锁等各种问题
● 拆分好微服务后
发现问题:
1.如造1个火箭系统,不懂业务怎么办 :引入DDD领域驱动设计
2.那么多微服务内部之间怎么调用:引入Grpc
4.每个服务不可能对外开放怎么办:引入网关Ocelot
5.请求超时,重试,故障怎么治理:引入polly 请求治理
6.服务之间调用怎么鉴权:引入Id4 鉴权授权中心
7.微服务请求链路变长怎么快速定位:引入 Skyopm全链路追踪
8.那么多微服务日志怎么办:引入ElK分布式日志系统
9.上百个微服务配置文件怎么解决引入:分布式配置中心 Apollo 阿波罗 -修改阿波罗,会配置更新推送,定时拉取配置
10.高并发下请求同一条数据怎么办:分布式锁Redis
11.服务太多怎么管理: 引入docker容器化部署
12.服务容器化太多怎么管理:引入k8s容器化编排(失效转移,滚动发布,灰度发布)
12.每个团队管理不同的微服务代码怎么管控和发布:引入Git代码管理+引入Jenkins自动发布部署 CI/CD
13.怎么查看各个微服务的性能和资源使用率:引入Grafana,Prometheus
核心架构:
负载均衡(Nginx)
原理:“Nginx默认采用多进程工作方式,Nginx启动后,会运行一个master进程和多个worker进程。其中master充当整个进程组与用户的交互接口,同时对进程进行监护,管理worker进程来实现重启服务、平滑升级、更换日志文件、配置文件实时生效等功能。worker用来处理基本的网络事件,worker之间是平等的,他们共同竞争来处理来自客户端的请求。”
网关(Ocelot)
原理:是.net core实现并且开源的API网关 主要的功能是:限流,请求合并,熔断,鉴权授权,本质上就是 Core提供1个applicationBuild让中间件注册到core的管道中去来专门对外提供的一个管道环节
服务注册与发现(Concel)
原理:内部服务之间不应走网关的,比如用户服务想要进行鉴权授权,不应该绕到网关接口去,而是直接请求鉴权中心 所以Cancel的作用就是服务注册与发现, 那么多为服务只要变动一下就很难治理,于是各个微服务启动的时候将自己的网络地址等信息注册到Cancel里面,Cancel就是存储这些信息,服务的消费者就可以从Cancel里面发现服务提供者的网络地址。Cancel会定时检测服务组件与Cancel之间是否还保持着通信,没有就注销。或者发生端口IP的改变都是需要Cancel的。
所以Cancel服务注册与发现必须准备3个功能,服务注册表(提供查询和管理的API),服务注册与发现(微服务组件自动需要注册到Cancel里面),服务检查(心跳机制)
内部服务调用(Grpc)
原理:谷歌开发的基于Http2传输的用于内部系统直接的调用,在单个长链接上同时进行多个业务单元传输,来达到多路复用效果有四种流
重试 断路 超时 故障恢复等策略(polly)
鉴权授权中心(id4)
功能性组件:
链路追踪(SkyWorking)
原理:通过探针自动收集所需的指标,并进行分布式追踪,通过调用链路以及指标,会自动感知应用之间的关系和服务间的关系,并进行相应的指标统计
分布式日志系统(ElK)
分布式配置中心(Appol)
运维组件:
容器化部署(Docker)
容器化编排(k8s)
代码管理(Git)+代码自动发布(Jenkins CI/CD)
性能监控资源使用率(Grafana,Prometheus)
扩展组件:
分布式锁(Redis),
分布式缓存(Redis),
分布式事务(RabbitMQ)
分布式数据库(MonggoDB)
本文来自博客园,作者:12不懂3,转载请注明原文链接:https://www.cnblogs.com/LZXX/p/16366683.html