aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
文章目录
- aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
- 学习内容:
- 1. 整体架构
- 1.1 代码链接
- 1.2 全体处理架构
- 2. 代码分析
- 2.1 创建`ImageRepo`,并设定给`FargateTaskDef`
- 2.2 创建`CodeBuild project`
- 2.3 对`CodeBuild project`赋予权限(`ECR`的`image repo`)
- 2.4 生成`lambda`函数触发`codebuild`的首次执行
- 2.4.1 生成`lambda`函数触发`codebuild`
- 2.4.2 `lambda`函数触发`codebuild`的代码
- 2.4.3 `AWS Custom Resource`的代码
- 2.5 创建`vpc`和`ecs cluster`
- 2.5.1 创建`vpc`
- 2.5.2 创建`蓝绿部署`
- 2.5 创建`Application Loader Balancer`
- 2.6 创建`fargate service`
- 2.6.1 创建`fargate service`
- 2.6.1 在`fargate service`上进行`application target group`的`attach`
- 2.7 创建`code pipeline`
- 2.7.2 `codepipe`整体架构
- 2.7.1 创建`pipeline artifacts`
- 2.7.2 创建`source stage`
- 2.7.3 创建`build stage`
- 2.7.4 创建`deploy stage`
- 2.8 创建`code pipeline`
- 2.8.1 为`code build`设定`github`的`confidential`
- 2.8.2 最终创建`pipeline`
- 3 执行`CDK`
aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
- 使用
codepipeline-build-deploy
学习内容:
- 使用
codepipeline
,★代码库不采用codecommit
,而是github
- 使用
codebuild
- 使用
codedeploy
1. 整体架构
1.1 代码链接
- 代码链接(codepipeline-build-deploy-github-manual)
- 同时可以参照aws(学习笔记第二十课) codecommit以及codedeploy进行开发
1.2 全体处理架构
2. 代码分析
2.1 创建ImageRepo
,并设定给FargateTaskDef
# Creates an Elastic Container Registry (ECR) image repositoryimage_repo = ecr.Repository(self, "ImageRepo")# Creates a Task Definition for the ECS Fargate servicefargate_task_def = ecs.FargateTaskDefinition(self, "FargateTaskDef")fargate_task_def.add_container("Container",container_name="web",image=ecs.ContainerImage.from_ecr_repository(image_repo),port_mappings=[{"containerPort": 80}])
注意,这里并没有指定具体的image
的URI
以及tag
,这里只是指定了Image Repo(ECR)
。后面会在CodeBuildStage
阶段build
出来docker image
,并且接在CodeDeployStage
阶段将该docker image
部署到Fargate Service
。
2.2 创建CodeBuild project
# CodeBuild project that builds the Docker imagebuild_image = codebuild.Project(self, "BuildImage",build_spec=codebuild.BuildSpec.from_source_filename("buildspec.yaml"),source=codebuild.Source.git_hub(owner="bufanli", # TODO: Replace with your GitHub usernamerepo="web_app", # TODO: Replace with your GitHub repository namebranch_or_ref="main",),environment=codebuild.BuildEnvironment(privileged=True),environment_variables={"AWS_ACCOUNT_ID": codebuild.BuildEnvironmentVariable(value=os.getenv('CDK_DEFAULT_ACCOUNT') or ""),"REGION": codebuild.BuildEnvironmentVariable(value=os.getenv('CDK_DEFAULT_REGION') or ""),"IMAGE_TAG": codebuild.BuildEnvironmentVariable(value="latest"),"IMAGE_REPO_NAME": codebuild.BuildEnvironmentVariable(value=image_repo.repository_name),"REPOSITORY_URI": codebuild.BuildEnvironmentVariable(value=image_repo.repository_uri),"TASK_DEFINITION_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.task_definition_arn),"TASK_ROLE_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.task_role.role_arn),"EXECUTION_ROLE_ARN": codebuild.BuildEnvironmentVariable(value=fargate_task_def.execution_role.role_arn)}
这里,设定build_spec
文件,在app/buildspec.yml
中,
- 设定
pre_build
登录ecr (Amazon Elastic Container Registry(ECR)
,方便之后的向ecr
进行镜像的登录。commands:- echo Logging in to Amazon ECR...- aws --version- aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
- 进行
build
处理
这里的
注意,这里的环境给commands:- echo Building the Docker image...- docker build -t $IMAGE_REPO_NAME:$IMAGE_TAG .- docker tag $IMAGE_REPO_NAME:$IMAGE_TAG $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG
build_spec.yml
传递变量都是通过env(环境变量)
来传递的。
可以看到,这里build
执行docker build
命令,进行docker image
的build
。
- 进行
post build
处理
这里的变量也同样是在codebuild
中,在cdk
的codebuild.project
中,通过变量传递过来的。
commands:- echo Pushing the Docker image...- docker push $AWS_ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/$IMAGE_REPO_NAME:$IMAGE_TAG- echo Container image to be used $REPOSITORY_URI:$IMAGE_TAG- sed -i "s|REPOSITORY_URI|${REPOSITORY_URI}|g" taskdef.json- sed -i "s|IMAGE_TAG|${IMAGE_TAG}|g" taskdef.json- sed -i "s|TASK_ROLE_ARN|${TASK_ROLE_ARN}|g" taskdef.json- sed -i "s|EXECUTION_ROLE_ARN|${EXECUTION_ROLE_ARN}|g" taskdef.json- sed -i "s|TASK_DEFINITION_ARN|${TASK_DEFINITION_ARN}|g" appspec.yaml- cat appspec.yaml && cat taskdef.json
2.3 对CodeBuild project
赋予权限(ECR
的image repo
)
# Grants CodeBuild project access to pull/push images from/to ECR repoimage_repo.grant_pull_push(build_image)
2.4 生成lambda
函数触发codebuild
的首次执行
2.4.1 生成lambda
函数触发codebuild
整体架构如下:
- aws custom resource triggers lambda on create event
- lambda executes code build project
- code build project starts source stage,build stage and deploy stage
2.4.2 lambda
函数触发codebuild
的代码
CDK
代码
注意,这里赋予了lamba
权限,允许执行code build
# Lambda function that triggers CodeBuild image build projecttrigger_code_build = lambda_.Function(self, "BuildLambda",architecture=lambda_.Architecture.ARM_64,code=lambda_.Code.from_asset("lambda"),handler="trigger-build.handler",runtime=lambda_.Runtime.NODEJS_18_X,environment={"CODEBUILD_PROJECT_NAME": build_image.project_name,"REGION": os.getenv('CDK_DEFAULT_REGION') or ""},# Allows this Lambda function to trigger the buildImage CodeBuild projectinitial_policy=[iam.PolicyStatement(effect=iam.Effect.ALLOW,actions=["codebuild:StartBuild"],resources=[build_image.project_arn])])
lambda
函数代码
const {CodeBuildClient,StartBuildCommand,
} = require("@aws-sdk/client-codebuild");exports.handler = async (event) => {const region = process.env.REGION;const buildProjectName = process.env.CODEBUILD_PROJECT_NAME;const codebuild = new CodeBuildClient({ region: region });const buildCommand = new StartBuildCommand({ projectName: buildProjectName });console.log("Triggering CodeBuild Project...");const buildResponse = await codebuild.send(buildCommand);console.log(buildResponse);return {statusCode: 200,body: "CodeBuild Project building...",};
};
2.4.3 AWS Custom Resource
的代码
# Triggers a Lambda function using AWS SDKtrigger_lambda = custom.AwsCustomResource(self, "BuildLambdaTrigger",install_latest_aws_sdk=True,policy=custom.AwsCustomResourcePolicy.from_statements([iam.PolicyStatement(effect=iam.Effect.ALLOW,actions=["lambda:InvokeFunction"],resources=[trigger_code_build.function_arn],)]),on_create={"service": "Lambda","action": "invoke","physical_resource_id": custom.PhysicalResourceId.of("id"),"parameters": {"FunctionName": trigger_code_build.function_name,"InvocationType": "Event",},},on_update={"service": "Lambda","action": "invoke","parameters": {"FunctionName": trigger_code_build.function_name,"InvocationType": "Event",},})
2.5 创建vpc
和ecs cluster
2.5.1 创建vpc
# Creates VPC for the ECS Clustercluster_vpc = ec2.Vpc(self, "ClusterVpc",ip_addresses=ec2.IpAddresses.cidr(cidr_block="10.75.0.0/16"))# Deploys the cluster VPC after the initial image build triggerscluster_vpc.node.add_dependency(trigger_lambda)
注意,这里创建vpc
需要依赖trigger _lambda
,只有当trigger lambda
的aws custom resource
创建好了,才能创建vpc
。
2.5.2 创建蓝绿部署
-
蓝绿部署的整体架构
- 【1】利用
CodeDepoly
服务,开始进行application deploy
- 【2】生成导入新的
application
的Green Group
- 【3】在
Application
对开发者设定对Green Group
的访问的listener
- 【4】开发者对
Green Group
进行动作确认,确保生产环境上没有问题 - 【5】在
Application
对一般用户设定对访问的listener
,让其指向Green Group
,设定Blue Group
为新的Green Group
- 【6】删除原来的
Blue Group
。这里取决于设定的策略,可能不是马上删除。
- 【1】利用
-
创建
ApplicationTargetGroup(blue)
蓝色目标组target_group_blue = elb.ApplicationTargetGroup(self, "BlueTargetGroup",target_group_name="alb-blue-tg",target_type=elb.TargetType.IP,port=80,vpc=cluster_vpc)
-
创建
ApplicationTargetGroup(green)
绿色目标组# Creates a new green Target Grouptarget_group_green = elb.ApplicationTargetGroup(self, "GreenTargetGroup",target_group_name="alb-green-tg",target_type=elb.TargetType.IP,port=80,vpc=cluster_vpc)
2.5 创建Application Loader Balancer
注意,这里 default_target_groups=[target_group_blue]
默认的target group
设成了blue group
。
# Creates a new green Target Grouptarget_group_green = elb.ApplicationTargetGroup(self, "GreenTargetGroup",target_group_name="alb-green-tg",target_type=elb.TargetType.IP,port=80,vpc=cluster_vpc)# Creates a Security Group for the Application Load Balancer (ALB)albSg = ec2.SecurityGroup(self, "AlbSecurityGroup",vpc=cluster_vpc,allow_all_outbound=True)albSg.add_ingress_rule(peer=ec2.Peer.any_ipv4(),connection=ec2.Port.tcp(80),description="Allows access on port 80/http",remote_rule=False)# Creates a public ALBpublic_alb = elb.ApplicationLoadBalancer(self, "PublicAlb",vpc=cluster_vpc,internet_facing=True,security_group=albSg)# Adds a listener on port 80 to the ALBalb_listener = public_alb.add_listener("AlbListener80",open=False,port=80,default_target_groups=[target_group_blue])
2.6 创建fargate service
2.6.1 创建fargate service
注意,这里直接在创建fargate service
的时候,直接创建ecs cluster
。并且将task def
和ecs cluster
联系起来。
# Creates an ECS Fargate servicefargate_service = ecs.FargateService(self, "FargateService",desired_count=1,service_name="fargate-frontend-service",task_definition=fargate_task_def,cluster=ecs.Cluster(self, "EcsCluster",enable_fargate_capacity_providers=True,vpc=cluster_vpc),# Sets CodeDeploy as the deployment controllerdeployment_controller=ecs.DeploymentController(type=ecs.DeploymentControllerType.CODE_DEPLOY),)
2.6.1 在fargate service
上进行application target group
的attach
# Adds the ECS Fargate service to the ALB target group
fargate_service.attach_to_application_target_group(target_group_blue)
2.7 创建code pipeline
2.7.2 codepipe
整体架构
2.7.1 创建pipeline artifacts
# Creates new pipeline artifactssource_artifact = pipeline.Artifact("SourceArtifact")build_artifact = pipeline.Artifact("BuildArtifact")
source_artifact
是由source_stage
作成,由build_stage
进行使用build_artifact
是由build_stage
作成,由deploy_stage
进行使用,并且包括:appspec.yml
taskdef.json
2.7.2 创建source stage
# Creates the source stage for CodePipelinesource_stage = pipeline.StageProps(stage_name="Source",actions=[pipelineactions.GitHubSourceAction(action_name="GitHub",owner='XXXXXX', # TODO: Replace with your GitHub usernamerepo='web_app', # TODO: Replace with your GitHub repository namebranch="main",oauth_token=SecretValue.secrets_manager("github-access-token-secret"),output=source_artifact,)])
- 这里,需要设定几个地方:
owner
这里是github
工程的用户名,这里就是自己的github
账号。repo
这里是github
库的名字。oauth_token
,因为需要将aws
的url(callback)
,注册给github
,所以需要oauth_token
进行验证。因为aws
的source stage
需要检测到github
的commit
,自动触发code pipeline
,所以需要注册url(callback)
。
下面的就是讲本次example
程序中的application
的部分push
到github
,创建一个示例的web application
。
github
的webhooks
和codepipeline
交互
- 在
cdk
中练习使用aws secret manager
2.7.3 创建build stage
# Creates the build stage for CodePipelinebuild_stage = pipeline.StageProps(stage_name="Build",actions=[pipelineactions.CodeBuildAction(action_name="DockerBuildPush",input=pipeline.Artifact("SourceArtifact"),project=build_image,outputs=[build_artifact])])
- 这里使用
source stage
生成的source artifact
,进行docker build
,之后将docker image
进行push
到aws ecr
。 project
设定这里要设定成前面创建的build_image
2.7.4 创建deploy stage
- 整体构造
- 创建
deployment group
# Creates a new CodeDeploy Deployment Groupdeployment_group = codedeploy.EcsDeploymentGroup(self, "CodeDeployGroup",service=fargate_service,# Configurations for CodeDeploy Blue/Green deploymentsblue_green_deployment_config=codedeploy.EcsBlueGreenDeploymentConfig(listener=alb_listener,blue_target_group=target_group_blue,green_target_group=target_group_green))
- 创建
deploy stage
# Creates the deploy stage for CodePipelinedeploy_stage = pipeline.StageProps(stage_name="Deploy",actions=[pipelineactions.CodeDeployEcsDeployAction(action_name="EcsFargateDeploy",app_spec_template_input=build_artifact,task_definition_template_input=build_artifact,deployment_group=deployment_group)])
2.8 创建code pipeline
2.8.1 为code build
设定github
的confidential
# Store Github credentials to CodeBuildcodebuild.GitHubSourceCredentials(self, "CodeBuildGitHubCreds",access_token=SecretValue.secrets_manager("github-access-token-secret"))
2.8.2 最终创建pipeline
# Creates an AWS CodePipeline with source, build, and deploy stagespipeline.Pipeline(self, "BuildDeployPipeline",pipeline_name="ImageBuildDeployPipeline",stages=[source_stage, build_stage, deploy_stage])
3 执行CDK
执行后继续更新。
相关文章:
aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual
文章目录 aws(学习笔记第三十八课) codepipeline-build-deploy-github-manual学习内容:1. 整体架构1.1 代码链接1.2 全体处理架构 2. 代码分析2.1 创建ImageRepo,并设定给FargateTaskDef2.2 创建CodeBuild project2.3 对CodeBuild project赋予权限&#…...
【数据分享】1999—2023年地级市市政公用事业和邮政、电信业发展情况相关指标(Shp/Excel格式)
在之前的文章中,我们分享过基于2000-2024年《中国城市统计年鉴》整理的1999-2023年地级市的人口相关数据、染物排放和环境治理相关数据、房地产投资情况和商品房销售面积相关指标数据、社会消费品零售总额和年末金融机构存贷款余额、各类用地面积、地方一般公共预算…...
vscode 跳转失败之c_cpp_properties.json解析
{"configurations": [{"name": "Linux", // 配置名称,对应当前平台,VS Code 中可选"includePath": ["${workspaceFolder}/**", // 包含当前工作区下所有文件夹的头文件(递归&…...
批量将图片转换为 jpg/png/Word/PDF/Excel 等其它格式
图片的格式种类非常的多,常见的图片格式就有 jpg、png、webp、bmp 等等,我们在工作当中经常会碰到需要将一种格式的图片转换为其他格式的需求。今天就给大家介绍一种方法,可以实现批量转换图片格式,支持各种格式的图片之间相互转换…...
MCP+Blender创建电力塔
MCP(Model Context Protocol)与Blender的结合是当前AI与3D建模领域的热门技术,它通过协议化的方式让Claude等AI模型直接控制Blender,实现自动化3D建模。 1. 功能与原理 • 核心能力:用户通过自然语言指令(…...
kafka存储原理
topic分着存储在broker的分区中,分区进一步分为segment。 日志目录中的每一组文件都代表一个段。 段文件名中的后缀表示该段的基本偏移量。 log.segment.bytes表示分段的最大大小。 消息写入分区时,kafka会将这些消息写入段,写满了再创建一个…...
Arduino开发物联网ESP32快速入门指南(包含开发语言说明、学习路径和实战教程)
一、Arduino开发语言本质 核心语言:基于C/C的扩展语言,包含Arduino特有的API和库 特点: 去除了C的复杂特性(如STL) 内置硬件操作函数(digitalWrite()、analogRead()等) 支持面向对象编程&…...
《系统架构设计师教程(第2版)》第19章-大数据架构设计理论与实践-01-传统数据处理系统存在的问题
文章目录 1. 异步处理队列2. 数据库分区3 读写分离4. 基于Hadoop的 Map/Reduce 管道 1. 异步处理队列 出现的原因:用户访问量增加,数据库无法支撑用户请求的负载,导致数据库服务器无法及时响应用户请求解决:在Web服务器和数据库中…...
Vue接口平台学习五——测试环境页面
一、实现效果图及界面布局简单梳理 这块内容分左侧,中间,右侧三大部分 左侧: 上面一行固定内容,显示icon,名字,一个按钮。下面部分通过v-for循环读取数据库获取的测试环境列表用来展示名称。 中间&#…...
FFMpeg视频编码实战和音频编码实战
视频编码流程 avcodec_find_encoder:首先,通过指定的编码器名称(如H.264、MPEG-4等)找到对应的编码器。avcodec_alloc_context3:为找到的编码器分配一个上下文结构,这个结构包含了编码器所需的各种参数和状…...
vue+uniapp 获取上一页直接传递的参数
在小程序里页面之间跳转有时候需要传递参数给下个页面用 const toDetail item > { uni.navigateTo({ url: /pagesFood/stu/FoodSelection?groupCode1&merchCode2, }); }; 那么下个页面就要获取到这些参数,在实际开发中ÿ…...
各种排序思路及实现
目录 1.排序概念常见的排序算法 2.常见排序算法实现(1)插入排序直接插入排序希尔排序(缩小增量排序) (2)选择排序直接选择排序堆排序 (3)交换排序冒泡排序快速排序(hoare…...
GPT文生图模型新玩法
GPT-4o发布了最新的生图模型GPT-4o-Image,在图像控制力、一致性上实现了显著提升,其表现甚至展现出超越Midjourney的潜力。这款模型不仅能读懂细致的指令,还能赋予照片艺术化的新生命。接下来,我们将介绍几个有趣的实践方向&#…...
uni-app ucharts自定义换行tooltips
实现效果: 第一步:在uni_modules文件夹下找到config-ucharts.js和u-charts.js文件 第二步:在config-ucharts.js文件中配置换行格式 // 换行格式"wrapTooltip":function(item, category, index, opts){return item.name:…...
java 集合进阶
双列集合 map 实例 package mymap;import java.util.HashMap; import java.util.Map;public class MapDemo1 {public static void main(String[] args) {/*V put(K key,v value)添加元素V remove(object key)根据键删除键值对元素void clear()移除所有的键值对元素boolean c…...
RPC 2025/4/8
RPC(Remote Procedure Call),远程过程调用。 应用场景:大型微服务项目,服务部署到不同的服务器上,需要远程调用,可以使用RPC。 两个概念: 远程过程调用本地调用 RPC目的:…...
浅层神经网络:全面解析(扩展)
浅层神经网络:全面解析(扩展) 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,可以分享一下给大家。点击跳转到网站。 https://www.captainbed.cn/ccc 一、神经网络架构演进图谱 #mermaid-svg-…...
【Hadoop入门】Hadoop生态之ZooKeeper简介
1 什么是ZooKeeper? 在分布式系统的世界里,协调各节点之间的工作是一项复杂而关键的任务。ZooKeeper正是为解决这一问题而生的开源分布式协调服务,它像一个高效的"和事佬",帮助分布式系统中的各个组件达成一致、同步状态…...
树和图论(详细整理,简单易懂!)
树和图论 树的遍历模版 #include <iostream> #include <cstring> #include <vector> #include <queue> // 添加queue头文件 using namespace std;const int MAXN 100; // 假设一个足够大的数组大小 int ls[MAXN], rs[MAXN]; // 定义左右子树数…...
CWGAN-GP 原理及实现(pytorch版)
CWGAN-GP 一、CWGAN-GP 原理1.1 CWGAN-GP 的核心改进1.2 CWGAN-GP 的损失函数1.3 CWGAN-GP 的优势1.4 关键参数选择1.5 应用场景 二、CWGAN-GP 实现2.1 导包2.2 数据加载和处理2.3 构建生成器2.4 构建判别器2.5 训练和保存模型2.6 查看训练损失2.7 图片转GIF2.8 模型加载和推理…...
zookeeper平滑扩缩容
在进行ZooKeeper的扩容和缩容操作时,需要注意以下几点: 数据一致性 重要性:ZooKeeper的核心特性之一是保证数据的一致性。在操作过程中,必须确保数据的一致性,以避免数据丢失或损坏。 实现方式:ZooKeeper通…...
Github 热点项目 ChartDB AI自动导表结构+迁移脚本,3分钟生成专业数据库关系图
ChartDB堪称数据库设计神器!亮点①:动动手指输入SQL,秒出结构图,表关系一目了然,团队评审时再也不用画图两小时。亮点②:AI智能转换超贴心,MySQL转PostgreSQL只需点个按钮,跨平台迁移…...
RVOS-1.环境搭建与系统引导
0.环境搭建 riscv-operating-system-mooc: 开放课程《循序渐进,学习开发一个 RISC-V 上的操作系统》配套教材代码仓库。 mirror to https://github.com/plctlab/riscv-operating-system-mooc 在 Ubuntu 20.04 以上环境下我们可以直接使用官方提供的 GNU工具链和 QEM…...
Java List<JSONObject> 转换为 List<实体类>
可以使用 Fastjson 的 toJavaObject 方法直接转换,无需中间序列化步骤。以下是具体实现和注意事项: import com.alibaba.fastjson.JSONObject; import java.util.List; import java.util.stream.Collectors;public class Converter {public static List…...
CesiumEarth v1.12 更新,支持安卓平板离线浏览3DTiles格式的三维倾斜模型
CesiumEarth v1.12 更新 2025年4月8日 阅读需 1 分钟 发布时间:2025年04月08日 新增用户登录: 从1.12版本开始需要通过登录方可使用CesiumEarth 账号可以通过邮箱免费注册 后续将陆续发布云服务相关的功能 发布Desktop版本: Deskt…...
OpenEuler运维实战-系统资源监控与性能优化-CPU·内存·IO
CPU 基本概念定界定位思路常用CPU性能分析工具 基本概念 中央处理器(Central Processing Unit,简称CPU)是计算机的主要设备之一,其功能是解释计算机指令以及处理计算机软件中的数据。 物理核:可以真实看到的CPU核&…...
react实现SVG地图区域中心点呈现圆柱体,不同区域数据不同,圆柱体高度不同
效果图: 代码: import React, { useState, useEffect } from react;const InnerMongoliaMap () > {// 每个区域的数据(名称、中心坐标、圆柱体高度值)const [regionData, setRegionData] useState([{ id: "呼和浩特市…...
Qwen - 14B 怎么实现本地部署,权重参数大小:21GB
Qwen - 14B 权重参数大小:21GB 参数量与模型占用存储空间(GB)是不同概念。Qwen - 14B参数量约140亿 。其模型大小在不同精度下占用存储空间不同,如在一些资料中提到,Qwen - 14B在特定情况下占用空间约21GB 。实际存储…...
线程实现参考资料
参考 并发编程系列 - Java线程池监控及CompletableFuture详解_taskexecutor.execute没有执行如何监控到-CSDN博客 JAVA异步实现的四种方式_java异步编程的四种方法-CSDN博客 Java线程池深度解析与自定义实战-CSDN博客 Java8 CompletableFuture 异步多线程的实现_java_脚本之…...
python-63-前后端分离之图书管理系统的Flask后端
文章目录 1 flask后端1.1 数据库实例extension.py1.2 数据模型models.py1.3 .flaskenv1.4 app.py1.5 运行1.6 测试链接2 关键函数和文件2.1 请求视图类MethodView2.2 .flaskenv文件3 参考附录基于flask形成了图书管理系统的后端,同时对其中使用到的关键文件.flaskenv和函数类M…...
Qt网络编程之服务端
Qt网络编程之服务端 TCP(传输控制协议)是一种可靠的、面向流的、面向连接的传输协议。它特别适合连续的数据传输。 1. 主要类和函数 1.1 QTcpServer 监听函数: bool QTcpServer::listen(const QHostAddress &address QHostAddress::…...
案例-流量统计
1.建一个data目录,在data下建log.txt文件 输入手机号码 上行流量 下行流量 2.在com.example.flow下建四个Java类3.flowBean flowMapper flowReducer flowDriver...
开源身份和访问管理方案之keycloak(二)管理员引导和恢复
文章目录 开源身份和访问管理方案之keycloak(二)管理员引导和恢复管理员引导和恢复在 Keycloak 启动时引导临时管理员帐户对于恢复丢失的管理员访问权限使用专用命令引导管理员用户或服务帐户创建一个管理员用户创建一个服务账号重新获得对具有更高安全性…...
TCP,UDP协议和域名地址
1.TCP(传输控制协议)是面向连接,UDP(用户数据报协议)是无连接的 2.应用层:FTP,HTTP,SMTP,TELNET,DNS,TFTP 传输层;TCP,UDP 网际层:IP,ICMP,ARP,RARP 3.TCP21:20端口数据传输;21端…...
算法进阶指南 分形
问题描述 分形,具有以非整数维形式充填空间的形态特征。通常被定义为: “一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。 现…...
2025年 npm淘宝镜像最新地址
查看当前镜像 npm config get registry 切换陶宝镜像源 npm config set registry https://registry.npmmirror.com/ 验证npm镜像源是否切换成功 npm config get registry 如果返回的地址是https://registry.npmmirror.com/,那么说明你已经成功切换到淘宝的npm…...
0基础 | 硬件 | LM386芯片
LM386芯片:音频功率放大器芯片 内部集成三极管功能将微弱信号放大20-200倍,并且驱动内阻为8Ω的扬声器注意CD系列芯片,内部集成MOS管 LM386特性 LM386主要由以下三个部分组成 内部电路 差分输入 差分输入 多个三极管左右对称,形…...
Spring Boot集成APK Parser库实现APK文件解析
目录 1. 添加依赖 2. 创建APK解析服务 3. 创建控制器 4. 测试 注意事项 在Spring Boot项目中集成APK Parser库并解析APK文件,可以按照以下步骤进行操作: 1. 添加依赖 在项目的pom.xml文件中添加apk-parser库的依赖: <dependency&…...
java基础 迭代Iterable接口以及迭代器Iterator
Itera迭代 Iterable < T>迭代接口(1) Iterator iterator()(2) forEach(Consumer<? super T> action)forEach结合Consumer常见场景forEach使用注意细节 (3)Spliterator spliterator() Iterator< T>迭代器接口如何“接收” Iterator<T>核心方法迭代器的…...
Linux: network: tcpdump: packets dropped by kernel
文章目录 最近遇到一个问题原因libpcap/tcpdump 接口linux/libpcap 接口内核的处理原因可能有以下几种:解决方法:man pcap_stats最近遇到一个问题 tcpdump命令显示有dropped的包,而且是被内核drop的。 [root@-one-01 ~]# tcpdump -i any udp and port 8080 -v -w /root/udp…...
TCP三次握手和TCP四次挥手
一 TCP三次握手 TCP建立连接的过程叫做握手,握手需要客户端和服务器之间交换三个TCP报文段。如图所示,假设主机A为TCP客户端,主机B为TCP服务端。在最初时间,两端的TCP进程都是处于CLOSED状态 (1)主机A主动…...
博途 TIA Portal之1200做主站与调试助手的TCP通讯
博途支持的通讯非常多,常见的有S7、TCP/IP,UDP等等,本文将演示TCP的通讯,通讯的双方是1200PLC和调试助手之间,编程采用ST语言。 1、硬件准备 1200PLC一台,带调试助手的PC机一台,调试助手是我经…...
第十天 - socket编程基础 - TCP/UDP服务开发 - 练习:简易端口扫描器
Python网络编程入门:从Socket到端口扫描器实战 一、前言:为什么要学网络编程? 在这个万物互联的时代,掌握网络编程技术就像拥有了一把打开互联网世界的钥匙。无论是开发聊天软件、网络游戏,还是构建分布式系统&#…...
欧税通香港分公司办公室正式乔迁至海港城!
3月20日,欧税通香港分公司办公室正式乔迁至香港油尖旺区的核心商业区海港城!左手挽着内地市场,右手牵起国际航道——这波乔迁选址操作堪称“地理课代表”! 乔迁仪式秒变行业大联欢!感谢亚马逊合规团队、亚马逊云、阿里国际站、Wayfair、coupang、美客多…...
Maven的安装配置-项目管理工具
各位看官,大家早安午安晚安呀~~~ 如果您觉得这篇文章对您有帮助的话 欢迎您一键三连,小编尽全力做到更好 欢迎您分享给更多人哦 今天我们来学习:Maven的安装配置-项目管理工具 目录 1.什么是Maven?Maven用来干什么的?…...
【Linux篇】缓冲区的工作原理:如何影响你程序的输入输出速度
从内存到磁盘:缓冲区如何提升文件I/O效率 一. 缓冲区1.1 什么是缓冲区1.2 为什么要引入缓冲区1.3 缓冲区类型1.4 FILE1.4.1 基本概念1.4.2 FILE 结构体的作用1.4.3 FILE 的工作机制 二. 最后 在程序开发中,缓冲区是一个经常被提及却不容易深入理解的概念…...
编写junit测试类 import org.junit.Test;
1. 添加依赖 <!-- Spring Boot Starter Test --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> 2. …...
初识数据结构——深入理解LinkedList与链表:吃透LinkedList与链表的终极指南
📌 深入理解LinkedList与链表:从原理到实战应用 🌟 引言 在Java集合框架中,LinkedList和ArrayList是最常用的两种列表结构。它们各有优劣,适用于不同的场景。本文将带你深入探索LinkedList的底层实现——链表&#x…...
C++版Qt之登录界面设计
在C开发中,使用Qt框架可以快速构建美观且功能强大的GUI应用程序。本文将介绍如何设计一个漂亮的登录界面,包括账号和密码输入框,并确保只有验证成功后才能进入主窗口。 项目结构 文件列表 LoginDialog.h:登录对话框的头文件Logi…...
Java logback框架日志输出中文乱码的解决方案(windows)
在Java开发中,日志记录是一个重要的部分,它可以帮我们定位问题、运行时监控、错误排查与故障恢复。但是,在有些情况下,使用Logback记录的中文日志会出现乱码,这会影响日志的可读性,给维护带来麻烦。本文将探…...