架构08- 理解架构的模式2-管理和监控

  1. 大使模式:构建一个辅助服务,代表消费者使用服务或应用程序发送网络请求。

    图片


    进程外的代理服务(之前介绍中间件的时候也提到了,很多框架层面的事情可以以软件框架的形式寄宿在进程内,也可以以独立的代理形式做一个网络中间件)。这里的大使模式意思就是这么一个网络代理进程,用于和远端的服务进行通讯,完成下面的工作:服务路由、、服务熔断、服务跟踪、服务监控、服务授权、数据加密、日志记录。由于是独立进程的网络服务,所以这个模式适合于我们有多语言多框架都需要干同样的事情,那么我们的框架中客户端部分的很多工作可以移出来放到大使服务中去。当然了,多一层网络调用多一层开销,大使服务的部署也要考虑到性能不一定可以集中部署,这些都是要考虑的问题。
     

  2. 反腐模式:是通过引入装饰或适配器层来实现现代应用程序与遗留系统之间的集成。

    图片

    可以使用一层反腐层来作为新老系统之间通信的中间人,以实现平滑过渡。这种过渡方案允许新系统完全采用新的通信方式和架构方式,同时老系统无需进行特别改造并可以保持运行,只需引入反腐层来进行通信协调。当老系统不再需要时,可以废弃这个反腐层。这种模式适用于新老系统迁移的过渡阶段,并不是永久性的架构设计模式。

  3. 外部配置存储:将应用程序中的配置信息从部署包中移动到一个中心化的地方进行存储。

    图片


    这个模式说的就是可以有一个外部的配置服务来保存配置信息,在之前文章介绍中间件的时候我详细说明过配置服务的功能。不管是处于管理运维的角度还是方便安全的角度,具有配置共享配置外存特点的独立配置服务对于大型的网站来说必不可少。实现的话有很多开源项目提供了配置服务。

  4. 网关聚合模式:使用网关将多个单独的请求聚合到一个请求中

    图片

    应用程序如果需要和多个服务交互的话,在中间构建起一个聚合网关层,网关并发发出多个请求给后面的服务,然后汇总数据给到应用程序。

    这种模式有几个好处:
    允许并发调用多个服务提高性能,
    允许只返回部分数据网关里可以做一些弹性设计方案(熔断、重试、限流)
    网关里可以做一些缓存方案对于外网通讯的时候,
    可以让网关作为一个网络中间层当然,使用这种模式需要考虑到网关的负载、高可用、高性能(异步IO)等等。
    其实这种模式不仅仅用于纯后端服务之间的通讯,很多面向前端的API请求都会做一个聚合层,这样前端可以只发一个请求的情况下任意向后端一次性索取多个API的返回,减少网络请求次数提高性能。

    实现上最简单的方式可以使用OpenResty或Nginx实现。
     

  5. 网关卸压模式:把共享或特定的服务功能放到网关代理

    图片

    名字有点难以理解,其实这种模式我们可能一直在用。就是用一个代理网关层做一些和业务无关的又麻烦的点,比如SSL,实现上用Nginx实现就很简单。我们经常会对外启用HTTPS服务,然后对内服务实际提供的是HTTP接口,通过网关做一下协议转换。

  6. 网关路由模式:使用单个端点将请求路由到多个服务

    图片


    这也是很常见的作法,我们对外的接口可能是/cart、/order、/search这样的API,在其背后其实是不同的服务,通过网关层进行转发,不仅仅可以做后端服务的负载均衡和故障转移,在后端服务变更切换对外API路径(比如版本升级)的时候我们也可以进行灵活的路由,确保了对外接口的一致性。可以使用Nginx来实现,相信大部分公司都是由Nginx这样的网关来对外的,不会把域名直接解析到底层服务上对外。
     

  7. 健康端点监控模式可以理解为应用程序内部的功能检查,通过暴露端点给外部工具访问,以定期监测应用程序的健康状况。
     

    图片

    1. 暴露服务依赖的外部存储或系统是否可用的信息。这样可以更全面地判断服务的健康状态,而不仅仅是检查服务本身或框架是否启动成功。由于网络通信的复杂性,仅凭服务是否可用并不能代表整个网站可以成功连接。因此,我们需要检测底层数据库等外部存储是否正常连接。同时,即使对于某个节点可以正常连通,但对于其他节点可能由于网络问题、权限问题或负载问题而无法连接。因此,在可能的情况下,还应该暴露服务内部各种线程池、连接池和队列的信息,如对象数量、队列长度等。这些关键指标的外露对于排查性能问题非常有帮助。

    2. 服务健康信息的暴露。服务应该提供健康信息,以便在外部进行监控和统计。此外,负载均衡器或发布系统也需要一种方式来判断服务是否可用,以便在不可用时进行重启或故障转移。需要注意的是,对外的服务的health端口应进行授权,以防敏感信息被匿名用户访问到。

    3. 实现上的考虑。推荐将health端口作为插件形式集成到系统中,并进行相应的配置即可启用。这样做的好处是避免每个系统都开发一套健康检测机制。如果使用Spring Boot框架,可以直接使用Actuator模块来实现健康检查功能。
     

  8. 绞杀者模式:通过使用新的应用程序和服务逐渐替换特定功能部件来逐步迁移旧系统

    图片


    这个模式是一种逐步替换旧服务的方法,通过建立一个门面作为新老服务的路由来实现。

    在迁移过程中,逐步将旧服务替换为新服务,并在最后所有服务都迁移完成后删除该门面。

    这样可以确保消费者不会感知到迁移的过程,减少对外围系统的影响。

    在之前的文章中我们提到的引擎替换方式也是通过保留原有门面来进行底层引擎的替换。

    对于减少外围影响这种模式确实是一个常见且合理的解决方案,但实际迁移过程中还需要重点考虑数据迁移和底层服务的实现等方面的挑战。

    关注公众号:领取架构师面试资料

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/630285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI绘图制作红包封面教程

