【Linux】NTP时间同步服务与NFS网络文件共享存储服务器(配置、测试)

news2024/11/30 0:36:57

一、NTP时间同步服务

1、NTP介绍

NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(LAN上与标间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议攻击。时间按NTP服器的等级传播。按照离外部UTC源的远近把所有服务器归入不同的Stratum(层)中。

ntpd(Network Time Protocol daemon)是 Linux 操作系统的一个守护进程,用于校正本地系统与钟源服务器之间的时间,完整的实现了 NTP 协议。ntpd 与ntpdate 的区别是 ntpd 是步进式的逐渐校正时间,不会出现时间跳变,而 ntpdate是断点更新

  • 部分操作系统采用 chrony 作为默认 NTP 服务,请确认 ntpd 正在运行并设置为开机自启动。在CentOS8.0中默认不再支持ntp软件包,时间同步将由chrony来实现。

  • 使用 systemctl is-active ntpd.service 命令,可查看 ntpd 是否正在运行。

  • 使用 systemctl is-enabled ntpd.service 命令,可查看 ntpd 是否开机自启动。

  • NTP 服务的通信端口为 UDP 123,设置 NTP 服务之前,请确保您已经开放UDP 123 端口。


2、主要结构

(1) 时间来源

现在的标准时间是由原子钟报时的国际标准时间UTC(Universal Time Coordinated,世界协调时),所以NTP获得UTC的时间来源可以是原子钟、天文台、 卫星,也可以从Internet上获取。

(2) 传播

在NTP中,定义了时间按照服务器的等级传播,按照离外部UTC源远近将所有的服务 器归入不同的Stratum(层)中,例如把通过GPS取得发送标准时间的服务器叫 Stratum-1的NTP服务器,而Stratum-2则从Stratum-1获取时间,Stratum-3从 Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务 器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基 础,这种阶梯式的架构示意图如下图所示:

计算机主机一般同多个时钟服务器连接,利用统计学的算法过滤来自不同服务器的时 间,以选择最佳的路径和来源以便校正主机时间。即使在主机长时间无法与某一时钟 服务器联系的情况下,NTP服务依然可以有效运转。


3、架构和安装

架构

如上图所示,对于一些服务依赖于时间的集群(如hadoop集群),需要有一部主机 作为ntp服务器,其他客户端主机从这部主机进行时间同步,另外ntp服务主机从更 高一层的服务器获得时间信息。


安装配置

NTP服务主机规划

centos7.x 虚拟机两台

服务端:192.168.198.140

客户端: 192.168.198.138

服务端配置

服务端和客户端都分别按照ntp服务:

yum install –y ntp

查看是否安装成功:

rpm -qa |grep ntp

配置文件为: /etc/ntp.conf

server 0.cn.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst #iburst 当一个远程NTP服务器不可用时,向他发送一系列的并发包进行检测
server 2.asia.pool.ntp.org iburst
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10 #这行是时间服务器的层次。设为0则为顶级,如果要向别的NTP服务器更新时间,请不要把它设为0,最好设置的数字靠后
interface listen 192.168.198.140

配置好后,需要重启服务

使用如下命令检查是否同步成功,如出现running表示运行,否则失败。


客户端配置

vim /etc/ntp.conf

这里的server指向服务器的IP,改完后重启服务

上面红色的那一行不影响使用;


ntp同步测试

【在进行所有ntp测试时最好关闭服务端的防火墙】

[root@NAT-139 ~]# iptables -F
[root@NAT-139 ~]# systemctl stop firewalld
[root@NAT-139 ~]# setenforce 0

服务器端执行ntpstat命令看下服务端同步上游服务器情况,这个命令需要等待2-3分钟

当状态由unsynchronised变为synchronised代表同步上游服务器成功,此过程需要 几分钟时间 。

然后执行ntpq -pn命令查看服务器同步详细情况

以星号 (*)开头这就意味着您的计算机已经从网络上获取了时间,当前的refid是local代表我们配置的本地ntp服务器


ntp链接状态

ntpq -p
  • remote:本机和上层ntp的ip或主机名,“+”表示优先,“*”表示次优先

  • refid:参考上一层ntp主机地址

  • st:stratum阶层

  • when:多少秒前曾经同步过时间

  • poll:下次更新在多少秒后

  • reach:已经向上层ntp服务器要求更新的次数

  • delay:网络延迟

  • offset:时间补偿

  • jitter:系统时间与bios时间差#

参数详解:

remote – 用于同步的远程节点或服务器。“LOCAL”表示本机 (当没有远程服务器可用
时会出现)
表中第一个字符(统计代码)是状态标识(参见 Peer Status Word),包含 "
","x","-","#","+","*","o":
• " " – 无状态,表示: 没有远程通信的主机
• "LOCAL" 即本机 (未被使用的)高层级服务器 远程主机使用的这台机
器作为同步服务器
• “x” – 已不再使用
• “-” – 已不再使用
• “#” – 良好的远程节点或服务器但是未被使用 (不在按同步距离排序的前六个节点
中,作为备用节点使用)
• “+” – 良好的且优先使用的远程节点或服务器(包含在组合算法中)
• “*” – 当前作为优先主同步对象的远程节点或服务器
“o” – PPS 节点 (当优先节点是有效时)。实际的系统同步是源于秒脉冲信号
(pulse-per-second,PPS),可能通过PPS 时钟驱动或者通过内核接口。

