【Docker】技术架构演变

【Docker】技术架构演变

目录

  • 【Docker】技术架构演变
    • 架构中的概念
    • 架构演进
      • 单机架构
        • 相关软件
    • 应用数据分离架构
    • 应用服务集群架构
      • 相关软件
    • 读写分离/主从分离架构
      • 相关软件
    • 引入缓存——冷热分离架构
      • 相关软件
    • 垂直分库(分布式数据库架构)
      • 相关软件
    • 业务拆分——微服务
      • 相关软件
    • 容器化引入——容器编排架构
      • 相关软件
    • 互联网架构
    • 尾声

作者:爱写代码的刚子

时间:2024.3.5

前言:介绍从一百个到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术。


**< docker > **博客内容总览:
在这里插入图片描述


架构中的概念

应用(Application)/系统(System):为了完成一整套服务的一个程序或者一组相互配合的程序群。生活例子类比:为了完成一项任务,而搭建的由一个人或者一群相互配的人组成的团队。

模块(Module)/组件(Component):当应用较复杂时,为了分离职责,将其中具有清晰职责的、内聚性强的部分,抽象出概念,便于理解。生活例子类比:军队中为了进行某据点的攻克,将人员分为突击小组、爆破小组、掩护小组、通信小组等。

分布式(Distributed):系统中的多个模块被部署于不同服务器之上,即可以将该系统称为分布式系统。如 Web 服务器与数据库分别工作在不同的服务器上,或者多台 Web 服务器被分别部署在不同服务器上。生活例子类比:为了更好的满足现实需要,一个在同一个办公场地的工作小组被分散到多个城市的不同工作场地中进行远程配合工作完成目标。跨主机之间的模块之间的通信基本要借助网络支撑完成。

集群(Cluster):被部署于多台服务器上的、为了实现特定目标的一个/组特定的组件,整个整体被称为集群。比如多个 MySQL 工作在不同服务器上,共同提供数据库服务目标,可以被称为一组数据库集群。生活例子类比:为了解决军队攻克防守坚固的大城市的作战目标,指挥部将大批炮兵部队集中起来形成一个炮兵打击集群。分布式 vs 集群。通常不用太严格区分两者的细微概念,细究的话,分布式强调的是物理形态,即工作在不同服务器上并且通过网络通信配合完成任务;而集群更在意逻辑形态,即是否为了完成特定服务目标。

主(Master)/从(Slave):集群中,通常有一个程序需要承担更多的职责,被称为主;其他承担附属职责的被称为从。比如 MySQL 集群中,只有其中一台服务器上数据库允许进行数据的写入(增/删/改),其他数据库的数据修改全部要从这台数据库同步而来,则把那台数据库称为主库,其他数据库称为从库。

中间件(Middleware):一类提供不同应用程序用于相互通信的软件,即处于不同技术、工具和数据库之间的桥梁。生活例子类比:一家饭店开始时,会每天去市场挑选买菜,但随着饭店业务量变大,成立一个采购部,由采购部专职于采买业务,称为厨房和菜市场之间的桥梁。

容器(Docker):Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 操作系统的机器上,也可以实现虚拟化。可以理解为一个集装箱,集装箱里面是每个用户的货物,整体打包。

容器编排(K8S):kubernetes,简称 K8s,是用 8 代替名字中间的 8 个字符“ubernete”而成的缩写。是一个开源的,用于管理云平台中多个主机上的容器化的应用,Kubernetes 的目标是让部署容器化的应用简单并且高效。可以理解为一个货船,安装集装箱的大小,货物情况合理的来组织集装箱完成整体货物的搬运。

评价指标(Metric):评估 Docker 容器性能和可靠性时,我们通常关注一系列指标。这些指标涵盖了 CPU 利用率、内存利用率、网络吞吐量、存储利用率、容器启动和停止时间、容器的可用性以及安全性评估。