注意:有不懂的话可加入QQ群聊一起交流:901944946欢迎大家关注微信公众号【程序猿代码之路】,每天都会不定时的发送一些红包封面!! 2024的春节即将到来,而在这春节到来之前,就有一个非常爆火的小…

黑马程序员 Java设计模式学习笔记(一)

目录 一、设计模式概述 1.1、23种设计模式有哪些? 1.2、软件设计模式的概念 1.3、学习设计模式的必要性 1.4、设计模式分类 二、UML图 2.1、类图概述 2.2、类图的作用 2.3、类图表示法 类的表示方式 类与类之间关系的表示方式 关联关系 聚合关系 组合…

陀螺仪LSM6DSV16X与AI集成(6)----检测自由落体

陀螺仪LSM6DSV16X与AI集成.6--检测自由落体 概述视频教学样品申请源码下载生成STM32CUBEMX串口配置IIC配置CS和SA0设置串口重定向参考程序初始换管脚获取ID复位操作BDU设置 概述 本文介绍如何初始化传感器并配置其参数,以便在检测到自由落体事件时发送通知。 最近…

显示报错: nmap.nmap.PortScannerError: ‘nmap program was not found in path‘

解决方案: 《关于想在Pycharm下使用nmap然后报错nmap.nmap.PortScannerError: ‘nmap program was not found in path.然后解决的那些事》 文章中进行了详尽的描述,总结一下就是下载一个nmap.exe,然后在nmap.py中引入nmap.exe所在的路径&…

RabbitMQ常见问题之消息堆积

文章目录 一、介绍二、使用惰性队列1. 基于Bean2. 基于RabbitListener 一、介绍 当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最 早接收到的消息,可能就会成为死信,会被丢弃,这就…

Pod控制器:

Pod控制器: Pv pvc 动态PV Pod控制器:工作负载。WordLoad,用于管理pod的中间层 ,确保pod资源符合预期的状态 预期状态: 副本数容器的重启策略镜像的拉取策略 Pod出现故障时的重启等等 Pod控制器的类型&#xff1a…

【大数据】Flink 详解(八):SQL 篇 Ⅰ

《Flink 详解》系列(已完结),共包含以下 10 10 10 篇文章: 【大数据】Flink 详解(一):基础篇【大数据】Flink 详解(二):核心篇 Ⅰ【大数据】Flink 详解&…

小程序系列--7.页面导航

一、页面导航 1、 什么是页面导航&#xff1f; 页面导航指的是页面之间的相互跳转。例如&#xff0c;浏览器中实现页面导航的方式有如下两种&#xff1a; <a> 链接 location.href 2. 小程序中实现页面导航的两种方式 二、声明式导航 1. 导航到 tabBar 页面 2. 导航…