refid – 远程的服务器进行同步的更高一级服务器
st – 远程节点或服务器的 Stratum(级别,NTP 时间同步是分层的)
t – 类型 (u: unicast(单播) 或 manycast(选播) 客户端, b: broadcast
(广播) 或 multicast(多播) 客户端, l: 本地时钟, s: 对称节点(用于备份),
A: 选播服务器, B: 广播服务器, M: 多播服务器, 参见“Automatic Server
Discovery“)
when – 最后一次同步到现在的时间 (默认单位为秒, “h”表示小时,“d”表示天)
poll – 同步的频率:rfc5905建议在 NTPv4 中这个值的范围在 4 (16秒) 至 17
(36小时) 之间(即2的指数次秒),然而观察发现这个值的实际大小在一个小的多的范围内
:64 (26 )秒 至 1024 (210 )秒
reach – 一个8位的左移移位寄存器值,用来测试能否和服务器连接,每成功连接一次
它的值就会增加,以 8 进制显示
delay – 从本地到远程节点或服务器通信的往返时间(毫秒)
offset – 主机与远程节点或服务器时间源的时间偏移量,offset 越接近于0,主机和
NTP 服务器的时间越接近(以方均根表示,单位为毫秒)
jitter – 与远程节点同步的时间源的平均偏差(多个时间样本中的 offset 的偏差,
单位是毫秒),这个数值的绝对值越小,主机的时间就越精确

客户端测试

使用ntpdate 服务器ip进行同步,发现报ntp socket被占用,是因为客户端开启了ntp服务,需要停掉ntp服务然后同步;

到这里同步完成,我们可在服务端和客户端同时执行date命令查看时间是否同步 ;

4、ntpd、ntpdate的区别

下面是网上关于ntpd与ntpdate区别的相关资料。如下所示:

使用之前得弄清楚一个问题,ntpd与ntpdate在更新时间时有什么区别。

ntpd不仅仅是时间同步服务器,它还可以做客户端与标准时间服务器进行同步时 间,而且是平滑同步,

并非ntpdate立即同步,在生产环境中慎用ntpdate,也正如此两者不可同时运行

时钟的跃变,对于某些程序会导致很严重的问题。

许多应用程序依赖连续的时钟——毕竟,这是一项常见的假定,即,取得的时间是线 性的,

一些操作,例如数据库事务,通常会地依赖这样的事实:时间不会往回跳跃。

不幸的是,ntpdate调整时间的方式就是我们所说的”跃变“:在获得一个时间之后, ntpdate使用settimeofday(2)设置系统时间。

这有几个非常明显的问题:

1)这样做不安全

  • ntpdate的设置依赖于ntp服务器的安全性,攻击者可以利用一些软件设计上的缺 陷,拿下ntp服务器并令与其同步的服务器执行某些消耗性的任务。

  • 由于ntpdate采用的方式是跳变,跟随它的服务器无法知道是否发生了异常(时间不 一样的时候,唯一的办法是以服务器为准)。

