【技术架构】技术架构的演进

news2024/11/15 7:06:04

文章目录

  • 前言
  • 1.名词解释(常见概念)
    • 1.1 应用(Application) / 系统(System)
    • 1.2 模块(Module) / 组件(Component)
    • 1.3 分布式(Distributed)
    • 1.4 集群(Cluster)
    • 1.5 主(Master) / 从(Slave)
    • 1.6 中间件(Middleware)
    • 1.7 容器(Docker)
    • 1.8 容器编排(K8S):
  • 2.评价指标
    • 2.1 可用性(Availability)
    • 2.2 响应时长(Response Time RT)
  • 3.单机架构
  • 4.应用数据分离架构
  • 5.应用服务集群架构
  • 6.读写分离 / 主从分离架构
  • 7.引入缓存 —— 冷热分离架构
  • 8.垂直分库
  • 9.业务拆分 —— 微服务
  • 10.容器化引入——容器编排架构
  • 11.总结

前言

1.名词解释(常见概念)

1.1 应用(Application) / 系统(System)

为了完成一整套服务的一个程序或者一组相互配合的程序群。

生活例子类比:为了完成一项任务,而搭建的由一个人或者一群相互配的人组成的团队。

1.2 模块(Module) / 组件(Component)

当应用较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解。

生活例子类比:军队中为了进行某据点的攻克,将人员分为突击小组、爆破小组、掩护小组、通信小组等。

1.3 分布式(Distributed)

系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。

生活例子类比:为了更好的满足现实需要,一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成。

1.4 集群(Cluster)

被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件,整个整体被称为集群。比如多个 MySQL 工作在不同服务器上,共同提供数据库服务目标,可以被称为一组数据库集群。

生活例子类比:为了解决军队攻克防守坚固的大城市的作战目标,指挥部将大批炮兵部队集中起来形成一个炮兵打击集群。分布式 vs 集群。通常不用太严格区分两者的细微概念,细究的话,分布式强调的是物理形态,即工作在不同服务器上并且通过网络通信配合完成任务;而集群更在意逻辑形态,即是否为了完成特定服务目标。

1.5 主(Master) / 从(Slave)

集群中,通常有一个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从。

比如 MySQL 集群中,只有其中一台服务器上数据库允许进行数据的写入(增/删/改),其他数据库的数据修改全部要从这台数据库同步而来,则把那台数据库称为主库,其他数据库称为从库。

1.6 中间件(Middleware)

一类提供不同应用程序用于相互通信的软件,即处于不同技术、工具和数据库之间的桥梁。

生活例子类比:一家饭店开始时,会每天去市场挑选买菜,但随着饭店业务量变大,成立一个采购部,由采购部专职于采买业务,称为厨房和菜市场之间的桥梁。

1.7 容器(Docker)

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。

可以理解为一个集装箱,集装箱里面是每个用户的货物,整体打包。

1.8 容器编排(K8S):

kubernetes,简称 K8s,是用 8 代替名字中间的 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效。

可以理解为一个货船,安装集装箱的大小,货物情况合理的来组织集装箱完成整体货物的搬运。

2.评价指标

2.1 可用性(Availability)

考察单位时间段内,系统可以正常提供服务的概率/期望。例如: 年化系统可用性= 系统正常提供服务时长 / 一年总时长。

这里暗含着一个指标,即如何评价系统提供无法是否正常,我们就不深入了。平时我们常说的 4 个 9 即系统可以提供 99.99% 的可用性, 5 个 9 是 99.999% 的可用性, 以此类推。我们平时只是用高可用(HighAvailability HA)这个非量化目标简要表达我们系统的追求。

2.2 响应时长(Response Time RT)

指用户完成输入到系统给出用户反应的时长。例如点外卖业务的响应时长 = 拿到外卖的时刻 - 完成点单的时刻。通常我们需要衡量的是最长响应时长、平均响应时长和中位数响应时长。这个指标原则上是越小越好,但很多情况下由于实现的限制,需要根据实际情况具体判断吞吐(Throughput) vs 并发(Concurrent):吞吐考察单位时间段内,系统可以成功处理的请求的数量。并发指系统同一时刻支持的请求最高量。

