-
自动化测试工具概述自动化测试工具在软件开发过程中扮演着至关重要的角色,它们能够显著提高测试效率、减少人为错误,并加快软件发布周期。随着技术的不断发展,市场上有许多优秀的自动化测试工具,如Selenium、TestComplete、Appium、JMeter等。每种工具都有其独特的优势和局限性,选择合适的工具对于确保软件质量和提升开发效率至关重要。自动化测试工具比较Selenium优势开源免费:Selenium是一个开源的自动化测试框架,无需支付额外费用即可使用。多语言支持:支持多种编程语言,如Java、C#、Python等,适应不同的开发环境。跨浏览器测试:几乎可以覆盖所有主流浏览器的自动化测试。社区支持:拥有庞大的社区支持,提供丰富的资源和插件。劣势上手难度:对于非编程背景的测试人员来说,上手难度较大。脚本维护:需要一定的编程知识才能编写和维护测试脚本。TestComplete优势用户友好:提供直观的界面和丰富的记录和播放功能,易于上手。对象识别机制:内置对象识别机制,自动识别元素变化,减少维护成本。GUI操作支持:支持桌面应用的GUI操作测试。劣势成本较高:作为一个商业工具,成本较高,可能不适合预算有限的团队。不开源:不开源可能导致某些定制需求难以满足。Appium优势跨平台:支持iOS和Android平台的自动化测试。原生应用和混合应用测试:可以对原生应用和混合应用进行自动化测试。劣势复杂UI交互处理:对于复杂的UI交互和动态内容的处理可能不够灵活。JMeter优势性能测试:提供性能测试报告,适合性能测试场景。脚本维护:测试脚本维护方便,易于复制和修改。劣势脚本灵活性:相对于直接使用编程语言进行接口测试,灵活性不足。报告能力:报告功能主要用于性能测试,配置过程复杂。总结在选择自动化测试工具时,应根据项目需求、团队技能和预算等因素综合考虑。Selenium和TestComplete各有所长,适用于不同的测试需求和团队环境。Selenium适合编程能力强、需要高度自定义测试脚本的团队,而TestComplete则适合需要快速上手的团队。Appium和JMeter则在移动应用和接口测试方面表现突出。最终目标是选择能够提高软件质量、加速产品上市的自动化测试工具,实现软件开发的双赢。
-
最近学习啦线性代数有关知识,于是想了一个利用数组解决线性代数中的矩阵转置问题思路 由线性代数相关知识点,如果将第一个矩阵的所有元素绕着一条从第一行第一列出发的右下角 45° 的射线做镜面反转,那么就可得到这个矩阵的一个转置矩阵。代码实现 用户需要自定义输入第一个数组(程序中的数组代表线性代数中的矩阵),也就是需要转置运算的数组 A,定义分三个步骤进行:1、定义该数组的行数2、定义该数组的列数3、定义该数组的元素然后被定义的数组经程序运算,输出转置后的数组 B。#include <stdio.h>int main(){ int i,j,i1,j1,a[101][101],b[101][101]; printf("please input the number of rows(<=100)\n"); scanf("%d",&i1); printf("please input the number of columns(<=100)\n"); scanf("%d",&j1); printf("please input the element\n"); for(i=0;i<i1;i++) for(j=0;j<j1;j++) scanf("%d",&a[i][j]); printf("array a:\n"); for(i=0;i<i1;i++) { for(j=0;j<j1;j++) printf("\t%d",a[i][j]); printf("\n"); } for(i=0;i<i1;i++) for(j=0;j<j1;j++) b[j][i]=a[i][j]; printf("array b:\n"); for(i=0;i<j1;i++) { for(j=0;j<i1;j++) printf("\t%d",b[i][j]); printf("\n"); } return 0;}总结 主要运用了线性代数及二维数组的特性知识点1、 二维数组的第一个下标表示行数,第二个下标表示列数,每个下标都是从 0 开始;2、 类型说明符、数组名和常量表达式的意义与一维数组相同;3、 二维数组的元素在内存中是“按行存放”,即在内存中先顺序存放第一行的元素,再存放第二行的元素,以此类推;4、 可以把二维数组看作一种特殊的一维数组,其特殊之处在于它的每一个元素又是一维数组。5、把m*n矩阵的行列互换之后得到的矩阵,称为的转置矩阵性质对于矩阵A, B和标量c转置有下列性质:转置是自身逆运算。转置是从m × n矩阵的向量空间到所有n × m矩阵的向量空间的线性映射。注意因子反转的次序。以此可推出方块矩阵A是可逆矩阵,当且仅当AT是可逆矩阵,在这种情况下有 (A−1)T = (AT)−1。相对容易的把这个结果扩展到矩阵相乘的一般情况,可得出 (ABC...XYZ)T = ZTYTXT...CTBTAT。标量的转置是同样的标量。矩阵的转置矩阵的行列式等于这个矩阵的行列式。两个纵列向量a和b的点积可计算为如果A只有实数元素,则ATA是正半定矩阵。如果A是在某个域上,则A 相似于AT。
-
技术干货GaussDB(for Mongo) 的计算存储分离架构笔记https://bbs.huaweicloud.com/forum/thread-02120151664525860012-1-1.html在本地利用虚拟机搭建Hadoop大数据平台https://bbs.huaweicloud.com/forum/thread-0272151308744815014-1-1.htmlLinux无图形界面环境使用Python+Selenium实践https://bbs.huaweicloud.com/forum/thread-0236151308822754014-1-1.html华为OBS对象存储安全性详解https://bbs.huaweicloud.com/forum/thread-0204151309062863014-1-1.htmldatakit数据工具知识点分享https://bbs.huaweicloud.com/forum/thread-02120151309141664013-1-1.html物联网中的数据加密技术https://bbs.huaweicloud.com/forum/thread-0219152353935417027-1-1.html鸿蒙OS Next与安卓系统的比较https://bbs.huaweicloud.com/forum/thread-02127152353757480025-1-1.htmlFunctionGraph触发器的作用及使用原因https://bbs.huaweicloud.com/forum/thread-0220152353508496023-1-1.htmlGaussDB(DWS)处理高并发访问https://bbs.huaweicloud.com/forum/thread-0297152097629359008-1-1.htmlSSH 组合框架模式小知识分享https://bbs.huaweicloud.com/forum/thread-0249152098389447009-1-1.html操作系统的目标和功能笔记分享https://bbs.huaweicloud.com/forum/thread-0249152098650335010-1-1.html资讯资讯|计算基础软件全栈智能,加速开发者原生创新https://bbs.huaweicloud.com/forum/thread-0266152352225862014-1-1.html资讯|以创新、人才、价值三要素,加速中国原生产业生态繁荣https://bbs.huaweicloud.com/forum/thread-0220152352377870022-1-1.html资讯|数智之城何以为美?探寻城市蝶变背后的数字“密码”https://bbs.huaweicloud.com/forum/thread-0219152352720955026-1-1.html
-
物联网中的数据加密技术概述物联网(IoT)作为一个由无数互联设备组成的庞大网络,正逐渐渗透至我们生活的方方面面。随着技术的迅猛发展,物联网设备所处理的数据量呈现爆炸性增长,这也使得数据的安全性成为了不容忽视的问题。在物联网中,数据加密技术扮演着至关重要的角色,它不仅能保护数据在传输过程中的机密性,还能确保数据的完整性和可用性。物联网中的安全威胁与挑战物联网设备的安全威胁主要来源于数据在传输过程中可能遭遇的窃听、篡改以及未经授权的访问。例如,智能家居系统中的摄像头、工业控制系统中的生产数据、甚至是智能交通系统中的车辆通信,都需要通过加密技术来保护个人隐私和敏感信息。加密技术的应用在物联网中,加密技术的应用十分广泛,包括但不限于以下几个方面:数据传输加密:使用SSL/TLS协议确保数据在网络中传输的安全性,防止数据被窃听或篡改。设备身份认证:通过X.509证书等技术实现设备身份的认证,确保设备间的通信安全。数据存储加密:对存储在物联网设备上的数据进行加密,以防数据泄露。远程访问控制:使用加密技术对远程访问物联网设备的通道进行保护,防止未授权访问。加密技术的选择在选择物联网中的加密技术时,需要考虑到算法的效率、安全性和适用性。对称加密算法如AES、DES因其速度快而被广泛使用,而非对称加密算法如RSA则因其安全性高而在密钥交换等场景中占有一席之地。此外,为了适应物联网设备的资源限制,轻量级加密算法也被提了出来,这类算法具有较低的计算复杂度和内存占用。物联网中的加密技术在物联网(IoT)中,数据传输的安全性至关重要,因为它涉及到个人隐私、商业秘密和国家安全等多个层面。为了确保数据传输的安全,加密技术发挥着关键作用。以下是一些在物联网中强化加密技术的方法:使用安全套接层(SSL)和传输层安全(TLS)协议:SSL和TLS是广泛应用于物联网的安全数据传输协议,它们基于公钥基础设施(PKI)和对称密钥加密算法,能够保护数据的机密性、完整性和身份认证。虚拟专用网络(VPN)技术:VPN技术可以在公共网络上建立一个加密的通信隧道,确保数据传输的机密性和完整性,避免数据在传输过程中被窃听和篡改的风险。数据加密传输:数据加密传输是指对数据进行加密处理,然后再进行传输,以确保数据传输的安全性。在物联网中,数据加密传输是一种保证数据传输安全的必要手段。其加密技术有很多种,包括对称加密、非对称加密、混合加密等。密钥管理和加密算法的选择:密钥管理是保证数据安全的关键环节,涉及到密钥的产生、存储、分发、更换和销毁等环节。有效的密钥管理系统能够确保密钥的安全性,防止密钥泄露或被滥用。此外,密钥生命周期管理也是确保系统安全的重要措施。加密技术的应用场景:在物联网领域,数据加密技术广泛应用于设备身份验证、数据传输、数据存储和远程访问控制等方面。例如,在智能家居系统中,用户的数据通信需要经过加密以保护个人隐私;在工业物联网中,生产数据的加密传输可避免敏感信息的泄露。加密技术的挑战与对策:随着物联网技术的快速发展,加密技术也面临着新的挑战,如密钥管理的复杂性、加密算法的局限性、缺乏统一的标准和规范等。为了应对这些挑战,需要简化证书认证流程并采用自动化的方式进行证书审核与管理,采用先进的加密技术和算法进一步提高数据安全水平。通过上述措施,可以有效地强化物联网中的加密技术,确保数据传输的安全性,保护用户数据不被未授权访问和篡改。随着技术的不断进步,未来的物联网加密技术将更加强大和可靠,以应对日益复杂的安全威胁。深入研究物联网中对称加密和非对称加密有什么区别及其各自的适用场景?对称加密与非对称加密的区别对称加密和非对称加密是两种常用的加密方法,它们在密钥管理、安全性和效率方面有所区别。对称加密密钥管理:对称加密使用同一个密钥进行加密和解密,因此密钥的分发和管理是一个重要挑战。安全性:对称加密的安全性依赖于密钥的保密性,如果密钥泄露,加密的信息就会被破解。效率:对称加密算法通常较快且高效,特别适合处理大量数据。非对称加密密钥管理:非对称加密使用一对密钥,即公钥和私钥。公钥用于加密信息,私钥用于解密。公钥可以公开分享,但私钥必须保密。安全性:非对称加密提供了更高级别的安全性,因为即使公钥是公开的,没有私钥也无法解密信息。效率:非对称加密的加密效率较低,尤其是在处理大量数据时。各自的适用场景对称加密的适用场景文件传输:对称加密适用于需要高速传输大量数据的场景,如文件加密、数据库加密。网络数据传输加密:对称加密也常用于网络数据传输加密等需要高速加密大量数据的场景。非对称加密的适用场景数字签名:非对称加密常用于数字签名,确保数据的完整性和来源。密钥交换:非对称加密用于安全地交换对称加密的密钥,如SSL/TLS协议中的密钥交换。身份验证:非对称加密支持第三方验证,即验证消息是否来自发送方。在实际应用中,对称加密和非对称加密往往结合使用,以达到既安全又高效的加密通信。例如,在HTTPS通信中,非对称加密用于安全地交换对称加密的密钥,之后的通信则使用对称加密来保证数据传输的效率.物联网设备在进行数据传输时通常使用哪些类型的加密算法?物联网设备在进行数据传输时通常使用以下几种类型的加密算法:对称加密算法对称加密算法使用相同的密钥进行加密和解密。常见的对称加密算法包括:Triple DES (3DES):一种数据加密标准,也称为三重数据加密算法(TDEA)。高级加密标准 (AES):例如使用256位密钥的AES-256。非对称加密算法非对称加密算法使用一对密钥,即公钥和私钥进行加密和解密。常见的非对称加密算法包括:RSA:一种广泛使用的非对称加密算法。数字签名算法 (DSA):用于验证消息的完整性和真实性。哈希算法哈希算法是一种将任意长度的消息压缩到固定长度摘要的算法,常用于消息认证、数字签名等领域。常见的哈希算法包括:MD5:一种较早的哈希算法,现在已不再推荐使用。SHA系列:包括SHA-1、SHA-256等,是目前更安全的哈希算法。数字证书数字证书是一种用于身份验证和信息加密的电子凭证,常用的数字证书有X.509证书等。物理层安全物理层安全是指利用物理特性实现信息安全,例如使用物理层加密技术将信号转换为不可解密的信号。这些加密算法可以用于保护设备之间的通信,防止信息泄露和攻击,从而提高物联网的信息安全性.物联网中密钥管理的常见挑战有哪些,以及如何解决?物联网中密钥管理的常见挑战物联网中的密钥管理面临多方面的挑战:设备多样性:物联网设备种类繁多,形态各异,这给密钥的管理和安全带来了一定的困难。资源限制:物联网设备通常资源有限,如何在有限的资源下实现有效的密钥管理是一个重要的问题。通信安全:如何保障物联网设备之间的通信安全,防止密钥的泄露和攻击,也是密钥管理需要解决的重要问题。密钥更新:在密钥更新过程中,如何确保更新的密钥安全、准确、完整的传输到所有设备是一个难题。密钥协商:在资源受限的设备上实现高效的密钥协商是一个挑战。现有的许多密钥协商协议在安全性、效率或可扩展性方面存在不足。解决方案针对上述挑战,一些解决方案被提出:轻量级加密算法:针对资源受限的设备,可以使用轻量级加密算法,如椭圆曲线密码学,这种算法可以在资源有限的环境中运行,同时提供足够的保护。分布式密钥管理:这种方法通过将密钥管理的责任分配给网络中的多个节点,以减轻单个节点的负担。例如,可以使用分布式密钥管理方案,如基于P2P的密钥协商协议,以提高网络的鲁棒性和安全性。安全协议:使用专门设计的安全协议可以应对各种安全威胁。例如,使用基于公钥的加密协议,可以在设备之间建立安全的通信通道,防止数据泄露和未经授权的访问。访问控制策略:为了更有效地控制对设备和数据的访问,可以使用基于属性的访问控制策略。例如,基于属性的访问控制模型可以根据设备的属性(如位置、类型等)来决定是否允许其访问特定的资源。未来研究方向未来的研究可能会关注以下几个方面:智能密钥管理:利用人工智能技术,使密钥管理更加智能化,能够自适应地应对各种复杂的网络环境和攻击。高效密钥管理:随着加密算法和密码技术的进步,提高密钥管理的效率,以适应物联网设备的高效运行。安全密钥管理:未来的密钥管理方案将更加注重安全性,包括使用更强大的加密算法,以及实施更为严格的安全策略,以保护物联网设备和数据的安全。结论综上所述,物联网中的数据加密技术是确保数据安全的关键。随着物联网技术的不断发展,加密技术也在不断地进化以应对新的安全挑战。无论是对称加密、非对称加密还是轻量级加密算法,都在各自的领域内发挥着重要作用。未来,随着技术的进一步发展,我们有理由相信会有更多高效、安全的加密技术出现在物联网领域,为我们的数据保驾护航。
-
系统架构差异鸿蒙OS Next与安卓系统在系统架构上有本质的区别。安卓系统是基于Linux内核的宏内核设计,而鸿蒙OS Next则是基于微内核设计。安卓系统的宏内核包含了操作系统绝大多数的功能和模块,这些功能和模块都具有最高的权限,一旦一个模块出错,整个系统就有可能崩溃。相反,鸿蒙OS Next的微内核仅包括了操作系统必要的功能模块,如任务管理、内存分配等,微内核的稳定性较高,即便其他模块出现问题,也不会对整个系统的运行造成阻碍。应用场景差异鸿蒙OS Next与安卓系统的应用场景也有较大的不同。安卓系统主要应用于手机、电视、智能穿戴设备等有限的场景。而鸿蒙OS Next则定位于“万物互联”,不仅可以应用于手机、平板、智能穿戴设备,还可以应用于智能家居、自动驾驶、工业应用等几乎所有能够接入物联网的智能设备。流畅度比较在流畅度方面,用户普遍反映升级到鸿蒙OS Next后的设备运行更为流畅。这是因为鸿蒙OS Next对安卓底层进行了优化,并使用了自主研发的方舟编译器,提升了系统的流畅度。相比之下,安卓系统在使用一段时间后,由于系统内产生的垃圾文件增多,可能导致性能下降,出现卡顿情况。总结综上所述,鸿蒙OS Next与安卓系统在系统架构、应用场景和流畅度方面均有明显差异。鸿蒙OS Next的微内核设计提供了更高的系统稳定性,而其广泛的应用场景和优化的流畅度则为其带来了更大的市场竞争优势。随着鸿蒙生态的不断发展和完善,鸿蒙OS Next有望在移动操作系统市场中占据一席之地,并为用户和开发者带来更好的体验和价值
-
触发器的作用FunctionGraph(以下简称FG)的触发器是一种事件驱动机制,它使得用户能够在特定的事件发生时执行预定义好的函数。这些事件可以是定时的(如每天早上8点发送日报),也可以是实时触发的(如用户提交表单时验证数据的准确性)。触发器提供了一种简便的方法来编排复杂的云服务和应用程序之间的交互,而不需要写大量的代码去处理这些交互。使用触发器的原因使用触发器的主要原因有以下几点:提高效率:触发器可以自动化地响应事件,无需人工干预,从而提高了工作效率。简化开发:开发者可以将精力集中在核心的业务逻辑上,而不是繁琐的异步处理逻辑。弹性伸缩:触发器可以根据事件的多少自动调整函数执行的次数,这对于应对业务高峰期特别有用。降低成本:由于触发器只在事件发生时才执行函数,因此可以有效避免不必要的资源浪费,从而降低了成本。触发器的种类和使用场景FG支持多种类型的触发器,包括但不限于:TIMER:定时触发器,可用于定期执行某些任务,如每日报表生成。APIG:API网关触发器,可用于在API调用时触发函数执行,适用于微服务架构。OBS:对象存储触发器,可用于在文件上传、下载或删除时触发函数,适合用于实时文件处理场景。SMN:消息通知触发器,可在接收到消息时触发函数,适用于需要即时反应的场景。总结综上所述,FunctionGraph的触发器是一个强大的功能,它让开发者能够轻松地在各种云服务和应用程序之间建立连接,并且能够根据实际需要自动执行相应的函数。这不仅提高了开发效率,还降低了成本,使得复杂的工作流程变得简单易管理。
-
“人们来到城市是为了生活,人们居住在城市是为了生活得更好。”——亚里士多德1条智慧热线铺就社情民意和谐之美白云山水,滋养万物。拥有366.68万常驻市民的广州白云区,是广州人口最多、面积最大的中心城区。生活在大城市里的人们都向往着“让生活越来越美好”,然而随着交通拥堵、住房困难、民众纠纷、环境恶化等压力的接踵而至,日益暴露的“城市病”搅得大家心烦意乱。城市不该是钢筋水泥的森林,而应该是人们安顿身心的幸福家园。一座城市,只有真正感知人们内心的呼声,落实市民生活质量日益提升的诉求,才能成为众心向往的“理想之城”。倾听群众心声,了解社情民意,广州12345政务服务便民热线是为解决城市热点问题而特设的渠道。然而,广州白云区每年受理来自12345热线的群众诉求50+万件,日均接收群众诉求1000+件,诉求信息不仅数量庞大、类型繁杂,还常有难以确定职责归属的疑难事项,这也让政务热线受理中心的工作者身心俱疲,难以及时有效地分派、处理每日堆增的诉求工单。广州白云区率先于全市各区建设“12345热线智慧办理系统”,携手华为云卓越运营,对实际工作流进行深度分析、全面梳理业务逻辑、提升现有技术能力,最终实现疑难工单识别、AI智能转派工单、热线话题挖掘和关联分析,更高效、更精准地处理群众“急难愁盼”的民生诉求问题。首先,通过AI算法训练智能派单模型,对实时工单分析研判,自动推荐工单承办部门,实现工单转派由5分钟提升至秒级,以前需要10人处理的工作,现在2人就可以快速完成,流转效率提升300倍,办理时长压缩近20%;同时,为了更好地从根源处预防和解决多人、高频投诉问题,华为云基于海量工单中的共性要素构建知识图谱,为广州白云区构建起“一人多诉、多人同诉、群体高发、突发热点、敏感诉求”系列预警模型,通过AI关联分析在共同的时间段、空间位置、标签群体诉求工单背后的根因,提前建立应对突发事件的预防体系,防患于未然。如今,在华为云的助力下,广州市白云区12345热线已累计智能派单超100万件,智能派单的工单比重及准确率保持在80%以上,助力白云区热线2023年综合考核成绩排名全市11个区第一。未来,这一条智慧热线,将持续牵动着每一位白云区居民的幸福生活。1个“数字助手”激发乐业创富之美2000多年前,丝绸之路连接起了亚欧大陆的无数商户。西安,作为古丝绸之路的东方起点,已成为现代化国际大都市,用科技推动企业振兴,促进经济发展,西安2023年实现GDP约1.20万亿元,同比增长5.2%。强工业、促消费,已让西安经济稳步增长,此外,西安的“小老板”们与大工业、大消费互相赋能,已成为推动西安经济增长的超级动能。截至23年底,西安市场主体总量突破317万户,获评“全国营商环境创新城市”和“国际化营商环境建设标杆城市”。提升营商环境,让百万“小老板”们乐业创富,是这座西北第一城激活经济的重中之重。围绕个体工商户重点关注的变更转让、降低成本、减租退税、金融扶持等事项,西安政务服务网上线“助企惠企服务专区”给大家送去更有温度、有速度的服务。第一,依托全量多维“企业库”和“政策库”,利用“大数据比对及后台智能筛选”,超2600条惠企政策精准找对人,点对点落实企业福利。在西安市产业发展引导专项资金项目中,通过“政策通”平台对符合条件的企业进行生产经营及受处罚情况、企业信用信息情况、企业纳税情况等方面资质审查,68家企业共收到1087万政策奖励,让企业真切感受到了实实在在的办事便利和服务温度。第二,依托市一体化政务服务平台,建成“一件事一次办”线上联办系统,全市共上线38个“一件事一次办”集成服务,办理业务时,只需输入身份证,表单中其余信息自动调取回填,自动生成申请表,大幅减少企业申报时间和申报难度,0跑动办好事。这些有温度、有速度的政务服务背后,是政务大数据中台对上亿条法人、信用、政策等库表数据的安全高效调用和开发。从22年起,华为云卓越运营与西安市大数据局组建联合工作组,对全市43个重点委办局进行了数据治理,共归集数据50亿+条,为“企业库”和“政策库”的梳理奠定了坚实基础。华为云数据仓库服务DWS支持千级并发事务毫秒级查询,ROMA Connect服务集成能力可将数据/应用接口开发时间缩短一半以上,使得数据能快速被应用调用,高效支撑企业一件事一次办、政策免申即享等惠企应用。冬去春来,年复一年,华为云用精湛技术和贴身服务助力西安市的一体化政务服务能力排名从“中”提升至“高”,助力西安市政府大幅提升了中小企业办事的便利度和体验感。截至2024年4月,西安政务服务网已点对点发布惠企政策2600+条,兑现财政类政策资金超269亿元。1条数字化“护城河”筑牢城市政务安全之美两江浮广厦,三镇耸云中。于水中央,因水而盛的江城武汉,正加速成为全国数字经济一线城市。云作为新质生产力,为武汉数字经济的蓬勃发展提供了强劲的支撑。经过几年合作耕耘,武汉携手华为云共建全国首个集政务域、可信域、产业域于一体的城市云——“武汉云”,承载了122个政府部门和企业单位、400多个政务系统的运行,在智慧医疗、智慧教育、智慧城区等政务民生领域发挥了重大作用。得益于多政府部门数据信息的广汇聚,政务服务触角变得更广、更紧密,政府治理变得更加智能,然而,也对云上安全提出了更严苛的要求。武汉携手华为云,构筑了基于一个安全云脑+七层防线的立体纵深安全防护体系。如今,武汉云已达成信息系统安全等级保护三级认证,这是国家对非银行机构的最高级认证,且护网行动历年累计零失分。首先,华为云为武汉构筑了“七层安全防线”,从物理、身份、网络、应用、主机、数据到运维,端到端构筑云平台的安全能力,全面防治来自众多场景的复杂攻击,实现云内外数据无缝对接、分钟级安全性能扩展,与传统安全形成代际优势。此外,华为云卓越运营构筑了以“安全云脑”为核心的安全运营体系,解决政府安全运营人力投入大、威胁处置时间长、安全价值不可见等痛点,确保精准的风险研判和治理。同时,安全云脑内置300+检测模型、100+处置剧本,可实现99%的威胁自动化处置。武汉云的安全检测从分钟级提升到秒级,安全处置从小时级提升到分钟级。另外,安全云脑的资产仪表盘提供3000+主机资产管理可视化能力,态势感知大屏提供风险可视、攻击可视、响应可视能力,帮助武汉云真正实现“一键安全合规、一体全程处置、一屏全面感知、一云全局分析”。云平台的安全保障了城市的高质量发展,从扫健康码到抢消费券,从社保账户查询到公积金提交提取,这朵看不见的云,稳稳地守护着市民的便捷生活。2023年9月,武汉云安全云脑荣获了中国信息通信研究院第三批“安全守卫者计划”优秀案例。转自华为云
-
在鲲鹏昇腾开发者大会2024上,华为副总裁、ICT产品组合管理与解决方案部总裁马海旭发表致辞,他表示:鲲鹏昇腾将与开发者一起,以创新激发创新、用价值回馈价值、以人才培育人才,打造一个更加繁荣的中国原生产业生态。以下为马海旭讲话全文随着AI技术的快速发展,AI正在重塑我们的时代,推动千行万业迈向智能化,每个行业、每个场景都正在被AI重新定义,智能世界正在加速到来。智能世界,算力是基础。计算产业通过打造坚实的算力底座,正成为驱动创新和变革的关键力量。各个国家都在不断提高对计算产业的重视程度,投入大量资源,致力于提升构建大规模算力、推动技术创新、培养专业人才,抢占计算产业的制高点,这为计算产业的厂商和开发者带来巨大的时代发展机遇。计算产业涉及服务器、操作系统、人工智能框架、数据库和中间件、大数据平台、云平台等多类产品和服务。硬件厂商、软件厂商、云服务提供商、开源社区、开发者群体都可以在这个产业生态中取得广泛的发展,共生共赢,共建一个欣欣向荣的生态体系。鲲鹏昇腾两大产业今天取得的成绩,与每一名伙伴和开发者都密不可分。鲲鹏昇腾产业一直致力于在技术和架构上的突破领先,从达芬奇架构,到系统层面的天池和全对等架构。再到集群层面的天成和天工架构,发展创新从未停止。鲲鹏不仅仅提供鲲鹏主板,还在网卡、RAID、DPU、操作系统、数据库等全栈软硬件上持续创新和突破。现在,鲲鹏已广泛服务于金融、电力、政府、运营商等行业的IT系统和核心生产系统。昇腾持续发展超大规模高速互联和计算、存储、网络高效协同运转能力,同时也在进一步提升CANN和昇思框架的易用性,现在昇腾AI已服务于国内几乎所有头部互联网、运营商、大模型厂商企业,为国内AI大模型的创新提供澎湃算力,加速千行万业智能化升级。鲲鹏昇腾与生态伙伴凝心聚力、跬步千里。4年多以来,已有13家OEM伙伴推出基于鲲鹏主板的服务器;昇腾有超过40家的硬件伙伴,已有超过50个主流基础大模型基于昇腾训练和迭代。总共有超过6700家行业伙伴加入到鲲鹏昇腾两大生态体系,共同孵化了超过18700个解决方案。人才培养上,华为始终坚持“以产业聚集人才、以人才引领产业”,与教育部合作“智能基座”产教融合项目,联合72所高校,培养了超过70万名学生,为中国的计算产业发展构筑了坚实的人才基础。鲲鹏昇腾已与超过610万名开发者紧密协作、相辅而行,携手打造了一个全新的计算产业生态。面向智能化时代,华为发布了All Intelligence战略,加速千行万业的智能化。鲲鹏昇腾希望与开发者一起,以创新激发创新、用价值回馈价值、以人才培育人才,打造一个更加繁荣的中国原生产业生态。首先,坚持开放,打造更易用、更高效的开发体系。鲲鹏以AI为使能动力,从编译器、操作系统等底层提供更加智能化的支持,让底层算力可以被极致使用。鲲鹏利用AI技术,做到业务负载的动态感知,以AI辅助的原生开发流水线让应用开发更加高效。昇腾进一步聚焦易用和分层分级开放,丰富一系列的加速库,加速大模型的训练、调优,以及推理快速部署,为开发者构建开发快、体验好的软硬件环境。其次,深化协同,构筑更活跃、更成熟的生态体系。今年,鲲鹏展翅和昇腾万里伙伴计划将进一步升级,成立鲲鹏昇腾原生创新汇、新增原生开发赋能与认证、提供NRE和样机等激励,激发原生开发创新,提升生态协同效率和应用开发效率,将与广大开发者及伙伴一起深入业务应用场景,逐步打造一个全新的行业智能化应用生态,让鲲鹏昇腾在千行万业智能化进程中发挥更大作用。最后,多层扩展,培养更全面、更多元的计算人才。我们将推出原生人才高校促进计划、建立鲲鹏昇腾科教创新卓越中心和孵化中心、完善原生人才发展体系。通过持续推进并扩展教育部“智能基座”项目,开发更加多元化和更加全面的鲲鹏昇腾课程,与各高校一起发展更多原生计算体系人才。我们会加大投入,跟开发者走得更近,让开发者更方便、更快地使用鲲鹏和昇腾相关的技术栈和产品。通过多层次、系列化的开发者活动和竞赛,为开发者提供创新创意的舞台,让每一位开发者都能够脱颖而出,让前沿科技创新进一步加速,让开发者的每一行代码都成为改变世界的力量。转自华为计算公众号
-
5月10日,鲲鹏昇腾开发者大会2024上,华为计算产品线研发总裁鲁鸿驹先生以 《计算基础软件全栈智能,加速开发者原生创新》为主题做分享,他表示:全面升级计算基础软件,昇腾使能大模型时代极简开发,AI使能鲲鹏释放极致算力。以下为鲁鸿驹发言全文我们所工作的IT领域是一个充满变化的产业,回顾过去30多年的产业发展,AI大模型正在成为继互联网、移动互联网以后第三波的产业浪潮,将给整个IT产业带来翻天覆地的变化。一方面,AI市场的渗透率速度预计将会远超当年的互联网和移动互联网,在未来2-3年内超越60%市场渗透率。另一方面,根据行业专家的分析,由AI大模型带来的AIGC产业规模正以50%以上的年复合增长率快速增长,在三年内就会超越千亿美金,带来巨大的商业机会。 从技术视角看,AI大模型技术还在进行着快速迭代。更大的模型规模,更长的序列,多模态,强思维这些都要求我们不断迭代和更新所依赖的基础大模型和领域模型。而从应用视角看,智能对话、文生视频、编码辅助等每天都在上线新应用。AI大模型带来这样高速的发展与变化,对所有IT行业的企业和开发者而言,速度将会决定命运,这将依赖于高效的算力提供。但是,高效的算力运用在今天仍然面临诸多挑战,对AI算力而言,开发者的核心诉求是大模型高效稳定的训练和推理。主要挑战有:如何跟进快速发展的主流模型和算法?大模型的训练耗时很长,如何提升算力的利用率,加速训练进程?随着集群规模变大,故障发生频繁,如何降低训练中断损失?如何在保证时延的前提下,提升推理的吞吐,从而降低规模推理的成本?对于通用算力,开发者的核心诉求是应用的极致优化和快速上线。为了更好的应对这些挑战,鲲鹏昇腾基础软件栈进行了全面升级。接下来将分鲲鹏和昇腾两个部分介绍。首先是昇腾基础软件。为了让各种大模型在昇腾集群上训的好、推的快,我们对昇腾AI基础软件做了6大全栈升级。包括:在硬件使能层,应用使能层CANN提供完备的大模型融合算子,使能业界主流大模型开箱即用。在框架层,昇思MindSpore升级多维并行加速能力,为大模型训练并行执行提供最优策略。在应用使能层,昇腾加速库 MindSpeed 提供大模型训练加速能力,兼容业界的主流生态;昇腾推理引擎 MindIE 提供调度、服务化和量化的能力,使推理变得更加简单高效;围绕集群高可用,MindX DL 提供智能健康监测和自动恢复能力,让大模型训练更加稳健。在开发使能面上,MindStudio升级了大模型调试调优能力,让大模型开发更加简单高效。以下将讲述这些升级的能力如何通过全栈协同优化帮助开发者进行模型训练、推理和开发调试。训练的挑战就是如何让客户开发的模型能够在昇腾算力集群上跑起来,最好是开箱即用。围绕这个目标,我们从算子库的完备性、AI框架、原生支持三方库三个维度来提升能力。在算子库的完备度上,CANN目前已全面支持主流大模型所需要的基础算子和80多个大模型融合算子。Ascend C提供60多个高阶API,使能开发者自主开发高性能算子和构建自有的加速库。在AI框架能力上,昇思MindSpore提供多级编译的能力,让开发的效率倍增。同时,我们进一步完善了昇腾对PyTorch API的支持,覆盖度已达到95%。另外,为了让开发者更好的在昇腾上使用业界主流的三方库,我们通过社区代码贡献的形式,原生支持 huggingFace 和 DeepSpeed等社区的主流能力。另外,为了让开发者更好的在昇腾上使用业界主流的三方库,我们通过社区代码贡献的形式,原生支持 huggingFace 和 DeepSpeed等社区的主流能力。通过这些基础软件能力的升级,昇腾做到了主流大模型100%支持,预置模型分钟级的开箱使用,易用性极大的提升。大模型调好之后,接下来是长周期的训练。目前一个千亿到万亿规模的大模型,往往需要训练几个月的时间。能否通过基础软件的优化来加速这个过程,实现模型的快速迭代?昇腾基础软件从计算、通信、并行和内存四个维度进行了全面优化,最大程度提升了大模型的训练速度。在计算优化上,通过大模型融合算子性能提升30%;在通信优化上,通过通算融合和集合通信算法创新,实现通信效率提升15%;在并行算法上,提供8维并行算法,同等算力规模下,训练性能提升8%;在内存优化上,通过选择性重计算策略,内存节省35%。同等卡数下能够支持更大参数规模的模型训练。基于上述优化,我们将昇腾算力集群的算力利用率提升了17%,训练时长同比缩短17%,更好的支撑客户大模型快速迭代。训练不光要快,还要稳。随着大模型规模不断的增大,AI算力集群规模也在增加。但集群规模越大,故障频率就越高。根据我们的计算,集群规模达到10万卡的时候,一个算力集群MTBF会缩短到2-3小时。算力集群的高可用已经成为大模型常稳训练的关键。昇腾算力集群通过软硬协同的优化,保障开发者的训练任务稳定运行:训练前,提供健康状态监控和预防性维护的能力,确保训练启动时系统处于最佳的状态。训练中,支持300+典型故障的实时自动检测和隔离,确保早发现早处置。故障发生后,通过分布式缓存加速、集合通信的快速建立,超大规模的集群故障发生后的任务恢复的时间从小时级降低到30分钟以内,今年将进一步优化到10分钟。这些关键能力的提升帮助我们将常稳训练的时间提升到30天以上,大大的提升了训练的效率。要实现大模型的商业正循环,不能仅仅是训的快,训的好,还得推的快,推的高效。推理需要同时兼顾时延和吞吐。时延决定最终用户的使用体验,吞吐决定规模推理的系统成本,进而决定是否能够实现盈利。昇腾推理基础软件通过全栈联合优化降低时延,提升吞吐效率:首先,我们通过对集合通信算法的优化和核心算子的通算融合,将推理的时延降低了60%。基于推理引擎 MindIE 启发式并行解码,进一步将平均推理的时延降低2倍。创新的自适应量化压缩,可以在不影响推理精度的情况下减少访存开销,将系统的吞吐率提升30%。叠加并行算法优化和细粒度的作业调度,进一步将系统吞吐提升30%。这些关键能力的协同优化,帮助我们在满足时延的条件下,将推理的吞吐提升6倍,大大降低了推理成本。大模型推理是很复杂的过程,昇腾推理引擎 MindIE 可以帮助开发者轻松完成。以当前最热的OpenSora为例,开发者只需要三步就可以完成文生视频。第一步将OpenSora模型导入到MindIE进行编译,第二步配置工作流参数,第三步生成视频。当前,模型规模更大、序列长度更长,单机放不下,需要引入多机推理。这时如何降低通讯时延,达成MOE负载均衡同时提升NPU内存使用效率成为主要的挑战。为了应对这些挑战,我们提供了完整的弹性推理的解决方案:首先是多机低时延通信技术。通讯的时延占比降低50%,为弹性推理提供了通信基础。其次,支持MOE动态调度,达成专家负载均衡,提升NPU使用效率,支持参数规模可以平滑扩展至万亿乃至更大的规模。最后是序列并行推理。降低NPU内存占用,支撑序列长度从K级到M级弹性推理。以上的特性,只需要开发者进行简单的资源配置即可使用,让弹性推理触手可及。大模型开发过程中性能调优是非常耗时的工作,典型场景至少需要2周的时间。为了提升开发体验,MindStudio在代码、框架、通信和算子方面升级了调优的能力。昇腾算子开发工具链进行了功能升级,着重强调三个能力。Ascend C支持C/C++编程风格,计算内存同步抽象,使能代码量降低30%。提供在板调试的能力,调试效率提升5倍。在调优方面,推出多级指令流水线,快速识别性能优化点最终能够帮助开发者将典型算子开发效率从两个月提升到两周。鲲鹏基础软件的技术升级,核心变化是使用AI的能力全面升级鲲鹏基础软件,为应用释放鲲鹏的极致算力:首先是操作系统,我们围绕五大领域持续创新,助力openEuler成为AI时代性能最优的OS。其次,在开发阶段,鲲鹏DevKit 智能识别应用计算模式,自动实现代码优化。在构建阶段,我们将AI能力注入编译器中,实现编译选项自动调优,内存数据最佳排布。在运行阶段,鲲鹏BoostKit 通过AI动态感知业务特征,开展全栈优化,提升系统性能。最后,使用AI模型优化传统数值计算方式,让高性能计算速度更快、更准。在操作系统方面,我们的目标是在openEuler中持续贡献,共同打造AI时代的首选OS:在计算子系统,通过自动感知负载,实现计算任务的智能调度和功耗调解,计算的能效提升15%。在存储子系统,通过动态内存大页、自适应NUMA等技术,将内存管理和应用特征灵活匹配,实现文件读写等访存密集类应用的性能提升。在网络子系统,通过用户态协议栈、网络加速等技术,降低端到端网络时延15%。在多样性计算上,openEuler通过异构内存管理等技术,提升多样性算力的利用率。在安全方面,提供了HiTLS高性能密码组件、软硬协同算法优化,以及精密计算统一框架,性能提升55%以上。可喜的看到,得益于整个社区的持续投入和创新,openEuler系操作系统已经得到了国内客户的广泛认可。2023年新增算力市场份额第一,达到36.8%。openEuler社区版本全球下载量达到239万,社区日活开发者超过4000人,成为操作系统领域最活跃的开源社区。 未来十年是计算架构创新的黄金时代,计算架构快速演进,应用日趋复杂。如何编写高性能代码,使其匹配新的计算架构,充分发挥硬件能力,需要开发者对应用计算特征、指令集、微架构等了然于胸。这需要丰富的领域知识和开发经验,技术挑战非常大。DevKit最新推出的鲲鹏亲和代码优化功能,结合AI技术辅助编程,适配硬件架构,自动生成最优代码。典型场景下应用性能提升10%-30%,让普通开发者也能具备专家级优化能力。对于应用开发者而言,编写完代码后下一个挑战就是选择合适的编译选项对自己的程序进行编译优化,使其在不同计算平台上都能获得良好的性能。我们为鲲鹏编译器引入AI能力,学习程序特征,辅助编译优化。其中,编译选项自动调优,智能搜索编译选项空间,找到最佳组合,主流场景性能提升5%,相比人工调优,时间缩短50%。内存数据排布优化,通过AI模型识别冷热数据,匹配多级内存架构,实现数据的智能预取,将访存密集型应用提升10%以上。有了AI辅助的编译优化,开发者无需再理解复杂的编译选项,大幅降低了编译优化门槛。接下来是应用上线环节。过去,我们一次配置好系统参数,很少再调整,但整个计算任务对运行环境的要求不同,很难做到动态最优。在真实的场景下,很多数据中心服务器的利用率低于50%。BoostKit推出了负载感知加速系统WAAS,可以基于每个计算任务深度调优,启用最优的加速库,自动配置全栈最优参数。我们在华为云数据中心进行实测,在不修改代码的情况下把计算资源的利用率提升20%。针对计算密集型的场景,可以在同等物理资源配置的情况下,业务性能提升50%。高性能计算作为“计算金字塔尖上的明珠”,广泛存在于气象预测、油气探测、制造和生物等领域。它的工作特征是计算耗时长,问题复杂难以求解。传统的高性能计算是基于物理公式和数学方程精准的进行计算,具备可解释性,但耗时长。与此同时,很多客户拥有非常宝贵的海量历史数据,是否可以通过AI训练,以历史数据为样本,形成领域的专业模型,以推理替代部分复杂计算过程,从而实现高性能计算的应用加速。这是全新的高性能计算和AI融合计算模式,集成精准计算和AI快速推理的两个优势,计算效率大幅提升。融合计算模式以AI4S加速库的形式落入高性能计算加速套件中。通过一套标准API简单方便调用,可以一键部署,开箱即优。我们已经和自然资源部第一海洋研究所合作,将AI4S加速库应用到海浪的预测中。转自华为计算公众号
-
本月话题:大数据专题随着IT技术的不断发展,知识的不断更新迭代,大家讨论讨论说说看看大家对大数据方面的知识掌握多少,看看大家对目前大数据的了解
-
为了给多道程序提供良好的运行环境,操作系统应具有以下几方面的功能:处理机管理、存储器管理、设备管理和文件管理。为了方便用户使用操作系统,还必须向用户提供接口。同时,操作系统可用来扩充机器,以提供更方便的服务、更高的资源利用率。1、操作系统作为计算机系统资源的管理者(1)处理机管理 在多道程序环境下,处理机的分配和运行都以进程(或线程)为基本单位,因而对处理机的管理可归结为对进程的管理。并发是指在计算机内同时运行多个进程,因此进程何时创建、何时撤销、如何管理、如何避免冲突、合理共享就是进程管理的最主要的任务。进程管理的主要功能包括进程控制、进程同步、进程通信、死锁处理、处理机调度等。(2)存储器管理 存储器管理是为了给多道程序的运行提供良好的环境,方便用户使用及提高内存的利用率,主要包括内存分配与回收、地址映射、内存保护与共享和内存扩充等功能。(3)文件管理 计算机中的信息都是以文件的形式存在的,操作系统中负责文件管理的部分称为文件系统。文件管理包括文件存储空间的管理、目录管理及文件读写管理和保护等。(4)设备管理 设备管理的主要任务是完成用户的IO请求,方便用户使用各种设备,并提高设备的利用率,主要包括缓冲管理、设备分配、设备处理和虚拟设备等功能。2.操作系统作为用户与计算机硬件系统之间的接口 为了让用户方便、快捷、可靠地操纵计算机硬件并运行自己的程序,操作系统还提供了用户接口。操作系统提供的接口主要分为两类:一类是命令接口,用户利用这些操作命令来组织和控制作业的执行;另一类是程序接口,编程人员可以使用它们来请求操作系统服务。(1)命令接口 使用命令接口进行作业控制的主要方式有两种,即联机控制方式和脱机控制方式。按作业控制方式的不同,可将命令接口分为联机命令接口和脱机命令接口。 联机命令接口又称交互式命令接口,适用于分时或实时系统的接口。它由一组键盘操作命令组成。用户通过控制台或终端输入操作命令,向系统提出各种服务要求。用户每输入一条命令,控制权就转给操作系统的命令解释程序,然后由命令解释程序解释并执行输入的命令,完成指定的功能。之后,控制权转回控制台或终端,此时用户又可输入下一条命令。 脱机命令接口又称批处理命令接口,适用于批处理系统,它由一组作业控制命令组成。脱机用户不能直接干预作业的运行,而应事先用相应的作业控制命令写成一份作业操作说明书,连同作业一起提交给系统。系统调度到该作业时,由系统中的命令解释程序逐条解释执行作业说明书上的命令,从而间接地控制作业的运行。(2)程序接口 程序接口由一组系统调用(也称广义指令)组成。用户通过在程序中使用这些系统调用来请求操作系统为其提供服务,如使用各种外部设备、申请分配和回收内存及其他各种要求。 当前最为流行的是图形用户界面(GUI),即图形接口。GUI最终是通过调用程序接口实现的,用户通过鼠标和键盘在图形界面上单击或使用快捷键,就能很方便地使用操作系统。严格来说,图形接口不是操作系统的一部分,但图形接口所调用的系统调用命令是操作系统的一部分。3、操作系统用作扩充机器 没有任何软件支持的计算机称为裸机,它仅构成计算机系统的物质基础,而实际呈现在用户面前的计算机系统是经过若干层软件改造的计算机。裸机在最里层,其外面是操作系统。操作系统所提供的资源管理功能和方便用户的各种服务功能,将裸机改造成功能更强、使用更方便的机器;因此,我们通常把覆盖了软件的机器称为扩充机器或虚拟机。
-
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&characterEncoding=UTF-8&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.将响应信息输出。
-
为了应对高并发的请求,目前GaussDB(DWS)提供了max_active_statements参数来限制单节点的并发情况,超出并发上限的作业会进行排队。另在语句执行时也支持配置资源池并发和内存上限,来联合控制资源池级别的并发情况。基于DWS并发控制逻辑看出,实际作业执行中,可能会在两种队列中排队:一种是全局队列(global queue)这种队列不区分简单和复杂作业,也不区分是DDL或者是普通语句,这种是每个cn生效。一种是资源池队列(resource pool queue),用户下发的一般语句会根据资源消耗估算以及复杂程度在这里进行判断是否排队。在两层队列的过滤下,DWS会筛选出当前能执行的语句,使其正常运行,运行时也会受到其所属资源池资源的限制(只能使用资源池配置的CPU、内存、IO配额)。在处理高并发访问的情况下,GaussDB(DWS)可以采用以下几种方式来提高数据库的性能和可扩展性:数据库集群:GaussDB(DWS)支持将多个数据库节点组成集群,以实现数据的负载均衡和高可用性。通过横向扩展数据库节点数量,可以提高数据库的并发处理能力和吞吐量。数据库分区:GaussDB(DWS)支持将大型表分割为多个分区,以实现数据的分片存储和查询。通过对分区进行水平扩展,可以提高数据库的并发处理能力和查询性能。数据库缓存:GaussDB(DWS)支持使用各种缓存技术,如Redis、Memcached等,以缓存常用的查询结果或数据。通过缓存热点数据,可以减少数据库的查询次数和响应时间。数据库优化:在代码编写和数据库设计方面,应该尽可能地避免使用不必要的查询和操作,优化SQL语句的性能并减少数据库的锁等待时间。可以通过使用索引、分区表等技术来提高查询和操作的效率。负载均衡:针对高并发访问情况,可以使用负载均衡器来分配请求到不同的数据库节点上,以实现请求的动态分配和负载均衡。可以使用Nginx等开源软件来实现负载均衡功能,或者选择专业的负载均衡器产品。
-
GaussDB(for Mongo)是华为云自主研发兼容 MongoDB4.0 接口的文档数据库。基于共享存储的存算分离架构,对于传统 MongoDB 社区版有如下优势:秒级添加 Secondary 节点(相比社区版 Mongo 小时级添加 Secondary 节点)基于 WAL 复制, Secondary 节点无写 IO,从根本上解决社区版 Seconary 节点 Oplog 脱节问题Primary/Seconary 无任何 IO 交互,Secondary 节点个数理论无上限, 支持百万 OPS 的读事务能力LSMTree Compaction 计算/IO 卸载到 Compaction 统一调度池,集中管理,不浪费用户读写 IO基于共享存储,Chunk 分裂/迁移动作不引起真实 IO,只更新路由元数据,秒级分裂/均衡GaussDB(for Mongo)技术架构1)容忍更多 Shard 宕机与社区版 MongoDB 的Share-Nothing模式不同的是,GaussDB(for Mongo)采用Share-Storage架构,计算存储分离。集群模式下,N 个 Shard 节点,可以容忍 N-1 个 Shard 宕机。2)更快的分裂与均衡能力此外,由于 Chunk 数据在存储池中,Chunk 的分裂与均衡不涉及到数据拷贝,可以做到分钟级分裂与扩容,分裂与扩容对用户的影响也远比社区版 MongoDB 小。3)百万级读 OPS 能力GaussDB(for Mongo)副本集模式下,Primary/Secondary 节点之间共享同一份数据库文件。Secondary 节点只复制 Primary 节点的 WriteAheadLog 以及 LSMTree 的结构变更信息,并应用到内存中。Secondary 节点没有 LSMTree 的 Compaction 和 Flush 任务,因此对用户的读业务影响很小。此外,由于Share-Storage的架构优势,添加 Secondary 节点并不需要拷贝数据,添加 Secondary 节点的动作可以秒级完成。而 Primary/Secondary 之间只传递元数据变更,不传递 WriteAheadLog,因此 Secondary 节点的个数即使变多,也不影响 Primary 节点的写性能。Secondary 节点可以水平扩展,支撑百万级的读 OPS。4)主节点 IO 卸载LSMTree 的写压力来源于三部分:用户的业务写入导致的 Memtable Flush后台 SST 文件 CompactionWAL 的持续写入根据线上业务的实际测算,三者的 IO 资源消耗占比为: 1:10:1。后台的 SST 文件 Compaction 占了绝大部分 IO 带宽,通过将 Compaction 任务集中化管理,从计算池卸载到存储池,进一步减少了用户计算节点的 CPU 和 IO 资源消耗。5)GaussDB(for Mongo) 只读节点设计传统社区版 MongoDB 副本集基于 Oplog 做数据复制,只读节点需要镜像主节点的所有写 IO 操作。GaussDB(for Mongo) 的只读节点和主节点共享同一份底层数据库文件(LSMTree 的 SST 文件),只读节点并不自己生成 SST 文件。随着业务数据的写入,Compaction 的不断执行,LSMTree 的当前版本(包含哪些 SST 文件)不断更新,LSMTree 的元数据更新(增删 SST 文件的记录)被同步到只读节点执行。RocksDB 中,数据的变更被持久化到 WAL 里,元数据的变更(增删文件的操作, 叫做 VersionEdit)被持久化到 Mainifest 里。RocksDB 的数据和元数据是分开的,WAL 流和 VersionEdit 流是并行的,没有严格的先后顺序。为了保证只读节点和主节点完全一致的事件回放顺序,WAL 和 VersionEdit 流必须要合并成一个流,在双流合并后,通过 LSN 就可以为每个事件(WAL 的写操作/VersionEdit)定序。基于 WAL+VersionEdit 复制,而不基于 Oplog 复制共享文件(sst/wal)的生命周期管理由主节点负责 sst 文件和 wal 的文件的生命周期由主节点负责。RocksDB 中,SST 文件通过层级的引用计数来维持不被删除。如下图,RocksDB 的每个游标会维持 SuperVersion,如下图中的 S0,S1,S2。每个 SuperVersion 会引用一个 Version,一个 Version 代表 LSMTree 在不断变形(通过增删 SST 文件变形)的过程中,某个时间点的形状,最新的 Version 就代表 LSMTree 当前的形状。在 GaussDB(for Mongo)中,主节点会记录所有只读节点在使用的 Version,并为这些 Version 增加引用计数从而维持 SST 文件的生命周期。对于 WAL,主节点会记录所有只读节点中最老的 LSN(oldestLsn),最老的 LSN 来自于复制最慢的只读节点。并删除比 oldestLsn 还旧的 WAL 文件。元数据变更通知,无论是 oldestLsn 还是只读节点的当前在用的活跃的 Version,都需要及时推进,这些元数据的变更是通过主从节点的定期心跳上报到主节点上的。主节点利用心跳数据对垃圾版本与 WAL 做清理。如下图所示,在经历一次心跳后,主节点发现 Secondary0 的 Version0 和 Secondary1 的 Version0 不再使用。删除这两个 Version 后,SST0 的引用计数为 0,表示 SST0 可以被删除。OldestLsn 也从 100 推进到了 250,可以清理掉 250 之前的 WAL。只读节点的 memtable 的释放:主节点的 Memtable 不会实时 Flush 为 SST 文件。如果只读节点不处理主节点的 Memtable 的话,只读节点的数据就不是实时的,且存在数据一致性问题。只读节点通过回放 WAL 到内存的 Memtable 中,来覆盖 SST 文件与主节点的 Memtable 的 Gap。上文介绍了只读节点是不往共享存储写入数据的, 所以只读节点上的 Memtable 最后的结局一定是被丢弃掉。但什么时候丢弃这个 Memtable 就是一个问题。过早的丢弃,会造成 SST 文件与 Memtable 之间的数据不连续,存在 Gap,过晚的丢弃会造成内存的浪费。只有当只读节点识别到 SST 的数据已经完全能够 Cover 某个 Memtable 时,这个 Memtable 才可以被丢弃。GaussDB(for Mongo)的只读节点在每次应用 VersionEdit 后,检查所有 SST 中的最大的 LSN 与 Memtable 的最小的 LSN 的关系,来决定是否要丢弃某个 Memtable。内存元数据的反向更新:传统的复制,数据流从 Oplog 来,走一遍完整的数据库 Server 层 CRUD 接口,再落到引擎层。这种逻辑和主节点上业务的写入逻辑是一致的,因此 Server 层的一些内存元数据结构,在这个过程中就自然而然的得到更新了。但是当采用基于 WAL 的复制后,整个 WritePath 并不经过只读节点的 Server 层。因此 Server 层的内存元数据更新,就是一个很大的挑战。在这里,只读节点对每一条 WAL 做分析,如果 WAL 的内容会影响 Mongo 内存元数据,就会 reload 对应的元数据模块。总结GaussDB(for Mongo) 基于 Share-Storage 架构,实现秒级 Chunk 分裂与均衡,对业务影响更小,水平扩展速度更快,能容忍更多节点宕机。只读节点功能,实现了一份数据多计算节点共用的功能。极大的提升了存储的利用效率,提高了计算节点的读取数据能力。为了让副本节点具有持续的读扩展能力,整个只读方案采用元数据的同步模式,在不降低主节点负载的情况下,极大的提升了整个系统的读数据的处理能力。为 3 节点,5 节点,乃至于 15 节点以上的副本集的工作提供了可能。
-
1:功能简介datakit是一款集四大核心功能:数据同步、数据比较、流程迁移、库表转换等数据使用工具,其核心设计目标:开发迅速、学习简单、轻量级、易扩展 数据同步:从数据源端按照数据字段映射规则导入数据目标端。 数据比较:数据源端和目标端差异比较,并支持针对差异以源端数据为准进行数据修复。 流程迁移:实现源端数据库多表关联业务流程数据迁移另一种目标端数据库中。 库表转换:不同类型数据库间表结构批量转换 配置管理:业务对象(表、文件、数据流)配置、任务配置注意: (1)数据源端和数据目标端可以是数据库表作为对象也可以是数据文件作为对象; (2)目前数据库支持oracle、mysql、postgres;文件支持文本文件、excel文件; (3)支持二次开发集成新的数据库和文件2:应用场景2.1 数据同步场景 格式化txt文本数据指定字段导入数据库 格式化excel数据指定字段导入数据库 数据库表指定字段导出成文本文件 数据库表指定字段导出成excel文件 不同数据库间表数据互相同步倒换 不同文件格式数据互相同步倒换2.2 数据比较场景 源端txt文件数据和目标端数据库表数据根据指定关键字段比较数据差异,并支持以源数据为准修复数据库表数据 源端excel文件数据和目标端数据库表数据根据指定关键字段比较数据差异,并支持以源数据为准修复数据库表数据 源端数据库表数据和目标端txt文件数据根据指定关键字段比较数据差异 源端数据库表数据和目标端excel文件数据根据指定关键字段比较数据差异 源端数据库表件数据和目标端数据库表数据根据指定关键字段比较数据差异,并支持以源数据为准修复数据库表数据 源端txt文件数据和目标端excel文件数据根据指定关键字段比较数据差异2.3 流程迁移场景 可以将某一数据库中指定流程数据批量迁移到另外一个数据库,比如:(1)把生产库中指定流程数据迁移到测试环境进行流程验证; (2) 按业务流程进行数据备份2.4 库表转换场景 可以指定一个数据库用户下表结构迁移至另外一个数据库中,可以同一类型数据库之间转换,也可以支持不同数据库之间做表结构转换
上滑加载中
推荐直播
-
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
2025/01/10 周五 15:30-17:30
MindStudio布道师
算子工具性能优化新特性演示——MatMulLeakyRelu性能调优实操
回顾中 -
用代码全方位驱动 OBS 存储
2025/01/14 周二 16:30-18:00
阿肯 华为云生态技术讲师
如何用代码驱动OBS?常用的数据管理,对象清理,多版本对象访问等应该如何编码?本期课程一一演示解答。
即将直播 -
GaussDB数据库开发
2025/01/15 周三 16:00-17:30
Steven 华为云学堂技术讲师
本期直播将带你了解GaussDB数据库开发相关知识,并通过实验指导大家利用java基于JDBC的方式来完成GaussD数据库基础操作。
去报名
热门标签