2)这样做不精确

  • 一旦ntp服务器宕机,跟随它的服务器也就会无法同步时间。

  • 与此不同,ntpd不仅能够校准计算机的时间,而且能够校准计算机的时钟。

3)这样做不够优雅

  • 由于是跳变,而不是使时间变快或变慢,依赖时序的程序会出错 (例如,如果ntpdate发现你的时间快了,则可能会经历两个相同的时刻,对某些应 用而言,这是致命的)。尤其对数据库等对时间敏感的程序应用。

  • 因而,唯一一个可以令时间发生跳变的点,是计算机刚刚启动,但还没有启动很多服 务的那个时候。

  • 其余的时候,理想的做法是使用ntpd来校准时钟,而不是调整计算机时钟上的时 间。

  • NTPD在和时间服务器的同步过程中,会把BIOS计时器的振荡频率偏差——或者说 Local Clock的自然漂移(drift)——记录下来。 这样即使网络有问题,本机仍然能维持一个相当精确的走时。


二、NFS网络文件共享存储服务器

NFS介绍

  • NFS是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。

  • NFS客户端(一般为应用服务器,例如Web)可以通过挂载的方式将NFS服务器端共享的数据目录挂载带NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或目录一样,而实际上确实远端的NFS服务器的目录。

  • NFS网络文件系统很像Windows系统的网络共享、安全功能、网络驱动器映射,这也和Linux系统里的samba服务类似。只不过一般情况下,Windows网络共享服务或samba服务用于办公局域网共享,而互联网中小型网站集群架构后端常用NFS进行数据共享,如果是大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS、FastDFS.

为什么要使用共享存储

  1. 实现多台服务器之间数据共享

  1. 实现多台服务器之间数据一致

集群没有共享存储的情况

  1. A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。

  1. B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2 上没有这张图片,所以B用户无法看到A用户传的图片。

集群有共享存储的情况

  1. A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储*

  1. B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了。

  1. 也就是用户上传文件时都上传到共享存储,不同服务器通过连接共享存储进行查看;


NFS工作原理

  • 在NFS服务器端设置好一个共享目录/video后,其他有权限访问NFS服务器端的客户 端都可以将这个共享目录/video挂载到客户端本地的某个挂载点,图中的两个NFS客 户端本地的挂载点分别为/v/video和/video,不同客户端的挂载点可以不相同。

  • 客户端正确挂载完毕后,就进入到了nfs客户端的挂载点所在的/v/video或/video目 录,此时就可以看到NFS服务器端/video共享出来的目录下的所有数据。在客户端上 查看时,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感 觉不到使用上的区别。

  • 已经挂载完后用df -h可以看到本地挂载信息,和本地的磁盘分区几乎没什么差别, 只是文件系统的开始是以IP地址开头而已。

  • NFS服务所使用的端口号在每次启动的时候是不同的,通过RPC(远程过程调用Remote Procedure Call简称RPC)协议/服务来实现,这个RPC服务的应用在门户级的网站有很多。例如:百度。


什么是RPC

因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口来作为传输之用,其中CentOS5.x的随机端口都小于1024,而CentOS6.x的随机端口都是较大的。

因为端口不固定,这样一来就会造成NFS客户端与NFS服务端的通信障碍,因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,才能交互数据。

要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙了,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。

服务端的RPC服务如何知道每个NFS的端口的:

当NFS读取端启动服务时会随机取用若干端口,并主动向RPC服务注册相关端口的对应的功能,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端。


NFS实例搭建

我们需要两台CentOS7机器,我们用虚拟机做测试,分别做NFS服务器和客户端,配置如下:

NFS-Server ip:192.168.198.140

NFS-Client ip:192.168.198.138

实现的目标是:在NFS服务器上共享一个目录,在客户端上可以直接操作NFS服务器上的这个共享目录下的文件。

NFS服务端配置

①安装NFS服务和rpcbind

首先使用yum安装nfs服务:

yum -y install rpcbind nfs-utils