例如一条 2 车道高速公路,一分钟可以通过 20 辆车,则并发是 2,一分钟的吞吐量是 20。实践中,并发量往往无法直接获取,很多时候都是用极短的时间段(比如 1 秒)的吞吐量做代替。我们平时用高并发(Hight Concurrnet)这个非量化目标简要表达系统的追求。

3.单机架构

初期,我们需要利用我们精干的技术团队,快速将业务系统投入市场进行检验,并且可以迅速响应变化要求。但好在前期用户访问量很少,没有对我们的性能、安全等提出很高的要求,而且系统架构简单,无需专业的运维团队,所以选择单机架构是合适的。
在这里插入图片描述

  • 相关软件

    • Web 服务器软件: Tomcat、 Netty、 Nginx、 Apache 等
    • 数据库软件: MySQL、 Oracle、 PostgreSQL、 SQL Server 等
  • 优点:

    • 简单性:单机架构是最简单的应用程序架构,因为它不涉及任何网络通信和分布式问题。
    • 可靠性:单机架构应用程序在出现故障时,只会影响一个独立的实例,不会影响其他实例。
    • 可扩展性:单机架构应用程序通常具有很好的可扩展性,因为只需要增加更多的硬件资源就可以提高性能和容量。
    • 安全性:单机架构应用程序通常比分布式架构更安全,因为它们不会出现分布式拒绝服务(DDoS)攻击的问题。
  • 缺点:

    • 灵活性:单机架构应用程序通常比分布式架构更难以扩展和修改,因为它们需要修改代码并在所有实例上更新。
    • 负载均衡:单机架构应用程序通常难以实现负载均衡,因为它们没有分布式架构中的分布式负载均衡机制。
    • 故障恢复:单机架构应用程序在出现故障时,只会影响一个实例,但是它们无法实现分布式架构中的容错和故障恢复。
    • 性能:单机架构应用程序的性能通常受到硬件资源的限制,因为它们只能利用一个服务器或计算机的资源。

4.应用数据分离架构

随着系统的上线,我们不出意外地获得了成功。市场上出现了一批忠实于我们的用户,使得系统的访问量逐步上升,逐渐逼近了硬件资源的极限,同时团队也在此期间积累了对业务流程的一批经验。面对当前的性能压力,我们需要未雨绸缪去进行系统重构、架构挑战,以提升系统的承载能力。但由于预算仍然很紧张,我们选择了将应用和数据分离的做法,可以最小代价的提升系统的承载能力。

和之前架构的主要区别在于将数据库服务独立部署在同一个数据中心的其他服务器上,应用服务通过网络访问数据。

  • 优点:

    • 灵活性:应用数据分离架构可以轻松地扩展应用程序和数据存储的容量和性能,提高系统的可用性。
    • 可靠性:应用数据分离架构可以通过负载均衡和容错机制来保证系统的可靠性。
    • 可扩展性:应用数据分离架构可以通过增加服务器节点来提高系统的处理能力和存储容量,提高系统的可扩展性。
    • 安全性:应用数据分离架构可以提供更好的安全性,因为应用程序和数据存储是分开部署的,减少了数据泄露的风险。
  • 缺点:

    • 复杂性:应用数据分离架构引入了更多的组件和网络拓扑结构,增加了系统的复杂性,需要更多的管理和维护工作。
    • 成本:应用数据分离架构需要更多的硬件资源,包括服务器、存储设备、网络设备等,增加了系统的成本。
    • 同步问题:应用数据分离架构需要考虑数据同步的问题,以保证数据的一致性和完整性。
    • 架构选择:应用数据分离架构需要根据具体的应用场景和需求进行选择,需要考虑应用程序和数据存储之间的依赖关系和交互方式。

5.应用服务集群架构