可用性(Availability):考察单位时间段内,系统可以正常提供服务的概率/期望。例如: 年化系统可用性 = 系统正常提供服务时长 / 一年总时长。这里暗含着一个指标,即如何评价系统提供无法是否正常,我们就不深入了。平时我们常说的 4 个 9 即系统可以提供 99.99% 的可用性,5 个 9 是 99.999% 的可用性,以此类推。我们平时只是用高可用(HighAvailability HA)这个非量化目标简要表达我们系统的追求。

响应时长(Response Time RT):指用户完成输入到系统给出用户反应的时长。例如点外卖业务的响应时长 = 拿到外卖的时刻 - 完成点单的时刻。通常我们需要衡量的是最长响应时长、平均响应时长和中位数响应时长。这个指标原则上是越小越好,但很多情况下由于实现的限制,需要根据实际情况具体判断

吞吐(Throughput)vs 并发(Concurrent):吞吐考察单位时间段内,系统可以成功处理的请求的数量。并发指系统同一时刻支持的请求最高量。例如一条 2 车道高速公路,一分钟可以通过 20 辆车,则并发是 2,一分钟的吞吐量是 20。实践中,并发量往往无法直接获取,很多时候都是用极短的时间段(比如 1 秒)的吞吐量做代替。我们平时用高并发(Hight Concurrnet)这个非量化目标简要表达系统的追求。

架构演进

单机架构

在这里插入图片描述

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

在这里插入图片描述

用户在浏览器中输入网址后,首先经过 DNS 服务将域名解析成 IP 地址10.102.41.1,随后浏览器访问该 IP 对应的应用服务。

实现单机架构的过程:

技术案例:

在这里插入图片描述

在这里插入图片描述

  • 缺点:

    • 由于是一台服务器,线程数和内存都是有限的,并发量大就不能处理了。 (存在严重的性能瓶颈)
    • 数据库和应用相互竞争资源
相关软件

Web 服务器软件:Tomcat、Netty、Nginx、Apache 等

数据库软件:MySQL、Oracle、PostgreSQL、SQL Server 等

应用数据分离架构

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

技术案例:

在这里插入图片描述

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

应用服务集群架构

在这里插入图片描述

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

  • 垂直扩展 / 纵向扩展 Scale Up。通过购买性能更优、价格更高的应用服务器来应对更多的流量。这种方案的优势在于完全不需要对系统软件做任何的调整;但劣势也很明显:硬件性能和价格的增长关系是非线性的,意味着选择性能 2 倍的硬件可能需要花费超过 4 倍的价格,其次硬件性能提升是有明显上限的。

  • 水平扩展 / 横向扩展 Scale Out。通过调整软件架构,增加应用层硬件,将用户流量分担到不同的应用层服务器上,来提升系统的承载能力。这种方案的优势在于成本相对较低,并且提升的上限空间也很大。但劣势是带给系统更多的复杂性,需要技术团队有更丰富的经验。经过团队的学习、调研和讨论,最终选择了水平扩展的方案,来解决该问题,但这需要引入一个新的组件 —— 负载均衡:为了解决用户流量向哪台应用服务器分发的问题,需要一个专门的系统组件做流量分发。实际中负载均衡不仅仅指的是工作在应用层的,甚至可能是其他的网络层之中。同时流量调度算法也有很多种,这里简单介绍几种较为常见的:

    • Round-Robin 轮询算法。即非常公平地将请求依次分给不同的应用服务器。

    • Weight-Round-Robin 轮询算法。为不同的服务器(比如性能不同)赋予不同的权重(weight),能者多劳。

    • 一致哈希散列算法。通过计算用户的特征值(比如 IP 地址)得到哈希值,根据哈希结果做分发,优点是确保来自相同用户的请求总是被分给指定的服务器。也就是我们平时遇到的专项客户经理服务。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