②创建共享目录

在服务器上创建共享目录,并设置权限。

mkdir -p /data/share/
chmod 755 -R /data/share/

③配置NFS

nfs的配置文件是 /etc/exports ,在配置文件中加入一行:

/data/share/ 192.168.198.140(rw,no_root_squash,no_all_squash,sync)
这行的意思是把共享目录/data/share/共享给192.168.198.138这个客户端ip,后面括号里的内容是权限参数,其中:rw 表示设置目录可读写。 sync表示数据会同步写入到内存和硬盘中,相反 rsync 表示数据会先暂存于内存中,而非直接写入到硬盘中。

no_root_squash NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。

no_all_squash 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都不会拥有匿名用户权限。

如果有多个共享目录配置,则使用多行,一行一个配置。

④启动服务

按顺序启动rpcbind和nfs服务:

systemctl start rpcbind
systemctl start nfs

加入开机启动【centos7】:

systemctl enable rpcbind
systemctl enable nfs

⑤验证服务

nfs服务启动后,可以使用命令 rpcinfo -p 查看端口是否生效。

111端口为rpcbind服务对外提供服务的主端口。

#设置服务开机自启动【centos6】

chkconfig rpcbind on
chkconfig nfs on

#查看
systemctl list-unit-files |grep rpcbind
systemctl list-unit-files | grep nfs

我们可以使用 showmount 命令来查看服务端(本机)是否可连接:

出现上面结果表明NFS服务端配置正常。


NFS客户端配置

①安装rpcbind服务

Centos6.6版本及以上的系统需要安装nfs-utils软件,否则再挂载的时候会报错,Centos6.5以前的没有这个问题。

yum -y install nfs-utils rpcbind


#客户端只需要启动rpcbind服务即可:
service rpcbind start

②挂载远程nfs文件系统

查看服务端已共享的目录:

 showmount -e 192.168.198.140

建立挂载目录,执行挂载命令:

mkdir /mnt/share

mount -t nfs 192.168.198.140:/data/share /mnt/share -o nolock,nfsvers=3,vers=3

如果不加 -o nolock,nfsvers=3 则在挂载目录下的文件属主和组都是nobody,如果指定nfsvers=3则显示root。

查看挂载结果,在客户端输入 df -h

如果要解除挂载,可执行命令:

umount /mnt/share

开机自动挂载

如果按上面的配置好,NFS即部署好了,但是如果你重启客户端系统,发现不能随机器一起挂载,需要再次手动操作挂载,这样操作比较麻烦,因此我们需要设置开机自动挂载。我们不要把挂载项写到/etc/fstab文件中,因为开机时先挂载本机磁盘再启动网络,而NFS是需要网络启动后才能挂载的,所以我们把挂载命令写入到/etc/rc.d/rc.local文件中即可。

[root@localhost ~]# vim /etc/rc.d/rc.local
#在文件最后添加一行:
mount -t nfs 192.168.42.101:/data/share /mnt/share/ -o nolock,nfsvers=3,vers=3
#同时需要给此脚本加执行权限
chmod +x /etc/rc.d/rc.local
保存并重启机器看看。

测试验证

查看挂载结果,在客户端输入 df -h

看到最后一行了没,说明已经挂载成功了。接下来就可以在客户端上进入目录/mnt/share下,新建/删除文件,然后在服务端的目录/data/share查看是不是有效果了,同样反过来在服务端操作在客户端对应的目录下看效果。

测试结果

在138客户端的/mnt/share目录中创建一个1.txt文件,可以在服务端/data/share目录下看到此文件。

你也可以这样理解:将服务端的/data/share目录挂载到了客户端/mnt/share上,相当于将服务端的/data/share目录共享给了客户端的/mnt/share;

所以在客户端/mnt/share进行创建文件或删除文件的操作相当于直接对服务端/data/share目录下进行操作;

在服务端/data/share进行创建文件或删除文件的操作相当于直接对客户端/mnt/share目录下进行操作。

在客户端进行操作:

在服务端进行操作


三、NFS的优缺点

NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是讲其作为共享存储使用,这样可以保证不同节点客户端数据的一致性,在集群架构环境中经常会使用到(仅支持类UNIX系统)。如果是Windows和Linux混合环境的集群系统,可以使用samba来实现。

优点:

  1. 简单,容易上手,容易掌握。

  1. NFS文件系统内数据是在文件系统之上的,即数据是能看得见的。

  1. 部署快速,维护简单方便,且可控,满足需求就是最好的。

  1. 可靠,从软件层面上看,数据可靠性高,经久耐用。

  1. 服务非常稳定。

缺点:

  1. 存在单点故障,如NFS Server宕机了,所有客户端都不能访问共享目录,后期会 通过负载均衡及高可用方案弥补

  1. 在大数据高并发的场合,NFS效率、性能有限(2千万/日 以下PV的网站不是瓶 颈,除非网站架构设计太差)

  1. 客户端认证是基于IP和主机名的,权限需要根据ID识别,安全性一般(用于内网 则问题不大)

  1. NFS数据是明文的,NFS本身不对数据完整性作验证(传输的文件可能完整也可能不完整)。

  1. 多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其 NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试环境可使用autofs自动 挂载解决,正式环境可修复NFS服务或强制卸载umount -lf)

耦合性(英语:Coupling,dependency,或称耦合力或耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。 内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。
  1. 涉及了同步(实时等待)和异步(解耦)的概念,NFS服务端和客户端相对来说就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是为了解决程序及架构解耦,让网站的可扩展性变得更好。

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

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

相关文章

Android12之apex调试

1.问题在调试libtinyalsa.so中添加log后,但是发现push so后,却没有log打印,why?2.分析以下为libtinyalsa.so的位置/system/lib64/libtinyalsa.so /system/lib/libtinyalsa.so /apex/com.android.vndk.v31/lib64/libtinyalsa.so /a…

C语言rewind和fseek函数的用法详解

前面介绍的文件读写函数都是顺序读写,即读写文件只能从头开始,依次读写各个数据。但在实际开发中经常需要读写文件的中间部分,要解决这个问题,就得先移动文件内部的位置指针,再进行读写。这种读写方式称为随机读写&…

C语言( 动态内存分配)

目录 一.malloc()和free()(原型都在stdlib.h头文件) 1.malloc() 2.free()函数 3.案例演示 二.calloc() 三.realloc() 在在C语言的内存当中,针对不同的数据我们所存放的位置都是不一样的。内存栈区和静态区系统会自动创建和销毁&am…

RA4M2开发(3)----读取ISL29035数据,并在OLED上显示,串口打印

概述 首先导入必要的库文件,包括I2C驱动和OLED驱动。在代码中配置I2C接口,并初始化I2C驱动。配置ISL29035传感器,包括配置传感器的工作模式和量程。使用I2C读取ISL29035传感器的数据,并将其存储在变量中。初始化OLED驱动&#xf…

【机器学习】第二章-模型评估与选择-西瓜书笔记

文章目录为什么要进行模型评估?- 选择模型与参数在何种数据集上对训练误差进行评估?- 训练集在何种数据集上对泛化误差进行评估?- 测试集如何划分测试集?1 留出法2 交叉验证法3 自助法模型选择和调参的区别?如何模型选…

Pytest学习笔记

Pytest学习笔记 1、介绍 1.1、单元测试 单元测试是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试 1.2、单元测试框架 测试发现:从多个py文件里面去找到我们测试用例测试执行:按…

WebDAV之葫芦儿·派盘+网盘精灵

网盘精灵 支持WebDAV方式连接葫芦儿派盘。 推荐一款让您的iPhone、iPod、iPad 变成WebDav客户端的软件,支持从WebDav服务器连接葫芦儿派盘服务进行上传和下载件。 网盘精灵让您的iPhone、iPod、iPad 变成WebDav客户端。功能:WebDav操作、文件共享、本地文件管理

jstack排查cpu占用高[复习]

这样就可以看到占用CPU高的代码位置。 总结:就是先查到占用高的应用和具体的线程,然后根据线程到堆积信息查找即可。 不过堆栈信息非十进制,需提前把线程号转为十六进制。 这样就可以看到占用CPU高的代码位置。 总结:就是先查到…

JavaScript------面向对象

目录 一、面向对象编程(OOP) 基本概念 二、类 1、语法 2、通过类创建对象 3、类的属性 4、类的方法 5、构造函数 三、面向对象的三个特点 1、封装 如何确保数据的安全(实现封装的方式): 2、继承 在子类中&a…

【LeetCode】每日一题(4)

目录 题目:1124. 表现良好的最长时间段 - 力扣(Leetcode) 题目的接口: 解题思路: 代码: 过啦!!! 写在最后: 题目:1124. 表现良好的最长时间…

算法思想 - 回溯算法

Backtracking(回溯)属于 DFS, 本文主要介绍算法中Backtracking算法的思想。回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就“回溯”返回,尝试别的路径。回溯法是一种…

ChatGPT 类 AI 软件供应链的安全及合规风险

AIGC将成为重要的软件供应链近日,OpenAI推出的ChatGPT通过强大的AIGC(人工智能生产内容)能力让不少人认为AI的颠覆性拐点即将到来,基于AI将带来全新的软件产品体验,而AI也将会成为未来软件供应链中非常重要的一环。在O…

【项目精选】基于WEB的仓库管理系统的设计与实现(论文+视频+源码)

点击下载源码 仓库物品的管理是与我们的日常生活息息相关的一个重大问题。随着我国经济飞速的发展,改革开放的不断深入,企业要想在激烈的市场竞争中立于不败之地,要想继续的发展与生存,没有现代化的管理方式与方法是万万不行的&am…

torch.nn.parameter 生成可更新的 tensor (requires_grad = True)

torch.nn.parameter 是 PyTorch 中的一种特殊类型的 tensor,它主要用于存储神经网络中的参数。这些参数可以被自动求导和被优化器自动更新。使用 torch.nn.Parameter 定义的tensor 会被自动添加到模型的参数列表中。 \quadtorch.nn.Parameter 是继承自 torch.Tensor…

vite+vue3搭建的工程热更新失效问题

前段时间开发新的项目,由于没有技术上的限制,所以选择了vitevue3ts来开发新的项目,一开始用vite来开发新项目过程挺顺利,确实比vue2webpack的项目高效些(为什么选择vite),但是过了一段时间后,不…

android组件化

学习流程:1.开源最佳实践:Android平台页面路由框架ARouter-阿里云开发者社区 (aliyun.com)2.中文ARouter使用API:https://github.com/alibaba/ARouter/blob/master/README_CN.md3.看当前文档后面的代码4.这是通俗易懂的文章:https…

使用 Nodejs、Express、Postgres、Docker 在 JavaScript 中构建 CRUD Rest API

让我们在 JavaScript 中创建一个 CRUD rest API,使用:节点.js表达续集Postgres码头工人码头工人组成介绍这是我们将要创建的应用程序架构的架构:我们将为基本的 CRUD 操作创建 5 个端点:创造阅读全部读一个更新删除我们将使用以下…

【H.264】码流解析 annexb vs avcc

H264码流解析及NALUAVCC和ANNEXB 前者是FLV容器、mp4 常用的。后者 是实时传输使用,所以是TS 一类的标准。VLC显示AVC1就是AVCC AVCC格式 也叫AVC1格式,MPEG-4格式,字节对齐,因此也叫Byte-Stream Format。用于mp4/flv/mkv, VideoToolbox。 – Annex-B格式 也叫MPEG-2 trans…

微信公众号扫码授权登录思路

引言 上学期研究了一下微信登录相关内容,也写了两三篇笔记,但是最后实际登录流程没有写,主要因为感觉功能完成有所欠缺,一直也没有好的思路;这两天我又看了看官方文档,重新构思了一下微信公众号登录相关的…

操作系统综合实验

实验目的 加深对进程概念理解,进一步认识进程并发执行掌握Linux系统的进程创建和终止操作掌握文件系统调用及文件标准子例程的编程方法掌握Linux下终端图形编程方法,能编写基于文本的图形界面掌握proc文件系统的使用 相关知识 Linux C编程中的头文件 …