我们的系统受到了用户的欢迎,并且出现了爆款,单台应用服务器已经无法满足需求了。我们的单机应用服务器首先遇到了瓶颈,摆在我们技术团队面前的有两种方案,大家针对方案的优劣展示了热烈的讨论:

  • 垂直扩展 / 纵向扩展 Scale Up。通过购买性能更优、价格更高的应用服务器来应对更多的流量。这种方案的优势在于完全不需要对系统软件做任何的调整;但劣势也很明显:硬件性能和价格的增长关系是非线性的,意味着选择性能 2 倍的硬件可能需要花费超过 4 倍的价格,其次硬件性能提升是有明显上限的。
  • 水平扩展 / 横向扩展 Scale Out。通过调整软件架构,增加应用层硬件,将用户流量分担到不同的应用层服务器上,来提升系统的承载能力。这种方案的优势在于成本相对较低,并且提升的上限空间也很大。但劣势是带给系统更多的复杂性,需要技术团队有更丰富的经验。经过团队的学习、调研和讨论,最终选择了水平扩展的方案,来解决该问题,但这需要引入一个新的组件 —— 负载均衡:为了解决用户流量向哪台应用服务器分发的问题,需要一个专门的系统组件做流量分发。实际中负载均衡不仅仅指的是工作在应用层的,甚至可能是其他的网络层之中。同时流量调度算法也有很多种,这里简单介绍几种较为常见的:
    • Round-Robin 轮询算法。即非常公平地将请求依次分给不同的应用服务器。
    • Weight-Round-Robin 轮询算法。为不同的服务器(比如性能不同)赋予不同的权重(weight),能者多劳。
    • 一致哈希散列算法。通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客户经理服务。

在这里插入图片描述

  • 相关软件

    • 负载均衡软件: Nginx、 HAProxy、 LVS、 F5 等
  • 优点:

    • 高可用性:应用服务集群可以确保在某个应用服务器出现故障时,其他服务器可以自动接替其工作,保证系统的持续可用性。
    • 负载均衡:应用服务集群可以通过负载均衡器将请求分配到多个应用服务器上,以平衡负载并提高系统的处理能力。
    • 容错能力:应用服务集群可以检测到故障的应用服务器,并自动将其从集群中剔除,以保证系统的可靠性和稳定性。
    • 性能:应用服务集群可以利用多台服务器的计算和存储资源,以提供更高的处理能力和更大的处理容量。
  • 缺点:

    • 初期投资成本高:应用服务集群架构需要投资购买更多的服务器和设备,相对于单台服务器而言,初始投资成本较高。
    • 管理和维护成本高:应用服务集群需要更多的管理和维护工作,包括配置、调试和监控等,相对于单台服务器而言,管理和维护成本较高。
    • 故障排除难度大:应用服务集群中的故障可能会导致整个系统的瘫痪,因此故障排除难度较大,需要更多的技术支持和故障排除工作。
    • 管理和维护难度大:应用服务集群需要更多的技术和经验支持,管理和维护难度较大,需要专业的技术人员进行操作和管理。

6.读写分离 / 主从分离架构

应用服务集群架构提到,我们把用户的请求通过负载均衡分发到不同的应用服务器之后,可以并行处理了,并且可以随着业务的增长,可以动态扩张服务器的数量来缓解压力。

但是现在的架构里,无论扩展多少台服务器,这些请求最终都会从数据库读写数据,到一定程度之后,数据的压力称为系统承载能力的瓶颈点。

我们可以像扩展应用服务器一样扩展数据库服务器么?
答案是否定的,因为数据库服务有其特殊性:如果将数据分散到各台服务器之后,数据的一致性将无法得到保障。

所谓数据的一致性,此处是指:针对同一个系统,无论何时何地,我们都应该看到一个始终维持统一的数据。想象一下,银行管理的账户金额,如果收到一笔转账之后,一份数据库的数据修改了,但另外的数据库没有修改,则用户得到的存款金额将是错误的。我们采用的解决办法是这样的,保留一个主要的数据库作为写入数据库,其他的数据库作为从属数据库。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。然后为了分担数据库的压力,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。