负载均衡器通常有两种主要的工作模式:主动模式和被动模式,也可以称为“过载均衡”和“不过载均衡”。

  1. 过载均衡(Active Load Balancing): 在过载均衡模式下,负载均衡器会主动监控服务器的负载情况,并根据预先定义的策略来分配和调整流量。这种模式下,负载均衡器会持续地评估服务器的性能,并根据负载情况动态地将请求发送到最合适的服务器上,以确保各服务器的负载尽可能均衡。常见的过载均衡算法包括轮询(Round Robin)、最小连接数(Least Connections)、最小响应时间(Least Response Time)等。
  2. 不过载均衡(Passive Load Balancing): 在不过载均衡模式下,负载均衡器并不主动监控服务器的负载情况,而是只在收到请求时根据预设的规则进行分发。这种模式下,负载均衡器不会实时地评估服务器的性能,而是根据预先定义的规则将请求分发到固定的服务器上。通常情况下,这些规则是静态的,不会根据服务器的负载情况进行调整。

选择使用哪种模式取决于系统的需求和性能要求。过载均衡模式通常能够更有效地利用服务器资源,并在动态负载变化时做出调整,但也需要更多的计算和管理成本。不过载均衡模式则更简单直接,适用于负载相对稳定的情况。

技术案例:

在这里插入图片描述

在这里插入图片描述

相关软件

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

读写分离/主从分离架构

在这里插入图片描述

我们把用户的请求通过负载均衡分发到不同的应用服务器之后,可以并行处理了,并且可以随着业务的增长,可以动态扩张服务器的数量来缓解压力。但是现在的架构里,无论扩展多少台服务器,这些请求最终都会从数据库读写数据,到一定程度之后,数据的压力称为系统承载能力的瓶颈点。我们可以像扩展应用服务器一样扩展数据库服务器么?答案是否定的,因为数据库服务有其特殊性:如果将数据分散到各台服务器之后,数据的一致性将无法得到保障。所谓数据的一致性,此处是指:针对同一个系统,无论何时何地,我们都应该看到一个始终维持统一的数据。想象一下,银行管理的账户金额,如果收到一笔转账之后,一份数据库的数据修改了,但另外的数据库没有修改,则用户得到的存款金额将是错误的。

我们采用的解决办法是这样的,保留一个主要的数据库作为写入数据库,其他的数据库作为从属数据库。从库的所有数据全部来自主库的数据,经过同步后,从库可以维护着与主库一致的数据。然后为了分担数据库的压力,我们可以将写数据请求全部交给主库处理,但读请求分散到各个从库中。由于大部分的系统中,读写请求都是不成比例的,例如 100 次读 1 次写,所以只要将读请求由各个从库分担之后,数据库的压力就没有那么大了。当然这个过程不是无代价的,主库到从库的数据同步其实是有时间成本的,但这个问题我们暂时不做进一步探讨。

在这里插入图片描述

应用中需要对读写请求做分离处理,所以可以利用一些数据库中间件,将请求分离的职责托管出去。

写的操作:

在这里插入图片描述

读的操作:

在这里插入图片描述

技术案例:

在这里插入图片描述

写的操作:

在这里插入图片描述

读的操作:

在这里插入图片描述

相关软件

MyCat、TDDL、Amoeba、Cobar 等类似数据库中间件等

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

在这里插入图片描述

随着访问量继续增加,发现业务中一些数据的读取频率远大于其他数据的读取频率。我们把这部分数据称为热点数据,与之相对应的是冷数据。针对热数据,为了提升其读取的响应时间,可以增加本地缓存,并在外部增加分布式缓存,缓存热门商品信息或热门商品的 html 页面等。通过缓存能把绝大多数请求在读写数据库前拦截掉,大大降低数据库压力。其中涉及的技术包括:使用 memcached 作为本地缓存,使用Redis 作为分布式缓存,还会涉及缓存一致性、缓存穿透/击穿、缓存雪崩、热点数据集中失效等问题。

在这里插入图片描述

写的操作:

在这里插入图片描述

读的操作:

在这里插入图片描述

技术案例:

在这里插入图片描述

写入一个秒杀信息:

在这里插入图片描述

读取一个秒杀信息:

在这里插入图片描述

读取非秒杀商品:

