程序部署环境的容器化已经是大势所趋,微服务为容器化提供了广阔的应用舞台,k8s已经把Docker纳入为它的底层支撑容器引擎,一统江湖,成为了容器技术事实上的标准。一般的应用程序是不能直接拿来部署到容器上的,需要经过一些修改才能移植到k8s上。那么这些改动包括哪些内容呢?

它主要有两个部分:
第一部分是服务调用。不论是微服务之间的调用,还是微服务调用数据库或前端调用后端,调用的方式都是一样的。都需要知道IP地址,端口和协议,例如“http://127.0.0.1:80”, 其中“http”是协议,“127.0.0.1”是IP地址,“80”是端口。它的关键是让k8s的配置文件和应用程序都共享相同的调用地址。
第二部分是数据的持久存储。在程序运行时,经常要访问持久存储(硬盘)上的数据,例如日志,配置文件或临时共享数据。程序在容器中运行,一旦出现问题,容器会被摧毁,k8s会自动重新生成一个与原来一模一样的容器,并在上面重新部署应用程序。在集群环境下,用户感觉不到容器故障,因为系统已经自动修复了。但当容器被摧毁时,容器上的数据也一起被摧毁了,因此要保证程序运行的连续性,就要让持久存储不受容器故障的影响。

程序实例:

我们通过一个Go(别的语言也大同小异)微服务程序做例子来展示要做的修改。它本身的功能非常简单,只是用SQL语句访问数据库中的数据,并写入日志。你可以简单地把它分成两层,后端数据访问层和数据库层。在k8s中它被分成两个服务。一个是后端服务程序,另一个是数据库(用MySQL)服务。后端程序要调用数据库服务,然后会把一些数据写入日志,而且这个日志不能因为容器故障而丢失。数据库对数据的保存要求更高,即使k8s集群或虚拟机出了问题或断电也要保证数据的存在。

file

上面是程序的目录结构。我们重点讲一下与k8s相关的。“config”目录包含与程序配置有关的代码,“logs”目录是用来存储日志文件的,没有代码。“script”目录是重点,里面包含了所有与部署程序相关的文件。其中“database”子目录里面是数据库脚本,“kubernetes”子目录存有k8s的所有配置文件,一回儿还会详细讲解。

服务调用:

服务调用涉及到两个不同的部分。一部分是k8s的配置文件,它负责服务的注册和发现。所有部署在k8s上的应用都通过k8s的服务来进行互相调用。另一部分是应用程序,它需要通过k8s的服务来访问其他程序。在没有k8s时,后端要想访问数据库,代码是这样的:

db, err := sql.Open("mysql", "dbuser:dbuser@tcp(localhost:3306)/service_config?charset=utf8")

其中,“dbuser:dbuser”是数据库用户名和口令,“localhost:3306”是数据库主机名和端口地址,“service-config”是数据库名,共有五个数据需要读取。迁移到k8s之后,我们要把这些参数从程序中提取出来,转化成从k8s中读取相关数据。

k8s配置:

先来看一下k8s的配置文件。

file

上面就是k8s的配置文件目录结构,最外层(kubernetes目录下)有两个“yaml”文件“k8sdemo-config.yaml”和"k8sdemo-secret.yaml",它们是被不同服务共享的,因此放在最外层。另外还有一个"k8sdemo.sh"文件是k8s命令文件,用来创建k8s对象。“kubernetes”目录下有两个子目录“backend”和“database”分别存放后端程序和数据库的配置文件。它们内部的结构是类似的,都有三个“yaml”文件:
backend-deployment.yaml:部署配置文件,
backend-service.yaml:服务配置文件
backend-volume.yaml:持久卷配置文件.

关于k8s的核心概念,请参阅“通过实例快速掌握k8s(Kubernetes)核心概念”. “backend”目录还多了一个“docker”子目录用来存储backend应用的Docker镜像,database的镜像文件直接从Docker的库中取得,因此不需要另外生成镜像文件。

