• 操作系统发展与概述笔记分享
    什么是操作系统?操作系统(Operating System,简称OS)是管理计算机硬件与软件资源的计算机程序。操作系统需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。操作系统也提供一个让用户与系统交互的操作界面。在计算机中,操作系统是其最基本也是最为重要的基础性系统软件。从计算机用户的角度来说,计算机操作系统体现为其提供的各项服务;从程序员的角度来说,其主要是指用户登录的界面或者接口;如果从设计人员的角度来说,就是指各式各样模块和单元之间的联系。经过几十年以来的发展,计算机操作系统已经成为既复杂而又庞大的计算机软件系统之一。首先,微型计算机系统会被分为硬件系统和软件系统两个部分。在硬件系统当中又有主机和外设两个主要的分类,主机当中所包含的就是CPU、存储等设备。除此之外,外设就是外部设备,这当中包含的就是电脑外部的一些设备,如鼠标、键盘、磁盘、显示器等。之后在软件系统当中,这一部分也被分为了系统软件和应用软件两个部分。其中系统软件当中就有操作系统和其他需要使用到的如开发工具、诊断程序等。应用软件当中所包含的就是平时生活中会使用到的软件,如word、PowerPoint等办公软件。现代计算机系统由一个或多个处理器、主存、磁盘、打印机、键盘、鼠标、显示器、网络接口以及其他输入/输出设备组成。一般而言,现代计算机系统是一个复杂的系统。如果每位应用程序员都不得不掌握系统的所有细节,那就不可能在编写代码了。而且,管理这些部件并加以优化使用,是一件挑战性极强的工作。所以,计算机安装了一层软件,称为操作系统,它的任务是为用户程序提供一个更好、更简单、更清晰的计算机模型,并管理刚才提到的所有设备。所以,操作系统是一个管理和控制所有软硬件资源的程序,说到底,操作系统的本质是一个程序。但是这个程序是在电脑上运行其他程序的基础,也是核心,它是必不可少的。只有有了操作系统之后用户才能在电脑运行其他的程序,控制用户手中的硬件如键盘、鼠标,还有电脑主机内的CPU、内存等。操作系统和普通应用程序的差异并不仅仅在于它们所处的地位。特别地,操作系统更加大型、复杂和长寿。Linux或 Windows操作系统的源代码有500万行甚至更高的数量级。所以操作系统寿命比较长的原因就在于操作系统的很难编写的,一旦编写完成,操作系统的所有者当然不愿意把它扔掉,再写一个。相反,操作系统会在长时间内进行演化。操作系统的历史1、第一代操作系统始于20世纪40年代,在那个年代里,同一小组的工程师设计、建造、变成、操作并维护一台机器。所有的程序设计都是用纯粹的机器语言编写的,甚至需要通过将上千根电缆接到插件板连接电路,以便控制机器的基本功能。没有程序设计语言,甚至没有汇编语言,操作系统则从来没有听说过,因为所有的操作都是由人们的操作控制所完成的。使用机器的一般方式是,程序员在墙上的机时表上预约一段时间,然后到机房中将它的插件板接到计算机里,在接下来的几小时里,期盼正在运行中的两万多个真空管不会烧坏。那时,所有的计算问题实际上都只是简单的数学运算,如制作正弦、余弦、对数表或者计算炮弹弹道等。到了20世纪50年代初有了改进,出现了穿孔卡片,这时就可以将程序写在卡片上,然后读入计算机而不用插件板,但其他的过程则依然如旧。在50年代后期,晶体管的发明极大地改变了整个状况。厂商可以成批地生产并销售计算机给用户,用户可以指望计算机长时间运行,完成一些有用的工作。2、第二代操作系统即批处理操作系统,由于当时的计算机非常昂贵,人们很自然地要想办法减少机时的浪费。批处理操作系统单道批处理系统:系统对作业的处理是成批进行的,但内存中始终保持一道作业。多道批处理系统:允许多个程序同时进入内存并运行。分时操作系统以时间片为单位轮流为各个用户、作业服务,各个用户可通过终端与计算机进行交互。实时操作系统保证在一定时间限制内完成特定功能的操作系统。实时操作系统有软实时系统和硬实时系统之分。网络操作系统/分布式操作系统网络中各种资源的共享以及各台计算机之间的通信。分布式操作系统与网络操作系统本质上的不同之处在于分布式操作系统中,若干台计算机协同完成同一任务。操作系统的发展互联网时代–>移动互联网时代–>物联网时代随着技术的不断发展,计算机由一开始的使用晶体管到集成电路再到大规模集成电路发展到现在的微型计算机。同时,现代社会也由使用计算机的互联网时代,再到使用移动计算机(即手机)的移动互联网时代,之后再往物联网时代发展。到了物联网时代,物联网中的终端设备是多种多样,同时它的架构、协议等等也是十分复杂的。在物联网时代,要去构建一个统一管理的操作系统是非常有必要的同时难度也是非常大的。所以,构建一个物联网的操作系统真的那么重要吗?答案是肯定的。不难发现,每一代电子设备的竞争最终都会归结为操作系统的竞争。比方说互联网时代当中的电脑,最终取得电脑操作系统胜利的无疑是windows。在移动互联网时代的手机的操作系统上,独占鳌头的两方一个是安卓,另一个是苹果iOS。到了物联网时代,情况也是一样,现在可能所有企业都还在发展的阶段,并没有太多的物联网操作系统在这个产业内进行竞争,但是到了最后,肯定会只剩下一款到两款的操作系统来引领物联网整个行业的发展。物联网的操作系统虽然是起始于物联网,但是终点永远不可能仅仅只是物联网。因为跟电脑和手机相比,物联网更像是一张把所有电子设备都联系在一起的网,只能说是起到了辅助的作用。所以物联网操作系统的目标应该放在哪里呢?其实是可以被放在可穿戴设备——VR、AR 上面,Facebook 的创始人扎克伯格先生曾经也讲过,VR会是下一代社交平台。所以VR、AR的设备,也极有可能会成为下一代人机交互的方式,为什么这么说呢?读者们可以来想一下,随着5G的发展,网络的传输速率会得到很大的提高,等到科技越来越先进,当大家在家办公时,与其他同事的沟通会变得更加方便。随着AR、VR技术的不断发展,只要戴上了VR或者是AR设备,用户就可以面对面的交流了,这样不管是工作也好,娱乐也好,都会对当前的生活方式产生改变。比方说有一家英国的航空公司开发了一项业务,在乘客前往飞机目的地之前,他们可以让用户沉浸式的体验一下去到目的地旅游的感受,达到远程旅游的体验。除此之外,VR设备还可以帮助人们进行远程医疗等等,所以说,AR,VR设备成为下一代的人机交互的方式是非常有潜力的。所以物联网操作系统的目标就在于如何做好物联网上的操作系统的同时,也去向新一代人机交互方式AR、VR这一个方向去发展。把这样一款操作系统也应用到AV、VR的设备上去,所以说构建一个物联网时代的操作系统是非常重要的。
  • 存储磁盘阵列 RAID5小实践
    RAID概念与实现方式      RAID(Redundant Array of Independent Disks):独立冗余磁盘阵列,简称磁盘阵列。RAID是按照一定的形式和方案组织起来的存储设备,它比单个存储设备在速度、稳定性和存储能力上都有很大提高,并且具备一定的数据安全保护能力。RAID 的主要实现方式分为硬件RAID 方式和软件RAID 方式:硬件RAID:利用集成了处理器的硬件RAID适配卡来对RAID任务进行处理,无须占用主机CPU资源。软RAID:通过软件技术实现,需要操作系统支持,一般不能对系统磁盘实现RAID功能。RAID数据保护机制---热备与重构热备(Hot Spare):当冗余的RAID阵列中某个磁盘失效时,在不干扰当前RAID系统正常使用的情况下,用RAID系统中另外一个正常的备用磁盘顶替失效磁盘。热备通过配置热备盘实现,热备盘分为全局热备盘和局部热备盘RAID5:分布式奇偶校验的独立磁盘结构      从它的示意图上可以看到,它的奇偶校验码存在于所有磁盘上,其中的p0代表第0带区的奇偶校验值,其它的意思也相同。RAID5的读出效率很高,写入效率一般,块式的集体访问效率不错。因为奇偶校验码在不同的磁盘上,所以提高了可靠性。但是它对数据传输的并行性解决不好,而且控制器的设计也相当困难。RAID 3 与RAID 5相比,重要的区别在于RAID 3每进行一次数据传输,需涉及到所有的阵列盘。而对于RAID 5来说,大部分数据传输只对一块磁盘操作,可进行并行操作。在RAID 5中有“写损失”,即每一次写操作,将产生四个实际的读/写操作,其中两次读旧的数据及奇偶信息,两次写新的数据及奇偶信息。1.在VM中新建了三块200M的硬盘.用于实验.如下图所示:2.查看当前系统识别到的磁盘设备#查看当前系统识别到的磁盘设备cat /proc/partitions 3.用fdisk命令初始化三块新硬盘,设置如下图所示:fdisk /dev/sdc4.RAID5磁盘阵列的硬盘使用情况.如下图所示:fdisk -l5、开始创建磁盘阵列mdadm --creat /dev/md0 --level=5 --raid-devices=3 /dev/sd{c,d,e}16、为新建的/dev/md0建立类型为ext3的文件系统mkfs –t ext3 –c /dev/md07、查看创建效果mdadm --detail /dev/md08、新建目录mkdir /mnt/raid5xmount /dev/md0 /mnt/raid5x9、拷贝文件到磁盘阵列cp 任意文件 /mnt/raid5xll /mnt/raid5x10、实现服务器启动自动挂载磁盘阵列vi /etc/fstab重启之后md0自动变为md127,需要重新进入VI修改为md127重启后最终验证
  • python多线程
     Python多线程类似于同时执行多个不同程序,但其执行过程中和进程还是有区别的,每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口,但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。  Python多线程优点  1. 使用线程可以把占据长时间的程序中的任务放到后台去处理;  2. 用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度;  3. 程序的运行速度可能加快;  4. 在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。在这种情况下我们可以释放一些珍贵的资源如内存占用等等。  Python多线程使用方法  Python中使用线程有两种方式,分别是函数或者用类来包装线程对象。  用函数来包装线程对象的方式  用函数来包装线程对象的方式是调用thread模块中的start_new_thread()函数来产生新线程,线程的结束一般依靠线程函数的自然结束,也可以在线程函数中调用thread.exit()以达到退出线程的目的。具体语法如下:  thread.start_new_thread ( function, args[, kwargs] )
  • 存储服务2024.2月技术干货合集
    技术干货RFID射频识别技术特点笔记分享https://bbs.huaweicloud.com/forum/thread-02127143553077714028-1-1.html敏捷项目管理基础笔记分享https://bbs.huaweicloud.com/forum/thread-02101144401813952024-1-1.htmlJAVAweb中servlet 的生命周期https://bbs.huaweicloud.com/forum/thread-0240144402208678038-1-1.html在JAVAweb中我们常说的重定向和转发是什么https://bbs.huaweicloud.com/forum/thread-02101144402338017025-1-1.htmlSSH 组合框架模式小知识分享https://bbs.huaweicloud.com/forum/thread-0269144402445122035-1-1.html项目开发中常用乱码解决手段分享https://bbs.huaweicloud.com/forum/thread-0264144402483066029-1-1.htmlMVC架构知识点https://bbs.huaweicloud.com/forum/thread-02127144402586510031-1-1.html轻松快速地调整Kubernetes的CPU和内存https://bbs.huaweicloud.com/forum/thread-02101144403362632026-1-1.htmlLinux中可引起文件时间戳改变的相关命令https://bbs.huaweicloud.com/forum/thread-0264144403449873030-1-1.htmlNB-IoT 技术亮点&行业挑战https://bbs.huaweicloud.com/forum/thread-02104144464580188001-1-1.html物联网SIM卡和手机SIM卡真的是一回事吗?https://bbs.huaweicloud.com/forum/thread-0259144464674802001-1-1.html一文看懂华为云IoT第三方物联网业务无感迁移方案https://bbs.huaweicloud.com/forum/thread-0225144465684135001-1-1.html蜂窝移动通信技术笔记分享https://bbs.huaweicloud.com/forum/thread-0225144465847729002-1-1.htmlLPWA 通信技术笔记分享https://bbs.huaweicloud.com/forum/thread-0259144483762015002-1-1.html
  • LPWA 通信技术笔记分享
    1.SigFox            SigFox 是一家法国的物联网技术创业公司,它的公司叫 SigFox,它的这项技术的名字也叫 SigFox。SigFox 这项技术专门为那些吞吐率很低的项目所设计,它的传输功耗很低,只有 50-100 微瓦,但是仍然能维持比较稳定的数据连接。但是呢,因为物联网设备会产生大量的 数据,并且这些数据由 SigFox 公司自己来进行存储。但是 SigFox 毕竟是一家小公司,自己 保存着这些数据公信力不足,同样在信息安全方面也存在疑问,所以它的使用并没有像 LoRa 一样非常广泛。2.LoRa            LoRa 是 Long Range 的缩写,它跟 SigFox 不一样的是他由 LoRa 联盟维护管理。LoRa 技术 由 Semtech 公司开发,之后经过 LoRa 联盟的共同努力,他们开发出了应用于 LPWA 领域的 网络,叫做 LoRaWAN。它是一项基于扩频技术的超远距离无线传输方案,以此来达到长距 离和低功耗的要求,这项技术主要在未授权频段来支撑。Lora 可以应用于自动抄表、智能家 居和楼宇自动化、无线预警和安全系统、工业监测和控制以及远程灌溉系统等等。3.NB-IoT              NB-IoT 最早是由华为和沃达丰主导提出来的,之后加入了爱立信和高通等一些公司。它的特 点就在于 NB-IoT 叫窄带蜂窝物联网,所以它构建于现有的蜂窝网络。同时因为它是窄带,所 以他只消耗大约 180KHz 的带宽,可直接部署于 GSM 网络、UMTS 网络或 LTE 网络,以降 低部署成本、实现平滑升级。4.eMTC            在 LPWA 技术当中最后一个要描述的就是爱立信基于 4G 网络提出的解决方案 eMTC,它主 要面向深度覆盖、大连接的应用场景。与 NB-IoT 相比,它的速率更高但是覆盖范围要更小, 并且功耗也比较大。但是,虽然与 NB-IoT 相比它的覆盖范围更小,功耗也更大,但是它具备 语音通信的能力。所以相较于 NB-IoT,它可以被应用于一些需要使用语音通信功能的场景之下。LPWA 技术对比SigFoxLoRaNB-IoTeMTC频段SubG免授权频段SubG免授权频段主要在SubG授权频 段SubG授权频段传输速率100bps0.3-5kbps<250kbps<1Mbps典型距离1-50km1-20km1-20km2典型应用智慧家庭、智能 电表、移动医 疗、远程监控、 零售智慧农业,智能 建筑,物流追踪水表、停车、宠物 跟踪、垃圾桶、烟 雾报警,零售终端      除了 NB-IoT 和 eMTC,其他的两种网络都运行在 SubG 免授权频段上。SubG 的意思是频率在 1GHz 以下,主要是指 27MHz 到 960MHz 的频段。SubG是长距离、低功耗通信的理想选择。因为在功率相同的情况下,网络的频率越高,穿透能力就越差,但是 LPWA 场景下的设备如电表、水表等,他们经常被放在比较深的位置当中,通常有非常多的阻碍在上面,所以选择低频段就显得非常有必要了。      在表中也可以看到对于 NB-IoT 的描述当中,它的频段主要部署在 SubG 授权频段之上,这是因为有一部分 NB-IoT 网络部署于SubG授权频段之外      由于应用于免授权频段的 LoRa 与授权频段上的 NB-IoT 都是比较热门的 LPWA 技术,所以经 常被用来作对比。两者之间的差别就在于:1)阵容不同      LoRa是由美国个体户Semtech研究出来的,NB-loT是由3GPP官方移动通信协会制定的标准。LoRa基本上是由Semtech一家公司包办上下游产业链,但NB-loT则是整个通信产业上下游公司在合力运营,比如NB-loT芯片模组现在华为、高通、三星、联发科等公司都在做。2)频段使用不同      NB-loT使用的频段是授权频段,而LoRa使用的则是非授权频段。      授权频段,就是工信部授予的,除了被授予的运营商能用,其他所有个人企业机构都不能使用的频段,用了就违法,无线电管理部门会上门查水表。      而非授权频段,就是工信部没说给谁用,谁都可以用的频段。因此,如果有个人或者企业使用LoRa的工作频段做别的事,那么就会对这个区域的LoRa设备产生严重的干扰,导致网络无法使用。      因此,有官方背景的NB-loT网络质量肯定更好,更高质。3) LoRa需要企业自建,NB-loT运营商早已建好      运营商并不运营LoRa网络,如果企业想使用LoRa,需要自己购买基站、网络设备、服务器等等全套网络运营软硬件,并完成网络搭建,自己运营。      而NB-loT目前三大运营商已经在国内完成了基站的建设与网络开通,像使用手机 SIM卡一样,企业只需要从运营商采买NB-loT的SIM卡,随后插入带有NB-loT模组的设备内,就可以缴费使用啦。4) LoRa的优势在哪里?      其实对于90%的企业来说,LoRa确实没啥优势。除非企业想使用物联网的位置在农村、偏远山区、独立的厂区等(比如智慧农场、智慧工厂),确实没有运营商NB-loT网络的覆盖,无可奈何才会想到自建LoRa。      再就是非常大的企业,或者政府,怕使用运营商的网络不安全,比如出现数据窃取,因此宁愿自己建设网络自己维护,也不相信运营商。以上就是 NB-loT与LoRa之间比较大的区别。
  • 【话题交流】新的一年新的规划
    新的一年新的规划,大家有木有自己想要实现的目标,想要学习的知识方向(云计算、大数据、物联网、人工智能等等),大家都可以一起来讨论一下一起学习一起进步,新年新气象冲冲冲。
  • 蜂窝移动通信技术笔记分享
    2G      2G 技术可能年代已经比较久远了,2G 的出现标志着数字通信的起源,2G 又叫 GSM,全名 为:Global System for Mobile Communications,中文为全球移动通信系统。通过 2G 网 络,用户可以打电话,发短信。之后就是 GPRS,又称作是 2.5G,它是 GSM 的延续,同时它 的传输速率基于 2G 又有了提升。3G      到了 3G,用户的数据传输速率就更高了,一般可以达到几百 kbps,3G 用户可以视频通话, 同时也可以用手机看电视。在 3G 当中,国内的运营商都使用了不同的标准,它们分别是 CDMA2000、WCDMA 和 TD-SCDMA。其中联通的 WCDMA 最新演进技术 HSPA+可以支持 最高 42Mbps 的传输速率,目前仍然被应用于大部分视频数据传输领域。4G      3G 当中的 HSPA+技术虽然可以用于视频数据的传输,但是如果想要传输高清的视频数据,就 需要使用到 4G。虽然说 5G 非常热门,但是大部分用户用的运营商网络其实还是 4G 网络。 到了 4G,它的数据速率就更高了,用户可以用手机看视频听歌等一系列多媒体业务。 同时在 4G 网络当中,还有一点需要阐述的就是 4G 的不同等级,也就是 LTE-Cat。其中 Cat 的意思是 Category 等级,它指的是终端设备接入 4G 网络的所支持的不同的速率等级。在 4G 当中,设计者使用不同的等级方式来规定某一个设备所能达到的最高传输速率。在 4G 刚 开始的时候,市面上常见的各种终端设备使用的是 Cat.4 这个等级,但是现如今生活中所使用 的 4G 设备基本都是 Cat.6 这个等级了。至于设置这些不同等级的原因就在于不同等级的模组 芯片的价格是不一样的。                                                                                 LTE UE 接入能力等级等级DL Speed/MbpsDL-MIMOUL Speed/Mbps1101525022531002504150250530047563002 or 45073002 or 415081200860094502 or 450104502 or 4100      同时在物联网领域,目前使用比较多的是 Cat.1 这个等级,因为除了大部分设备使用低功耗广 域网这个场景之外,还有一部分对于网络速率有需求的设备就会使用 Cat.1 等级,尽管 Cat.4 及更高版本的解决方案支持高速率,但是对于物联网终端设备来说,这些模组的成本太高了, 所以 Cat.1 等级就成了使用 LTE 网络最具有性价比的等级。 Cat.1 支持高达 10Mbps 的终端下行链路速率,从而能够将更低功耗和更低成本的 IoT 设备连 接到 LTE 网络。由于世界各地的 4G LTE 运营商均基于最低 3GPP Release8 协议版本进行部 署,因此运营商无需升级网络,仅需要简单的参数配置即可允许 Cat.1 终端访问网络。5G      5G 网络是第五代移动通信网络,5G 的理论峰值速率可以达到 10Gbps。同时 5G 定义了三大 应用场景:增强型移动互联网业务 eMBB(Enhanced Mobile Broadband)对应的就是 10Gbps 的速率,海量连接的物联网业务 mMTC(Massive Machine Type Communication)对应的是 1 million/km2 的设备连接数,超高可靠性与超低时延业务 uRLLC(Ultra Reliable & Low Latency Communication)对应的是 1ms 的时延。在这三大 场景当中,eMBB 场景与用户的关联性比较大,因为它能给用户提供大带宽的上网速率。但是 另外两个场景就与物联网的关联性比较大了,海量的连接与超低的时延能够帮助物联网在很多 不同的应用当中进行业务能力的提升。在本节内容当中,读者们只需要了解 5G 的三大场景名 称即可,关于 5G 的详细内容将在之后的章节进行呈现。蜂窝移动通信网络技术对比2G3G4G5G频段授权频段 (以900M为 主)授权频段 (900、1800M为 主)授权频段 (1800M-2600M)授权频段: C-band 毫米波传输速率GSM: 9.6KbpsGPRS:56- 114KbpsTD-SCDMA:2.8MbpsCDMA2000: 3.1Mbps WCDMA: 14.4Mbps下行 Cat.6、7: 300Mbps 下行 Cat.9、10: 450Mbps10Gbps (巴龙5000芯片支 持 下行速率4.6Gbps; 上行 速率- 2.5Gbps)典型应用POS、智能可 穿戴设备自动售货机、智能 家居移动终端、视频监 控AR、VR、辅助驾 驶、自动驾驶、 远程医疗
  • 一文看懂华为云IoT第三方物联网业务无感迁移方案
    近期在物联网领域,掀起的热门技术话题,莫过于“云云迁移”。业务快速增长,导致原有物联网平台无法匹配业务发展,如何选择一个灵活、安全、可靠、可用的IoT物联网平台、物联网业务如何快速实现云迁移?这类问题成为了困扰企业的难题。华为云IoT融合了华为自身长期在ICT及千行百业沉淀的技术与服务经验,基于华为云强大的技术底座,提供丰富的设备接入方式和全生命周期的设备管理能力,同时,也具备物联网业务无感迁移能力。即使企业物联网业务已与其它或自研平台对接,在不修改设备业务逻辑和协议情况下,也可实现快速接入华为云IoT平台。01物联网业务如何快速迁移至华为云IoT平台?为满足企业多云容灾和第三方云IoT迁移至华为云IoT平台的需求,华为云IoT平台IoTDA从设备端、平台端、应用端提供了低成本,零改造的存量设备无感迁移方案,可以在无感迁移的情况下保持云上业务系统稳定。平台端迁移自动化迁移第三方云平台设备信息:IoTDA提供自动化,高效的迁移能力,支持第三方云平台的存量产品和设备信息全量+增量数据同步到IoTDA,实现设备信息无感自动迁移。迁移流程如下:兼容第三方云平台Topic策略:IoTDA支持自定义Topic的策略,存量设备可以依据现有的Topic来定义Topic策略,不要求Topic固定前缀,实现存量设备的Topic免改动。Topic策略详情链接如下:https://support.huaweicloud.com/usermanual-iothub/iot_01_1111.html兼容第三方云平台鉴权模式:IoTDA支持自定义鉴权方式,存量设备可以依据现有的设备鉴权方式,来配置设备的鉴权策略,实现存量设备鉴权方式免改动。设备端迁移对于存量设备,客户只需要将设备接入域名修改为华为云IoTDA的接入点,即可批量化完成平台迁移。Topic策略详情链接如下:https://support.huaweicloud.com/usermanual-iothub/iot_01_1111.html对尚未接入三方平台的设备,华为云IoTDA提供设备侧SDK支持设备快速完成设备轻量化改动。华为云IoT设备侧SDK获取链接如下:https://support.huaweicloud.com/sdkreference-iothub/iot_02_0178.html应用端迁移华为云IoTDA提供应用端SDK,开发者只需做少量代码修改就可完成应用端适配,实现应用端的快速迁移。应用端SDK参考链接如下:https://support.huaweicloud.com/sdkreference-iothub/iot_10_1002.html02为什么选择迁移至华为云IoT平台?华为云IoT平台(IoTDA)是一个融合了设备接入、设备管理、安全可靠的双向通信、消息灵活流转引擎、监控运维、最优发放功能为一体的物联网服务平台。配合华为云其他产品同时使用,帮助物联网行业用户快速完成设备联网及行业应用集成,简化海量设备接入、管理的复杂性,节省人工操作,提升效率。支持端到端物联网解决方案构建:IoTDA提供丰富的Restful API,将能力开放给物联网应用、其他云服务和中间件,使能客户快速、低成本的构建自己的物联网解决方案。提供物模型以及云端编解码插件的能力:实现物联网数据的标准化和格式化,实现各种设备的数据汇聚、融合和协同,解决物联网各子系统烟囱式发展以及数据孤岛问题。多种协议接入:IoTDA支持多网络接入(2G/3G/4G/5G/NB-IoT/LoraWAN)、多协议接入(MQTT/CoAP/LwM2M/HTTPS)、多种接入模式(直连、网关、边缘计算平台、子系统、第三方云接入)、安全接入(TLS、DTLS、DTLS+、一机一密、X.509证书)来帮助行业各类设备安全可靠轻松上云,实现解决方案数据的完整融合。鸿蒙底座:IoTDA加入了Open Harmony开源鸿蒙项目,开发者集成Open Harmony能力或者鸿蒙模组可以无缝对接华为云设备接入服务,同时可以配套更高阶的安全、可信、运维能力。丰富的生态开放:使能开发者通过丰富的API、SDK、预集成模组的方式,实现设备上电即上云。设备SDK兼容设备端侧的OS包括LiteOS、OpenHarmony LiteOS-M、FreeRTOS、linux、ucos_ii、windows、Android等,帮助用户设备减少大量适配工作,快速接入IoTDA平台。提供开发者开发私有协议插件,进行协议动态加载能力。提供协议插件生态市场,支持更多行业协议,开放度更加灵活。协议插件可以一键部署,灵活插拔,实现不同行业品类的设备无代码或者低代码适配上云的能力。提供300+标准物模型,同时提供厂商生态开放物模型,覆盖主流设备场景。物模型设备数据格式统一,开箱即用、批量复用,提高开发集成效率。物模型支持零代码数据格式转换,可以通过界面托拉拽、函数serverless的方式进行设备数据格式转换,免运维、易部署。拥有多样化、灵活的数据转发能力,可以将数据转发至其他华为云服务进行进一步的数据处理。开发者可以通过自身情况,灵活选择应用服务器组件来对设备数据进行接收,依托华为云海量数据转存和分析能力,提升方案的构建效率。03如何联系华为云IoT获取迁移帮助?为满足客户的需求,华为云IoT设备接入服务提供迁移专家团队支持,为您提供一对一的迁移方案制定和帮助。
  • 物联网SIM卡和手机SIM卡真的是一回事吗?
    物联网卡?相信大家第一反应都是一愣。大家听过银行卡、电话SIM卡、会员卡…等等,很多人可能都是第一次听说物联网卡。那它到底是个什么东东?它能干什么呢?今天就带大家一探究竟。那在物联网世界里,物与物之间是怎么感知和链接的呢?我们首先要知道物联网的一个运行流程:物联网是通过设备上的各种传感器如温湿度传感器、RFID标签等感知终端来识别物体,采集数据等。然后,通过固定宽带、NB-IoT、2/3/4/5G在内的多种网络,将设备接入到物联网平台进行互联。若设备使用2/3/4/5G和NB-IoT网络接入,则需要通过物联网SIM卡接入运营商网络。而随着物联网的发展,设备类型越来越多,设备尺寸越来越小,对物联网SIM卡外部环境的适配性要求越来越高,对物联网SIM卡寿命的要求越来越长,对物联网SIM卡尺寸的要求越来越小,促使物联网SIM卡的形态从插拔式SIM卡,演进到嵌入式SIM卡和vSIM卡。Nano卡虽然看起来已经很小了,但是它们还需要设备具有配套的卡槽。这个卡槽的结构和走线,对于一些智能穿戴设备(智能手环、智能眼镜等)来说还是太大了。而且插拔式SIM卡里面的用户信息固定不可更改,一张SIM卡就是一个用户与运营商之间的契约,若您想要切换运营商,必须换卡。为了解决这些问题,eSIM和vSIM诞生了。嵌入式SIM卡:eSIM,也称eUICC(embedded UICC),顾名思义,与传统可插拔的SIM卡不同,eSIM的概念是将SIM卡直接嵌入到设备中。eSIM的本质还是SIM卡,不过它的“卡体”是一颗直接嵌在电路板的可编程的集成电路,其大小比Nano还要小上几倍。因为其可编程特性,eSIM支持通过OTA(空中写卡)方式进行远程配置,更新运营商配置文件,实现网络切换。vSIM卡:即virtual-SIM,虚拟SIM卡技术。可以说,vSIM就是eSIM的进一步演进,继承了eSIM的功能,并完全消灭了卡体,直接依托通信模块自身软硬件实现通信。终端设备拥有vSIM功能的通信模块,配合为vSIM特殊定制的底层软件,实现了内置加密存储数据(IMSI、KI等)。在登陆网络、鉴权、通信时,自动处理相应的逻辑,从而实现不需要实体SIM卡也能提供稳定的通信体验。eSIM和vSIM除了进一步缩小甚至消灭了实体卡之外,它们更重要的功能是解除了用户和运营商的直接绑定,对用户来说,切换运营商变得和切换WIFI一样简单。物联网SIM卡如何选在物联网时代,分享智慧,物联网不再是遥不可及的时代,它不知不觉地影响了我们的工作和生活,作为物联网的重要支撑,物联网卡已广泛应用于医疗卫生、能源和电力、智能服装、物流零售、智能农业和智能交通等领域。不同行业对物联网SIM卡的需求不同,我们可以总结出以下场景:物联网设备除了无线流量需求外,还需要以下两个场景流量:海外流量:企业在国内生产设备,销售海外。使用海外流量,则需和多个海外运营商洽谈,部分企业可能没有海外渠道。典型的行业有车企(销售海外)、物流、运输、保健等。不换卡切换运营商:因网络信号不好或订购套餐到期要更换运营商套餐,需要手工更换不同运营商SIM卡,人工成本高;典型的行业有新零售、运输等。可以预见的,随着5G的到来,物联网行业面临的功耗高、带宽速度慢和成本高等阻碍也将有效解决,届时,物联网卡将随5G和物联网行业迎来爆发。那么,如何选择一个长期稳定、可靠的物联网卡服务商成为企业的强烈需求。购物联网卡实质上是购买服务,只有把服务做好,通过功能强大的平台为用户提供流量长期使用的运营支撑,用户才能安心无忧地使用物联网卡。针对以上场景,华为云的 “全球SIM联接”云服务。它支持实体卡、eSIM卡和vSIM卡方式,提供卡购买、卡管理、设备接入、设备发放能力,借助定向流量、空中写卡和远程设备发放技术。华为云物联卡合作运营商达80家以上,网络覆盖全球100+国家和地区,实现设备全球就近接入公有云站点,享受当地资费,一站式的SIM卡流量管理;与国内主流模组厂家预集成,降低了eSIM/vSIM卡和设备接入集成难度,还可实现多运营网络按需选择,号码自动切换,向客户提供一站式设备连接管理的优质服务。
  • NB-IoT 技术亮点&amp;行业挑战
    NB-IoT技术亮点10年电池寿命:支持PSMeDRX/长周期TAU,水表场景下寿命高达10年20dB增益:覆盖等级比GPRS提升20dB,具备更强的信号穿透力50K联接数每小区:单小区最大的接入数量50K,能够支持更多数量设备接入高性价比模组:芯片设计简化,外围电路精简,极大程度降低模组成本海思是NB-IoT技术的引领者,是NB-IoT标准以及产业的主要推动者。海思长期坚持NB-IoT研发投入,推动行业标准落地、推动技术及商用场景应用创新。致力与生态伙伴一起打造一个稳健、开放的NB-IoT生态系统。2016年随着R13标准冻结, 海思率先推出NB-IoT 商用芯片Boudica120,助力模组厂商和行业客户物联网方案商用。截至当前海思NB-IoT Boudica系列芯片已经在水表、气表、智慧消防、资产跟踪等领域实现千万级商用部署数量,在门锁、白电、物流、路灯等领域实现数百万级商用,同时海思与合作伙伴探索更多的创新商用场景,在农业、穿戴、支付、共享经济等领域创新完成商用落地。伴随NB-IoT技术带来的商用场景广泛部署及物联网设备的成倍增长,行业对NB-IoT也提出了更多的挑战,如典型场景下, 如何有效的通过技术演进降低部署成本、大规模组网下如何解决功耗问题、设备互联后如何保证数据安全等。NB-IoT 行业挑战功耗挑战大在智慧表计行业,电池不可更换、设备不能反复充电,电池的使用时间制约了整个表计设备的寿命。在电池容量有限的情况下,想让表计的使用寿命达到10年,对NB-IoT的综合功耗要求非常高。近点运维困难传统智慧表计产品如果出现故障,会导致远程上报和升级无法完成,必须人工拆除返修,维修综合成本高,且影响用户用水用气,急需一个近点的无线维护手段,达到不拆表即可完成诊断、维护和升级的目的。设备安全等级低行业对提升设备安全等级的诉求日益急迫。例如在水表、燃气表等涉及计费和支付的领域,一旦出现被劫持、篡改的情况,将会对运营方和终端客户造成不可估量的损失。终端网络适配性NB-IoT网络设备厂家众多,且伴随不定时的网络升级改造;户外环境中存在遮挡、干扰等因素,还会恶化无线环境。这些情况对终端设备的网络适配性提出了很高的需求。文章来源:上海海思
  • Linux中可引起文件时间戳改变的相关命令
    在命令行中,用stat查看文件的状态信息如图所示,会出现3个类型的时间,分别是Access,Modify,Change。access time:表示最后一次访问(仅仅是访问,没有改动)文件的时间。modify time:表示最后一次修改文件的时间。change time:表示最后一次对文件属性(metadata)改变的时间,包括权限,大小,属性等等。当我们仅访问文件(cat、cp)时,access time 改变,而modify time ,change time 不会改变。当修改文件内容(vim)时,modify time改变,一般都会修改access time和change time。当修改文件权限属性(chmod)时,change time 改变,而access time ,modify time 不会改变。我们可以使用touch命令修改这些时间戳,如:touch -d 1999-01-01 a.txt // 将a.txt的Access和Modify时间改为1999-01-01 touch -a a.txt // 只将a.txt的Access时间改为当前系统时间 touch -m a.txt // 只将a.txt的Modify时间改为当前系统时间我统计了几点关于在Linux中可引起文件时间戳改变的相关命令一览表:SN时间戳命令示例备注1Avi sss(退出不保存)cat sssmore ssstail ssshead sssless ssscp test AAA/123左边的命令在该文件时间戳M或者C发生更新的前提下使用一次有效,并且使用其中任意一个命令引起该文件访问时间发生更新后,再使用其他命令则不会引起访问时间的更新。2M—按照时间戳M的字面意思来理解,只要文件内容发生变化该时间戳就会更新,但M更新的同时会引起C的更新。3Cmv sss aaamv sss /AAAchmod 744 ssschown sss testchgrp root testchattr +i sssln test file/H_link(硬链接可以)与文件属性相关的操作会单独引起该时间戳的更新。4A+Mtouch -amd "2 hours ago" testtouch:-a只更文件改访问时间.-m只更文件改修改时间.-d 以字符串格式接收时间-t 接收时间格式为:MMDDhhmm。若不加d或t,则默认更新为当前系统时间作。会引起C的更新,相当于A+C+M。5A+Ctouch -ad "2 hours ago" test6M+Cls -l /root > ssscat CCC > sssmore CCC > sssless CCC > ssshead CCC > ssstail CCC > sssnl CCC > sssecho 'HELLO' > ssstouch -md “2 hours ago” sss7A+C+Mvim sss(退出并保存)touch test(test文件已存在)touch -am test(test文件已存在)使用touch时,将A、C、M更新为当前系统时间。
  • 轻松快速地调整Kubernetes的CPU和内存
    在Kubernetes中分配和管理CPU和内存资源可能很棘手,但也很容易。本文,我将向你展示什么是Kubernetes资源和限制以及如何管理它们。本文的目标是简单–如何帮助你快速调整项目中的Kubernetes资源信息,主要通过三种方式:1. 为容器和 Pod 分配CPU和内存资源2. Resources Quota: 限制namespace的资源消耗3. Limit Ranges:配置默认的CPU请求和限制为容器和 Pod 分配CPU和内存资源下图,解释了Kubernetes资源的度量单位,资源状态工作流以及如何使用资源限制。CPU和内存单位Kubernetes 中的一个 cpu 等于:1 AWS vCPU1 GCP Core1 Azure vCore1 Hyperthread 在带有超线程的裸机 Intel 处理器上以下,Deployment使用了内存资源和CPU资源的请求和限制将CPU和内存 请求 (request)和内存 限制 (limit)分配给一个容器更详细的信息和代码段:将内存资源分配给容器和Pod将CPU资源分配给容器和PodKubernetes最佳实践资源要求和限制应用程序开发人员在Azure Kubernetes Service(AKS)中管理资源的最佳实践Resources Quota: 限制namespace的资源消耗资源配额,通过 ResourceQuota 对象来定义,对每个namespace的资源消耗总量提供限制。它可以限制namespace中某种类型的对象的总数目上限,也可以限制命令空间中的 Pod 可以使用的计算资源的总上限。资源配额的工作方式如下:不同的团队可以在不同的namespace下工作,目前这是非约束性的,在未来的版本中可能会通过 ACL (Access Control List 访问控制列表) 来实现强制性约束。集群管理员可以为每个namespace创建一个或多个 ResourceQuota 对象。当用户在namespace下创建资源(如 Pod、Service 等)时,Kubernetes 的配额系统会 跟踪集群的资源使用情况,以确保使用的资源用量不超过 ResourceQuota 中定义的硬性资源限额。如果资源创建或者更新请求违反了配额约束,那么该请求会报错(HTTP 403 FORBIDDEN), 并在消息中给出有可能违反的约束。如果namespace下的计算资源 (如 cpu 和 memory)的配额被启用,则用户必须为 这些资源设定请求值(request)和约束值(limit),否则配额系统将拒绝 Pod 的创建。 提示: 可使用 LimitRanger 准入控制器来为没有设置计算资源需求的 Pod 设置默认值。以下,是对持久卷声明和namespace资源的配额定义。你可以使用该kubectl apply命令来设置namespace的配额限制。kubectl apply -f resource-quota.yaml — namespace backend如何使用配额的详细说明,请参考https://kubernetes.io/docs/concepts/policy/resource-quotas/Limit Ranges:配置默认的CPU请求和限制如果你的namespace有资源配额,那么默认内存限制是很有帮助的。将 LimitRange 添加到namespace,不仅会限制cpu和内存,还会为存储请求大小强制设置最小值和最大值。存储是通过 PersistentVolumeClaim 来发起请求的。执行限制范围控制的准入控制器会拒绝任何高于或低于管理员所设阈值的 PVC。更详细的信息和代码段。为namespace配置默认的 CPU 请求和限制限制名称空间的存储使用量Kubernetes中的 Limit Range工具:管理Kubernetes的CPU和内存Popeye 会扫描集群中是否存在与配置,资源和网络漏洞有关的问题,并生成有关所有问题的详细报告。Goldilocks 扫描Pod中的资源限制,并使用建议的资源创建报告。Kube-advisor 来自Azure团队的工具,可扫描容器中缺少的资源并限制请求。K9s+benchmark 提供了一个命令行界面(CLI),使你可以轻松地管理,监视甚至对 你喜欢的终端软件中的集群进行基准测试你还可以将这些工具与 Datadog, Grafana + Prometeus,Azure Monitor结合使用,以改善资源并限制监视。总结设置资源请求:获取有关特定应用程序/容器的CPU和内存使用情况的信息。设置资源限制:运行负载测试以检测高负载下容器的CPU和内存。监视容器的CPU和内存使用情况。监视持久卷使用情况。检查是否可以使用Limit Range应用资源限制使用配额(不建议在生产环境中应用配额)文章来源:K8s中文社区译者:王延飞原文链接:https://dzone.com/articles/easy-and-fast-adjustment-of-kubernetes-cpu-and-mem
  • SSH 组合框架模式小知识分享
    SSH=Struts+Spring+Hibernate      集成SSH框架的系统从职责上分为四层:表示层、业务逻辑层、数据持久层和域模块层,以帮助开发人员在短期内搭建结构清晰、可复用性好、维护方便的Web应用程序。其中使用Struts作为系统的整体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持,Spring做管理,管理struts和hibernate。      Struts 是一个很好的MVC框架,主要技术是Servlet和Jsp。Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明。基于Struts开发可以简化开发难度,提高开发效率。  Spring 提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。Hibernate 是用来持久化数据的,提供了完全面向对象的数据库操作。Hibernate对JDBC进行了非常轻量级的封装,它使得与关系型数据库打交道变得非常轻松。在Struts+Spring+Hibernate系统中,对象之间的调用流程如下: Struts——>Spring——>Hibernate  JSP——>Action——>Service——>DAO——>Hibernate比如:1.Spring的配置文件bean.xml<?xml version="1.0" encoding="UTF-8"?><beans         xmlns="http://www.springframework.org/schema/beans"         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"         xmlns:tx="http://www.springframework.org/schema/tx">     <bean id="dataSource"           class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">         <property name="jdbcUrl"                   value="jdbc:mysql://localhost:3306/samblog?useUnicode=true&amp;characterEncoding=UTF-8&amp;autoReconnect=true">         </property>         <property name="user" value="root"></property>         <property name="password" value="123456"></property>         <property name="driverClass" value="org.gjt.mm.mysql.Driver"/>     </bean>     <bean id="sessionFactory"           class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">         <property name="dataSource">             <ref bean="dataSource"/>         </property>         <property name="hibernateProperties">             <value>                 hibernate.dialect=org.hibernate.dialect.MySQL5Dialect                 hibernate.hbm2ddl.auto=update                 hibernate.show_sql=false                 hibernate.format_sql=false            </value>         </property>         <property name="mappingResources">             <list>                 <value>site/sambloger/domain/Users.hbm.xml</value>                 <value>site/sambloger/domain/Blog.hbm.xml</value>                 <value>site/sambloger/domain/Category.hbm.xml</value>                 <value>site/sambloger/domain/Comment.hbm.xml</value>             </list>         </property>     </bean>     <bean id="transactionManager"           class="org.springframework.orm.hibernate5.HibernateTransactionManager">         <property name="sessionFactory" ref="sessionFactory"/>     </bean>     <tx:annotation-driven transaction-manager="transactionManager"/>     <!-- 配置Blog  spring进行管理  服务层直接调用实现与数据库的CRUD-->     <bean id="blogDao" class="site.sambloger.dao.impl.BlogDAOImpl">         <property name="sessionFactory" ref="sessionFactory"/>     </bean>     <bean id="blogService" class="site.sambloger.service.impl.BlogServiceImpl" scope="prototype">         <property name="blogDao" ref="blogDao"/>     </bean>     <bean id="blogAction" class="site.sambloger.action.BlogAction">         <property name="blogService" ref="blogService"/>         <property name="commentService" ref="commentService"/>     </bean>     <!-- 配置Comment -->     <bean id="commentDao" class="site.sambloger.dao.impl.CommentDAOImpl">         <property name="sessionFactory" ref="sessionFactory"/>     </bean>     <bean id="commentService" class="site.sambloger.service.impl.CommentServiceImpl" scope="prototype">         <property name="commentDao" ref="commentDao"/>     </bean>     <bean id="commentAction" class="site.sambloger.action.CommentAction">         <property name="commentService" ref="commentService"/>         <property name="blogService" ref="blogService"/>     </bean>     <!-- 配置Users -->     <bean id="usersDao" class="site.sambloger.dao.impl.UsersDAOImpl">         <property name="sessionFactory" ref="sessionFactory"></property>     </bean>     <bean id="usersService" class="site.sambloger.service.impl.UsersServiceImpl" scope="prototype">         <property name="usersDao" ref="usersDao"/>     </bean>     <bean id="usersAction" class="site.sambloger.action.UsersAction">         <property name="userService" ref="usersService"></property>     </bean></beans>2.Struts的配置文件 struts.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd"><struts>     <package name="samblog" extends="struts-default" namespace="/">              <action name="init" class="blogAction" method="init">                     <result name="success">/bloglist.jsp</result>             </action>             <action name="getBlog" class="blogAction" method="getBlog">                     <result name="success">/displayBlog.jsp</result>             </action>              <action name="getAllNote" class="blogAction" method="getAllNote">                 <result name="success">/notelist.jsp</result>             </action>             <action name="addComment" class="commentAction" method="addComment">                 <result name="success"  type="redirect">/getBlog</result>             </action>     </package></struts>3.Hibernate其中的一个配置文件:<?xml version="1.0" encoding="utf-8"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><!--      Mapping file autogenerated by MyEclipse Persistence Tools--><hibernate-mapping>     <class name="site.sambloger.domain.Blog" table="blog">         <!--id标签表示映射到数据库中是作为主键 其他property表示普通键-->         <id name="id" type="java.lang.Integer">             <column name="id" />             <generator class="increment" />         </id><!--该标签加N方 会有一个字段叫category_id作为外键参照1(Category)的主键字段 并且用来存储这个主键的信息-->         <many-to-one name="category" class="site.sambloger.domain.Category"  lazy="false" cascade="all">             <column name="category_id" not-null="true" />         </many-to-one>         <property name="title" type="java.lang.String">             <column name="title" length="400" not-null="true" />         </property>         <property name="content" type="java.lang.String">             <column name="content" length="4000" not-null="true" />         </property>         <property name="createdTime" type="java.util.Date">             <column name="created_time" length="10" not-null="true" />         </property><!--在一对多的关联中,在一的一方(Blog)设置inverse=”true”让多的一方来维护关联关系更有助于优化,因为可以减少执行update语句-->         <set name="comments" inverse="true">             <key>                 <column name="blog_id" not-null="true" />             </key>             <one-to-many class="site.sambloger.domain.Comment" />         </set>     </class></hibernate-mapping>Spring框架的作用和好处:    Spring框架提供了一个容器,该容器可以管理应用程序的组件,还提供了IoC和AoP机制,实现组件之间解耦,提高程序结构的灵活性,增强系统的可维护和可扩展性。     在SSH整合开发中,利用Spring管理Service、DAO等组件,利用IoC机制实现Action和Service,Service和DAO之间低耦合调用。利用AoP机制实现事务管理、以及共通功能的切入等。     功能是整合,好处是解耦。Hibernate中操作并发处理(乐观锁和悲观锁)    Hibernate框架可以使用锁的机制来解决操作并发。    a.悲观锁         在数据查询出来时,就给数据加一个锁,锁定。这样其他用户再执行删、改操作时不允许。当占用着事务结束,锁会自动解除。          Hibernate采用的是数据库锁机制实现悲观锁控制。        缺点:将并发用户操作同步开,一个一个处理。当一个用户处理时间比较长时,效率会比较低。      b.乐观锁         允许同时更新提交,但是最快的会成功,慢的失败。         在记录中追加一个字段值,用该字段值当做版本。当最先提交者提交后,会自动将版本字段值提升,这样其他用户提交,会发现版本低于数据库记录目前版本,因此抛出异常提示失败。    特点:允许用户同时处理,但只能有一个成功,其他失败,以异常方式提示。SSH工作流程       a.启动服务器,加载工程以及web.xml.           (实例化Lisener,Filter等组件,将Spring容器和Struts2控制创建)       b.客户端发送请求,所有请求进入Struts2控制器。控制器根据请求类型不同,分别处理。           (action请求,*.action会进入struts.xml寻找<action>配置.            其他请求,*.jsp会直接调用请求资源,生成响应信息)       c.Struts2控制器根据<action>配置调用一个Action对象处理。         整合方法一:将Action交给Spring容器          (Action对象由struts2-spring-plugin.jar插件提供的                      StrutsSpringObjectFactory负责去Spring容器获取)         整合方法二:将Action置于Spring容器之外          (Action对象由struts2-spring-plugin.jar插件提供的                      StrutsSpringObjectFactory负责创建,然后到Spring容器中寻找与Action属性匹配的Bean对象,给Action对象注入。(默认采用名称匹配规则)       d.Struts2控制器执行defaultStack拦截器、Action对象、Result等组件处理.       e.执行Action的execute业务方法时,如果使用Service或DAO采用Spring的IoC机制调用。       f.执行Result生成响应信息,执行后续拦截器处理       g.将响应信息输出。
  • 敏捷项目管理基础笔记分享
    1.敏捷项目管理基础1.1 项目管理和迭代开发方式项目的定义:一系列活动,有一个明确的目标或目的,并且必须在特定的时间和预算内依据规范完成项目管理:运用技能,方法与工具,为满足或超越项目有关各方对项目的要求与期望,所开展的各种计划,组织,领导控制等方面的活动。项目的三角:范围:要求做什么,也规定了不能做什么时间:必须完成的时间框架或最后期限成本:可用于项目的费用质量:产品的质量:项目的可交付成果的质量过程的质量:项目管理过程本身的质量项目管理的目的:在有限的资源投入条件下,在要求的时间内完成既定的项目目标。迭代开发模式      迭代式开发也被称作迭代增量式开发或迭代进化式开发,是一种与传统的瀑布式开发相反的软件开发过程,它弥补了传统开发方式中的一些弱点,具有更高的成功率和生产率。      在迭代式开发方法中,整个开发工作被组织为一系列的短小的、固定长度的小项目,被称为一系列的迭代。      每次迭代都包括了定义、需求分析、设计、实现与测试。采用这种方法,开发工作可以在需求被完整地确定之前启动,并在一次迭代中完成 系统的一部分功能或业务逻辑的开发工作。再通过客户的反馈来细化需求,并开始新一轮的迭代。1.2 Scrum方法——3 3 3 53个理论支柱:-高透明性(Transparency)- 检查(Inspection)-适应(Adaptation)3个工件:-产品待办列表-迭代待办列表-潜在可交付的产品增量3个角色:-产品负责人Product Owner-Scrum Master-开发团队5个事件:-迭代计划会议                 -迭代-迭代评审会议                 -每日立会-迭代回顾会议1.3 KANBAN方法看板:一种可视化流程管理系统三个原则:可视化,限制在制品,管理流动五个核心实践:可视化工作流(价值流):工作流程,由各种工作项构成限制在制品数量:工作项在本状态数量的上限,取决与整体团队的能力度量与管理流动:让价值流动起来,方法:累计流量图协同改进:整个团队一起合作显示化流程规则:不同状态转换的规则Scrum方法还是KANBAN方法都是为了顺畅,高质量地交付有用的价值大家可以在华为云DevCloud平台中体验:cid:link_01.4 风险管理四个阶段:1.风险识别2.风险分析3.风险应对计划4.风险监控和控制
  • [技术干货] 文件系统 :存储介质、原理与架构【转】
    前言从系统角度来看,文件系统是对文件存储器空间进行组织、分配、负责文件存储并对存入的文件进行保护和检索的一个系统。它的目的是使用户和应用程序能够方便地管理存储器上的文件和目录,比如常见的对文件的增、删、改、查。每当我们操作一个文件的时候,实际都会涉及到存储器、管理系统、被管理文件,还有就是实施文件管理所需的数据结构。存储器,我们也叫存储介质,也就是电子设备用来存储数据信息的器件。(一)存储介质介绍存储介质,也就是用来存储信息的介质,从远古的石壁刻画,到古代的笔墨纸砚记录,再到电气时代的磁存储、光存储、半导体芯片存储。光盘存储已近逐渐地退出大众的视野,我们这里主要介绍磁存储和半导体存储。磁存储的代表就是机械硬盘,半导体存储已近被非常广泛地应用了,比如我们常用的U盘、SD卡、TF卡、固态硬盘等。机械硬盘因为它容量大、价格低,在个人电脑中广泛使用,固态存储速度快,功耗低,无噪音,同等容量的价格也比较的平民,在各种便携式存储设备中广泛使用。(二)固态存储固态存储,也就是不依赖机械传动,直接使用半导体芯片为介质的一种存储。大的分类可以分为两种: RAM和ROM。Flash其实也算是ROM的一种变种,现在广泛使用的 ROM 大部分都是基于Flash设计的。大部分固态硬盘的存储介质也是Flash。(1)RAM与ROMRAM(随机访问存储器):是一种临时存储器,用于保存正在运行时所需的数据和程序,可读可写,允许在需要时快速读取或写入数据,但它也是易失性存储器,设备断电时里面的数据会丢失。ROM(只读存储器) :用于存储固定的、不经常变化的数据和程序,它是只读的,通常在制造时被写入,并且其内容在正常操作期间不可更改。但它存在一些变种,如可擦写可编程只读存储器(EPROM)和闪存(Flash),它们允许有限次的可编程操作。Flash存储器 :它是一种非易失性存储技术,广泛用于各种电子设备、USB、固态硬盘等产品。它分为NOR Flash 和NAND Flash 两种(2) NOR Flash它采用 NOR(不或非)门结构,与NAND Flash相比,NOR Flash具有一些特定的特性和优势:读取速度快随机访问能力适用于代码存储写入擦除速度较慢低功耗NOR门结构NOR Flash, NOR就是“非或”的意思NOR门是由两个输入端(A和B)和一个输出端组成的。其输出取决于输入信号的状态,具体逻辑运算规则如下:输出为高电平(1)的条件:只有当A和B都为低电平(0)时,NOR门的输出才为高电平。输出为低电平(0)的条件:如果A或B中至少有一个为高电平,NOR门的输出就会是低电平。NOR门的逻辑运算符号通常用符号“+”表示,其输出(Y)可以表示为:Y = A + B(其中,“+”表示逻辑或运算)。NOR门的逻辑符号如下所示:(3) NAND FlashNAND Flash采用NAND门结构,与NOR Flash相比,它具有一些独特的特点和优势。高密度存储相对低成本擦写熟读快适用于大容量数据存储顺序访问NAND门结构:NAND门由两个输入端(A和B)和一个输出端组成。其输出取决于输入信号的状态,具体逻辑运算规则如下:输出为高电平(1)的条件:当A和B都为高电平时,NAND门的输出为低电平(0)。输出为低电平(0)的条件:只有当A和B中至少有一个为低电平时,NAND门的输出才为高电平。NAND门的逻辑运算符号通常用“⊼”(或称“AND非”)表示,其输出(Y)可以表示为:Y = A ⊼ B(其中,“⊼”表示逻辑AND非运算)。NAND门的逻辑符号如下所示:----- A --| | | NAND|---- Y B --| | -----(4)基于Flash的应用嵌入式设备中的应用在嵌入式设备,一般是直接使用Flash存储器来存储程序和代码,按总线类型,可以分为串行和并行总线接口,在嵌入式设备中使用的比较多的是SPI串行总线。比如常用来存储程序的SPI NOR Flash: PY25Q128HA、MX25L51245G、FM25Q128A、EN25QH128A、BY25Q128AS它的特点是容量较小,可以随机访问。组合应用我们日常生活中使用到的固态存储器,比如U盘、SD卡、TF卡、固态硬盘等,它里面除了Flash存储芯片外,还有主控芯片、DDR内存、接口、PCB电路板。Flash存储芯片:是主要的存储介质,通常采用NAND型闪存。主控芯片:是固态硬盘的核心控制单元,负责管理数据的读写、错误校正、垃圾回收和性能优化等任务。DDR(双数据速率缓存):用于缓存数据和提高读写速度接口:决定了存储设备与主板之间的数据传输速度和通信方式PCB电路板:提供了这些组件之间的电气连接下面是一个固态硬盘的内部器件,其它的固态存储设备也类似。我们日常使用到的固态存储设备,比如TF卡、SD卡、U盘等,一般内部使用的都是NAND flash,它的优点是:存储密度高、改写速度快,同等容量下价格相对比较便宜。(三)固态存储架构体系(1)NAND flash 特性我们在上面看到一块固态硬盘内部包括了主控芯片、DDR内存、接口、PCB电路板,为啥需要这么复杂?为什么不能直接操作Flash芯片呢?主要原因是跟NAND flash 的特性有关系。NAND flash 有些独特的物理组成和使用特性:(a)写入的最小单元是页:NAND Flash 存储器的最小可编程单元是页。每次写入操作都需要覆盖整个页,而不能仅修改其中的一小部分。这使得写入操作的最小单元限定在一页的大小,即使只有一页中的一小部分数据需要更新,整个页也需要被写入。(b)擦除的最小单元是块:NAND Flash 存储器的最小可擦除单元是块。在擦除之前,需要将整个块的数据读取出来,修改后的数据写回。由于擦除操作是比较慢且磨损较大的操作,为了降低擦除的频率,设计选择以页为单位进行写入,而不是以块为单位。典型的页大小为2KB、4KB或8KB,常见的块大小为64页或128页。(c)擦写次数有限制每个块都有一个有限的擦写寿命,即可以执行的擦写次数是有限的。频繁地在原地更新数据可能导致某些块更快达到擦写寿命上限,进而影响整个NAND Flash的寿命。因此,设计者更倾向于采用写入新页并擦除旧块的策略,以减少擦写次数的集中发生。(d)随机位翻转NAND Flash芯片中会因为自然放电、电场噪声、辐射等原因出现随机位翻转的现象,导致存储的数据位发生不可预测的变化。(2)flash FTL因为 nand flash 有擦写次数的限制、有随机位翻转的问题、还有写入和擦除大小不一致的限制,现有针对机械磁盘设计的文件系统是不能直接应用在Flash上的,需要借助一个特殊的软件层——闪存转换层(FTL),来屏蔽闪存的底层差异,使上层系统可以透明地使用闪存。相应的,固态存储的软件架构也要复杂很多。(3)地址映射FTL 中的地址映射确保上层文件系统可以使用逻辑块地址,而不用担心 NAND Flash 存储器的底层细节。这种映射关系的管理是 FTL 在保障 NAND Flash 数据稳定性、提高寿命以及提供高效读写的关键功能之一逻辑块地址(LBA):这是上层文件系统使用的块地址,通常是顺序递增的逻辑块编号。应用程序或文件系统将数据按逻辑块地址组织,而不需要关心底层 NAND Flash 存储的特性。物理块地址:这是 NAND Flash 存储器中实际的物理块的地址。由于 NAND Flash 进行擦写时只能对整个块进行,FTL 负责将逻辑块地址映射到物理块地址,并处理擦写时的块移动操作。映射表:FTL 维护一个映射表,记录逻辑块地址到物理块地址的映射关系。这个映射表通常存储在 Flash 存储器的特殊区域,如页或块中。写入时的地址映射:当应用程序向 NAND Flash 写入数据时,FTL 将逻辑块地址映射到一个可用的物理块。如果该物理块已经被写入过数据,FTL 需要擦除该物理块,将其标记为可用,并将新数据写入。这一过程需要更新映射表。擦除时的块移动:由于 NAND Flash 存储器的特性,每次擦写操作都会引发整个块的擦除。当需要擦除一个物理块时,FTL 需要将该块中的有效数据移动到其他块,然后标记该块为可用。这一过程同样需要更新映射表。(4)垃圾回收为什么会产生垃圾?(a)不可原位更新:当需要更新NAND Flash中的数据时,无法直接在原地进行更新。相反,新的数据必须写入一个新的空白页中,而原有的数据所在的页则被标记为无效。这导致存储器中同时存在有效和无效的数据,即产生了垃圾。(b)擦写操作的不可细粒度:NAND Flash的最小擦除单位是一个块,而最小写入单位是一页。如果需要更新某个页面的数据,整个块都需要被擦除,然后将更新后的数据写入。由于擦写和写入的单位不同,更新操作可能会导致未更改的数据也被重新写入,形成了垃圾。(c)擦除前数据的标记:当需要删除数据时,NAND Flash通常会将相应的页标记为无效,而不是立即擦除。这样,数据被删除后,原来的页仍然存在,但被标记为无效状态,形成了垃圾。(d)写入放大:写入放大是指为了写入少量数据而触发的大量物理写入。由于不可原位更新和擦写操作的不可细粒度,写入操作可能导致更多的物理页被写入,从而增加了实际写入量,也增加了垃圾的产生。这些因素共同作用,导致NAND Flash中垃圾的产生。为了解决这个问题,存储系统采用垃圾回收机制,定期清理无效的数据,擦除无效块,以便重新利用存储空间,并最大程度地减少擦写次数,延长NAND Flash的寿命。垃圾回收的一般流程:标记无效页选择目标块数据迁移擦除目标块更新元数据(5)坏块管理为什么会产生坏块?(a)擦写次数限制:NAND Flash的每个块都有一个有限的擦写寿命,即可以执行的擦写次数是有限的。当某个块达到了其擦写寿命上限,该块就会被标记为坏块,不再可用。这是由于擦写操作引起的物理损耗。(b)随机位翻转:存储器单元可能受到环境中的辐射、电场噪声或其他干扰,导致数据位发生随机翻转。当这种情况发生在存储器中的某个块时,该块可能变成坏块,因为存储的数据无法正确读取。(c)存储介质的不稳定性:NAND Flash使用的存储介质(通常是浮栅)可能因为制造过程或质量问题而导致某些块不稳定。这种不稳定性可能导致块的性能下降,或者在使用中产生坏块。(d)擦写时的错误:在擦写操作中,由于电压不稳定、温度变化或其他因素,可能发生错误。这些错误可能导致擦写操作未能正确完成,从而使得块成为坏块。(e)制造过程中的缺陷:制造过程中可能存在一些缺陷,导致某些块在生产阶段就不完整或有问题。这些块可能在设备制造过程中被标记为坏块。坏块管理的一般流程(a)坏块检测:初始化阶段:在系统初始化时,进行坏块检测。这包括检查 NAND Flash 存储器中是否存在已经标记为坏块的块。运行时检测:在系统运行时,定期或在需要时进行坏块检测。这可以通过读取存储器中的坏块表或直接尝试读取每个块的方式来实现。(b)坏块标记:如果检测到坏块,将其标记为坏块。这可以通过在坏块表中记录坏块的位置或使用其他元数据方式来实现。(c)坏块替代:一旦坏块被检测并标记,系统需要寻找可替代的块。这通常包括从备用块池中选择一个可用的块来替代坏块。备用块通常是在 NAND Flash 设备制造时预留的。(d)更新坏块表:如果替代块被选择,需要更新坏块表,将新块的位置标记为有效块。这确保了系统在后续操作中不会再使用已标记为坏块的块。(e)数据迁移:如果坏块替代发生在运行时,系统可能需要将原始块中的有效数据迁移到替代块中,以确保数据的完整性和可靠性。(6)损耗均匀(磨损平衡)磨损均衡是为了最大程度地平衡 NAND Flash 存储器中擦写寿命的消耗,从而提高存储器的性能、可靠性和寿命。磨损均衡的策略一般有:(a)块循环使用:块循环使用是最简单的磨损均衡策略之一。它通过轮流使用存储器中的块,而不是过度依赖于特定的块。这有助于分散擦写操作,减轻存储单元的磨损。(b)Wear Leveling(磨损均衡)算法:Wear Leveling 算法是一种专门设计的算法,旨在在整个存储器中均匀分配擦写操作。这种算法考虑每个块的使用情况,优化写入和擦除操作的分布,以降低存储单元的不均匀磨损。常见的 Wear Leveling 算法包括静态均衡和动态均衡算法。(c)动态坏块管理:动态监测并管理坏块,确保它们不会集中在特定区域。当检测到新的坏块时,系统可以调整块的分布,以确保损耗均匀。(d)块交换:进行块交换,将频繁写入的块与很少写入的块进行交换。这有助于平衡擦写操作,减缓块的磨损。块交换可以是静态的,也可以是动态的,根据系统的需要进行调整。(e)备用块池的合理使用:在 NAND Flash 制造时,通常会预留一些备用块。合理使用备用块池,确保块的磨损相对均匀。(f)周期性的擦除操作:定期执行擦除操作,即使块中没有无效页。这有助于重置块的状态,减小块的磨损程度。(7)为什么手机越用越卡手机越用越卡,除了器件的老化问题之外,还有一个原因就是存储设备里面的数据接近存储卡容量,导致存储设备写数据变慢了。为什么容量满了就会变慢了呢?这主要与写放大和垃圾回收有关系。假设要写入一个4KB的数据,但已经没有干净空间了,只有失效的数据可以擦除,所以主控就把所有的数据读取到缓存存,然后擦除一个块,再加上这个4KB新数据写回去,这就造成了写入放大,本来是需要写4K的数据,却写入了512K的数据,也就是128倍放大。上面只是个假设,实际有垃圾回收策略的接入,不会是128倍这么大。下面是IBM Zurich Research Laboratory做的研究,实际证明写放大与空闲净块关系极大上图可以看出,空闲块少后,写放大可以到达3~4倍(四)机械硬盘尽管固态存储设备发展迅猛,但传统的机械硬盘存储还是有很大的市场占有量,因为它数据稳定,同等价格下,存储容量更大。(1)外部结构我们从外部看,一个机械硬盘上有:主控芯片、高速缓存、电源接口、主从设置电路、数据接口、控制电路板。主控芯片:是机械硬盘的核心控制器,负责管理硬盘的整体操作。它控制数据的读写、定位磁头、管理电机旋转等。高速缓存:是一块用于临时存储数据的内存。它能够提高读取和写入数据的效率,尤其在处理频繁访问的数据时。电源接口: 为硬盘提供电力主从设置电路: 用于配置硬盘在IDE链路上的身份。数据接口:用于与主板或控制器通信的接口(2)内部结构机械硬盘的内部结构主要有:磁头组件、盘片、主轴组件、电机、接口等磁头组件: 负责在盘片上读取和写入数据。它是机械硬盘中的核心组件之一,通过悬浮在盘片表面上并移动,实现对数据的访问。盘片: 是机械硬盘内的磁性圆盘,数据存储在其表面上。硬盘通常包含多个盘片,它们叠放在主轴上。主轴组件: 包含主轴电机,负责旋转盘片。盘片通过主轴组件旋转,磁头组件通过它来读取和写入数据。电机:提供硬盘所需的动力,主要包括驱动主轴组件的主轴电机和控制磁头的定位电机。(3) 盘面、磁道、柱面与扇区我们用一张唱片的盘面来类比硬盘的的盘面,可以看到上面有明显的盘面、磁道、柱面,机械硬盘的内部盘面也类似。盘面(Platter):盘面是硬盘内部的物理圆盘,通常由非磁性材料制成,表面涂有可磁化的材料,用于存储数据。一个硬盘通常包含多个盘面,它们叠在一起并通过主轴电机旋转磁道(Track):磁道是盘面上的一个圆形路径,从盘片的中心延伸到边缘。数据在硬盘上以磁道的形式存储一个盘面上通常有多个同心圆状的磁道,每个磁道上的数据可以被磁头读取或写入柱面(Cylinder)柱面是多个盘面上相同磁道的集合,它们在垂直方向上对齐,构成一个立体的数据存储结构通过沿着同一柱面的不同盘面上的磁道进行读写,可以提高数据的访问效率扇区(Sector):扇区是磁道上的一个小块,是硬盘中最小的数据存储单元。数据按磁道和扇区的组合方式进行存储。一个磁道上通常被划分成多个扇区,每个扇区可以存储一定容量的数据,通常是512字节或4K字节(4)机械硬盘工作原理1. 盘片旋转:机械硬盘内部有多个盘片,这些盘片通过主轴组件旋转。主轴电机提供动力,使得盘片以高速旋转,通常以每分钟转数(RPM)来度量。2. 数据的磁性存储:每个盘片的表面被分成许多磁道和扇区。数据以磁性的形式存储在这些磁道和扇区上。磁道是圆形的环,而扇区是磁道上的一个小片段。3. 磁头的运动:机械硬盘中有多个磁头,每个磁头对应一个盘片的表面。磁头悬浮在盘片表面上,可以通过机械臂的运动进行定位。机械臂负责将磁头移动到指定的磁道上,以读取或写入数据。磁头的精确定位是机械硬盘关键的技术之一。4. 读写数据:当需要读取数据时,控制电路会指示磁头移动到特定的磁道上,并从磁盘上的扇区读取磁性信息。这些信息会被转换为电信号,传递到计算机系统进行处理。当需要写入数据时,磁头会根据指令移动到指定位置,然后将电信号转换为磁性信息,写入到磁盘的相应扇区。(5)寻址模式CHS寻址模式(Cylinder-Head-Sector)在CHS寻址模式中,数据的物理位置由柱面(Cylinder)、磁头(Head)和扇区(Sector)三个参数确定计算机使用上面参数来指定硬盘上的数据位置,每个柱面上的磁道由多个扇区组成,磁头负责在柱面上移动,读取或写入指定磁道的指定扇区这种寻址方式已经逐渐过时,因为它在处理大容量硬盘时存在限制,难以管理大量柱面、磁头和扇区的信息逻辑块地址(LBA)寻址模式LBA是一种更为直观和简化的寻址方式在LBA寻址模式中,硬盘被视为一个线性的地址空间,每个扇区都有一个唯一的逻辑编号计算机系统直接使用这个逻辑块地址来访问硬盘上的数据,而无需考虑具体的物理位置LBA寻址模式对于大容量硬盘和简化操作系统的数据管理来说更为方便,因为它不涉及复杂的CHS参数现代计算机系统几乎都使用LBA寻址模式,这种方式提供了更高的灵活性和可扩展性,同时简化了硬盘管理(五)分区格式化我们买的U盘、SD卡等存储设备,一般我们买回来就可以直接使用,并不需要做什么分区格式化。那是因为在设备出厂之前,厂家已经预先做了这些工作。一个存储设备在出厂之前,一般都是需要做:低级格式化选择分区方式建立分区格式化详细的分区格式化我们在下一章在介绍。结尾计划将文件系统相关的知识点整理输出成一个系列的文章:存储介质介绍、分区格式化、系统启动、FAT系列文件系统、ext系列文件系统、NTFS文件系统、嵌入式文件系统、文件IO等
总条数:98 到第
上滑加载中