在这里插入图片描述

在这里插入图片描述

相关软件

Memcached、Redis 等缓存软件

垂直分库(分布式数据库架构)

在这里插入图片描述

随着业务的数据量增大,大量的数据存储在同一个库中已经显得有些力不从心了,所以可以按照业务,将数据分别存储。比如针对评论数据,可按照商品 ID 进行 hash,路由到对应的表中存储;针对支付记录,可按照小时创建表,每个小时表继续拆分为小表,使用用户 ID 或记录编号来路由数据。只要实时操作的表数据量足够小,请求能够足够均匀的分发到多台服务器上的小表,那数据库就能通过水平扩展的方式来提高性能。其中前面提到的 Mycat 也支持在大表拆分为小表情况下的访问控制。这种做法显著的增加了数据库运维的难度,对 DBA 的要求较高。数据库设计到这种结构时,已经可以称为分布式数据库,但是这只是一个逻辑的数据库整体,数据库里不同的组成部分是由不同的组件单独来实现的,如分库分表的管理和请求分发,由 Mycat 实现,SQL 的解析由单机的数据库实现,读写分离可能由网关和消息队列来实现,查询结果的汇总可能由数据库接口层来实现等等,这种架构其实是 MPP(大规模并行处理)架构的一类实现。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

写的操作:

在这里插入图片描述

读的过程:

在这里插入图片描述

技术案例

分库分表:

在这里插入图片描述

分布式数据库:

在这里插入图片描述

写操作:

在这里插入图片描述

读的操作:

在这里插入图片描述

相关软件

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

业务拆分——微服务

在这里插入图片描述

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

在这里插入图片描述

在这里插入图片描述

拿数据:

在这里插入图片描述

从用户数据库中拿数据和从商品数据库中拿数据可以同时进行!!!

技术案例:

在这里插入图片描述

读取用户和商品信息:

在这里插入图片描述

相关软件

Spring Cloud、Dubbo

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

在这里插入图片描述

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

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

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

docker应用的概括图:

在这里插入图片描述

在这里插入图片描述

架构并没有改变,但是运维的方式有了变化,由k8s对容器进行部署:

在这里插入图片描述

技术案例

在这里插入图片描述

在这里插入图片描述

优点之一(可以进行版本切换):

在这里插入图片描述

相关软件

Docker、K8S

互联网架构

在这里插入图片描述

尾声

  • 至此,一个还算合理的高可用、高并发系统的基本雏形已显。注意,以上所说的架构演变顺序只是针对某个侧面进行单独的改进,在实际场景中,可能同一时间会有几个问题需要解决,或者可能先达到瓶颈的是另外的方面,这时候就应该按照实际问题实际解决。如在政府类的并发量可能不大,但业务可能很丰富的场景,高并发就不是重点解决的问题,此时优先需要的可能会是丰富需求的解决方案。

  • 对于单次实施并且性能指标明确的系统,架构设计到能够支持系统的性能指标要求就足够了,但要留有扩展架构的接口以便不备之需。对于不断发展的系统,如电商平台,应设计到能满足下一阶段用户量和性能指标要求的程度,并根据业务的增长不断的迭代升级架构,以支持更高的并发和更丰富的业务。

  • 所谓的“大数据”其实是海量数据采集清洗转换、数据存储、数据分析、数据服务等场景解决方案的一个统称,在每一个场景都包含了多种可选的技术,如数据采集有Flume、Sqoop、Kettle 等,数据存储有分布式文件系统 HDFS、FastDFS,NoSQL数据库 HBase、MongoDB 等,数据分析有 Spark 技术栈、机器学习算法等。总的来说大数据架构就是根据业务的需求,整合各种大数据组件组合而成的架构,一般会提供分布式存储、分布式计算、多维分析、数据仓库、机器学习算法等能力。而服务端架构更多指的是应用组织层面的架构,底层能力往往是由大数据架构来提供。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第八篇 - 预测受众(Predictive audience)技术是如何赋能数字化营销生态的?- 我为什么要翻译介绍美国人工智能科技巨头IAB公司