k8s参数配置:

要想集成应用程序和k8s需要两个层面的参数共享,一个是应用程序和k8s之间的参数共享,另一个是不同k8s服务之间的参数共享。

k8s共享参数定义:

共享参数可以通过两种方式实现,一个是环境变量,另一个是持久卷。这两种方式大同小异,我们这里用环境变量的方式。这其中最关键的是“k8sdemo-config.yaml”和"k8sdemo-secret.yaml"这两个文件,它们分别存储了普通参数和保密参数。这些参数是属于整个应用程序的,被各个服务共享。

下面就是“k8sdemo-config.yaml”,它里面(在“data:”下面)定义了三个数据库参数,分别是数据库主机(MYSQL_HOST),数据库端口(MYSQL_PORT),数据库名(MYSQL_DATABASE)。

apiVersion: v1
kind: ConfigMap
metadata:name: k8sdemo-config  # ConfigMap的名字, 在引用数据时需要labels:app: k8sdemo
data:MYSQL_HOST: k8sdemo-database-service   # 数据库主机MYSQL_PORT: "3306" # 数据库端口MYSQL_DATABASE: service_config # 数据库名

下面就是“k8sdemo-secret.yaml”,它里面(在“data:”下面)也定义了三个数据库参数,根用户口令(MYSQL_ROOT_PASSWORD),普通用户名(MYSQL_USER_NAME),普通用户口令(MYSQL_USER_PQSSWORD)

apiVersion: v1
kind: Secret
metadata:name: k8sdemo-secretlabels:app: k8sdemo
data:MYSQL_ROOT_PASSWORD: cm9vdA== # 根用户口令("root")MYSQL_USER_NAME: ZGJ1c2Vy # 普通用户名("dbuser")MYSQL_USER_PASSWORD: ZGJ1c2Vy # 普通用户口令("dbuser") 

有关k8s的参数配置详细信息,请参阅“通过搭建MySQL掌握k8s(Kubernetes)重要概念(下):参数配置”.

引用k8s共享参数:

下面就是“backend-deployment.yaml”,它定义了“backend“服务的部署(Deployment)配置。它的“containers:”部分定义了容器,“env:”部分定义了环境变量,也就是我们所熟悉的操作系统的环境变量,一般是由系统来定义。不同的系统例如Linux和Windows都有自己的方法来定义环境变量。

apiVersion: apps/v1
kind: Deployment
metadata:name: k8sdemo-backend-deploymentlabels:app: k8sdemo-backend
spec:selector:matchLabels:app: k8sdemo-backendstrategy:type: Recreatetemplate:metadata:labels:app: k8sdemo-backendspec:containers: # 定义容器- image: k8sdemo-backend-full:latestname: k8sdemo-backend-containerimagePullPolicy: Neverenv: # 定义环境变量- name: MYSQL_USER_NAMEvalueFrom:secretKeyRef:name: k8sdemo-secretkey: MYSQL_USER_NAME- name: MYSQL_USER_PASSWORDvalueFrom:secretKeyRef:name: k8sdemo-secretkey: MYSQL_USER_PASSWORD- name: MYSQL_HOSTvalueFrom:configMapKeyRef:name: k8sdemo-configkey: MYSQL_HOST- name: MYSQL_PORTvalueFrom:configMapKeyRef:name: k8sdemo-configkey: MYSQL_PORT- name: MYSQL_DATABASEvalueFrom:configMapKeyRef:name: k8sdemo-configkey: MYSQL_DATABASEports:- containerPort: 80name: portnamevolumeMounts:- name: k8sdemo-backend-persistentstoragemountPath: /app/logsvolumes:- name: k8sdemo-backend-persistentstoragepersistentVolumeClaim:claimName: k8sdemo-backend-pvclaim

k8s的环境变量主要是用来向容器传递参数的。环境变量引用了“k8sdemo-config.yaml”和"k8sdemo-secret.yaml"文件里的参数,这样就在k8s内部用过共享参数定义和参数引用实现了k8s层的参数共享。