由于大部分的系统中,读写请求都是不成比例的,例如 100 次读 1 次写,所以只要将读请求由各个从库分担之后,数据库的压力就没有那么大了。当然这个过程不是无代价的,主库到从库的数据同步其实是有时间成本的,但这个问题我们暂时不做进一步探讨。

在这里插入图片描述

  • 优点:

    • 负载均衡:读写分离/主从分离架构可以通过负载均衡器将读请求和写请求分别分配到不同的服务器上,以平衡负载和提高系统的处理能力。
    • 读操作性能:读写分离/主从分离架构可以将读操作分配给专门的读服务器,以提高读操作的性能和吞吐量。
    • 写操作性能:读写分离/主从分离架构可以将写操作分配给专门的主从服务器,以保证写操作的性能和一致性。
    • 可扩展性:读写分离/主从分离架构可以通过增加服务器节点来提高系统的处理能力和存储容量,提高系统的可扩展性。
  • 缺点:

    • 故障恢复:读写分离/主从分离架构中的读服务器和写主从服务器之间存在数据同步延迟,可能会导致故障恢复问题。
    • 数据一致性:读写分离/主从分离架构中的主从服务器之间存在数据差异,可能会导致数据不一致的问题。
    • 维护成本:读写分离/主从分离架构需要更多的服务器和设备,相对于单台服务器而言,初始投资成本较高。
    • 管理和维护难度大:读写分离/主从分离架构需要更多的技术和经验支持,管理和维护难度较大,需要专业的技术人员进行操作和管理。

7.引入缓存 —— 冷热分离架构

随着访问量继续增加,发现业务中一些数据的读取频率远大于其他数据的读取频率。我们把这部分数据称为热点数据,与之相对应的是冷数据。针对热数据,为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的 html 页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。

其中涉及的技术包括:使用 memcached 作为本地缓存,使用Redis 作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。
在这里插入图片描述

  • 优点:

    • 读写分离:通过将热点数据存储在缓存中,可以实现读操作的高效处理,减轻数据库的负载,提高系统的并发处理能力。
    • 热数据缓存:将热点数据存储在缓存中,可以减少对数据库的访问,提高系统的响应速度,提升用户体验。
    • 冷数据存储:将冷数据存储在磁盘上,可以节约内存资源,降低系统的负载,提高系统的稳定性。
    • 成本降低:通过使用缓存,可以降低硬件成本,因为可以减少对高性能硬件的需求,降低系统的总体拥有成本。
  • 缺点:

    • 数据一致性:由于缓存和磁盘上的数据不是实时同步的,因此需要考虑数据一致性的问题,以保证数据的一致性和完整性。
    • 缓存穿透:当热点数据没有命中缓存时,需要到磁盘上查询,这会导致缓存的浪费和系统的性能下降。
    • 缓存雪崩:当缓存中的热点数据较多时,可能会造成缓存的雪崩效应,降低系统的并发处理能力。
    • 失效更新:当热点数据更新时,需要更新缓存中的数据,这可能会导致缓存的失效,需要重新加载数据。
  • 相关软件:

    • Memcached、 Redis 等缓存软件

8.垂直分库

随着业务的数据量增大,大量的数据存储在同一个库中已经显得有些力不从心了,所以可以按照业务,将数据分别存储。比如针对评论数据,可按照商品 ID 进行 hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户 ID 或记录编号来路由数据。

只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。其中前面提到的 Mycat 也支持在大表拆分为小表情况下的访问控制。

这种做法显著的增加了数据库运维的难度,对 DBA 的要求较高。数据库设计到这种结构时,已经可以称为分布式数据库,但是这只是一个逻辑的数据库整体,数据库里不同的组成部分是由不同的组件单独来实现的,如分库分表的管理和请求分发,由 Mycat 实现,SQL 的解析由单机的数据库实现,读写分离可能由网关和消息队列来实现,查询结果的汇总可能由数据库接口层来实现等等,这种架构其实是 MPP(大规模并行处理)架构的一类实现。