IAB平台&#xff0c;使命和功能 IAB成立于1996年&#xff0c;总部位于纽约市。 作为美国的人工智能科技巨头社会媒体和营销专业平台公司&#xff0c;互动广告局&#xff08;IAB- the Interactive Advertising Bureau&#xff09;自1996年成立以来&#xff0c;先后为700多家媒…

Android制作.9图回忆

背景 多年前&#xff0c;做app开发遇到IM需求&#xff0c;那会用到.9图做聊天气泡背景&#xff0c;现在总结下使用png图片制作.9图。方法有很多&#xff0c;这里主要介绍Android studio制作.9图。当然使用ps、draw9patch都行。 第一步、打开Android studio&#xff0c;切换到dr…

【Linux实践室】Linux常用命令:文件操作|文件夹操作

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;Linux实践室、网络奇遇记 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️任务描述二. ⛳️相关知识2.1 &#x1f514;Linux文件操作2.1.1 &#x1f47b;创建文件2…

【粉丝福利】一本书讲透ChatGPT,实现从理论到实践的跨越!大模型技术工程师必读

&#x1f33c;一、前言 OpenAI 在 2022 年 11 月推出了人工智能聊天应用—ChatGPT。它具有广泛的应用场景&#xff0c;在多项专业和学术基准测试中表现出的智力水平&#xff0c;不仅接近甚至有时超越了人类的平均水平。这使得 ChatGPT 在推出之初就受到广大用户的欢迎&#xf…

速卖通关键字搜索API接口实战:Python代码与搜索策略解析

一、速卖通关键字搜索API简介 速卖通&#xff08;AliExpress&#xff09;作为阿里巴巴旗下的国际电商平台&#xff0c;为卖家和买家提供了便捷的交易渠道。其开放平台提供的API接口允许开发者集成速卖通的各种功能&#xff0c;其中之一就是关键字搜索API。通过这个API&#xf…

QT计算两个日期之间的月份数

数据库中单表数据存储量过大时&#xff0c;会造成数据库的查询统计速度变慢&#xff0c;因此需将单表数据拆分存储到按年月命名的多张数据表中。解决思路是获取单表中的最小时间和最大时间&#xff0c;然后计算两个时间中的月份数量&#xff0c;最后根据开始年月循环算出所有需…

蓝牙系列四:开源蓝牙协议BTStack框架分析

在学习蓝牙的时候,最好还是要借助源代码来学习,并且进行实际的操作从而更加理解蓝牙协议栈的运行。依然根据韦东山老师的学习视频进行学习,整理记录如下。 首先,协议栈是跑在硬件上的,我们这里选择使用windows来操控硬件。来看一下硬件的结构: 蓝牙模块接在电脑上,或是…

(每日持续更新)jdk api之PipedWriter基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

设置word目录从正文开始记录页码,并解决word目录正常,但正文页脚处只显示第一页的页码

设置word目录从正文开始记录页码&#xff0c;并解决word目录正常&#xff0c;但正文页脚处只显示第一页的页码 问题详情1&#xff1a;如何设置目录从正文开始记录页码 问题详情2&#xff1a;word目录处的页码正常&#xff0c;但正文只有第一页的页脚处显示页码 解决方法 在设置…

web开发:如何用Echarts来自动给网页设计各种统计图

很多时候web开发也会需要用到统计图&#xff0c;如果单纯靠我们自己那点拙劣的css和js水平设计的话&#xff0c;又耗时间又做得跟史一样&#xff0c;这时候就需要引入别人设计师为我们设计好的动态统计图——echarts Echarts的官网是&#xff1a;Apache ECharts 1、第一步&…

稀碎从零算法笔记Day4-LeetCode:交替合并字符串

前言&#xff1a;今天妹有深夜档&#xff0c;因为8点有个飞机 题型&#xff1a;字符串、双指针&#xff08;笔者没用这个思路&#xff09; 链接&#xff1a;1768. 交替合并字符串 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转…