下面是部署配置文件里的环境变量的片段。“ - name: MYSQL_USER_PASSWORD”是环境变量名,“secretKeyRef”说明它的值来自于secret,“name: k8sdemo-secret”是secret的名字,“key: MYSQL_USER_PASSWORD”是secret里的键名,它的最终含义就是环境变量“MYSQL_USER_PASSWORD”的值是由secret里的量“MYSQL_USER_PASSWORD”来定义。

 env:- name: MYSQL_USER_PASSWORDvalueFrom:secretKeyRef:name: k8sdemo-secretkey: MYSQL_USER_PASSWORD

下面是另一个定义环境变量的片段,与上面的类似,只不过它的键值来自于configMap,而不是secret。

 env:- name: MYSQL_DATABASEvalueFrom:configMapKeyRef:name: k8sdemo-configkey: MYSQL_DATABASE

关于k8s的部署配置细节,请参阅“通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷”. "

程序和k8s的参数共享:

k8s在创建容器时,会创建环境变量。应用程序在容器里运行时可以从环境变量里读取共享参数已达到应用程序和k8s共享参数的目的。下面就是Go程序访问数据库的代码片段。


type dbConfig struct {dbHost     stringdbPort     stringdbDatabase stringdbUser stringdbPassword string
}func buildMysql() (dataservice.UserDataInterface, error) {tool.Log.Debug("connect to database ")dc :=  buildDbConfig ()dataSourceName := dc.dbUser   ":"  dc.dbPassword   "@tcp("  dc.dbHost  ":"  dc.dbPort  ")/"   dc.dbDatabase   "?charset=utf8";tool.Log.Debug("dataSourceName:", dataSourceName)//db, err := sql.Open("mysql", "dbuser:dbuser@tcp(localhost:3306)/service_config?charset=utf8")db, err := sql.Open("mysql", dataSourceName)checkErr(err)dataService := userdata.UserDataMysql{DB: db}return &dataService, err
}func buildDbConfig () dbConfig{dc :=dbConfig{}dc.dbHost = os.Getenv("MYSQL_HOST")dc.dbPort = os.Getenv("MYSQL_PORT")dc.dbDatabase = os.Getenv("MYSQL_DATABASE")dc.dbUser = os.Getenv("MYSQL_USER_NAME")dc.dbPassword = os.Getenv("MYSQL_USER_PASSWORD")return dc
}

上面程序中,“buildDbConfig()”函数从环境变量中读取k8s给容器设置好的参数,并上传给“buildMysql()”函数,用来连接数据库。上面是用Go程序读取环境变量,但其它语言例如Java也有类似的功能。

持久存储:

“backend”服务日志:

持久存储相对比较简单,它不需要做额外的应用程序修改 ,但需要程序和k8s相互配合来完成。

Go代码:

下面是日志设置的Go代码片段,它把日志的输出设为k8sdemo的logs目录和Stdout。

func RegisterLogrusLog() error {//standard configurationlog := logrus.New()log.SetFormatter(&logrus.TextFormatter{})log.SetReportCaller(true)file, err := os.OpenFile("../logs/demo.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)if err != nil {fmt.Println("Could Not Open Log File : ", err)return errors.Wrap(err, "")}mw := io.MultiWriter(os.Stdout,file)log.SetOutput(mw)...return nil
}

挂载持久卷:

下一步要做的就是挂载本地目录到容器的“logs”目录,这样日志在写入“logs”目录的时候就写入了本地目录。下面是生成k8s持久卷的配置文件“backend-volume.yaml”,它内部分成两部分(用“—”隔开)。上半部分是持久卷,下半部分是持久卷申请。它由本地硬盘的“/home/vagrant/app/k8sdemo/logs”目录生成k8s的持久卷。

