程序员的资源宝库

网站首页 > gitee 正文

微服务架构全组件解析思路 微服务架构深度解析

sanyeah 2024-03-29 17:44:43 gitee 8 ℃ 0 评论

微服务

核心架构:负载均衡(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)

 

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表