在这里插入图片描述

  • 优点:

    • 提升性能:垂直分库可以将热点数据和普通数据分离,将热点数据存储在内存中,大幅提升系统的处理能力和吞吐量。
    • 提升可扩展性:垂直分库可以通过增加服务器节点来提高系统的处理能力和存储容量,提高系统的可扩展性。
    • 提升可维护性:垂直分库可以将不同的业务数据分开存储,便于分别进行维护和管理,提高系统的可维护性。
  • 缺点:

    • 数据一致性:垂直分库会将不同业务的数据分别存储在不同的数据库中,可能会导致数据不一致的问题。
    • 写入性能:垂直分库会将写入操作写入到相应的数据库中,可能会导致写入性能的问题。
    • 安全性:垂直分库会将敏感数据存储在不同的数据库中,可能会导致安全问题。
    • 管理和维护难度大:垂直分库需要分别管理不同的数据库,管理和维护难度较大,需要专业的技术人员进行操作和管理。
  • 相关软件

    • Greenplum、 TiDB、 Postgresql XC、 HAWQ 等,商用的如南大通用的 GBase、睿帆科技的雪球 DB、华为的 LibrA 等

9.业务拆分 —— 微服务

随着人员增加,业务发展,我们将业务分给不同的开发团队去维护,每个团队独立实现自己的微服务,然后互相之间对数据的直接访问进行隔离,可以利用 Gateway、消息总线等技术,实现相互之间的调用关联。甚至可以把一些类似用户管理等业务提成公共服务。

在这里插入图片描述

  • 相关软件

    • Spring Cloud、 Dubbo
  • 优点:

    • 垂直分离:将不同的业务模块或服务独立部署,可以提高系统的可维护性和可扩展性。
    • 快速迭代:通过将业务拆分为微服务,可以实现快速迭代和敏捷开发,提高开发效率。
    • 独立部署:微服务架构允许不同的业务模块或服务独立部署,提高系统的可用性和容错性。
    • 独立升级:微服务架构允许不同的业务模块或服务独立升级,无需中断其他服务的正常运行。
  • 缺点:

    • 数据一致性:不同服务之间可能存在数据依赖关系,需要保证数据的一致性。
    • 数据库同步:不同服务之间可能存在数据同步的需求,这可能会导致性能瓶颈和一致性问题。
    • 分布式事务:在分布式环境下,处理事务可能会变得更加复杂,需要引入分布式事务解决方案,如补偿机制或二段事务协议。
    • 安全问题:在分布式环境下,需要考虑安全问题,如防止SQL注入、防止恶意请求等。
    • 技术挑战:在实现微服务架构时,需要具备一定的技术能力,如分布式系统设计、微服务框架选型等。

10.容器化引入——容器编排架构

随着业务增长,然后发现系统的资源利用率不高,很多资源用来应对短时高并发,平时又闲置,需要动态扩缩容,还没有办法直接下线服务器,而且开发、测试、生产每套环境都要隔离的环境,运维的工作量变的非常大。容器化技术的出现给这些问题的解决带来了新的思路。

目前最流行的容器化技术是 Docker,最流行的容器管理服务是 Kubernetes(K8S),应用/服务可以打包为 Docker 镜像,通过 K8S 来动态分发和部署镜像。

Docker 镜像可理解为一个能运行你的应用/服务的最小的操作系统,里面放着应用/服务的运行代码,运行环境根据实际的需要设置好。把整个“操作系统”打包为一个镜像后,就可以分发到需要部署相关服务的机器上,直接启动 Docker 镜像就可以把服务起起来,使服务的部署和运维变得简单。

服务通常会有生产和研发 k8s 集群,一般不会公用,而研发集群通过命名空间来完成应用隔离,有的公司按照研发目的划分为研发和测试集群,有的公司通过组织架构完成部门间的资源复用.