apiVersion: v1
kind: PersistentVolume
metadata:name: k8sdemo-backend-pvlabels:app: k8sdemo-backend
spec:capacity:storage: 1GivolumeMode: FilesystemaccessModes:- ReadWriteOncestorageClassName: standardlocal:path: /home/vagrant/app/k8sdemo/logsnodeAffinity:required:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- minikube
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:name: k8sdemo-backend-pvclaimlabels:app: k8sdemo-backend
spec:accessModes:- ReadWriteOnce# storageClassName: local-storageresources:requests:storage: 1Gi #1 GB

下面是“backend-deployment.yaml”部署文件片段,它把k8s的持久卷挂载到容器的“app/logs”上。

          volumeMounts:- name: k8sdemo-backend-persistentstoragemountPath: /app/logsvolumes:- name: k8sdemo-backend-persistentstoragepersistentVolumeClaim:claimName: k8sdemo-backend-pvclaim

完成之后,就可以在本地目录上查看日志文件,这样即使容器或k8s集群出现问题,日志也不会丢失。

为什么目录是“app/logs”呢?因为在生成“beckend”的镜像时,设定的容器的运行程序根目录是“app”。关于如何创建Go镜像文件,请参阅“创建优化的Go镜像文件以及踩过的坑”.

数据库持久卷:

Mysql数据库的持久卷设置与日志类似,详情请参阅“通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷”.

存在的问题:

细心的读者可能已经发现了,在定义的环境变量中,有两个与其他的有些不同,这两个就是“MYSQL_HOST”和"MYSQL_PORT"。所有的环境变量都是在参数文件(k8sdemo-config.yaml)中定义,别的环境变量是在k8s配置文件(例如backend-deployment.yaml)中引用,但这两个虽然在k8s的部署配置文件提到了,但只是用来定义环境变量,最终只是被应用程序引用了,但服务的配置文件并没有真正引用它。

apiVersion: v1
kind: Service
metadata:name: k8sdemo-database-service # 这里并没有引用环境变量labels:app: k8sdemo-database
spec:type: NodePortselector:app: k8sdemo-databaseports:- protocol : TCPnodePort: 30306port: 3306 # 这里并没有引用环境变量targetPort: 3306

上面是数据库服务的配置文件“database-service.yaml”, 这里并没有引用“MYSQL_HOST”和"MYSQL_PORT",而是直接写上“k8sdemo-database-service”和“3306”。为什么会是这样呢?因为k8s的环境变量是有局限性的,它只能定义在“containers:”里面,也就是说只有容器才能定义环境变量,这从理论上也说得过去。因为如果没有容器,那么环境变量定义给谁呢?但这就导致了服务名不能引用配置参数,结果就是服务名要在两处被定义,一个是参数文件,另一个是服务配置文件。如果你要修改它,就要在两处同时修改,加大了出错的几率。有什么办法可以解决呢?

Helm

这在k8s内部是没法解决的,但在k8s外是可以解决的。有一个很流行的k8s的包管理工具,叫“helm”, 能够用来定义服务变量。

下面就是使用了Helm之后的Pod的配置文件。

alpine-pod.yaml

apiVersion: v1
kind: Pod
metadata:name: {{ template "alpine.fullname" . }}labels:# The "app.kubernetes.io/managed-by" label is used to track which tool deployed a given chart.# It is useful for admins who want to see what releases a particular tool# is responsible for.app.kubernetes.io/managed-by: {{ .Release.Service }}# The "app.kubernetes.io/instance" convention makes it easy to tie a release to all of the# Kubernetes resources that were created as part of that release.app.kubernetes.io/instance: {{ .Release.Name | quote }}app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}# This makes it easy to audit chart usage.helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version }}app.kubernetes.io/name: {{ template "alpine.name" . }}
spec:# This shows how to use a simple value. This will look for a passed-in value called restartPolicy.restartPolicy: {{ .Values.restartPolicy }}containers:- name: waiterimage: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"imagePullPolicy: {{ .Values.image.pullPolicy }}command: ["/bin/sleep", "9000"]

下面是变量的定义文件values.yaml