时钟域交叉设计——Clock Domain Crossing Design

What is Metastability? 任何关于时钟域交叉&#xff08;CDC&#xff09;的讨论&#xff0c;都应从对可变性和同步性的基本了解开始。通俗地说&#xff0c;可变性是指一种不稳定的中间状态&#xff0c;在这种状态下&#xff0c;最轻微的干扰也会导致稳定状态的恢复。当应用于…

QT----QTcreater连接Mysql数据库

目录 1、下载驱动&#xff0c;放入文件夹2、编写代码&#xff0c;实现本地访问3、实现网络数据库3.1 更改权限3.2 修改代码 之前写了一个图书管理系统用的是sqlite3&#xff0c;现在想用mysql&#xff0c;部署到网上&#xff0c;实现远程访问。 1、下载驱动&#xff0c;放入文…

Draft-P802.11be-D3.2协议学习__$Annex-Z-HE-SIG-B-and-EHT-SIG-content-examples

Draft-P802.11be-D3.2协议学习__$Annex-Z-HE-SIG-B-and-EHT-SIG-content-examples Z.1 GeneralZ.2 HE-SIG-B example 1Z.3 HE-SIG-B example 2Z.4 HE-SIG-B example 3Z.5 HE-SIG-B example 4Z.6 EHT-SIG example 1&#xff08;EHT OFDMA 80MHz&#xff09;Z.7 EHT-SIG example …

虚假交易商常态化,2月下半月FX110曝光43家黑平台

以半个月为期&#xff0c;FX110网对虚假交易商进行常态化曝光&#xff0c;只为极力打压黑平台生存空间&#xff0c;让更多人的避免被骗。 2月上半月&#xff0c;FX110网曝光黑平台41家&#xff0c;下半月曝光数与上半月基本持平&#xff0c;为43家。 曝光的这43家黑平台绝大部…

Win UI3开发笔记(四)设置主题续2

本机深色主题下设置的背景颜色可以作用于整个对话框&#xff0c;本机浅色模式下设置的背景颜色只作用与下边的部分。 如果本机选深色&#xff0c;程序选浅色&#xff0c;设置为light只对上部分管用&#xff0c;下部分不管用。如图&#xff0c;左边那个hello按钮要看不见了。。…

LeetCode:1976. 到达目的地的方案数(spfa + 记忆化 Java)

目录 1976. 到达目的地的方案数 原题链接 题目描述&#xff1a; 实现代码与解析&#xff1a; spfa 记忆化 原理思路&#xff1a; 1976. 到达目的地的方案数 原题链接 1976. 到达目的地的方案数 题目描述&#xff1a; 你在一个城市里&#xff0c;城市由 n 个路口组成&a…

RabbitMQ 高级

在昨天的练习作业中&#xff0c;我们改造了余额支付功能&#xff0c;在支付成功后利用RabbitMQ通知交易服务&#xff0c;更新业务订单状态为已支付。 但是大家思考一下&#xff0c;如果这里MQ通知失败&#xff0c;支付服务中支付流水显示支付成功&#xff0c;而交易服务中的订单…

【mogoose】对查询的数据进行过滤后不需要展示的信息

数据库结构如下 我只要email userName sex role 几个数据&#xff0c;其余不要 {_id: new ObjectId(65e7b6df8d06a0623fa899f5),email: 12345qq.com,pwd: $2a$10$eLJ9skKEsQxvzHf5X8hbaOXKtg8GCHBeieieSN6Usu17D2DPaI44i,userName: 默认昵称0769,sex: 0,token: {upCount: 0,_…

『python爬虫』ip代理池使用 协采云 账密模式(保姆级图文)

目录 实现效果实现思路代码示例总结 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 欢迎关注 『python爬虫』 专栏&#xff0c;持续更新中 实现效果 在官网原版demo基础上小改了一下,修正了接口错误(把2023改成2024就可以了),原版demo只能测试单个ip,我这里批量测试所有…