在这里插入图片描述

  • 相关软件

    • Docker、 K8S
  • 优点:

    • 高内聚:业务拆分可以将不同的功能或业务封装成小型的、自治的微服务,提高系统的内聚性和耦合性。
    • 低耦合:业务拆分可以将不同的业务逻辑和功能模块解耦,使得各个微服务可以独立开发和部署,提高系统的灵活性和可扩展性。
    • 独立部署:微服务可以独立部署,提高系统的可用性和稳定性。当某个微服务出现问题时,可以只对该服务进行维护和修复,而不会影响到其他服务的正常运行。
    • 独立扩展:微服务可以独立扩展,当需要增加处理能力时,可以单独增加节点或资源,提高系统的处理能力和吞吐量。
  • 缺点:

    • 复杂编排:微服务数量增多后,服务之间的调用关系和依赖关系会变得更加复杂,需要更加复杂的编排和调度策略来保证系统的正常运行。
    • 过多通信:微服务之间的通信需要使用消息队列等方式进行传递,会增加系统的复杂性和成本,同时也会带来一些性能问题。
    • 分布式问题:微服务化之后,服务数量增多,管理起来也会更加困难,需要更加完善的管理和监控机制来保证系统的可用性和稳定性。
    • 复杂性:微服务将业务拆分成多个小型服务,每个服务都需要单独开发和维护,会增加开发、测试、部署等工作的复杂性和难度。

11.总结

在这里插入图片描述

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

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

相关文章

AOP概念 和 使用