image:repository: alpinetag: latestpullPolicy: IfNotPresentrestartPolicy: Never

程序来源

Helm使用了Go的模板(template)。模板是用数据驱动的文本生成器。它在文本模板里用特殊符号(这里是“{{ }}”)定义变量或数据,然后在执行模板时再将变量转换成变量值,生成最终文本,一般在前端用的比较多。在Helm模板里,“{{ }}”里面的就是变量引用,变量是定义在“values.yaml”文件里的。

上面的例子有两个文件,一个是“alpine-pod.yaml”,另一个是“values.yaml”。变量定义在“values.yaml”里,再在“alpine-pod.yaml”文件里引用,这样就解决了k8s的环境变量的局限性。

Helm是功能非常强大的k8s包管理工具,而且可以简化容器部署,是一款非常流行的工具。但它的问题是Helm增加了配置文件的复杂度,降低了可读性。现在的版本是Helm2,但Helm3不久就要出炉了。Helm3有一个功能是支持Lua模板,能直接用对象编程(详情请见A First Look at the Helm 3 Plan),新的模板比现在的看起来要强不少,如果你想使用新的还需要再等一等。

结论:

一般的应用程序是不能直接部署到k8s上的,需要经过一些改动才行。它主要有两个部分。第一个是服务调用。第二个是数据的持久存储。服务调用的关键是让k8s和应用程序共享参数。k8s里已经有这种机制,但它还有一点缺陷,只能用来定义容器的环境变量,需要引入其他工具,例如Helm才能解决这个问题。持久存储不需要修改程序,但需要k8s的配置和应用程序配合才能成功。

源码:

完整源码的github链接

备注:

本文中的Go程序只是示例程序,只有k8s配置文件部分是认真写的,可以直接拷贝或引用。其他部分都是临时拼凑来的,主要是为了作为例子,因此没有花时间完善它们,总的来说它们写得比较粗糙,千万不要直接拷贝。

索引:

  1. 通过实例快速掌握k8s(Kubernetes)核心概念
  2. 通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷
  3. 通过搭建MySQL掌握k8s(Kubernetes)重要概念(下):参数配置
  4. helm/helm
  5. Alpine: A simple Helm chart
  6. A First Look at the Helm 3 Plan

本文由博客一文多发平台 OpenWrite 发布!

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