Cellinx NVT 摄像机 UAC.cgi 任意用户创建漏洞复现

0x01 产品简介 Cellinx NVT IP PTZ是韩国Cellinx公司的一个摄像机设备。 0x02 漏洞概述 Cellinx NVT 摄像机 UAC.cgi接口处存在任意用户创建漏洞,未经身份认证的攻击者可利用此接口创建管理员账户,登录后台可查看敏感信息,使系统处于极不安全的状态。 0x03 复现环境 FO…

乐意购项目前端开发 #4

一、Home页面组件结构 结构拆分 创建组件 在 views/Home 目录下创建component 目录, 然后在该目录下创建5个组件: 左侧分类(HomeCategory.vue)、Banner(HomeBanner.vue)、精选商品(HomeHot.vue)、低价商品(Homecheap.vue)、最新上架(HomeNew.vue) 引用组件 修改 views/Home…

2. 示例:Spring Boot 入门

1.1 概述 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。习惯优于配置 1.2 为什么使用Spring Boot J2EE笨重的开发、繁多的配置、低下的开发效率、复杂的部署流程、第三方技术集成难度大。 1.3 Spring Bo…

设计模式——组合模式

生活中存在很多 “部分-整体” 的关系&#xff0c;例如&#xff1a;大学中的学校与学院、学院与专业的关系。高楼与楼层和房间之间的关系等等。在软件开发中也有类似的情况。这些简单对象与复合对象之间的关系&#xff0c;如果用组合模式&#xff08;把学校、院、系都看作是组织…

链表练习 Leetcode82.删除排序链表中的重复元素 II

题目传送门&#xff1a;Leetcode82 给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5]示例 2&#xff1…

【Linux】Linux 系统编程——cd 命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 “cd 命令&#xff0c;即 ‘change directory’ 的缩写&#xff0c;主要用于 Unix、Linux 和 macOS 等操作系统中&#xff0c;用于改变当前工作目录。该命令支持绝对路径和相对路径两种形式。若未指定…

SpringBoot多环境配置与添加logback日志

1、多环境配置 一个项目会有多个运行环境 所以SpringBoot提供了可以适应多个环境的配置文件 每个文件对应一个端口号 application-dev.yml 开发环境 端口8090 application-test.yml 测试环境 端口8091 application-prod.yml 生产环境 端口8092 在application中选择使用哪个…

线性回归实例

1、线性回归&#xff08;linear Regression&#xff09;和逻辑回归&#xff08;logistic Regression&#xff09;的区别 线性回归主要是用来拟合数据&#xff0c;逻辑回归主要是用来区分数据&#xff0c;找到决策边界。 线性回归的代价函数常用平方误差函数&#xff0c;逻辑回…

AI在保护环境、应对气候变化中的作用

对于AI生命周期数据领域的全球领导者而言&#xff0c;暂时搁置我们惯常的AI见解和AI生命周期数据内容产出&#xff0c;来认识诸如世界地球日这样的自然环境类活动日&#xff0c;似乎是个奇怪的事情。我们想要知道&#xff0c;数据是否真的会影响我们的地球环境&#xff1f; 简而…

5.5G来了!全球首次采用,就在福建

近日&#xff0c;在以滨海风景优美而闻名的福建厦门马拉松赛道沿线区域&#xff0c;福建移动携手华为采用5G-A通感一体技术率先完成了低空多站连续组网的通感能力验证&#xff0c;基于4.9GHz频段实现了对城市低空120米下多无人驾驶飞行器的探测与及时预警。这一成果为城市低空资…

【windows】右键添加git bash here菜单

在vs 里安装了git for windows 后&#xff0c;之前git-bash 右键菜单消失了。难道是git for windows 覆盖了原来自己安装的git &#xff1f;大神给出解决方案 手动添加Git Bash Here到右键菜单&#xff08;超详细&#xff09; 安装路径&#xff1a;我老的 &#xff1f; vs的gi…

Kafka系列(四)

本文接kafka三&#xff0c;代码实践kafkaStream的应用&#xff0c;用来完成流式计算。 kafkastream 关于流式计算也就是实时处理&#xff0c;无时间概念边界的处理一些数据。想要更有性价比地和java程序进行结合&#xff0c;因此了解了kafka。但是本人阅读了kafka地官网&#…