目录 AOP的概念 什么是AOP? 什么是SpringAOP? 为什要⽤ AOP? AOP的作用? AOP的组成 通知 AOP的实现 1. 添加 Spring AOP 框架⽀持。 2. 定义切面和切点。 3. 定义通知。 切点表达式 AOP的概念 什么是AOP? AOP(Aspect Oriented Programm…

工程师分享:如何解决传导干扰?

电磁干扰 EMI 中电子设备产生的干扰信号是通过导线或公共电源线进行传输,互相产生干扰称为传导干扰。传导干扰给不少电子工程师带来困惑,如何解决传导干扰? 找对方法,你会发现,传导干扰其实很容易解决,只要…

献给大一新生的JavaSE入门篇章 大三秋招JavaSE

Java反射 反射实现有哪些? Class.forName(“com.jdbc.cj.Driver.mysql”) 类名.class 对象名.getClass() 反射优缺点有哪些? 优点: 能够动态的获取类的实例,提高灵活性 缺点: 会降低性能,解决办法: 1. 如果多次创建某个对象的实例,使用…

Pixelmator Pro 3.3.10 Mosaic (macOS Universal) - 专业图像编辑工具

Pixelmator Pro 3.3.10 Mosaic (macOS Universal) - 专业图像编辑工具 请访问原文链接:https://sysin.org/blog/pixelmator-pro-3/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.org Pixelmator Pro 真正基于 Apple M…

机器学习算法实现(基于numpy)

《机器学习公式推导与代码实现》学习笔记,记录一下自己的学习过程,详细的内容请大家购买作者的书籍查阅。 这篇博客是将笔者边学边刷《机器学习公式推导与代码实现》的模型跟代码记录下来,部分地方结合自己的思考对原作者的代码有一定的改动…

【自定义图库】

sld文件 前段时间,有网友委托我帮他做一个家具的图库。 首先,做图库的方法有很多,最简单的是MFC拖控件然后自己把做好的bmp图贴进去就可以了,麻烦一点的是sld文件,最麻烦 是用blockview做。 下面先说说3种办法的区别: 首先,如果用MFC拖控件的办法,最简单也最方便,用st…

安全帽检测+反光衣检测+工作服检测数据集

安全帽检测反光衣检测工作服检测数据集下载地址分享:https://download.csdn.net/download/qq_34717531/88112870

AF 350 tyramide,AlexaFluor350 TSA,AF350酪胺,荧光标记试剂

文章资料汇总来源于:陕西新研博美生物科技有限公司小编MISSwu​ PART1----产品描述 AF350 tyramide(AlexaFluor350酪酰胺),用于荧光标记的试剂,Tyramide信号放大(TSA)已被证明是一种特别通用且…

SAS-input和put的使用

在SAS中经常会遇到数值型变量与字符型变量之间进行相互转换,如何进行转换呢? 一、字符型转数值型 方法1:字符型变量通过运算进行转换,如Numeric Character * 1。运算符可以转换,但是会有NOTE提示,不推荐…

一个外贸业务员的鸡飞蛋打

最近在论坛上看到一个案例,案例是一个是SOHO的业务员从他朋友厂子拿货, 然后他发现他的前同事在他朋友的厂子做sales director,然后最近一个客户A出货,这个小伙伴就去他朋友的工厂做发货前的质检,正好碰到以前的一个同事也去他朋友…

【Docker】Docker安全性与安全实践(五)

前言: Docker安全性的作用和意义在于确保容器化应用程序和镜像的隔离性、保护数据和系统资源、防止恶意攻击,以及提高应用的整体安全性。 文章目录 1. Docker安全性1.1 隔离性1.2 镜像安全1.3 特权访问1.4 数据保护 2. Docker安全实践2.1 使用官方镜像或…

管理类联考——数学——趣味篇——可视化——安装Manim软件

Manim: 一个数学可视化的动画引擎 官网:https://3b1b.github.io/manim/index.html 名词解析 python3.7是python语言的解释器, 运行python程序的环境必备品. 这个没啥说的,大家都能懂. 虽然官方建议3.7,但是我用3.8发现也没问题.考虑未来的历史进程,大伙最好还是装…

Windows Subsystem for Android (WSA) 下载:在 Windows 11 上运行 Android 应用 (July 2023)

Windows Subsystem for Android (WSA) 下载:在 Windows 11 上运行 Android 应用 (July 2023) 适用于 Android™️ 的 Windows 子系统,2023 年 7 月更新:2306.40000.4.0 请访问原文链接:https://sysin.org/blog/wsa/,…

探讨高校公共建筑能耗监测系统的设计与应用

安科瑞 华楠 摘要:在资源节约型社会建设进程中,高校公共建筑能耗管理存在问题已经成为办学成本加大、社会资源浪费的桎梏。在各级政府的推动下,高校公共建筑能耗监测系统建设在探索中发展,依托互联网大数据技术逐步实现能耗管理信…

跨域冲突问题解决

1、问题分析 服务端和nginx代理 都做了跨域配置,导致请求头重复 headers 里面有两个重复的 Access-Control-Allow-Origin Access-Control-Allow-Methods Access-Control-Allow-Credentials 2、解决方法 在nginx去除服务端的跨域配置 proxy_hide_header Access-…

【腾讯云 Cloud Studio 实战训练营】CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!

CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手! 文章目录 CloudStudio体验真正的现代化开发方式,双手插兜不知道什么叫对手!前言出现的背景一、CloudStudio 是什么?二、CloudStudio 的特点三、CloudS…

医学案例|配对wilcoxon符号秩检验

一、案例介绍 某单位想要研究某保健品对小鼠是否具有抗疲劳作用,将同种属的小鼠按性别与年龄相同、体重相近配成对子,共14对,并将每对中的两只小鼠随机分配到两个不同的保健食品剂量组,测量小鼠负重5%体重时的游泳时间…

通过IDEA发送QQ邮箱信息

先创建一个普通的Maven项目&#xff0c;我就不演示啦&#xff0c;个人博客已经写过~[创建一个maven项目]。 项目创建成功后&#xff0c;引人Maven依赖&#xff0c;如下: <dependencies><dependency><groupId>org.apache.commons</groupId><artifact…

力扣天天练week3-LeetCode75

topic75-1-t1768交替合并字符串 题目描述&#xff1a;给你两个字符串word1和word2。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串 。 示例&#…

Exadata磁盘损坏导致磁盘组无法mount恢复(oracle一体机磁盘组异常恢复)---惜分飞

Oracle Exadata客户,在换盘过程中,cell节点又一块磁盘损坏,导致datac1磁盘组&#xff08;该磁盘组是normal方式冗余)无法mount Thu Jul 20 22:01:21 2023 SQL> alter diskgroup datac1 mount force NOTE: cache registered group DATAC1 number1 incarn0x0728ad12 NOTE: ca…