相关文章

  1. 【三】K8s安装-Harbor搭建

    一、硬件要求硬件资源 最低配置 推荐配置处理器 2 4CPU 4 8硬件 40 160二、软件要求软件 版本 描述Docker-engine v17.06.1-ce 或更高版本 有关安装说明,请参阅 Docker Engine文档。Docker-compose v1.18.0 或更高版本 有关安装说明,请参阅 Docker Compose文档。Openssl 最新…...

    2024/4/18 2:24:25
  2. 【产品经理】产品经理使用Axure工具经验谈

    转载自:老二牛车教育 【产品经理】产品经理使用Axure工具经验谈本文借用官网的描述定义,介绍了在学习AxureRP过程当中所要经历的各个阶段,也结合了作者自身学习AxureRP使用的经验,讲一下在各个阶段中的一些学习方法和经验总结,以帮助刚开始学习使用AxureRP的朋友更好的制…...

    2024/4/20 2:05:16
  3. 课程设计————学生信息管理系统(包含历代思路和代码)

    课程设计————学生管理系统(包含历代思路和代码) 一.前言 学生信息管理系统是我第一个独立完成的比较长的代码,也算是花费了一些心血,这个系统是我一点点把它从几百行的代码逐渐优化到上千行,功能从简单到复杂。在这里我把我的思路分享给大家,希望能给大家带来一些帮助…...

    2024/4/18 2:38:43
  4. 『中级篇』K8S最小调度单位Pod(62)

    原创文章,欢迎转载。转载请注明:转载自IT人故事会,谢谢! 原文链接地址:『中级篇』K8S最小调度单位Pod(62)k8s里面非常重要的一个概念pod,首先简单的介绍是pod是k8s最小的调度单位,一个pod里面可以包含一个或者多个container,一个pod共享一个namespace,它们之前可以通…...

    2024/4/18 2:28:32
  5. js建立虚拟表单并提交

    业务需求:将页面中选取一些元素(比如input)一起提交。前端人员不熟练,将好多input分开了,还把<form加了样式,实在不想改,转用js提交(加了jquery)function allsubmit(){var username = $("#用户名3").val();var password = $("#密码").val(); /…...

    2024/4/18 2:39:37
  6. leetcode:排列硬币

    你总共有 n 枚硬币,你需要将它们摆成一个阶梯形状,第 k 行就必须正好有 k 枚硬币。 给定一个数字 n,找出可形成完整阶梯行的总行数。 n 是一个非负整数,并且在32位有符号整型的范围内。 示例1:n = 5 硬币可排列成以下几行:第一行第二行… 因为第三行不完整,所以…...

    2024/4/18 15:28:52
  7. vscode 添加环境变量

    打开 launch.json 文件,添加如下内容 "env": {"PYTHONPATH": "yourpath" }...

    2024/4/18 2:33:44
  8. 剑指offer-二叉树的下一个结点

    剑指offer-二叉树的下一个结点题目描述解题思路代码块 题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 解题思路 (1) 若该节点存在右子树:则下一个节点为右子树最左子…...

    2024/4/19 22:12:25
  9. scala 过程(procedure)

    过程 将函数的返回类型为Unit的函数称之为过程(procedure),如果明确函数没有返回值,那么等号可以省略 def f(name:String) :Unit={println(name+"hello")}注意区分: 如果函数声明时没有返回值类型,但是有 = 号,可以进行类型推断最后一行代码。这时这个函数实际是…...

    2024/4/20 15:29:13
  10. list集合根据某一个key的value值相同合并成新的json对象

    第一步先把list集合相同的key的value值合并public static JSONArray subArray(JSONArray array) {try {JSONArray subArray = new JSONArray();JSONObject obj = null;JSONObject obj2 = null;JSONArray aArray = new JSONArray();for (int i = 0, size = array.size(); i <…...

    2024/4/18 2:28:32
  11. web-rpg游戏设计简要分析(转)

    web-rpg游戏设计简要分析(转) 2009年09月01日  用flash来开发rpg游戏,放在以前肯定是天方夜谭,而如今,这个神话却变成了现实。虽然自己没有核心的参与到游戏的开发中,但就自己在这个团队中积累的一些经验,简要的分析一下web-rpg网游的结构吧。 [b]1.开发组件的选择…...

    2024/4/19 19:54:15
  12. Axure RP Extension for Chrome插件的安装使用

    插件下载:网上自行搜索,有很多下载地方。链接:https://pan.baidu.com/s/1IpgdWgrRW01NvovvyrHKCg (提取码:pn6i ) 安装出现问题:“程序包无效:“CRX_HEADER_INVALID” 解决办法: 1、打开Google Chrome浏览器,然后找到更多工具栏中的扩展程序,并打开,接着选择开发…...

    2024/4/18 2:32:31
  13. k8s服务集群搭建及简单应用部署

    1.搭建说明 1):本地搭建我选用的是用vmware安装两套ubuntu系统进行模拟服务器(当然理论上节点可以无限的加),然后进行k8s集群的搭建,搭建完毕后部署一个nginx部署,其中踩坑无数,然后得到了一套比较完整的本地部署,希望对大家以后部署有一些帮助。 2.环境准备 1):vmw…...

    2024/4/18 2:33:26
  14. 微信开发者工具中,微信小程序SSO平台登录失败的问题

    可能登录的微信账号不是开发者的账号,或者AppID错误。这种情况会造成验证无法通过,导致失败。...

    2024/4/20 14:16:39
  15. JAVA基础总结(2)——JAVA与面向对象

    JAVA中的类与对象 在上一章节中,我们讲述了面对象的编程思维。在本章节中,我们主要讲述,面向对象编程在JAVA中的表现形式。程序即对象的集合,程序功能的实现是靠的对象之间的相互协作,而对象的形成则是通过类的实例化。因此,我们先来看在JAVA代码中如何表示类的类与对象。…...

    2024/4/14 4:27:10
  16. 对学生管理系统的心得

    事过境迁,我的学生管理系统终于有了眉目,很开心,开心之余,不忘写一篇博客来庆祝一下下面,我就来说一下我对管理系统的理解首先我先说一下学生管理系统运行过程1 模块里面的sub main() 在这个过程里,它首先是重新定义了一个登陆窗体,显示这个窗体,,注意,第一步还没…...

    2024/4/18 2:25:26
  17. js控制表单提交带参数

    根据HTML的规定,通过GET方法提交表单时,action地址里的query string会被丢弃。1、 jsp 翻页<form name="form" action="" METHOD="post"><input type="button" value="首页" οnclick="filter()" /&g…...

    2024/4/18 20:46:05
  18. 安装微信web开发者工具

    微信web开发者工具的安装 随着移动通讯等电子设备的普及,微信小程序也逐渐被大家所熟悉;小程序以入口浅、体积小、方便用、体验好等优良特性受到各阶层地欢迎;那么,你准备好自己写一个小程序了吗? 首先,我们得安装一个微信web开发者工具;当然,相应的安装教程网站上数不…...

    2024/4/20 5:29:08
  19. 新时代的劫富济贫

    旧途径是:有钱人– 税收– 社会福利– 穷人,新途径如下:有钱人,因为缺乏更好的投资途径,把钱放在风险基金里做LP;投资人,因为缺乏更好的创业项目,把钱投给了一些二流项目;创业者,因为缺乏更好的发展手段,把钱直接拿出来补贴用户;穷人们,因为喜欢那几块钱的补贴,最…...

    2024/4/18 2:32:26
  20. java SSH员工管理系统以及Demo代码下载

    原文:javaSSH员工管理系统以及Demo代码下载源代码下载地址:http://www.zuidaima.com/share/1839695185513472.htm项目截图:数据库脚本:CREATE DATABASE `company` default charset=utf8; CREATE TABLE `employer` (`id` int(20) unsigned NOT NULL AUTO_INCREMENT,`name` v…...

    2024/4/18 2:26:44

最新文章

  1. 【安卓13】谷歌桌面Launcher3屏蔽全部应用里面的部分app

    1、需求 我们在做谷歌桌面时&#xff0c;移植了一些我们自己的应用&#xff0c;但是有些应用是服务型的app&#xff0c;不需要显示在主页&#xff0c;要隐藏掉 2、解决方案 方法1&#xff1a; 解决办法很简单&#xff0c;阅读源码发现&#xff0c;谷歌桌面添加全部应用的源…...

    2024/4/30 17:26:35
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. OpenHarmony开发-连接开发板调试应用

    在 OpenHarmony 开发过程中&#xff0c;连接开发板进行应用调试是一个关键步骤&#xff0c;只有在真实的硬件环境下&#xff0c;我们才能测试出应用更多的潜在问题&#xff0c;以便后续我们进行优化。本文详细介绍了连接开发板调试 OpenHarmony 应用的操作步骤。 首先&#xf…...

    2024/4/30 7:36:18
  4. Dapr(一) 基于云原生了解Dapr

    (这期先了解Dapr&#xff0c;之后在推出如何搭建Dapr&#xff0c;以及如何使用。Dapr(二) 分布式应用运行时搭建及服务调用--Dapr(二) 分布式应用运行时搭建及服务调用-CSDN博客) 目录 引言&#xff1a; Service Mesh定义 Service Mesh解决的痛点 Istio介绍 Service Mes…...

    2024/4/30 16:34:16
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/4/29 23:16:47
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/29 6:03:24
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/29 14:21:50
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/25 18:39:14
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/4/26 23:04:58
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57