关于云计算:QEMUOCFS2-使用OCFS2作为虚拟机磁盘文件的SAN存储文件系统

本文介绍OCFS2共享集群文件系统,如何配置以及如何在线扩容。 什么是OCFS2文件系统? OCFS2是 Oracle Cluster File System Version 2 的缩写,是Oracle公司外部开发的共享磁盘文件系统,于2011年开源,应用GNU GPL协定。 什么是共享磁盘文件系统呢?咱们上面通过解释三个概念的比照来阐明: 磁盘文件系统这是最常见的文件系统,构建在本地的磁盘(块存储,Block Storage)之上。通过磁盘文件系统,磁盘上的内容以文件目录的模式进行组织,不便了用户无效应用磁盘上的存储空间。磁盘文件系统的例子有:ext4, xfs等。 共享文件系统共享文件系统通过远端服务器上运行的服务程序拜访挂载在远端服务器上的文件系统。例子为:NFS(Network File System),Samba(CIFS)。 共享磁盘文件系统共享磁盘文件系统又叫集群文件系统(Cluster File System),是专门构建在网络共享的磁盘上的文件系统。网络共享磁盘通过SAN(Storage Area Network)被多台主机独特拜访,和磁盘文件系统相比,共享磁盘文件系统除了要解决磁盘空间的无效治理问题之外,还要解决文件系统被多台主机同时拜访的并发批改问题。因而分布式锁机制是共享磁盘文件系统共有的机制。 从应用场景来看,三种文件系统的差异很显著:磁盘文件系统间接拜访本地磁盘,共享文件系统须要通过共享文件服务拜访挂载在服务器上的文件系统,而共享磁盘文件系统则间接访问共享磁盘。 因而,在网络共享的场景下,通过共享磁盘文件系统拜访SAN存储,能够间接访问共享存储设备。拜访门路短,效率高,并且能解决多主机并发访问共享存储的问题。 QEMU通过OCFS2应用共享SAN存储 QEMU应用共享SAN存储有多种计划。常见计划是在须要新建虚拟机磁盘时,应用SAN存储的治理API,调配出卷(LUN)之后,间接将卷挂载给QEMU虚拟机应用。这种计划的长处是QEMU虚拟机间接拜访LUN,损耗低,性能好。而毛病是须要应用存储设备特定的API,和设施绑定,不够通用。 本文介绍通过OCFS2共享磁盘文件系统,将一个大容量的SAN存储卷作为存储QEMU虚拟机虚构磁盘文件的存储,达到QEMU应用共享贮存的目标。 OCFS2文件系统的配置 筹备环境这一步装置和配置软件 下载和装置ocfs2-tools的rpm包装置(也依赖net-tools)$ wget http://public-yum.oracle.com/public-yum-ol7.repo -O /etc/yum.repos.d/public-yum-ol7.repo$ rpm --import http://public-yum.oracle.com/RPM-GPG-KEY-oracle-ol7$ yum install yum-plugin-downloadonly -y$ mkdir /tmp/ocfs2 && cd /tmp/ocfs2/$ yum install --downloadonly --downloaddir=/tmp/ocfs2/ ocfs2-tools net-tools -y具体操作步骤见官网文档:https://docs.oracle.com/cd/E5..., Chapter 23 Oracle Cluster File System Version 2 装置Cloudpods内核,自带编译了ocfs2文件系统的内核模块因为OCFS2应用场景较少,在常见发行版的内核中都不会启用OCFS2的内核模块。咱们提供了事后编译好的启用了OCFS2的内核安装包: $ yum install -y yum-utils# 增加 yunion Cloudpods rpm 源$ yum-config-manager --add-repo https://iso.yunion.cn/yumrepo-3.6/yunion.repo$ yum install -y kernel-3.10.0-1062.4.3.el7.yn20191203同时,部署时写配置文件到/etc/modules-load.d/ocfs2.conf,确保内核的ocfs2模块主动加载 ...

December 13, 2021 · 3 min · jiezi

关于云计算:钉钉宜搭亮相第二届ISIG中国产业智能大会云钉低代码构建企业酷应用

简介:低代码年度行业盛会!钉钉宜搭创始人叶周全受邀缺席并发表主题演讲。 12月8日,由中国电子技术标准化研究院领导,RPA中国、LowCode低码时代、信创中国联结举办的“第二届ISIG中国产业智能大会”在上海召开。 阿里巴巴资深技术专家,钉钉宜搭创始人叶周全受邀缺席大会,并在 “2021低代码技术利用与倒退峰会”上发表了《钉钉宜搭3.0:云钉低代码,构建企业酷利用》的主题演讲,介绍了钉钉宜搭3.0的新能力、新模式,并分享了钉钉宜搭在低代码赛道新的思考与积淀。 钉钉宜搭是阿里巴巴自研的云钉低代码平台,深度交融了钉钉和阿里云的能力,成为“云钉一体”策略中重要组成部分。 2021年1月,宜搭首次亮相钉钉6.0发布会,10月,宜搭在云栖大会重磅公布3.0新版本。钉钉宜搭平台上的利用数增长也在一直减速,现已冲破100万,笼罩了新批发、医疗、生产制作、能源、教育、酒店、金融、运输等支流行业。 企业数字化3阶段,宜搭全面笼罩会上,叶周全总结了低代码倒退的三个阶段:1.0阶段的流程在线、2.0阶段的业务在线和3.0阶段的生态在线。回溯钉钉宜搭的倒退,在1.0阶段,钉钉宜搭解决了由BPM驱动下的流程在线、挪动审批。到2.0时,钉钉宜搭通过元数据驱动帮忙用户疾速实现业务在线和挪动办公。而在3.0阶段,由数据驱动实现生态在线、业务连贯、互联互通。 “市场上不同企业规模和行业差别很大,数字化转型也处在不同的阶段,所以会产生各种不同的需要。”叶周全说,“面对企业数字化停顿参差不齐的状况,宜搭全面笼罩了企业数字化转型3个阶段,能够满足不同企业的各类数字化需要。” 叶周全指出,市场上很多企业在推动的数字化过程中遇到了零碎“烟囱林立”、流程“伪自动化”、零碎扩大难的问题,面对这些企业数字化转型失败的状况,钉钉宜搭也提出了本人的解决方案。 钉钉宜搭3.0在2021年10月举办的云栖大会上正式亮相,重磅公布了围绕连贯能力、数据BI能力、平安能力全面降级的新产品。本次峰会上,叶周全也介绍了钉钉宜搭3.0降级带来的新能力。 宜搭3.0新能力,带来更酷搭建体验连贯的效率和深度,决定了企业的生产力。钉钉宜搭3.0提供三大连接器能力,包含:Excel一键降级企业数字化利用、内置20+钉钉外围能力连接器,以及联通企业存量零碎及阿里&钉钉&三方业务零碎的能力。实现了利用与利用之间,利用与人之间,企业上下游之间的全链路连贯。 业务数据全面买通,一键生成酷炫大屏。钉钉宜搭3.0公布了20多款罕用报表可视化组件,提供10多款开箱即用的可视化炫酷大屏模版,涵盖销售、人事、生产制作等诸多畛域,可宽泛用于展现汇报、指挥决策,业务剖析等场景。反对100万数据量的表与表关联,和一亿数据量的海量数据处理能力。 全局水印,独立域名,提供全面平安保障。爱护客户的数据安全是第一准则,钉钉宜搭平台依靠钉钉全面的平安防护策略,取得公安部信息系统三级等级爱护认证,数据享受国密级别平安爱护。宜搭上线利用全局水印性能,一旦产生信息透露可疾速追溯起源。对立风控账号体系+独立企业域名,筑起平安高墙,为企业提供专业级平安防护。 除了介绍钉钉宜搭3.0降级带来的全新能力,叶周全也分享了钉钉宜搭在流程设计、页面组件、权限管控、自定义页面等方面的全新降级。 新模式新思考,领跑低代码行业倒退叶周全指出,钉钉宜搭平台的用户群体有三类角色,包含基础设施提供者、生态利用互联互通连贯者和一般开发者。 基础设施提供者:上海锐智应用钉钉宜搭建设了MES零碎,过来传统全代码形式下须要3年工夫,应用低代码只须要3个月工夫。为制作行业建设数字工厂、实现柔性制作指明了前途。 生态利用互联互通连贯者:钉钉宜搭的标杆用户竟然之家,应用钉钉宜搭搭建了400多个利用/流程,买通财务零碎、洽购零碎、ERP零碎,效率晋升60%以上,间接节俭上千万的费用。 人人都是低代码开发者:合肥师范附属小学校长自学低代码,用钉钉宜搭搭建了50多个校园利用,实现了学校治理数字化。 叶周全联合本人对低代码行业的察看指出:随着中国数字化阶段的演进,中国企业数字化将从过来的信息化倒退到将来的“数智化”,低代码将在最终云端一体化架构中施展关键作用,而整合利用和云钉能力的低代码平台将会是新型研发模式,也会成为产业互联网数字化底座的核心部件。 最初,叶周全描述了钉钉宜搭将来的倒退蓝图:云钉低代码,打造企业“酷利用”生产平台。提供疾速定制、深度协同、超级自动化的能力和体验,无缝连贯阿里云和钉钉根底能力,同时推动传统软件现代化。 在这次低代码行业盛会上,钉钉宜搭也被评委会评比为“年度最佳低代码产品”。 ](/img/bVcWEtz) 低代码技术已成为中国企业减速数字化转型和适应将来策略的要害局部,钉钉宜搭将会始终陪伴在用户身边,通过低代码这一新生产力工具,一直激发集体和组织的创造力,全面减速企业的数字化转型。 原文链接本文为阿里云原创内容,未经容许不得转载。

December 13, 2021 · 1 min · jiezi

关于云计算:SpotMax上新伸缩统计实例预热智能存储提供多重降本保障

为晋升客户应用体验、更好地实现云端降本增效,SpotMax始终在继续进化。伸缩组多项指标统计、实例预热、智能存储......SpotMax 的技能包一直增长。多管齐下、多重保障,让你的用云降本之旅更加安心高效。 SpotMax 新性能,一起来看—— 老本节约可视化:高深莫测阿里云及AWS用户可通过Dashboard查看预估节省成本、已节省成本等多项参数,要害数据高深莫测。 在Dashboard中抉择云商与Region,即可查看: License剩余时间当月总成本将现有OD替换为Spot实例后预计节俭的年度老本Spot实例曾经为您节俭的老本(与应用OD相比)在以后Region下,您所应用的各类机型数量 伸缩组多指标统计:指挥若定阿里云及 AWS 用户现可在 SaaS 界面中查看所用伸缩组在多个工夫维度下的中断率统计曲线,以及“伸缩失败”次数统计(即所应用 OD 的次数),从而疾速把握伸缩组情况,实现更便捷的伸缩组治理。 Step 1. 登录 SaaS 界面,在左侧菜单栏点击 MaxGroup,抉择 Overview,在界面下方抉择须要查看的伸缩组,便可看到“伸缩失败”次数统计。此外,如需查看伸缩组中断率统计,可点击"操作":Step 2.抉择右侧下拉菜单设定工夫,即可查看选定伸缩组在多个工夫维度下的中断状况 实例稳固:1H 无忧目前,MaxGroup可确保阿里云用户所应用的 Spot 实例一小时内不被回收。有了"1H神功"加持,MaxGroup 可稳固反对阿里云用户的长链接、短视频直播、回合制游戏等场景,无需放心中断问题。 实例预热:不必再等服务遭逢中断时,长期调取实例“补血”,不仅耗时、且有数量限度。不想再这么焦虑,怎么破? 给你的实例“预热”——万全筹备,无惧意外。 AWS 用户现可依据伸缩组中的实例类型,在热池中创立您的备用实例。当用户服务遭逢中断时,可间接从热池调取备用实例,实现疾速弥补,保障服务稳固。 智能存储:降本技能+1你还在应用不适当的云端存储计划吗? SpotMax 现为阿里云用户推出“智能存储”性能,可通过对用户业务模式等各项参数的评估,为用户文件主动匹配价格更低的存储类型,进一步优化云端存储老本、加重业务累赘。通过充分运用Spot实例配合更正当的存储计划,并行不悖,双效降本。 Step 1.在左侧菜单栏点击“智能存储”,抉择“Overview”, 即可看到 SpotMax 对象存储服务为您节俭的老本:Step2. 点击“设置生命周期”, 为特定桶或对象设置生命周期规定,SpotMax 将帮您实现存储老本优化 对于 SpotMax为满足私有云“按需获取”(Scale on demand) 的根本个性,云商必须针对不可预期的用户用量增长需要做出筹备,因而在特定工夫内,私有云上会产生闲置的过剩算力(Spot /竞价实例)。云商会高价向企业发售这些资源,折扣通常可达个别算力资源(按需实例)的 90% 左右,堪称用云企业的降本利器。 但 Spot 实例老本低廉的同时,也具备随时会被云商回收的个性。如何在稳固与降本之间寻找均衡,成为了用云企业的痛点。 而 SpotMax 作为一款云资源优化服务,借助智能布局集群形成、时刻稳固集群容量等个性,能在保障 Spot 实例稳定性的同时,让用户最大化利用 Spot 实例资源,从而无效节俭用云老本。

December 12, 2021 · 1 min · jiezi

关于云计算:从-Amazon-Graviton3-发布看-2022-云计算的核心方向

2021 亚马逊云科技 re:Invent 完结了,在数十项公布里,哪个产品最为重要,对云计算行业影响最大? 可能会有不少人把票投给 Amazon Graviton3。这不仅因为“自研芯片”这个概念在当下成为了“硬核实力”的象征、公众脍炙人口的话题,也不仅因为芯片代表了云服务最根底的能力,更是因为 Amazon Graviton3 的公布,实实在在地影响了整个产业的格局,在多个畛域起到了一锤定音的成果。 Amazon Graviton3 已知信息汇总新任亚马逊云科技首席执行官 Adam Selipsky 在 re:Invent 上征引分析师的估算:目前云上收入只占整个 IT 收入的 5% 到 15%,将来将有大量的工作负载迁徙到云。同时,在此前的各类云计算大会上,来自气象畛域、生命科学畛域的专家也曾纷纷表示,要进行科学研究,做更精准的建模,须要宏大的算力撑持。因而,在当下阶段,产业对云计算的外围需要依然是算力。 这就意味着,整个行业对云端算力的需要始终在增长,芯片始终是云计算的外围能力以及最大底牌,芯片的性能间接从根本上决定了云行业将来的倒退。 那么这次亚马逊云科技公布的 Amazon Graviton3,牌面有多大呢?咱们先将目前所有已知参数做个汇总: Amazon Graviton3 采纳 5nm 工艺,64 核,集成了 550 亿晶体管,主频 2.6 Ghz,反对 bfloat16 (为深度学习而优化的新数字格局),PCIe 5.0。与 Amazon Graviton2 相比,Amazon Graviton3 处理器反对为科学计算、机器学习和媒体编码工作负载提供高达 2 倍的浮点运算性能,为加密工作负载速度晋升高达 2 倍,为机器学习工作负载提供高达 3 倍的性能。 Amazon Graviton3 处理器的能效也更高,在雷同性能下,与同类型基于 x86 的实例比照,可节俭高达 60% 的能源消耗。 由 Amazon Graviton3 处理器反对的 Amazon C7g 实例与由 Amazon Graviton2 处理器反对的以后一代 C6g 实例相比,可将计算密集型工作负载性能进步多达 25%,网络带宽也高出 20%。C7g 实例反对 Elastic Fabric Adapter (EFA),容许应用程序间接与网络接口卡通信,提供更低且更统一的提早,进步须要大规模并行处理(如 HPC 和视频编码)的应用程序的性能。 ...

December 10, 2021 · 2 min · jiezi

关于云计算:从-015-套存储集群YRCloudFile-助力-AI-训练效率超线性增长

如果从 1965 年的达特矛斯会议开始算起,AI 曾经走过了 65 年的历程。近些年,随着深度学习衰亡,AI 也获取了越来越多的关注。目前,AI 技术都是以深度学习为根底,而深度学习想要实现简单的学习过程须要实现两个过程: 大量的数据训练,深度学习极度依赖数据挖掘技术,耗费产生大量、无效的训练数据;优化算法,深度学习须要通过简单的神经网络找到最好的模型,用于剖析新的数据。 数据处理阶段构造 故而深度学习对数据要求比一般模型的要求都要高。只有在大量数据的反对下,能力真正施展深度学习的作用。然而,大数据比设想中都要简单,训练数据的难度比传统机器学习的难度要大。而在整个数据处理过程中,不同阶段所应用的技术,以及这些技术对数据拜访的要求都有差异。 数据在各阶段拜访的特点 作为一家专一以软件定义存储技术的企业,焱融科技自 YRCloudFile 公布以来,长期关注存储技术在 AI 畛域方面的利用,也亲历了近年数据存储在 AI 畛域的落地过程。本篇文章,焱融科技将试图通过国内某家在语音及语言、自然语言了解、机器学习推理及自主学习等畛域放弃着国内前沿技术程度的 AI 畛域企业的理论案例,率领大家理解以后数据存储在 AI 畛域的技术倒退现状,以及摸索 AI 将来的倒退状况。 海量数据亟需解决的“硬骨头” 目前,国内某 AI 畛域企业的基础架构团队,须要为各个人工智能团队及业务部门提供稳固、高性能的训练存储平台,同时治理近千台高性能 GPU 服务器,如果训练应用存储平台性能滞后,将间接影响业务部门的训练效率。因而,数据处理流程是整个环节的重中之重,也是焱融科技本次优化训练平台的切入点。 为了满足该公司的人工智能业务部门训练的须要,其利用的模型训练数据平台必须具备以下个性: 具备高带宽、低延时的读写个性,保障为 GPU 服务器提供足够的数据输出,实现 GPU 的高效应用;反对百亿级别的小文件及局部大文件混合的读写场景,满足大量特色文件或聚合后的文件存储需要;下层训练模型应用标准文件接口拜访数据;能反对近千个高性能计算节点的并发拜访;满足多种计算集群模式存储服务,包含固有的裸金属计算架构、云计算架构、容器化计算架构的长久化存储等需要;满足综合监控数据治理平台对接需要,实现数据管理、监控、运维一体化展示和简洁化治理能力;实现相干业务特色具体优化策略,依据不同业务类型特色具备可调节优化能力。YRCloudFile 做对了什么? 在理解该公司的需要当前,焱融开始从 2019 年开始,就技术利用计划和落地措施进行了屡次的交换和理论场景测试。同时,该公司的技术团队对训练应用的存储平台选型非常重视,其中数据平台的理论性能尤为要害,包含: 大文件的随机读写、小文件的读写性能;海量元数据的操作性能(creation, stat, removal 等);海量文件的反对,以及在海量文件的背景下,数据拜访和操作性能是否保持一致;存储平台的稳定性;在故障场景中,尤其是在元数据服务故障场景下,集群性能的稳定性;与容器平台的对接能力;数据生命周期的治理。这些严格的评估规范,是基于理论业务诉求、公司基础架构团队要求和多年的理论工作积攒中提炼进去的,满足了行业广泛标准化和公司业务个性的需要。 作为国内首批实现容器长久化存储的厂商,YRCloudFile 不仅在架构上,实现了齐全与硬件解耦;而且在通用的服务器上,YRCloudFile 同样能够充分发挥出本身在高速存储介质和网络存储性能方面的充沛劣势。 同时,为了配合施展计算集群的弱小算力,YRCloudFile 兼容全栈式网络技术和设施,实现了从数据终点到起点,从存储到计算再回到存储的全 IO 门路高性能的根底搭建,不仅保障高性能输入,而且做到了业务可靠性和连续性。 相较于其余存储产品,YRCloudFile 还具备性能当先、元数据拜访性能突出、容器平台稳固对接的劣势和特点。目前,YRCloudFile 凭借多年的技术教训,实现了基于 CSI 接口的标准化服务,在数据流转和治理层面具备成熟的性能及服务。在此基础上,为了进一步满足数据生命周期治理的须要,YRCloudFile 实现了高性能并行文件存储到对象存储的自动化治理,以及数据载体老本的最优化配比。另外,在 IO 治理方面,YRCloudFile 实现在同一命名空间内,极大地解放 IT 治理资源,开释治理压力,晋升生产力,达到降本增效,升高客户 TCO 指标的要求。 通过三年工夫的单干,YRCloudFile 通过了该出名 AI 畛域企业的多个新业务上线,以及业务零碎的迁徙的考验。目前,YRCloudFile 曾经成为该公司重要的业务存储平台,并且扩容速度正以 300% 每年的速度晋升。单方单干的背地,不仅突显出 YRCloudFile 对于产品技术坚持不懈的谋求,而且也表明了该公司对 YRCloudFile 的信赖。 ...

December 10, 2021 · 2 min · jiezi

关于云计算:从上云到云管理企业如何走通多云管理的成功之道

Cloudpods是一个开源的Golang实现的云原生的多云和混合云交融平台。Cloudpods不仅能够治理本地的虚拟机和物理机资源,还能够治理其余私有云和公有云平台的资源。 Cloudpods由北京云联壹云技术有限公司主导开发,并于2019年9月于Github开源。Cloudpods采纳外围开源模式,其商业版本云联壹云企业版(YunionCloud)自2017年开始研发,曾经服务了上百家企业客户。 云计算使企业的业务倒退取得强劲能源,然而企业在应用过程中也会不断呈现云计算平台业务中断的状况,可见繁多的云计算策略存在很大的危险,越来越多的企业意识到这一状况,并决定采纳“多云”策略。 “多云”是指在整个企业架构中应用多个云供应商,从而容许企业将其工作负载扩散到不同的环境中,以此实现业务敏捷性和老本效率的均衡。 Flexera的《RightScale2019云状态报告》中指出84%的企业采纳多云策略;EMA的考察显示,在寰球范畴的私有云使用者中,应用两朵云以上的用户占61%。Gartner在一份报告中称:将来90%中大型企业将利用混合云治理基础设施。 抉择“多云”的劣势 对于企业而言,抉择多云的益处不言而喻,无论从业务的连续性、灵活性还是建设老本思考,多云架构相比繁多公有云或私有云的架构,呈现出显著劣势: 升高业务中断危险:采纳多活或主备模式进行业务部署,防止某一家云服务商基础设施故障导致业务中断。 防止技术瓶颈:在特定的云服务商提供的服务无奈满足业务需要时,企业依然可能自由选择其余云服务商。 升高扩容老本:在须要弹性应用资源的业务场景下,以私有云低成本的可扩展性,节俭数据中心扩容老本。 兼具安全性与开放性:混合云架构中,公有云保障外围数据安全,同时应用私有云进一步实现IT资源的按需应用、弹性伸缩。 实现业务精细化部署:不同畛域的业务联合云服务商能力所长,灵便搭配,造成符合企业需要的最佳云服务组合。 “多云”之困 企业“多云”策略的抉择可能会让开发和业务人员感到称心,然而对于企业的基础设施和经营团队而言无疑加大了工作难度。他们须要治理更多的设施和环境,跟踪拜访、监控所有新环境。 同样,企业的财务部门的工作量也将减少。这些服务中的每一项都将以生产为根底进行计费,导致工作越来越繁冗。 通常,组织采纳多云架构肯定是通过了一系列的取舍。许多CIO因降低成本而被吸引到云计算上来,然而当迁徙到一个多云环境时,节省成本变得更具挑战性,有时候甚至会超出预算。 多云也带来了更多的复杂性。容器和编制软件可能使应用程序变得可移植,但它们的定制和数据(因为数据持久性问题)可能无奈向下传递到下一个云。此外,至多在实践上,穿梭多个云层天然会带来更多的危险,因为更多的接触点会扩充平安威逼的范畴。 此外,还有人员配置的问题须要思考。企业很难找到足够多的人才来反对每个平台的平安、合规和政府要求。团队必须在所有平台上都做好筹备,并为备份和平安建设最佳实际,这可能颇具挑战性。 当然,如果可能有效应对治理协调的多云环境方面的挑战,企业将播种丰富的回报,包含升高整个IT基础架构老本和经营老本,缩小宕机、利用停运和数据失落的状况,进步整个IT架构的可视性、监管和管制力度。 “多云”治理 如果想要实现相干指标,须要采纳迷信的办法治理云端环境。 1、确定指标与治理措施。确定多云环境指标与企业策略打算保持一致,确定指标之后,建设云监管措施,并通过建设多云治理团队协调多云环境的运行,防止产生不必要的老本。 2、将适合的工作负载迁徙至适宜的云中。随着大多数利用逐步迁徙至云端,须要确定最适宜每个工作负载的云平台,这并不是将现有利用换到云环境中运行那么简略,其中波及到降级利用以增加云服务,同时将其迁徙至云中,并且重构利用以适应基于微服务的架构。 3、监控并继续改良监管措施与多云环境,以适应组织的优先工作、竞争环境、新兴技术以及云治理平台。 在进步本身管理水平的同时,对于企业而言,抉择一个靠谱的多云治理平台是更好的抉择。 Cloudpods 作为新一代产品化云原生多云治理平台,能够帮忙客户对立治理异构IT基础设施,极大简化多云架构复杂度和难度,帮忙企业轻松驾驭多云环境。

December 9, 2021 · 1 min · jiezi

关于云计算:阿里云全站加速DCDN重磅升级

简介:相比传统CDN减速,全站减速DCDN具备更广大的利用场景。在当下企业全面数字化的过程中,为了更全面地满足宽广企业客户的个性化减速需要,全站减速DCDN从简略开明到个性化定制、从内容散发到平安防护,对客户侧的应用体验进行了全局梳理和全链路优化,全站减速产品性能失去极大加强和欠缺。12月1日14:00,全站减速DCDN集中降级公布,四位产品专家在线解读了边缘程序、数据日志、边缘平安背地的技术与利用。 全站减速DCDN产品服务原理全站减速DCDN(Dynamic Route for Content Delivery Network)是阿里云自主研发的产品,在提供动态内容散发服务的根底上,进一步提供了动静减速、TCP和UDP四层减速、边缘卸载以及边缘平安防护等能力,用户能够疾速地将平安、核心卸载等能力下沉到全站减速的寰球节点上。同时,针对业务的倒退和全链路异样剖析,实现全过程的实时把握。在传统内容全站散发减速服务的根底上,减少边缘平安防护能力晋升整体拜访平安,实现业务的进一步提效。 此次的公布阿里云将更重视于三个方向:第一,在思考平安与散发并重的场景下,如何去确保安全又可能更无效的进步整体的拜访服务。第二,如何在边缘侧减少卸载能力,将核心的能力,比方平安和流量向边缘进一步的卸载。第三,在后面两个维度之上,基于数据散发的需要,如何进行智能化的数据运维。 阿里云产品专家寒丰介绍到:在用户拜访达到阿里云全站减速产品后,进入的第一层是边缘性平安防护,比方基于DDoS的联动、频次管制、区域封禁、流量治理,这些都是基于内容和利用的平安防护上的前置;在内容通过平安的荡涤之后,进入到减速节点上,DCDN可能去将核心能力向边缘进行轻量的卸载,比方边缘渲染、边缘程序、灰度公布等,同时在传统内容散发服务上,更偏向于在边缘中实现自闭环的治理服务,在整体的边缘计算服务之后,仍然能够利用原有的动动态散发服务能力向后流转,利用动静的全网探测能力依据不同条件进行决策,实现传输门路最匹配用户的回源策略。同时,增强源站治理方面,不仅基于多源治理,也装备容灾治理以及源站的防护;在全链路的治理上,将数据分析服务能力也一并晋升,基于全链路采集进行全网的日志剖析,进而去简化和进步运维效率。这是阿里云全站减速产品服务的原理图。 本次公布分为三块内容,第一是基于边缘的轻量计算的卸载,第二块是基于边缘平安防护的晋升,第三是基于日志去构建数据分析服务的能力。 边缘程序(ER):让计算更凑近您的用户本次发布会对阿里云CDN的EdgeRoutine边缘程序进行了具体解读。EdgeRoutine是一个运行在CDN边缘节点上的JavaScript代码运行环境,用户能够将JS代码上传至EdgeRoutine,即可在寰球的CDN边缘节点上运行,相当于用户在寰球各地领有了大量微型服务器去就近地服务各地的用户。 阿里云高级产品经理黎鹤示意:EdgeRoutine具备CDN的弹性调度、低成本、低延时的个性,同时也兼顾Serverless简略易用的个性。 一、弹性调度部署在EdgeRoutine的JS代码将运行在遍布寰球各地的CDN节点上。用户的申请将就近拜访CDN节点。当某个区域用户申请突增,CDN零碎会将申请调度至周边节点,主动弹性扩容,用户无需为每一次可能的业务突增而放心计算资源不够的问题。比方下图左侧的示例,当杭州用户发动申请,就近调度至杭州的CDN节点;当杭州用户的申请突增,调度主动将申请扩散调度至杭州周边的嘉兴湖州等区域的CDN节点;而杭州用户的申请进一步突增,调度主动将申请扩散调度至更远的无锡上海等区域的CDN节点。阿里云CDN有2800+节点遍布寰球,造成一张微小的调度网络,主动弹性调度。 二、低成本咱们看一下计算的发展史,其实从某种维度来看的话,是对资源的隔离和复用的一个发展史。最早的物理机,到一台物理机被隔离成N台的虚拟机,再到云计算及容器化技术,虚拟机上又能够隔离出N个不同运行环境,整个过程中,用户隔离一直细化,单位硬件设施可能做到更高复用,将资源复用做到极致,给用户带来性价比更高的按量付费服务。这也是EdgeRoutine能为大家带来更低成本的价值的起因。 三、易用(Serverless个性)传统的利用搭建的流程,用户须要去购买服务器,还须要去运维下面的零碎,而后才进行整个开发利用的部署,继续去优化服务性能,须要十分宏大的团队协同。Serverless意味着用户不须要再去关注底层的基础设施,只须要关注外围的业务代码,上传你的代码就实现了整个部署。后端的这些资源是齐全主动、弹性伸缩的,能够帮忙用户原来缩减运维老本。基于EdgeRoutine的利用构建形式也是如此,只须要在第一次应用时候进行简略的装置配置,即可专一开发业务代码,间接上传部署即可。 四、超低延时在边缘上间接去解决客户端的申请,跟在核心解决,必定是会大幅缩短网络链路,这样缩小了网络传输的延时危险。同时,EdgeRoutine采纳Chromium V8轻量隔离技术,冷启动工夫简直可疏忽。 基于以上价值个性,EdgeRoutine能够实用于图文页面渲染、灰度/AB测试、海量日志的荡涤和汇聚、源站可用性健康检查、IoT场景数据荡涤、GEO打点,甚至托管集体站点等各类场景,具备十分大的设想和利用空间。 实时日志,助力运维治理提效全站减速DCDN是汇合动态减速、动静减速、边缘平安、边缘程序等能力为一体的产品。在宽广开发者应用产品的过程中,日志是不可或缺的工具。怎么样晋升日志生产的及时性,晋升基于日志的剖析效率至关重要。 全站减速DCDN实时日志和日志服务SLS进行深度联动,在全站减速寰球节点生产的日志数据将会被实时采集并投递到SLS进行存储。SLS提供了弱小的数据分析能力,能够帮忙开发者对日志进行实时、精细化、灵便定制的生产日志数据。明天,用户在全站减速的控制台,即可一站式的集成这些能力。 产品专家简亿示意:这次全站减速DCDN公布的实时日志由3大外围个性。别离是高时效性、按需配置和精细化剖析。 一、高时效性相比传统的离线日志,具备实时生产,实时投递的个性,同时提供了更加丰盛的日志字段,可能帮忙开发者疾速洞悉业务。 二、按需配置容许开发者仅是抉择有必要的日志字段进行采集、投递和存储,并且能够自定义日志的采样率,缩小数据的应用老本。 三、精细化剖析实时日志投递工作在被创立的同时,咱们在SLS预置了丰盛的数据可视化剖析看板,同时也能够应用SQL语句对日志进行定向剖析。 接下来,产品专家简亿就基于这些个性,为大家分享两个实战案例。 实际一:基于实时日志疾速定位问题的实际 当用户应用实时日志服务时,阿里云曾经为用户预置提供了丰盛的业务剖析维度。用户能够通过可视化的看板直观的看到业务中潜在危险,如申请突增、用户IP拜访次数异样、谬误状态比例扩充等问题。用户能够进一步定义这些指标,也能够设置正当的告警策略,来欠缺问题发现的机制。更细粒度的,用户能够间接应用SQL语句来实时剖析某个具体用户的拜访状况。 实际二:精细化剖析实际:广告投放成果补充剖析 目前实时日志预置的剖析看板的剖析粒度,能够细化到具体的域名、URL甚至具体用户IP维度。且提供了10+剖析看板供做剖析。例如剖析某个广告投放页面,流动页面通常是一个具体的URL,此时就能够基于此URL剖析拜访趋势、地理分布、起源散布等信息,作为广告投放成果的重要补充数据。 对于如何应用全站减速的实时日志服务,用户能够登陆全站减速控制台开明实时日志服务。开发者无需繁琐的配置,即可疾速构建DCDN的实时日志服务。 在接下来的工夫里,阿里云将会进一步加强全站减速DCDN的实时日志服务。除了目前曾经反对采集和投递的拜访日志外,还将会进一步反对回源日志的采集与投递,以及边缘程序的日志采集于投递。当一个用户的申请向边缘节点发动拜访,通过边缘程序做业务解决,再到回源,每个环节产生的日志将通过一个惟一标识的traceid进行连贯。帮忙用户的业务在DCDN这个环节实现全链路剖析,晋升问题的发现和定位效率。 边缘平安,让Web减速有保障在数字化时代,业务上云已是大势所趋。然而,随着越来越多的业务上云,网络攻击事件层出不穷,网络的平安环境日益好转,这些攻打事件重大危及了客户线上业务的稳定性、可用性和数据安全。单纯减速服务曾经不能满足行业和业务的需要。让咱们来看一下各个行业对本身业务平安的关注点和主诉求: 通过这些行业的剖析,咱们能够看到他们将业务平安与web减速放在了等同重要位置,迫切需要一个全新的平安减速的解决方案。阿里云政企平安减速就是这样一种解决方案,它是阿里云CDN 团队携手云平安团队独特打造的联合散发减速和边缘平安的一站式服务。它可能无效解决上述政府金融、传媒和传统企业针对内容散发平安和减速问题的一体化诉求,为他们的云上业务保驾护航。 政企平安减速通过构建六个模块,打造了一个全方位的边缘防护体系。首先,WAF 提供的是应用层的平安防护;DDoS防护提供的是网络层的平安解决方案;HTTPS证书实现了数据的加密传输,它做到了全链路的数据传输平安;同时,阿里云积极参与寰球级、国家级和行业级的各类认证我的项目,通过购买阿里云的服务和产品,客户能够十分不便的达到所在行业的监管与合规的要求;另外大流量攻打旨在瘫痪客户的网上业务,间接对它的品牌和营收造成很消极的影响,保障在线业务的高可用性是客户的外围诉求。咱们提供了多种高可用的技术计划;最初CDN节点间的一致性校验技术,它可能无效的避免内容被篡改。 上图就上述六个模块具体列出了它上面的性能项。这些性能的有机组合可能实现模块预设的平安防护的指标。接下来高级产品专家草创就每一个模块进行了介绍。 网络层平安网络的平安次要应答的是大流量攻打的危险与威逼。在这一方面,全站减速DCDN 人造具备打散流量的个性,通过DNS 调度,把用户的失常拜访与来自黑客的歹意拜访同时调度到左近的节点,由它产生服务,这样做就防止攻打集中于单点。另外,每个DCDN节点人造具备肯定的抗攻击能力,阿里云DDoS检测模块可能智能的辨认攻打特色和感知攻打的强度,当攻打超过肯定阈值的时候,调度零碎能够把某一个区的流量调度到邻近的大容量的高防节点进行无效的流量荡涤,清洁后的流量回注,全站减速DCDN 持续应用它的减速服务。因而这是一套两个产品联动的计划,它做到了智能辨认,提供大容量的防护和荡涤能力,并做到了流量的主动调度。 应用层平安应用层平安次要是DCDN节点通过革新后,除了原有的减速能力,当初还提供原生的应用层的防护。它通过四个方面来实现:首先,访问控制模块,访问控制能够让用户通过自定义的防护规定精准匹配接入的申请,执行预设的动作,例如放行或者拦挡。其次,频次管制通过制订的防护规定,可能无效克制过于频繁或者超量的终端用户的申请,无效的爱护原站的资源。第三,web 利用防火墙它可能应答OWASP威逼,制订无效的内置规定,防备内部攻打。同时针对刚发现的系统漏洞可能及时开发并下发虚构补丁,实现0-day的破绽防护。第四,爬虫治理模块,这个模块它可能无效甄别歹意的和良性的爬虫,严控自动化工具所产生的对网站的拜访流量,做到防歹意刷量和爱护用户的账户平安。 通过这一套有机的模块组合,咱们在DCDN的节点注入了全面的WAF 防护能力,可能实现应用层的无效防护。 数据的平安传输和内容防篡改首先家喻户晓,CDN 是一个共享平台,边缘节点能够同时服务多个客户的域名。如果客户对他的业务十分关注,不心愿受到其余客户的影响,咱们能够给他调配独立的节点,做到无效的资源隔离。其次除了规范的HTTPS加密,全站减速DCDN也反对国家制订的国密算法。它可能在DCDN和源站间实现高效平安的加密传输。最初当内容在节点进行传输的时候,节点能够做相互性的一致性校验,确保内容的完整性不被篡改。通过这一套有机的整合,全站减速给用户提供了平安的数据传输计划,并对有需要的客户提供独享的资源。 边缘服务的高可用性和合规认证所谓的高可用就是保障在产生大规模攻打的状况下,客户在线业务可能持续可用,放弃肯定的稳定性,这是客户的一个外围诉求。全站减速提供了多种手段保障原站的高可用,包含:源站的监控与告警,主备近程状况下CDN主动的切换,DCDN的缓存模式,灾备站等多种高可用模式。 另一方面,阿里云积极参与国家级寰球级和行业级的认证我的项目,目前曾经取得了国内外共97项的合规资质,其中CDN相干资质有47项(等保三级,金融云等保四级,可信云,ISO27001系列,PCI DSS平安认证)。洽购了阿里云的服务和产品,客户能够十分轻而易举的做到了行业所在行业的合规与监管的要求。综上所述,全站减速DCDN 交融了云平安团队先进的防护技术,打造了一套原生的防护体系。 阿里云全站减速在用户体验上的降级优化远远不止以上内容,咱们将会继续提供更好的体验和更丰盛的产品能力,帮忙您在应用过程中更加简略、易用、平安、高效! 原文链接本文为阿里云原创内容,未经容许不得转载。

December 8, 2021 · 1 min · jiezi

关于云计算:为了-OpenPolicyAgent-学-Rego试试-Javascript

间隔上个版本 用 Pipy 实现 OPA,曾经过来快半年了。当初应用Pipy 实现了可信镜像仓库的查看,那时的版本实现起来会略微简单,从策略仓库到证书创立到Admission Webhook 的创立都须要大量的人工操作,配置和逻辑也还是耦合在一起。 这个版本装置和应用起来会更加简略。 当初我用“不务正业”来形容 Pipy 实现准入管制,等看完这篇文章,欢送留言说说你的认识。 架构还是持续上次的场景,在 Pod 创立时对 Pod 应用的镜像所在仓库进行查看,以及查看镜像的 tag 是否非法。 这里借助 Pipy Repo 的能力,将代表策略的脚本和配置交由 Repo 进行治理;Pipy 实例实时从 Pipy Repo 同步策略,并进行动静加载。 同时 Pipy Repo 对外提供 REST API 来管理策略,对策略的批改更容易。也不便与企业现有治理后盾进行对接。 上面就开始部署验证,这里所应用的所有代码都已提交到 GitHub 仓库:https://github.com/flomesh-io...。 运行git clone https://github.com/flomesh-io/demo-policy-as-code.gitcd demo-policy-as-code筹备环境应用 Kubernetes 发行版 K3s 作为集群环境,集群的搭建不做过多阐明。我用 k3d: k3d cluster create policy-as-code -p "6060:30060@server:0"注:K3d 是在容器中运行 K3s,这里做了将容器的 30060 端口映射到本地的 6060 端口,前面会具体解释。 部署策略服务器执行上面的命令部署策略服务器 Repo: kubectl apply -f repo/pipy-repo.yaml确保 Pod 失常运行: ...

December 8, 2021 · 2 min · jiezi

关于云计算:云原生爱好者周刊Cilium-放大招发布服务网格-Beta-版

云原生一周动静要闻: Cilium 推出服务网格测试计划Knative 已申请成为 CNCF 的孵化我的项目Kubernetes v1.23 行将公布Lens 5.3 公布开源我的项目举荐文章举荐云原生动静:Cilium 服务网格 Beta 版公布Cilium 应用了 eBPF 的弱小性能来减速网络,并在 Kubernetes 中提供安全性和可观测性。当初 Cilium 将 eBPF 的劣势带到了 Service Mesh 的世界。Cilium 服务网格应用 eBPF 来治理连贯,实现了服务网格必备的流量治理、安全性和可观测性。 除了行将公布的 Cilium 1.11 版本,新的 Cilium Service Mesh beta 版本也将很快推出,其特点是: L7 流量治理和负载平衡(HTTP、gRPC 等)跨集群、云和本地的拓扑感知路由TLS 终止通过 Envoy 配置 Canary Rollouts、重试、速率限度、熔断等应用 OpenTelemetry 和 Jaeger 集成进行跟踪内置 Kubernetes Ingress 反对在正式版本公布之前,Cilium 推出了服务网格 Beta 打算,要退出 Beta 打算,可填写此表格。 详情见 Knative 已申请成为 CNCF 的孵化我的项目日前,在 Knative 领导委员会和商标委员会的反对下,谷歌发表无意将 Knative 我的项目捐献给云原生计算基金会(CNCF),并提交了一个 Pull request。 2018 年,Knative 我的项目由 Google 创建并公布,随后与 IBM、Red Hat、VMware 及 SAP 密切合作开发。该我的项目在 Kubernetes 上提供了一个无服务器体验层,提供了构建和部署古代、基于容器的无服务器应用程序所需的构建块。在过来三年中,Knative 已成为 Kubernetes 上装置最宽泛的无服务器层。最近,Knative 1.0 公布,达到了一个重要的里程碑,而成为 CNCF 的孵化我的项目则是 Knative 的下一个重要的里程碑。 ...

December 7, 2021 · 1 min · jiezi

关于云计算:焱融-YRCloudFile-连获两项重量级认证展现强劲存储实力

近年来,放慢倒退信息技术利用翻新,曾经成为强化国家策略科技力量。作为文件式存储领头羊,焱融科技长期踊跃与产业上下游生态搭档协同单干,旨在引领合作伙伴共创谐和生态,携手推动信息产业化倒退。近期,焱融 YRCloudFile 正式与联通云、京东云实现互认证测试。测试结果显示,单方产品兼容性良好、运行稳固,性能体现优异。 焱融科技&联通云产品兼容性认证 联通云是中国联通旗下以业务为外围,依据云原生体系思路,齐全自主研发的企业云原生利用底座平台。基于全国布局的云服务,联通云施展运营商特有能力,打造了差异化多级 MSP 服务能力,实现为企业提供高效的 DevOps 能力与疾速交付体系、稳固牢靠的 K8s 容器化资源管理能力、全面的微服务研发体系与工具、内容丰盛且凋谢的 PaaS 与 SaaS 能力市场以及 7*24 小时无间断的运维撑持服务。 焱融科技&京东云产品兼容性认证 京东云是京东团体旗下的全平台云计算综合服务提供商,领有寰球当先的云计算技术和丰盛的云计算解决方案教训。同时,京东云依靠京东团体在云计算、大数据、物联网和挪动互联网利用等多方面的长期业务实际和技术积淀,造成了从根底平台搭建、业务征询布局,到业务平台建设及经营等全产业链的云生态格局,为用户供一站式全方位的云计算解决方案。 在两次产品兼容性认证过程中,焱融 YRCloudFile 分布式存储系统均顺利完成了联结测试,兼容性良好且运行稳固。目前,在业界环境中,只有为数不多的存储系统服务商通过多项企业兼容性认证,本次多项认证更是对焱融 YRCloudFile 的认可,证实了焱融科技的分布式文件存储系统已处于行业领先水平。 随着云、大数据、AI、区块链等技术的倒退,分布式存储也开始在市场继续炽热。作为一家走在行业前沿的软件定义存储厂商,焱融科技率先推出面向云+AI 时代的新型分布式存储产品,凭借其卓越的性能、灵便的程度扩大能力,帮忙人工智能和高性能计算业务无效晋升效率。 焱融 YRCloudFile 基于先进的集群机构,为用户构建了一站式存储服务,极大地满足了各行各业的数据存储需要: 高带宽、低延时读写个性,保障为 GPU 服务器提供足够的数据输出,实现 GPU 的高效应用;反对百亿级别的小文件及局部大文件混合的读写场景;能反对近千台高性能计算节点的并发拜访;满足多种计算集群模式存储服务,包含固有的裸金属计算架构、云计算架构、容器化计算架构的长久化存储等需要;满足综合监控数据治理平台对接需要,实现数据管理、监控、运维一体化展示和简洁化治理能力;实现相干业务特色具体优化策略,依据不同业务类型特色具备可调节优化能力。面对以后数字化时代的高速倒退,企业更须要构建一个开放式的翻新生态系统。至此,在焱融科技曾经实现独家中标中国移动云高性能并行文件存储的我的项目、天翼云和联通云兼容性认证,实现与三大运营商达成单干的同时,已与华为鲲鹏、安腾普、京东云等在内的多家国内支流厂商实现产品兼容性互认证,构建了较为残缺的生态体系。 在推动存储生态倒退的过程中,焱融科技始终以践行者的身份,默默构建稳固的存储环境,一直深入信创存储生态布局,与合作伙伴独特构建更加平安、稳固的存储生态,为数据存储倒退奉献翻新力量。

December 7, 2021 · 1 min · jiezi

关于云计算:浪潮云跻身中国政务大数据管理平台市场领导者位置

近日,IDC正式公布《IDC MarketScape: 中国政务大数据管理平台市场厂商评估,2021》报告,对市场支流代表性厂商进行钻研剖析。钻研结果显示,在策略布局、倒退能力、市场份额等方面浪潮云均跻身领导者地位。 IDC认为,政务大数据管理平台是基于Hadoop、MPP架构延长出的对于多维数据存储与计算的平台产品和服务,是大数据技术体系的根底。在寰球疫情肆虐和自然灾害频发的刺激下,政府对于跨部门协同的大数据管理与剖析提出了更强烈的诉求。 在IDC中国政府行业与智慧城市钻研经理詹墨磊看来,政府行业数字化转型经验了"十二金"的信息化过程和业务云化的期间,目前来到了“一网统管”、“一网通办”体系建设的数字政府时代,中国政务大数据管理平台市场出现平台建设向数据资产、数据安全以及业务价值开掘方面迁徙的倒退态势,具备综合技术能力和优良服务能力的企业将仍旧是市场的主导者。在这一过程中,浪潮云长期深耕政府行业,对行业理解能力较强,在全国区域的市场拓展和布局维度较广,存量市场稳固,用户评估度高,是领导者象限的代表厂商之一。 面向数字时代,浪潮云围绕政务大数据管理平台的外围能力要求打造了浪潮云智能数据平台,作为浪潮云业务撑持平台的外围组成部分,其蕴含大数据生态中的20多种罕用组件,提供湖仓一体的多维数据空间性能,反对PB级规模数据存储与计算;反对高效全量数据汇聚,内置高可用数据总线、实时数据交换共享、智能化数据抽取等模块,提供全方位数据采集能力;基于存算拆散架构,实现高效的集群弹性伸缩,提供混合事务剖析和批流合一的大数据计算能力;反对多租户计算存储资源隔离,实现在对立的大数据管理平台上进行数据治理;平台提供涵盖数据的分类分级、访问控制、隐衷爱护、数据水印、危险评估、数据审计等全生命周期数据安全治理能力;提供低门槛的机器学习平台性能,反对动静本体模型和自动化数据标签等性能实现智能化数据治理;提供丰盛的图表组件,反对一站式数据开发和可视化数据分析。 在政府行业,浪潮云智能数据平台曾经在100多个中央政府的政务大数据管理平台建设中利用,通过提供多源数据采集、湖仓一体、实时数据交换、数据分类分级、数据安全治理、数据智能剖析等要害数据管理能力,减速政府数字化转型,推动数字经济继续衰弱倒退。 对于IDC MarketScape IDC MarketScape厂商评估模型旨在为特定市场中信息和通信技术(ICT)厂商的竞争力提供一个概述。 钻研办法采纳严格的定性和定量的规范的评分办法,以繁多的图形阐明每个厂商在特定市场中的地位。IDC MarketScape提供了一个清晰的框架,在其中能够对IT和信息通信技术厂商的产品、服务、能力和策略以及以后和将来的市场胜利因素进行有意义的比拟。该框架还为技术买家提供了针对以后或潜在厂商的360度优劣势评估,为技术买家提供参考。

December 7, 2021 · 1 min · jiezi

关于云计算:科技热点周刊|微软再遭反垄断指控-亚马逊云服务推出新定制芯片JetBrains-推出-Fleet

IT 科技新闻30 多家欧洲公司投诉微软垄断:云存储捆绑零碎销售近日德国云存储公司 Nextcloud 与其余 30 多家欧洲软件、云计算公司组成了名为“公平竞争环境联盟”,并正式向欧盟委员会投诉微软的反竞争行为,即微软将其云存储服务 OneDrive、合作办公软件 Teams 和其余服务与 Windows 10 和 Windows 11 捆绑销售。Nextcloud 宣称,通过推动消费者注册并将他们的数据交给微软,这家软件巨头正在限度消费者的抉择,并为其余提供竞争服务的公司制作了不偏心的阻碍。具体地说,微软在欧盟的市场份额曾经增长到 66%,而当地供应商的市场份额却从 26%降落到 16%。微软不是通过任何技术劣势或销售劣势获得这一成就的,而是高度偏爱自家产品和服务。只管依据欧盟反竞争法,偏爱自家产品或服务并不守法,但如果公司滥用其市场主导地位,则属于违法行为。 更多理解 数字领取巨头 Square 发表更名为 Block,将专一区块链倒退据海内的媒体报道,数字领取公司 Square 公司日前正式发表将公司的名称更名为,心愿更深刻地拥抱去中心化和区块链技术,帮忙减少进入经济的路径,还称将与去中心化比特币(BTC)交易我的项目以及音乐和视频流媒体平台 Tidal 单干。据理解,该公司 的 CEO 在往年的 11 月份就曾经辞去推特(TWTR)的 CEO 职务,Square 这个名字曾经成为该公司卖家业务的代名词,然而在纽约证券交易所的股票代码“SQ”不会扭转。另外,Square 示意法定名称的更改将于 12 月 10 日左右失效,还补充道组织构造不会发生变化,就像 Facebook 将重心从社交媒体转移到 Meta 一样,公司旗下不同的业务部门将持续放弃各自的品牌。 亚马逊云服务推出两款新定制芯片,与英特尔和英伟达开展竞争据国外媒体报道,亚马逊旗下的云计算部门亚马逊云服务(AWS)公布了第三代基于 Arm 架构的 Graviton 芯片,旨在与英特尔和 AMD 中央处理器竞争。Graviton3 比其前身快 25%,浮点性能进步 2 倍,机器学习工作负载的速度进步 3 倍。AWS 还承诺,新芯片将缩小 60%的电力耗费。亚马逊弹性计算云副总裁 Dave Brown 示意,该公司预计 Graviton3 的性价比将大大超过英特尔芯片。 AWS 云计算策略师 Jeff Barr 指出,这款芯片对于各种各样的工作负载都十分有用,包含计算密集型的 HPC、批处理、电子设计自动化(EDA)、媒体编码、迷信建模、广告服务、分布式剖析和基于 CPU 的机器学习推理。AWS 还示意,名为 Tradium 的新型芯片将很快向客户推出,该芯片旨在训练机器学习计算机模型,将与英伟达的同类芯片开展竞争。AWS 预计 Tradium 将可帮忙训练机器学习模型,可被用于图像识别、自然语言解决、欺诈检测和预测等,老本比英伟达旗舰芯片低 40%。 ...

December 7, 2021 · 2 min · jiezi

关于云计算:沙盒化容器是容器还是虚拟机

随着 IT 技术的倒退,AI、区块链和大数据等技术晋升了对利用毫秒级扩大的需要,开发人员也面临着的性能疾速推出的压力。混合云是新常态,数字化转型是放弃竞争力的必要条件,虚拟化成为这些挑战的根本技术。 在虚拟化的世界,有两个词耳熟能详:虚拟机和容器。前者是对硬件的虚拟化,后者则更像是操作系统的虚拟化。两者都提供了沙箱的能力:虚拟机通过硬件级形象提供,而容器则应用公共内核提供过程级的隔离。有很多人将容器看成是“轻量化的虚拟机”,通常状况下咱们认为容器是平安的,那到底是不是跟咱们设想的一样? 容器:轻量化的虚拟机?容器是打包、共享和部署利用的现代化形式,帮忙企业实现疾速、规范、灵便地实现服务交互。容器化是建设在 Linux 的命名空间(namespace)和控制组(cgroup) 的设计之上。 命名空间创立一个简直隔离的用户空间,并为利用提供专用的系统资源,如文件系统、网络堆栈、过程ID和用户ID。随着用户命名空间的引入,内核版本 3.8 提供了对容器性能的反对:Mount(mnt)、过程 ID(pid)、Network(net)、过程间通信(ipc)、UTS、用户 ID(user)6 个命名空间(现在已达 8 个,后续退出了 cgroup 和 time 命名空间)。 cgroup 则施行对利用的资源限度、优先级、记账和管制。cgroup能够管制 CPU、内存、设施和网络等资源。 同时应用 namespace 和 cgroup 使得咱们能够在一台主机上平安地运行多个利用,并且每个利用都位于隔离的环境中。 虚拟机提供更弱小的隔离 尽管容器很棒,足够轻量级。但通过下面的形容,同一个主机上的多个容器其实是共享同一个操作系统内核,只是做到了操作系统级的虚拟化。尽管命名空间提供了高度的隔离,但依然有容器能够拜访的资源,这些资源并没有提供命名空间。这些资源是主机上所有容器共有的,比方内核 Keyring、/proc、零碎工夫、内核模块、硬件。 咱们都晓得没有 100% 平安的软件,容器化的利用也一样,从利用源码到依赖库到容器 base 镜像,甚至容器引擎自身都可能存在安全漏洞。产生容器逃逸的危险远高于虚拟机,黑客能够利用这些逃逸破绽,操作容器的内部资源也就是宿主机上的资源。除了破绽,有时应用的不当也会带来平安危险,比方为容器调配了过高的权限(CAP_SYS_ADMIN 性能、特权权限),都可能导致容器逃逸。 而虚拟机依附硬件级的虚拟化,实现的硬件隔离比命名空间隔离提供了更弱小的平安边界。与容器相比,虚拟机提供了更高水平的隔离,只因其有本人的内核。 由此可见,容器并不是真正的“沙盒”,也并不是轻量化的虚拟机。有没有可能为容器减少一个更平安的边界,尽可能的与主机操作系统隔离,做到相似虚拟机的强隔离,使其成为真正的“沙盒”? 沙盒化容器答案是有,就是沙盒容器。这种容器就像虚拟机一样有本人的内核,这层内核成为用户空间内核。这层内核要放弃容器的轻量级,应用古代编程技术编写,自身十分轻,仅用于作为容器和主机之间的强隔离层。 并且还要反对 OCI 和 CRI 标准,能够与 Docker 和 Kubernetes 等容器工具很好的集成。 这里简略介绍下 gVisor 和 Kata Containers。 gVisorgVisor 是应用 Go 编写的利用内核,实现了 Linux 操作系统的大部分接口。其蕴含了一个叫做 runsc 的 OCI 运行时,提供了利用和宿主机内核间的隔离层。runsc 也实现了与 Docker 和 Kubernetes 的集成,能够很容易的运行沙盒容器。 ...

December 7, 2021 · 1 min · jiezi

关于云计算:火山引擎焱融-YRCloudFile驱动数据存储新增长

昨日,火山引擎云产品发布会“新云·共将来”在上海圆满闭幕。此次“新云·共将来”发布会正式公布了 5 大类、78 项产品服务的全新云产品,其中包含云根底、视频及内容散发服务、数据中台、开发中台、人工智能引擎等畛域,并由火山引擎云根底产品、数据产品、边缘云产品等相干部门负责人将从不同角度围绕火山引擎云产品进行论述,让大家具体理解字节跳动是如何建设云的。 此前,焱融文件存储系统在火山引擎弹性计算的本地 SSD 型 ECS 实例上进行小型化部署的典型计划,及相干性能验证。 部署场景该典型配置应用4台 ECS 本地 SSD 型大规格实例用于部署焱融文件存储系统,ECS 实例之间通过高速 VPC 网络连接,节点间的网络带宽最高可达33 Gbps。每台 ECS 实例配置3块本地 NVME SSD 硬盘和两个弹性网卡(主网卡只做运维逃生通道,辅网卡为存储业务立体)。ECS 实例间平安组配置为全互联互通,焱融文件存储系统对外只凋谢指定端口拜访,用于存储系统的配置和运维。另外,在上述4台 ECS 本地 SSD 型大规格实例所在 VPC 中部署3台高性能 ECS 实例,作为存储性能测试的读写客户端。该3台高性能 ECS 测试机为可选部署。在理论的业务部署中,业务零碎能够间接在同一 VPC 中拜访焱融的文件系统服务。 部署示意图 前提条件已创立1个 VPC 实例,具体步骤参见创立公有网络。已创立4台本地 SSD 型 ECS 实例和3台高性能 ECS 实例,创立步骤参见购买云服务器,各实例的配置数据参见数据布局。数据布局焱融存储节点示意图中ECS实例 filesystem-01、filesystem-02、filesystem-03、filesystem-04 的规格选型均参考下表。 性能测试节点示意图中 ECS 实例 perf-test-01、perf-test-02、perf-test-03 的规格选型均参考下表。 性能测试用例及后果并发 4K 块随机读,观测集群 IOPS后果:读 IOPS 906342 次/s 并发 4K 块随机写,观测集群 IOPS后果:写 IOPS 282640 次/s ...

December 3, 2021 · 1 min · jiezi

关于云计算:浪潮云说直播间云溪数据库之ClickHouse原理解析今晚开讲

播放工夫:12月1日晚20:00-20:50本期主题:ClickHouse原理解析内容简介:ClickHouse是俄罗斯第一大搜索引擎Yandex开发的列式贮存数据库。这个列式贮存数据库的性能大幅超过了很多商业MPP数据库软件,比方Vertica,InfiniDB。本期李盟老师为大家带来的分享是大热门话题《ClickHouse原理解析》。其中将包含ClickHouse的简介、外围个性和架构设计,同时包含MergeTree原理解析等,让观众能够更清晰的理解到ClickHouse的性能劣势和利用个性。主讲人:李盟,浪潮云溪数据库存储研发技术专家

December 1, 2021 · 1 min · jiezi

关于云计算:云端干货|如何使用Docker制作镜像

上一讲,咱们引入了Docker的学习环境,并且运行了一个 “Hello world”。本期内容,咱们将开始制作镜像,并且把它运行起来。 基于云原生开发的云资源优化服务 SpotMax 无缝集成了k8s、Docker等工具,可便捷实现容器的治理与公布,并实现用云降本增效。==>>  戳链接理解 SpotMax筹备代码首先咱们须要筹备一份简略的代码。返回SpotMax文档核心( https://docs.spotmaxtech.com/),关上学习文档,咱们曾经为你筹备好了代码。它是一个简略的http服务代码,采纳Node app.js的语法: ·如果你的本地有Node环境,也能够运行测试一下 note app .js。 在这里,你须要将它存到 app.js这个文件外面: ·curl一下,它就会关上一个端口8080,并显示你的机器名: ·在下方咱们能够看到“装置Node环境”,你能够依据本人的需要,抉择是否装置这个环境: 当初,让咱们回到上述的页面,复制咱们为你提供的代码,关上Docker Playground开始游玩~ 制作镜像与运行在Docker Playground中,咱们touch一个代码,把它放在 app.js文件外面,将上述复制的代码粘贴过去,保留、退出。如此,代码就筹备好了: 因为在这里是Node的环境,咱们要须要进行打包。在文档核心找到“构建与运行你的第一个利用”,复制代码: 并放在Dockerfile中,保留、退出。 当初,咱们曾经筹备好了Docker file,能够开始运行指令了。咱们要制作一些本人的Docker build,在文档核心复制粘贴代码docker build-t: 这里咱们起个名字叫Kubia。请留神kubia前面须要有一点“.”这个点是代表“当前目录”。因为“当前目录”上面包含Dockerfile,以及 app.js。 如下图所示,当初曾经胜利实现build,将咱们这个 app.js做成了一个镜像。 实现后,让咱们来看一下本人的镜像长什么样子? 在文档核心复制docker images命令,粘贴到终端并运行。 如下便可见镜像: 当初,咱们曾经build好了Kubia。接下来咱们去运行一下容器。 在文档核心找到下图所示的docker run指令,粘贴到终端并运行: 接下来,输出docker ps,咱们就能够看到方才制作的镜像 app.js曾经开始运行了,同时,能够看到node环境也曾经被打包进去、端口曾经关上: 当初咱们来试着拜访一下端口。输出curl http://local host:8080/ 并运行——能够看到胜利显示了You’ve hit 96d8883f7c15 (即以后机器的Host)。 一个简略的镜像就制作并运行实现啦! ...

December 1, 2021 · 1 min · jiezi

关于云计算:科技热点周刊|PHP-基金会成立Rust-内讧Amazon-Linux-2022-预览版发布

IT 科技新闻Jetbrains 发动成立 PHP 基金会你目前的团队中要有多少成员忽然隐没能力使你的组织或我的项目陷入进展?这个数字被称为“公共汽车系数(bus factor)”,也就是说,有多少人被公共汽车撞到才会导致整个我的项目进行运作。往年早些时候,PHP 贡献者 Joe Watkins 认为,PHP 的公共汽车系数是一个惊人的数字,即 2 ! Watkins 过后写道:“兴许只有有两个人一沉睡来决定干点别的事件,PHP 我的项目就会因不足足够的业余技术和资源,从而无奈以目前的模式和速度向前倒退。”他点名了 Dmitry Stogov 和 Nikita Popov(PHP 外围开发者,2019 年初开始供职于 JetBrains 的 PHPStorm 团队,预计今年年底到职)。 上周,幸好 Nikita Popov 没有被公共汽车撞到,但他的确决定不再负责 PHP 相干的职务,而将集中在 LLVM( 构架编译器 (compiler) 的框架零碎,以 C++ 编写而成)。 同样值得庆幸的是,Watkins 在往年早些时候的文章让一些人看到了眼前的状况,正如他在后续文章中写到的,JetBrains(Popov 任职公司)过后就启动 PHP 基金会的问题分割了他。随着 Popov 的到职,PHP 基金会正式启动,指标是赞助兼职/全职开发人员在 2022 年从事 PHP 外围的开发工作。 在启动时,将会有 10 家公司(Automattic、Laravel、Acquia、Zend、Private Packagist、Symfony、Craft CMS、Tideways、PrestaShop和JetBrains)作为其支持者退出 PHP 基金会 ,预计每年将筹集 30 万美元,JetBrains 每年出资 10 万美元。同时,该基金会是通过“基金会即服务(foundation-as-a-service)”供应商 Open Collective 发动的,不到 700 名捐款人就曾经为该基金会筹集了 4 万多美元。 ...

December 1, 2021 · 2 min · jiezi

关于云计算:Spark-从精通到重新入门一Spark-中不可不知的动态优化

前言Apache Spark 自 2010 年面世,到当初曾经倒退为大数据批计算的首选引擎。而在 2020 年 6 月份公布的Spark 3.0 版本也是 Spark 有史以来最大的 Release,其中将近一半的 issue 都属于 SparkSQL。这也投合咱们当初的次要场景(90% 是 SQL),同时也是优化痛点和次要性能点。咱们 Erda 的 FDP 平台(Fast Data Platform)也从 Spark 2.4 降级到 Spark 3.0 并做了一系列的相干优化,本文将次要联合 Spark 3.0 版本进行探讨钻研。 为什么 Spark 3.0 可能“神功大成”,在速度和性能方面有质的冲破?本文就为大家介绍 Spark 3.0 中 SQL Engine 的“天榜第一”——自适应查问框架 AQE(Adaptive Query Execution)。 AQE,你是谁? 简略来说,自适应查问就是在运行时一直优化执行逻辑。 Spark 3.0 版本之前,Spark 执行 SQL 是先确定 shuffle 分区数或者抉择 Join 策略后,再按布局执行,过程中不够灵便;当初,在执行完局部的查问后,Spark 利用收集到后果的统计信息再对查问布局从新进行优化。这个优化的过程不是一次性的,而是随着查问会一直进行优化, 让整个查问优化变得更加灵便和自适应。这一改变让咱们辞别之前无休止的被动优化。 AQE,你会啥? 理解了 AQE 是什么之后,咱们再看看自适应查问 AQE 的“三板斧”: ...

December 1, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway过滤器精确控制异常返回实战完全定制返回body

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览Spring Cloud Gateway利用中,解决申请时若产生异样未被捕捉,申请方收到的响应是零碎默认的内容,无奈满足理论业务需要因而,从前一篇文章《Spring Cloud Gateway过滤器准确管制异样返回(剖析篇)》开始,咱们深入分析了Spring Cloud Gateway的相干源码,理解到全局异样的解决细节,而后,通过前文《Spring Cloud Gateway过滤器准确管制异样返回(实战,管制http返回码和message字段)》的实战,咱们曾经能随便设置http返回码,以及body中的message字段,也就是管制下图两个红框中的内容: 正如上图所示,异样产生时零碎固定返回8个字段,这就有些不够灵便了,在一些对格局和内容有严格要求的场景下,咱们须要可能齐全管制返回码和返回body的内容,如下所示,只返回三个字段,每个字段都是齐全为业务服务的:{ # 这是有具体业务含意的返回码 "code": "010020003", # 这是能准确形容谬误起因的文本信息 "message": "请确保申请参数中的user-id字段是无效的", # 这是惯例的业务数据,产生异样时该字段为空 "data": null}明天咱们的指标就是通过编码定制异样产生时的返回信息,具体内容就是上述JSON数据:只有code、message、data三个字段源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: <font color="blue">spring-cloud-tutorials</font>文件夹下有多个子工程,本篇的代码是<font color="red">gateway-change-body</font>,如下图红框所示: 为何不必惯例伎俩提到全局异样解决,经验丰富的您应该想到了罕用的ControllerAdvice和ExceptionHandler注解润饰的全局异样解决类,然而Spring Cloud Gateway是基于WebFlux的,咱们之前解决异样时用到的HttpServletRequest在Spring Cloud Gateway中并不实用,因而,不能用ControllerAdvice和ExceptionHandler的伎俩来解决全局异样基本思路在入手前做好短缺的实践剖析,写出的代码能力失常工作关上DefaultErrorWebExceptionHandler.java,找到renderErrorResponse办法,来看看Spring Cloud Gateway本来是如何结构异样返回内容的: 此刻聪慧的您应该想到怎么做了:做个新的类继承DefaultErrorWebExceptionHandler,笼罩其renderErrorResponse办法,新的renderErrorResponse办法中,依照理论业务须要来设置返回内容,没错,这就是咱们的思路,不过还要细化一下,最终具体的步骤如下:新增一个异样类<font color="blue">CustomizeInfoException.java</font>,该类有三个字段:http返回码、业务返回码、业务形容信息在返回异样的代码地位,应用CustomizeInfoException类来抛出异样,依照理论业务场景设置CustomizeInfoException实例的各个字段新增MyErrorWebExceptionHandler.java,继承自DefaultErrorWebExceptionHandler,重写了renderErrorResponse办法,这外面查看异样实例是否是CustomizeInfoException类型,如果是,就从其中取出http返回码、业务返回码、业务形容信息等字段,结构返回body的内容,异样实例若不是CustomizeInfoException类型,就放弃之前的解决逻辑不变;新增configuration类,用于将MyErrorWebExceptionHandler实例注册到spring环境剖析结束,开始编码吧,为了简略起见,本篇不再新增maven子工程,而是基于前文创立的子工程<font color="red">gateway-change-body</font>,在这外面持续写代码;编码新增异样类<font color="blue">CustomizeInfoException.java</font>:package com.bolingcavalry.changebody.exception;import lombok.Data;import org.springframework.http.HttpStatus;@Datapublic class CustomizeInfoException extends Exception { /** * http返回码 */ private HttpStatus httpStatus; /** * body中的code字段(业务返回码) */ private String code; /** * body中的message字段(业务返回信息) */ private String message;}批改RequestBodyRewrite.java的apply办法,这外面是在解决申请body,如果查看到没有<font color="blue">user-id</font>字段,就不将申请转发到服务提供方<font color="blue">provider-hello</font>,而是返回谬误,这里的谬误就用CustomizeInfoException类来解决:@Override public Publisher<String> apply(ServerWebExchange exchange, String body) { try { Map<String, Object> map = objectMapper.readValue(body, Map.class); // 如果申请参数中不含user-id,就返回异样 if (!map.containsKey("user-id")) { CustomizeInfoException customizeInfoException = new CustomizeInfoException(); // 这里返回406,您能够依照业务须要自行调整 customizeInfoException.setHttpStatus(HttpStatus.NOT_ACCEPTABLE); // 这里依照业务须要自行设置code customizeInfoException.setCode("010020003"); // 这里依照业务须要自行设置返回的message customizeInfoException.setMessage("请确保申请参数中的user-id字段是无效的"); return Mono.error(customizeInfoException); } // 获得id int userId = (Integer)map.get("user-id"); // 失去nanme后写入map map.put("user-name", mockUserName(userId)); return Mono.just(objectMapper.writeValueAsString(map)); } catch (Exception ex) { log.error("1. json process fail", ex); return Mono.error(new Exception("1. json process fail", ex)); } }异样解决类MyErrorWebExceptionHandler.java,这里有一处须要<font color="red">重点关注的是:</font>上面的代码仅是参考而已,您无需拘泥于CustomizeInfoException无关的逻辑,齐全能依照业务需要自在设置返回的状态码和body:package com.bolingcavalry.changebody.handler;import com.bolingcavalry.changebody.exception.CustomizeInfoException;import org.springframework.boot.autoconfigure.web.ErrorProperties;import org.springframework.boot.autoconfigure.web.WebProperties;import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;import org.springframework.boot.web.reactive.error.ErrorAttributes;import org.springframework.context.ApplicationContext;import org.springframework.http.MediaType;import org.springframework.web.reactive.function.BodyInserters;import org.springframework.web.reactive.function.server.ServerRequest;import org.springframework.web.reactive.function.server.ServerResponse;import reactor.core.publisher.Mono;import java.util.HashMap;import java.util.Map;public class MyErrorWebExceptionHandler extends DefaultErrorWebExceptionHandler { public MyErrorWebExceptionHandler(ErrorAttributes errorAttributes, WebProperties.Resources resources, ErrorProperties errorProperties, ApplicationContext applicationContext) { super(errorAttributes, resources, errorProperties, applicationContext); } @Override protected Mono<ServerResponse> renderErrorResponse(ServerRequest request) { // 返回码 int status; // 最终是用responseBodyMap来生成响应body的 Map<String, Object> responseBodyMap = new HashMap<>(); // 这里和父类的做法一样,获得DefaultErrorAttributes整理出来的所有异样信息 Map<String, Object> error = getErrorAttributes(request, getErrorAttributeOptions(request, MediaType.ALL)); // 原始的异样信息能够用getError办法获得 Throwable throwable = getError(request); // 如果异样类是咱们定制的,就定制 if (throwable instanceof CustomizeInfoException) { CustomizeInfoException myGatewayException = (CustomizeInfoException) throwable; // http返回码、body的code字段、body的message字段,这三个信息都从CustomizeInfoException实例中获取 status = myGatewayException.getHttpStatus().value(); responseBodyMap.put("code", myGatewayException.getCode()); responseBodyMap.put("message", myGatewayException.getMessage()); responseBodyMap.put("data", null); } else { // 如果不是咱们定制的异样,就维持和父类一样的逻辑 // 返回码 status = getHttpStatus(error); // body内容 responseBodyMap.putAll(error); } return ServerResponse // http返回码 .status(status) // 类型和以前一样 .contentType(MediaType.APPLICATION_JSON) // 响应body的内容 .body(BodyInserters.fromValue(responseBodyMap)); }}最初是配置类MyErrorWebFluxAutoConfiguration.java:package com.bolingcavalry.changebody.config;import com.bolingcavalry.changebody.handler.MyErrorWebExceptionHandler;import org.springframework.beans.factory.ObjectProvider;import org.springframework.boot.autoconfigure.AutoConfigureBefore;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;import org.springframework.boot.autoconfigure.web.ServerProperties;import org.springframework.boot.autoconfigure.web.WebProperties;import org.springframework.boot.autoconfigure.web.reactive.WebFluxAutoConfiguration;import org.springframework.boot.context.properties.EnableConfigurationProperties;import org.springframework.boot.web.reactive.error.ErrorAttributes;import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.annotation.Order;import org.springframework.http.codec.ServerCodecConfigurer;import org.springframework.web.reactive.config.WebFluxConfigurer;import org.springframework.web.reactive.result.view.ViewResolver;import java.util.stream.Collectors;@Configuration(proxyBeanMethods = false)@AutoConfigureBefore(WebFluxAutoConfiguration.class)public class MyErrorWebFluxAutoConfiguration { private final ServerProperties serverProperties; public MyErrorWebFluxAutoConfiguration(ServerProperties serverProperties) { this.serverProperties = serverProperties; } @Bean @Order(-1) public ErrorWebExceptionHandler errorWebExceptionHandler(ErrorAttributes errorAttributes, org.springframework.boot.autoconfigure.web.ResourceProperties resourceProperties, WebProperties webProperties, ObjectProvider<ViewResolver> viewResolvers, ServerCodecConfigurer serverCodecConfigurer, ApplicationContext applicationContext) { MyErrorWebExceptionHandler exceptionHandler = new MyErrorWebExceptionHandler(errorAttributes, resourceProperties.hasBeenCustomized() ? resourceProperties : webProperties.getResources(), this.serverProperties.getError(), applicationContext); exceptionHandler.setViewResolvers(viewResolvers.orderedStream().collect(Collectors.toList())); exceptionHandler.setMessageWriters(serverCodecConfigurer.getWriters()); exceptionHandler.setMessageReaders(serverCodecConfigurer.getReaders()); return exceptionHandler; }}编码实现,该把程序运行起来验证成果了;验证启动利用gateway-change-body用postman发动POST申请,地址是<font color="blue">http://localhost:8081/hello/c...</font>,如下图,红框2中的http返回码是咱们代码里设置的,红框3显示返回的内容就是咱们定制的那三个字段: ...

December 1, 2021 · 2 min · jiezi

关于云计算:云原生爱好者周刊在浏览器里模拟-Kubernetes-调度

云原生一周动静要闻: OutSystems 公布 Neo 预览版KubeCon + CloudNativeCon + Open Source Summit China 2021 行将上线D2iQ 公布 DKP 2.0 以大规模运行 Kubernetes 应用程序Amazon Linux 2022 预览版公布Rust 编程语言的审核团队个体辞职开源我的项目举荐文章举荐云原生动静OutSystems 公布 Neo 预览版最近,OutSystems 在其年度 NextStep 流动中发表了一个新的云原生利用平台 Neo。这是 OutSystems 在公司历史上首次推出第二个平台,仅次 于OutSystems 11——一个用于企业级低代码开发的平台。 在 2022 年正式推出之前,Neo 当初能够进行公开预览。它将可视化、基于模型的开发的生产力劣势与基于容器和 Kubernetes 的云架构相结合。有了这个平台,开发人员能够在云上创立从挪动应用程序和消费者网站到工作组软件和其余外围零碎(如微软、SAP 和 Salesforce)的扩大的所有。此外,通过自动化 DevOps 程序,治理先进的云运行工夫,自动记录代码,解决代码依赖性,进行回归测试,以及执行架构规范,新平台解决了开发中必不可少但又没有区别的局部。 开发者能够通过试用和预览 Neo 收费试用 OutSystems 11。 详情见 KubeCon + CloudNativeCon + Open Source Summit China 2021 行将上线2021 年 12 月 9 日 - 10 日,由 CNCF 与寰球开源贡献者独特发动的“KubeCon + CloudNativeCon + Open Source Summit China 2021 ”将以虚构会议的模式与云原生爱好者们见面。 ...

November 30, 2021 · 2 min · jiezi

关于云计算:OpenELB-进入-CNCF-Sandbox让私有化环境对外暴露服务更简单

11 月 10 日,云原生计算基金会 (CNCF) 发表由青云科技 KubeSphere 团队开源的负载均衡器插件 OpenELB 正式进入 CNCF 沙箱(Sandbox)托管。 OpenELB 我的项目在此前命名为 PorterLB,是为物理机(Bare-metal)、边缘(Edge)和私有化环境设计的负载均衡器插件,可作为 Kubernetes、K3s、KubeSphere 的 LB 插件对集群外裸露 “LoadBalancer” 类型的服务,外围性能包含: 基于 BGP 与 Layer 2 模式的负载平衡基于路由器 ECMP 的负载平衡IP 地址池治理治理应用 CRD 进行 BGP 配置 为什么发动 OpenELB咱们起初在 KubeSphere 社区做了一项针对宽广社区用户装置部署 Kubernetes 所应用环境的调研,从 5000 多份 KubeSphere 用户调研数据中发现有近 36% 的用户抉择在物理机装置部署 Kubernetes,占比高居第一位。并且还有大量客户是在离线的数据中心或边缘设施装置和应用 Kubernetes 或 K3s,导致用户在公有环境对外裸露 LoadBalancer 服务比拟艰难。 咱们晓得,在 Kubernetes 集群中能够应用 “LoadBalancer” 类型的服务将后端工作负载裸露在内部。云厂商通常为 Kubernetes 提供云上的 LB 插件,但这须要将集群部署在特定 IaaS 平台上。然而,许多企业用户通常都将 Kubernetes 集群部署在裸机上,尤其是用于生产环境时。而且对于私有化环境特地是物理机或边缘集群,Kubernetes 并不提供 LoadBalancer 计划。 ...

November 30, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway过滤器精确控制异常返回实战控制http返回码和message字段

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览前文《Spring Cloud Gateway过滤器准确管制异样返回(剖析篇)》咱们浏览源码,理解到Spring Cloud Gateway是如何解决全局异样信息的,学了那么多实践,未免手痒想实战验证学习效果,明天咱们就来写代码,最终目标是改写下图两个红框中的内容: 为了简略起见,本篇不再新增maven子工程,而是基于前文创立的子工程<font color="red">gateway-change-body</font>,在这外面持续写代码;源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: <font color="blue">spring-cloud-tutorials</font>文件夹下有多个子工程,本篇的代码是<font color="red">gateway-change-body</font>,如下图红框所示: 第一种:抛出ResponseStatusException异样关上<font color="red">gateway-change-body</font>工程的RequestBodyRewrite.java文件,改变如下图红框,如果申请body不含user-id参数就返回Mono.error,入参是ResponseStatusException异样,设置了返回码为400,message为一段中文形容: 接下来运行nacos、provider-hello工程、gateway-change-body工程用postman发申请试试,申请和响应的详情如下图: 从上图可见,返回码为400,和咱们设定的一样,然而message却为空,这是怎么回事呢?依照咱们的设定,这里应该显示<font color="blue">申请参数必须蕴含user-id字段</font>,看来咱们遇到一只拦路虎了小小拦路虎咱们代码中,抛异样的时候设定message内容如下图红框所示,但运行的时候返回的是空字符串,这是怎么回事呢? 来看DefaultErrorWebExceptionHandler.isIncludeMessage办法,看下图红框中的那个errorProperties,您会不会豁然开朗:这不就是springboot配置中的erro配置嘛! 批改工程的配置文件,红框内是新增的配置: 再用postman试试,如下图,这一次,status、message、exception、trace齐聚一堂,完全符合预期: 看来第一种办法是可行的:返回ResponseStatusException类型的异样;第二种:自定义异样,带ResponseStatus注解接下来试试第二种办法:通ResponseStatus注解首先新建一个异样类MyGatewayException.java,应用了ResponseStatus,在外面配置返回码和message内容,这次的返回码用的是403:package com.bolingcavalry.changebody.exception;import org.springframework.http.HttpStatus;import org.springframework.web.bind.annotation.ResponseStatus;@ResponseStatus(code = HttpStatus.FORBIDDEN, reason = "user-id字段不能为空")public class MyGatewayException extends Exception {}编码实现,重启利用,而后再发一次申请,如下图,返回码和message内容都合乎预期: 至此,两种最简略的形式都实现验证,个别状况下曾经满足要求:将错误信息精确传递给调用方留有瑕疵聪慧的您应该已发现上述两种计划有瑕疵:返回body的格局和字段都是固定的,如果我的项目中对返回body的内容有严格要求,例如只容许code、message、data三个字段,其余字段一律不能返回,此时又该怎么办呢?仿佛须要一种办法,让咱们能够得心应手的设置body内容,篇幅所限,这种终极的解决形式就留在下一篇吧,敬请期待,欣宸原创,必不辜负您...你不孤独,欣宸原创一路相伴Java系列Spring系列Docker系列kubernetes系列数据库+中间件系列DevOps系列欢送关注公众号:程序员欣宸微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...https://github.com/zq2599/blog_demos

November 30, 2021 · 1 min · jiezi

关于云计算:从-Docker-的信号机制看容器的优雅停止

此文是前段时间做相干工作时笔记的整顿,之前本人对这方面的关注不够,因而做下记录。 有太多的文章介绍如何运行容器,然而如何进行容器的文章绝对少很多。 依据运行的利用类型,利用的进行过程十分重要。如果利用要写文件,进行前要保障正确刷新数据并敞开文件;如果是 HTTP 服务,要确保进行前解决所有未实现的申请。 信号信号是 Linux 内核与过程以及过程间通信的一种形式。针对每个信号过程都有个默认的动作,不过过程能够通过定义信号处理程序来笼罩默认的动作,除了 SIGSTOP 和 SIGKILL。二者都不能被捕捉或重写,前者用来将过程暂停在以后状态,而后者则是从内核层面立刻杀掉过程。 有两个比拟重要的过程 SIGTERM 和 SIGKILL。SIGTERM 是优雅地敞开命令,SIGKILL 则是暴力的敞开命令。比方 Docker,容器会先收到 SIGTERM 信号,10s 后会收到 SIGKILL 信号。 还有很多其余的信号,只是限定于特定的上下文。 中断硬件的中断就像操作系统的信号。通常产生在硬件想要向操作系统注册事件时。操作系统必须立刻进行运行,并解决中断。 比拟常见的中断例子就是键盘中断,比方按下 ctrl+z 或者 ctrl+c。Linux 将其别离转换成 SIGTSTP 和 SIGINT。硬件中断过来通常用来解决键盘和鼠标输出,但现在被用作操作系统软件驱动层面的信号轮训。 Docker后面说了这么多终于来到 Docker,容器的独特之处在于通常只运行一个过程。即便是单过程,容器内 PID 为 1 的过程也具备 init 零碎的非凡规定和职责。 PID 1 在 Linux 中十分重要,通常是 init 过程。通常过程在收到 SIGTERM 信号后,如果不对信号过程解决,会疾速退出。但 PID 1 的过程收到 SIGTERM 之后如果不对信号进行解决则什么都不会做。 容器内 PID 1 通常有两种状况: shell 过程 PID 为 1 和你的过程 PID 为 1。别离对应着 shell 和 exec 格局的命令。 ...

November 29, 2021 · 2 min · jiezi

关于云计算:元宇宙最缺的是内容而云计算能帮上忙

(DOIT/朱朋博)2021年,凡是村里通了网的人,必定据说过元宇宙这一酷炫时尚的概念。 从技术的视角看来,元宇宙波及云计算、物联网、人工智能、5G、区块链等新兴技术,须要更强的算力,更先进的3D建模技术,以及包含AR,VR之类能带来沉迷式体验的终端技术。 当然,在具体落地前,免不了要在哲学、法律、经济、伦理等人文方面的微小扭转。 元宇宙构建的是与物理世界平行的数字世界,元宇宙之所以称之为宇宙,就意味着它要足够大,会有数不清的事务让人去摸索和发现。 元宇宙代表企业,元宇宙第一股Roblox认为,元宇宙产品应具备八大因素:身份、敌人、沉迷感、低提早、多元化、随地、经济零碎、文化。 久远来看,元宇宙的8大要害因素里,将来最短缺的还是多元化的内容,在任何时代,创意都是最难的,创意人才都是极度短缺的,那要如何产出更多内容呢? 当然,大型业余的游戏公司、媒体以及创意公司仍会是内容输入的重要阵地,如何进一步升高内容制作的技术门槛,让普通人也能参加到游戏制作、影视作品、以及视频制作环节,从而能产出更多富裕创意的优质内容,成为当下十分重要的一方面。 事实上,升高创作门槛的趋势在游戏制作、视频创作以及视频直播方面未然是非常明显。元宇宙须要所有的参与者都能参加到内容的制作中来。 升高内容制作门槛能力为元宇宙奉献多样化内容以经典的MOBA类游戏开创者DOTA为例,它就是典型的UGC产物,DOTA是魔兽争霸三玩家利用游戏自带的编辑器制作的一张地图,随后呈现的《英雄联盟》、《DOTA2》以及《王者光荣》等游戏都属于MOBA类游戏。 DOTA属于一般玩家群体发明的景象级游戏,游戏更新中过程中一直排汇玩家的反馈意见,取得了十分短暂的生命力,它的影响力超过了许多业余游戏公司制作的大型3A游戏。 DOTA游戏自身集竞技性、娱乐性、多变性等个性于一体,DOTA玩家群体分享的精彩游戏集锦也衍生出了许多精彩的视频内容进一步流传,是多数在寰球范畴内风行的游戏文化。 站在2021年回看衰亡于2005年的古董级游戏,它从游戏制作更新到游戏内容流传,各个环节都有许多普通人参加其中,而后呈现的《我的世界》、《马里奥制作》、《动物森友会》等游戏,都是凭借玩家UGC内容放弃了较高的可玩性和短暂的生命力。 在笔者看来,这种人人参加模式正是元宇宙要取得天然倒退的基本能源,参与者既是内容的生产者也是内容的消费者,这才是元宇宙内容的生命力。 尽管目前离人们设想中的元宇宙落地还有不少间隔,但升高内容创作的技术门槛是目前就能够做的事件。如何让业余的人做业余的事儿,让业务人员把精力放在本职工作上,这也是私有云厂商在做的事件。 云服务如何为媒体娱乐行业制作便当?Eric Iverson是亚马逊云科技寰球媒体与娱乐行业首席技术官,同时也是媒体与娱乐行业的资深专家,在谈起元宇宙时,难掩对于元宇宙自身的激情,因为他所从事的媒体娱乐与元宇宙所需的内容有人造分割。 Eric Iverson示意,有越来越多的媒体娱乐公司开始上云,不只是因为云服务的老本劣势,更是因为云上能提供丰盛多样的性能服务,比方,亚马逊云科技提供了200多种外围的云服务,针对媒体娱乐行业还有八大外围专用性能和服务,领有十分成熟的全媒体工作流服务教训。亚马逊云科技媒体娱乐制作相干计划 提起云上媒体娱乐创作服务,普通人首先能想到的是云上渲染,随着高清3D特效影片的风行,渲染的工作量呈指数级蹿升,传统做法,渲染农场为了及时实现工作常常须要装备大量的计算资源,然而,理论工作中的利用率往往会比拟低下,造成节约。 而将工作负载迁徙到私有云之后,应用云上构建的渲染农场则只需按用量付费即可,上云之后,无论是老本,还是工作节奏的可控性都有了实质上的改善,许多渲染农场都是在本地部署大量资源,大部分工作负载转移到了云上。 媒体制作上云是大势所趋,以至于许多媒体制作工具都对私有云进行了适配,包含亚马逊云科技在内的私有云服务商,能够提供十分欠缺的云上媒体制作服务。 比方,亚马逊云科技提供了VFX Bust Rendering Framework这种渲染工具,又比方,Blender就能够通过插件将工作负载一键迁徙到亚马逊云上来实现。上云能给媒体娱乐行业带来的变动远不止于此。 云服务能在媒体娱乐行业的方方面面提供便当向来秉承着“用户须要的就是咱们要提供的”这样精力的亚马逊云科技,在媒体娱乐行业提供的服务笼罩行业的各个环节。 在内容创作环节,亚马逊云科技通过Amazon Nimble Studio这样的工具,将身处不同地区的创作者连贯在一起,这种形式为更多的创作者提供施展才华灵便的舞台。 对于创作者来说,云上进行内容创作能够节俭很多工夫。Eric Iverson示意,对于所有人来说,工夫是最贵重的。上云之后,创作者能够以更快的速度打造进去本地区独有的、更加有创意的、独家的、多样化的内容。 能留神到,包含国内观众相熟的Netflix和国内游戏玩家十分相熟的Epic Games都别离是亚马逊云科技的客户和合作伙伴。 亚马逊云科技的媒体娱乐服务类型丰盛全面,除了内容创作以外,它提供的服务可能实现整个内容在云端的流转,包含将媒体内容上传到云,内容在云上的存储和治理,内容的转码,内容的播送和散发,内容的剖析都能在云上实现。 媒体公司也能依附亚马逊云科技实现直播和播送、播放等服务。一些大型赛事的转播,比方美国的超级碗,全球性的世界杯等,在网络直播时对服务器的承载能力提出微小挑战,而私有云则能够帮忙其应答直播高峰期的负载压力,且能够节约大量老本。 刚刚完结的《英雄联盟》寰球总决赛的直播中,满屏的弹幕其精彩水平不亚于选手在赛场上你来我往,弹幕为观众极佳的参与感和互动体验,作为直播中必不可少的组成部分,亚马逊云也能提供交付体验类的服务,帮忙直播频道留下观众。 媒体与娱乐公司上云还意味着能不便地享受到各种先进技术,比方,亚马逊云科技提供的Statistical Multiplexing服务,它用到了机器学习技术来进步带宽利用率。 客户还能利用亚马逊云科技的数据分析和AI性能优化用户的应用体验,比方,能够给观众做智能化的内容举荐,又比方,能够依据观众的爱好制作节目,副作用于内容制作环节。 总结元宇宙的落地须要极其丰富的内容,包含游戏和影音娱乐,以及更多交互性的精彩内容,更多现实生活中的映射,比方虚构偶像,将来可能包含人们工作生存、经济生存的更多局部会与元宇宙产生关联。 当整个元宇宙的元素越来越丰盛,必然会更依赖内容创作者,比方更好的游戏引擎工具,更好的3D建模工具,更多能承载创意和想象力的工具。最近看到有机器学习技术能用几张图片就构建3D场景的新闻,听起来都十分值得期待。 当然,云计算对于元宇宙十分重要,不仅是因为整个虚拟世界都构建在数字技术上,还有更多内容创作工具都会依赖云技术来构建,置信亚马逊云科技还会为媒体和娱乐行业的客户提供更多的服务和解决方案,赋能这类客户的业务翻新转型,将来能够刮目相待! 作者:朱朋博起源:云体验师点击进入取得更多技术信息~~

November 25, 2021 · 1 min · jiezi

关于云计算:加速云原生应用落地焱融-YRCloudFile-与天翼云完成兼容性认证

“十四五”期间,我国将科技翻新放在了更加突出的地位,把科技自立自强作为国家倒退的策略撑持。为了推动科技翻新的疾速倒退,放慢产品交融过程。日前,焱融科技与天翼云科技实现了产品兼容性认证。本次测试是由焱融 YRCloudFile 分布式存储系统与天翼云进行适配认证,结果显示,YRCloudFile 可基于天翼云稳固运行,零碎性能运行稳固,产品体验良好,满足了用户性能、性能和可靠性要求。 据理解,天翼云作为中国电信旗下直属业余公司,是一家集市场营销、经营服务、产品研发于一体的 IDC 服务商,服务客户波及50万党政军以及各行业的大中型企业客户,在云计算畛域领有不凡的影响力。 此次产品兼容性认证顺利完成,一方面,充分证明了焱融 YRCloudFile 具备高性能、高稳固、高灵便与高兼容等方面个性;另一方面,单方实现携手打造以全栈存储为外围的生态体系,减速云原生利用落地过程。 作为一款长期专一于分布式文件存储的产品,焱融 YRCloudFile 将其在存储畛域的教训利用到产品当中,在提供高性能、高可用的文件拜访接口的同时,反对 Kubernetes 等支流容器编排框架,提供高性能的容器长久化存储。除此之外,YRCloudFile 还具备以下多项个性: 极致的高性能拜访:焱融科技在寰球 IO500 高性能存储测试中,10 节点性能测试数据在全球排名第六。突出的高性能劣势,帮忙人工智能、自动化驾驶等畛域客户轻松应答训练过程中的性能挑战。海量文件反对:全对称、可扩大的元数据集群架构,在面对数十亿文件时,客户端对元数据的操作性能及读写性能依然保持稳定。容器长久化存储:在容器环境下,YRCloudFile 能够与容器云平台无缝对接。提供 CSI 插件,对 Kubernetes 及下层利用容器无侵入性。反对 PV 的配额设置、动静扩容、QoS、实时监控、热点探测、冷热数据分析、PV 智能调度器等性能。面向 MySQL 等利用的 IO 模型,进行了针对性优化,无力反对容器环境上的长久化利用高效稳固运行。冷热数据分层:YRCloudFile 文件存储系统的智能分层性能,可依据客户需要定义冷热数据层。通过智能分层,热数据层仍然能为人工智能等新兴业务提供高性能的拜访个性,同时冷数据能够在用户现有的低成本对象存储中无效保留。除了为用户提供可依附的技术服务外,焱融科技还具备适配软实力与部署硬实力。在软实力方面,焱融科技领有宽泛的生态适配能力和业务适配优化能力。而在硬实力方面,焱融科技基于外围产品 YRCloudFile 和焱融云舟,打造了数据存储的闭环服务,从私有云、公有云、混合云到容器存储,焱融科技可能给企业提供数据存储全生命周期的服务和解决方案。 对于焱融科技来说,构建凋谢联结的技术生态是近年来关注重点,此次与天翼云开展的产品适配,在很大水平上推动了焱融科技数据存储生态的疾速倒退与协同欠缺。至此,焱融科技曾经实现独家中标中国移动云高性能并行文件存储的我的项目,以及天翼云兼容性认证,实现与两大运营商达成单干,这也充分证明焱融科技的安全性和服务能力在国内名列前茅。 将来,焱融科技将继续踊跃携手更多合作伙伴,发展更多方面和档次的单干,扩充产品兼容生态圈,减速产品的利用落地,将数据存储畛域做大做强。

November 25, 2021 · 1 min · jiezi

关于云计算:Spring-Cloud-Gateway过滤器精确控制异常返回分析篇

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览在《Spring Cloud Gateway批改申请和响应body的内容》一文中,咱们通过filter胜利批改申请body的内容,过后留下个问题:在filter中如果产生异样(例如申请参数不非法),抛出异样信息的时候,调用方收到的返回码和body都是Spring Cloud Gateway框架解决后的,调用方无奈依据这些内容晓得真正的谬误起因,如下图: 本篇工作就是剖析上述景象的起因,通过浏览源码搞清楚返回码和响应body生成的具体逻辑提前小结这里将剖析后果提前小结进去,如果您很繁忙没太多工夫却又想晓得最终起因,间接关注以下小结即可:Spring Cloud Gateway利用中,有个ErrorAttributes类型的bean,它的getErrorAttributes办法返回了一个map利用抛出异样时,返回码来自上述map的status的值,返回body是整个map序列化的后果默认状况下ErrorAttributes的实现类是DefaultErrorAttributes再看上述map的status值(也就是response的返回码),在DefaultErrorAttributes是如何生成的:先看异样对象是不是ResponseStatusException类型如果是ResponseStatusException类型,就调用异样对象的getStatus办法作为返回值如果不是ResponseStatusException类型,再看异样类有没有ResponseStatus注解,如果有,就取注解的code属性作为返回值如果异样对象既不是ResponseStatusException类型,也没有ResponseStatus注解,就返回500最初看map的message字段(也就是response body的message字段),在DefaultErrorAttributes是如何生成的:异样对象是不是BindingResult类型如果不是BindingResult类型,就看是不是ResponseStatusException类型如果是,就用getReason作为返回值如果也不是ResponseStatusException类型,就看异样类有没有ResponseStatus注解,如果有就取该注解的reason属性作为返回值如果通过注解获得的reason也有效,就返回异样的getMessage字段上述内容就是本篇精髓,然而并未蕴含剖析过程,如果您对Spring Cloud源码感兴趣,请容许欣宸陪伴您来一次短暂的源码浏览之旅Spring Cloud Gateway错误处理源码首先要看的是配置类ErrorWebFluxAutoConfiguration.java,这里面向spring注册了两个实例,<font color="red">每个都十分重要</font>,咱们先关注第一个,也就是说ErrorWebExceptionHandler的实现类是DefaultErrorWebExceptionHandler: 解决异样时,会通过FluxOnErrorResume调用到这个ErrorWebExceptionHandler的handle办法解决,该办法在其父类AbstractErrorWebExceptionHandler.java中,如下图,红框地位的代码是要害,异样返回内容就是在这里决定的: 开展这个getRoutingFunction办法,可见会调用renderErrorResponse来解决响应:@Overrideprotected RouterFunction<ServerResponse> getRoutingFunction(ErrorAttributes errorAttributes) { return route(acceptsTextHtml(), this::renderErrorView).andRoute(all(), this::renderErrorResponse); }关上renderErrorResponse办法,如下所示,水落石出了!protected Mono<ServerResponse> renderErrorResponse(ServerRequest request) { // 取出所有错误信息 Map<String, Object> error = getErrorAttributes(request, getErrorAttributeOptions(request, MediaType.ALL)); // 结构返回的所有信息 return ServerResponse // 管制返回码 .status(getHttpStatus(error)) // 管制返回ContentType .contentType(MediaType.APPLICATION_JSON) // 管制返回内容 .body(BodyInserters.fromValue(error));}通过上述代码,咱们失去两个重要论断:返回给调用方的状态码,取决于getHttpStatus办法的返回值返回给调用方的body,取决于error的内容都曾经读到了这里,天然要看看getHttpStatus的外部,如下所示,status来自入参:protected int getHttpStatus(Map<String, Object> errorAttributes) { return (int) errorAttributes.get("status");}至此,咱们能够得出一个论断:getErrorAttributes办法的返回值是决定返回码和返回body的要害!来看看这个getErrorAttributes办法的庐山真面吧,在DefaultErrorAttributes.java中(回顾方才看ErrorWebFluxAutoConfiguration.java的时候,后面曾提到外面的货色都很重要,也包含errorAttributes办法):public Map<String, Object> getErrorAttributes(ServerRequest request, ErrorAttributeOptions options) { Map<String, Object> errorAttributes = this.getErrorAttributes(request, options.isIncluded(Include.STACK_TRACE)); if (Boolean.TRUE.equals(this.includeException)) { options = options.including(new Include[]{Include.EXCEPTION}); } if (!options.isIncluded(Include.EXCEPTION)) { errorAttributes.remove("exception"); } if (!options.isIncluded(Include.STACK_TRACE)) { errorAttributes.remove("trace"); } if (!options.isIncluded(Include.MESSAGE) && errorAttributes.get("message") != null) { errorAttributes.put("message", ""); } if (!options.isIncluded(Include.BINDING_ERRORS)) { errorAttributes.remove("errors"); } return errorAttributes; }篇幅所限,就不再开展上述代码了,间接上后果吧:返回码来自determineHttpStatus的返回message字段来自determineMessage的返回关上determineHttpStatus办法,终极答案揭晓,请关注中文正文:private HttpStatus determineHttpStatus(Throwable error, MergedAnnotation<ResponseStatus> responseStatusAnnotation) { // 异样对象是不是ResponseStatusException类型 return error instanceof ResponseStatusException // 如果是ResponseStatusException类型,就调用异样对象的getStatus办法作为返回值 ? ((ResponseStatusException)error).getStatus() // 如果不是ResponseStatusException类型,再看异样类有没有ResponseStatus注解, // 如果有,就取注解的code属性作为返回值 : (HttpStatus)responseStatusAnnotation.getValue("code", HttpStatus.class) // 如果异样对象既不是ResponseStatusException类型,也没有ResponseStatus注解,就返回500 .orElse(HttpStatus.INTERNAL_SERVER_ERROR); }另外,message字段的内容也确定了: private String determineMessage(Throwable error, MergedAnnotation<ResponseStatus> responseStatusAnnotation) { // 异样对象是不是BindingResult类型 if (error instanceof BindingResult) { // 如果是,就用getMessage作为返回值 return error.getMessage(); } // 如果不是BindingResult类型,就看是不是ResponseStatusException类型 else if (error instanceof ResponseStatusException) { // 如果是,就用getReason作为返回值 return ((ResponseStatusException)error).getReason(); } else { // 如果也不是ResponseStatusException类型, // 就看异样类有没有ResponseStatus注解,如果有就取该注解的reason属性作为返回值 String reason = (String)responseStatusAnnotation.getValue("reason", String.class).orElse(""); if (StringUtils.hasText(reason)) { return reason; } else { // 如果通过注解获得的reason也有效,就返回异样的getMessage字段 return error.getMessage() != null ? error.getMessage() : ""; } } }至此,源码剖析已实现,最终的返回码和返回内容到底如何管制,置信聪慧的您心里应该无数了,下一篇《实战篇》咱们趁热打铁,写代码试试准确管制返回码和返回内容提前剧透,接下来的《实战篇》会有以下内容出现:直接了当,管制返回码和body中的error字段小小拦路虎,见招拆招简略易用,通过注解管制返回信息终极计划,齐全定制返回内容以上内容敬请期待,欣宸原创必不辜负您你不孤独,欣宸原创一路相伴Java系列Spring系列Docker系列kubernetes系列数据库+中间件系列DevOps系列欢送关注公众号:程序员欣宸微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...https://github.com/zq2599/blog_demos

November 25, 2021 · 1 min · jiezi

关于云计算:激荡十年从未来窗口-reInvent-看云计算发展变迁-Q-推荐

从最后被质疑仅仅是个广告概念,到现在造成微小的产业生态,云计算曾经高速倒退十余年。这十余年间,IT 世界翻天覆地,有数新理念、新技术不断涌现,其改革速度让开发者应接不暇,没有谁敢确信,本人正走在时代的最前沿。 或者也正是因而,re:Invent 作为云计算畛域的寰球最大规模的会议,每年都能吸引上万名开发者去往拉斯维加斯。往年是 re:Invent 第十年,在过来的十年中,re:Invent 曾无数次预感将来,其局部产品公布堪比权威机构的调研定调,使得这场盛会简直成为全世界开发者看向将来的窗口。 那么,在过来十年间,云上世界到底产生了什么,将来又将出现何种趋势?本文将带读者回溯 re:Invent 十年,与云计算的发展史相结合,看看云上技术的变迁历程。 1 计算服务时代:云端迁徙热潮(2006)云计算的诞生,并非欲速不达。 已经,大多数企业都苦恼于洽购硬件和租用 IDC 机房来构建 IT 基础设施,亚马逊也是其中之一。对于亚马逊为何开始提供云服务,业界还流传着一个这样的小故事。 据说过后,亚马逊外部有很多我的项目团队,任何我的项目团队测试新产品须要服务器资源。在服务器资源供不应求的状况下,团队负责人只能去找 CEO 贝索斯哭诉。贝索斯听闻后,当即向技术团队暴跳如雷:“是你们扼杀了亚马逊人的创造力。” 那段时间,贝索斯在一本书中偶尔看到“基元”的概念,于是尝试将“基元”的概念利用到开发中——将计算和存储拆散为最小、最简略的元件,供开发者应用、发明。通过这个形式,亚马逊外部的创造力失去极大的开释。贝索斯思考,能不能把这些基元也对外提供给开发者呢? 2006 年,亚马逊推出 Amazon Web Services,以 Web 服务的模式向企业提供 IT 基础设施服务。通过将虚拟机和存储服务提供给开发者,用户不须要构建本人的服务器,就能够获取计算和存储能力,并且能够像水电一样随取随用。2006 年 3 月 14 日 Amazon Web Services 公布 Simple Storage Service(简称 S3),至此,计算时代的新纪元拉开帷幕。这个纪元叫做“计算服务时代”,人们形象地以“云”来命名这种簇新的计算资源服务模式。 紧接着,微软在 PCD 2008 上公布 Windows Azure 技术社区预览版,谷歌也在 2008 年推出了 Google App Engine 的预览版。那段时间,计算和存储拆散的理念初步确立,各大云厂商致力于为企业提供一些基础设施服务,各种类型的虚拟机、存储服务层出不穷,一度在行业内造成云端迁徙热潮。 但迁徙式的计算服务,依然只是云计算的雏形。谁都没有料到,整个 IT 世界的基础设施都将彻底改变。同时,此时的业内仍然存在大量“信息墙”,开发者和最前沿的云理念、云技术被分隔开,妨碍了前沿技术的翻新和推广。 2 云原生时代:从 On Cloud 走向 In Cloud (2010)计算服务时代不便了企业主,同时也让企业主们察觉,这还不够。企业上云,不仅仅要从基础设施和平台层面实现,还须要利用自身包含架构设计、开发方式、部署保护等就是基于云的特点而开发。 在“云”这种巨大的构想下,仅仅实现服务器的搬迁未免太简陋。于云服务商而言,单纯的虚拟化也再无奈满足高速增长的客户数量。 因而,云原生作为一种更适宜云计算架构特点的利用开发技术和运维治理形式呈现了。 ...

November 24, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway修改请求和响应body的内容

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览作为《Spring Cloud Gateway实战》系列的第九篇,咱们聊聊如何用Spring Cloud Gateway批改原始申请和响应内容,以及批改过程中遇到的问题首先是批改申请body,如下图,浏览器是申请发起方,实在参数只有<font color="blue">user-id</font>,通过网关时被塞入字段<font color="blue">user-name</font>,于是,后盾服务收到的申请就带有<font color="blue">user-name</font>字段了 其次是批改响应,如下图,服务提供方<font color="blue">provider-hello</font>的原始响应只有<font color="red">response-tag</font>字段,通过网关时被塞入了<font color="blue">gateway-response-tag</font>字段,最终浏览器收到的响应就是<font color="red">response-tag</font>和<font color="blue">gateway-response-tag</font>两个字段: 总的来说,明天要做具体事件如下:筹备工作:在服务提供者的代码中新增一个web接口,用于验证Gateway的操作是否无效介绍批改申请body和响应body的套路按套路开发一个过滤器(filter),用于批改申请的body按套路开发一个过滤器(filter),用于批改响应的body思考和尝试:如何从Gateway返回谬误?在实战过程中,咱们顺便搞清楚两个问题:代码配置路由时,如何给一个路由增加多个filter?代码配置路由和yml配置是否能够混搭,两者有抵触吗?源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: <font color="blue">spring-cloud-tutorials</font>文件夹下有多个子工程,本篇的代码是<font color="red">gateway-change-body</font>,如下图红框所示: 筹备工作为了察看Gateway是否按预期去批改申请和响应的body,咱们给服务提供者<font color="blue">provider-hello</font>减少一个接口,代码在Hello.java中,如下: @PostMapping("/change") public Map<String, Object> change(@RequestBody Map<String, Object> map) { map.put("response-tag", dateStr()); return map; }可见新增的web接口很简略:将收到的申请数据作为返回值,在外面增加了一个键值对,而后返回给申请方,有了这个接口,咱们就能通过观察返回值来判断Gateway对申请和响应的操作是否失效来试一下,先启动nacos(provider-hello须要的)再运行<font color="blue">provider-hello</font>利用,用Postman向其发申请试试,如下图,合乎预期: 筹备工作已实现,开始开发吧批改申请body的套路如何用Spring Cloud Gateway批改申请的body?来看看其中的套路:批改申请body是通过自定义filter实现的配置路由及其filter的时候,有yml配置文件和代码配置两种形式能够配置路由,官网文档给出的demo是代码配置的,因而明天咱们也参考官网做法,通过代码来配置路由和过滤器在代码配置路由的时候,调用<font color="blue">filters</font>办法,该办法的入参是个lambda表达式此lambda表达式固定调用modifyRequestBody办法,咱们只有定义好modifyRequestBody办法的三个入参即可modifyRequestBody办法的第一个入参是输出类型第二个入参是返回类型第三个是RewriteFunction接口的实现,这个代码须要您本人写,内容是将输出数据转换为返回类型数据具体逻辑,咱们来看官网Demo,也就是上述套路了:@Beanpublic RouteLocator routes(RouteLocatorBuilder builder) { return builder.routes() .route("rewrite_request_obj", r -> r.host("*.rewriterequestobj.org") .filters(f -> f.prefixPath("/httpbin") .modifyRequestBody(String.class, Hello.class, MediaType.APPLICATION_JSON_VALUE, (exchange, s) -> return Mono.just(new Hello(s.toUpperCase())))).uri(uri)) .build();}批改响应body的套路用Spring Cloud Gateway批改响应body的套路和后面的申请body一模一样通过代码来配置路由和过滤器在代码配置路由的时候,调用<font color="blue">filters</font>办法,该办法的入参是个lambda表达式此lambda表达式固定调用modifyResponseBody办法,咱们只有定义好modifyResponseBody办法的三个入参即可modifyRequestBody办法的第一个入参是输出类型第二个入参是返回类型第三个是RewriteFunction接口的实现,这个代码要您本人写,内容是将输出数据转换为返回类型数据具体逻辑,咱们来看官网Demo,其实就是上述套路:@Beanpublic RouteLocator routes(RouteLocatorBuilder builder) { return builder.routes() .route("rewrite_response_upper", r -> r.host("*.rewriteresponseupper.org") .filters(f -> f.prefixPath("/httpbin") .modifyResponseBody(String.class, String.class, (exchange, s) -> Mono.just(s.toUpperCase()))).uri(uri)) .build();}套路总结进去了,接下来,咱们一起撸代码?按套路开发一个批改申请body的过滤器(filter)废话不说,在父工程<font color="blue">spring-cloud-tutorials</font>下新建子工程<font color="red">gateway-change-body</font>,pom.xml无任何非凡之处,留神依赖<font color="blue">spring-cloud-starter-gateway</font>即可启动类毫无新意:package com.bolingcavalry.changebody;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ChangeBodyApplication { public static void main(String[] args) { SpringApplication.run(ChangeBodyApplication.class,args); }}配置文件千篇一律:server: #服务端口 port: 8081spring: application: name: gateway-change-body而后是外围逻辑:批改申请body的代码,既RewriteFunction的实现类,代码很简略,将原始的申请body解析成Map对象,取出user-id字段,生成user-name字段放回map,apply办法返回的是个Mono:package com.bolingcavalry.changebody.function;import com.fasterxml.jackson.databind.ObjectMapper;import lombok.extern.slf4j.Slf4j;import org.reactivestreams.Publisher;import org.springframework.cloud.gateway.filter.factory.rewrite.RewriteFunction;import org.springframework.web.server.ServerWebExchange;import reactor.core.publisher.Mono;import java.util.Map;@Slf4jpublic class RequestBodyRewrite implements RewriteFunction<String, String> { private ObjectMapper objectMapper; public RequestBodyRewrite(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } /** * 依据用户ID获取用户名称的办法,能够按理论状况来外部实现,例如查库或缓存,或者近程调用 * @param userId * @return */ private String mockUserName(int userId) { return "user-" + userId; } @Override public Publisher<String> apply(ServerWebExchange exchange, String body) { try { Map<String, Object> map = objectMapper.readValue(body, Map.class); // 获得id int userId = (Integer)map.get("user-id"); // 失去nanme后写入map map.put("user-name", mockUserName(userId)); // 增加一个key/value map.put("gateway-request-tag", userId + "-" + System.currentTimeMillis()); return Mono.just(objectMapper.writeValueAsString(map)); } catch (Exception ex) { log.error("1. json process fail", ex); // json操作出现异常时的解决 return Mono.error(new Exception("1. json process fail", ex)); } }}而后是循序渐进的基于代码实现路由配置,重点是lambda表达式执行modifyRequestBody办法,并且将RequestBodyRewrite作为参数传入:package com.bolingcavalry.changebody.config;import com.bolingcavalry.changebody.function.RequestBodyRewrite;import com.bolingcavalry.changebody.function.ResponseBodyRewrite;import com.fasterxml.jackson.databind.ObjectMapper;import org.springframework.cloud.gateway.route.RouteLocator;import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.http.MediaType;import reactor.core.publisher.Mono;@Configurationpublic class FilterConfig { @Bean public RouteLocator routes(RouteLocatorBuilder builder, ObjectMapper objectMapper) { return builder .routes() .route("path_route_change", r -> r.path("/hello/change") .filters(f -> f .modifyRequestBody(String.class,String.class,new RequestBodyRewrite(objectMapper)) ) .uri("http://127.0.0.1:8082")) .build(); }}代码写完了,运行工程<font color="blue">gateway-change-body</font>,在postman发动申请,失去响应如下图,红框中可见Gateway增加的内容已胜利: ...

November 24, 2021 · 2 min · jiezi

关于云计算:使用-KubeSphere-应用商店-5-分钟内快速部署-JuiceFS

作者:朱唯唯,尹珉JuiceFS 简介JuiceFS 是为海量数据设计的分布式文件系统,应用对象存储来做数据长久化,防止反复造轮子,还能大大降低工程复杂度,让用户专一解决元数据和拜访协定局部的难题。 应用 JuiceFS 存储数据,数据自身会被长久化在对象存储(例如,Amazon S3),而数据所对应的元数据能够依据场景须要被长久化在 Redis、MySQL、SQLite 等多种数据库中。 KubeSphere 平台介绍KubeSphere 是在 Kubernetes 之上构建的以利用为核心的多租户容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。 KubeSphere 提供了运维敌对的向导式操作界面,即使是 Kubernetes 教训并不丰盛的用户,也能绝对轻松的上手开始治理和应用。它提供了基于 Helm 的利用市场,能够在可视化界面下十分轻松地装置各种 Kubernetes 利用。 本教程将介绍如何在 KubeSphere 中一键部署 JuiceFS CSI Driver,为集群上的各种利用提供数据长久化。 前提条件装置 KubeSphere在 KubeSphere 中启用利用商店筹备对象存储 创立华为云 OBS创立秘钥部署 RedisRedis 是 JuiceFS 架构中的要害组件,它负责存储所有元数据并响应客户端对元数据的操作。所以在部署 JuiceFS CSI Driver 之前,须要先部署一个 Redis 数据库,部署具体步骤可参考 KubeSphere 官网文档。 部署 JuiceFS CSI DriverKubeSphere 从 3.2.0 开始新增了 “动静加载利用商店” 的性能,合作伙伴可通过提交 PR 申请将利用的 Helm Chart 集成到 KubeSphere 利用商店,这样 KubeSphere 利用商店即可动静加载利用。目前 JuiceFS CSI Driver 的 Helm Chart 曾经通过这种形式集成到了 KubeSphere 的利用商店,用户能够一键将 JuiceFS CSI Driver 部署至 Kubernetes。 ...

November 23, 2021 · 1 min · jiezi

关于云计算:稳若磐石的云舟背后是数据生态的崛起

上个月,焱融云舟 SaaS 数据服务平台正式公布了,作为一款简略、灵便且高可用的 NAS 共享数据服务平台,能够说是宽广中小企业、工程师用来轻松迁徙、剖析和平安地共享数据的神兵利器。 在云舟上线后,收到了越来越多的关注和好评,其中有不少用户开始好奇云舟背地的故事、业务逻辑和底层技术。为了满足大家的好奇心,本篇文章将深挖云舟背地的核心技术,揭秘云舟是如何为用户提供高性能、高可用、灵活性强的服务和产品。 云舟计划结构图 云舟的诞生历程以后,分布式存储次要分为三大类型:对象存储、块存储和文件存储。其中,无论是对历史遗留的零碎,还是对当下新兴的技术,诸如 AI 训练、容器等场景来说,分布式文件存储无疑是利用范畴最广、适配性最好的。当然,文件存储也面临一个问题——它是存储三驾马车中,最简单的一种存储类型。 在混合云策略中,文件存储是重要的一环,尤其是对于数据有交互需要的场景,是不可短少的局部。随着云原生概念的进一步扩充,用户对于存储的需要,也逐步从原有的存储数据延长到了易部署、易用性方面,这也是国外存在着大量的 Distributed Cloud File Storage 的起因。 分布式云文件存储雷达图 同时,随着越来越多的用户将业务向私有云上迁徙,用户在为利用抉择存储时,常常会陷入困境。 第一,企业对于老本优化的谋求,在所有的利用场景里简直都是手不释卷的,即便在最外围的利用场景里,咱们仍然须要管制老本。第二,咱们很难疾速让公有云和私有云或者不同云之间的数据,造成对立的整体。第三,同样的数据在面对不同的利用场景时,也会有着不同的性能和性能的诉求,仅仅依附私有云上的存储类型是齐全不够的。 针对文件存储和业务场景的劣势和挑战,焱融推出了SaaS 数据服务平台——云舟,其实现将 YRCloudFile 在应答企业用户过程中,所积攒的海量存储技术劣势和实战经验,利用到私有云环境中,联合分层存储策略,利用云上的跨虚构数据中心的拜访能力,在满足用户对数据拜访性能要求的同时,给用户带来老本的劣势,也为混合云的解决方案提供了足够的撑持能力。 云舟技术构造视角从技术架构的维度看,云舟的部署模式沿用了企业版的规范构造,采纳了私有云上的虚拟机并配合高性能的 EBS 磁盘,例如 NVMe 高性能磁盘, 对外提供相应的 IOPS 和带宽。 依据业务的须要,云舟能够应用对业务端通明的形式进行无缝垂直扩大,通过在单集群内的扩容更多的 EC2 虚拟机来减少单集群的吞吐能力。还能够通过在不同的私有云可用区域,新建更多的存储集群来承载更多的业务。 从客户的利用层面看,咱们能够利用 NFS 协定(容量型)或者 POSIX(性能型)拜访业务数据,达到了按需应用、按需扩容,无需自行组建、保护相应的存储集群。同时,利用存储集群的配额(Quota),QoS 治理保障了数据的平安,防止了争用。 在保障用户拜访性能的同时,云舟还充分利用了云上的对象存储能力,依据零碎定义的策略,会被动将冷数据转移到 S3 对象存储内,但并不毁坏用户对立命名空间的拜访能力。 云舟架构图 云舟优化分层策略目前,云舟的存储次要分为两个档次:热数据层,冷数据层。其中,集群的 EC2 的本地磁盘组成的存储池为热数据层,是经常性拜访数据的存储介质;而 S3 对象存储作为冷数据层,是用于非经常性拜访数据的存储介质。从应用层来看,所有的数据均在同一命名空间内,数据的调度由存储集群自行实现。 为了最大水平上满足用户对容量和性能的需要,云舟针对每个客户创立的文件系统,默认创立了 Tiering Policy,能够将数据搁置到对象存储。因为对象存储跨网络拜访传输小文件相比于大文件来说,性价比较低,所以零碎策略须要同时思考文件拜访工夫和文件数据大小,例如对于 512Byte 的文件,不会转移到 S3 存储内,默认保留在热数据层。 在继续运行过程中,依赖于云舟的多 MDS(文件系统元数据服务)能力,会对数据进行扫描,合乎策略的数据将被搁置到对象存储。当某一时刻,利用拜访曾经被转移到对象存储内的数据,将会主动产生数据的转移。 部分读写的思路拆解在分层策略被触发后,局部数据会被搁置到 S3 对象存储中。此时,如果业务零碎再次拜访相应的数据,云舟将会触发数据下载的动作。通常的默认行为是,整个文件通过 S3 协定全副下载,而后再用文件拜访协定读取文件返回给用户。这个过程中,用户可能显著的感触到数据的拜访提早,因为要期待数据全副下载实现。 但依据咱们在各个企业环境的实测数据来剖析,无论是用户的行为,还是程序的行为,在数据获取的过程,均存在优化的行为。例如,观看视频文件,用户常见的行为就是拖动式观看;在某些剖析畛域,也会首先读取文件的头部,依据头部信息再去读取后续的某些局部。 解决这个问题的思路即为部分读写,依据客户程序读写文件的信息,利用文件的 MDS 信息也对应去 S3 对象存储上读写对应的片段并返回给客户,同时为了充分利用网络带宽的能力,云舟对读取的数据范畴会进行对齐操作。 ...

November 23, 2021 · 1 min · jiezi

关于云计算:云原生爱好者周刊Prometheus-推出-Agent-模式来适应新的使用场景

云原生一周动静要闻: Istio 1.12 公布CentOS 替代品 Rocky Linux 8.5 公布Prometheus 推出 Agent 模式来适应新的应用场景Linux 基金会与 CNCF 推出新的在线培训课程Antrea 1.4.0 公布开源我的项目举荐文章举荐云原生动静Prometheus 推出 Agent 模式来适应新的应用场景日前,Prometheus 公布了新的操作模式——Prometheus Agent,用来适应新的应用场景。这种新的模式可能实现新的工作流程,如低资源环境、边缘网络和物联网。它应用的资源显著缩小,可能无效地将数据转发到集中的近程终端,同时应用数百万 Prometheus 用户所依赖的稳固代码库。 Prometheus Agent 是一种专门的模式,它专一于三个局部:服务发现、抓取和近程写入。Prometheus Agent 内置于 Prometheus 中,其行为相似于一般的 Prometheus Server:它是一种基于拉取的机制,通过 HTTP 抓取指标并将数据复制到近程写入端点上。 Prometheus Agent 现已推出测试版。理解更多请参阅 Prometheus 博客。 详情见 Istio 1.12 公布日前,Istio 1.12 公布。这是 2021 年的最初一个版本。Istio 1.12.0 正式反对 Kubernetes 1.19 至 1.22 版本。 以下是该版本的一些亮点: WebAssembly API:Istio 1.12 增加了一流的 API 来配置 WebAssembly 插件 WasmPlugin,应用 WasmPlugin,能够将自定义插件部署到单个代理,甚至整个网格遥测 API:Istio 1.11 引入了一个全新的 Telemetry API,带来了一个标准化的 API,用于在 Istio 中配置跟踪、日志记录和指标。Istio 1.12 扩大了对 API 配置指标和拜访日志记录的反对反对 Helm:Istio 1.12 改良了 Helm 的装置反对Kubernetes Gateway API:Istio 曾经减少了对 Kubernetes Gateway API v1alpha2 版本的全面反对。该 API 旨在对立 Istio、Kubernetes Ingress 和其余代理应用的各种 API,以定义一个弱小的、可扩大的 API 来配置流量路由。默认重试策略已被增加到 Mesh Config 中···详情见 ...

November 23, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway限流实战

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览本文是《Spring Cloud Gateway实战》系列的第八篇,通过后面的学习,咱们对过滤器已理解得差不多,明天来补全过滤器的最初一个版块:限流(RequestRateLimiter )默认的限流器是基于redis实现的,限流算法是大家相熟的令牌桶(Token Bucket Algorithm),对于令牌捅的原理就不在此开展了,聪慧的您看一眼下图应该就懂了:装令牌的桶容量无限,例如最多20个,令牌进入桶的速度恒定(留神,这里是和漏桶算法的区别),例如每秒10个,底部每个申请能拿到令牌才会被解决: RequestRateLimiter根本套路应用RequestRateLimiter过滤器的步骤非常简单:筹备可用的redismaven或者gradle中增加依赖<font color="blue">org.springframework.boot:spring-boot-starter-data-redis-reactive</font>确定依照什么维度限流,例如依照申请中的username参数限流,这是通过编写KeyResolver接口的实现来实现的配置application.yml文件,增加过滤器以上就是应用RequestRateLimiter过滤器的套路了,简略么?接下来,咱们先编码再验证源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: <font color="blue">spring-cloud-tutorials</font>文件夹下有多个子工程,本篇的代码是<font color="red">gateway-requestratelimiter</font>,如下图红框所示: 筹备工作为了更好的演示Gateway的成果,在服务提供者<font color="blue">provider-hello</font>的代码(Hello.java)中新增一个web接口,能够承受一个入参: @GetMapping("/userinfo") public String userInfo(@RequestParam("username") String username) { return Constants.HELLO_PREFIX + " " + username + ", " + dateStr(); }前面的测试咱们就用上述接口;编码在父工程<font color="blue">spring-cloud-tutorials</font>之下新增子工程<font color="red">gateway-requestratelimiter</font>,其pom.xml内容如下,重点是<font color="blue">org.springframework.boot:spring-boot-starter-data-redis-reactive</font>:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-tutorials</artifactId> <groupId>com.bolingcavalry</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>gateway-requestratelimiter</artifactId> <dependencies> <dependency> <groupId>com.bolingcavalry</groupId> <artifactId>common</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis-reactive</artifactId> </dependency> </dependencies></project>配置文件application.yml,请留神RequestRateLimiter的几个参数,曾经用中文增加了具体的正文:server: #服务端口 port: 8081spring: application: name: circuitbreaker-gateway # redis配置 redis: host: 192.168.50.43 port: 6379 cloud: gateway: routes: - id: path_route uri: http://127.0.0.1:8082 predicates: - Path=/hello/** filters: - name: RequestRateLimiter args: # 令牌入桶的速度为每秒100个,相当于QPS redis-rate-limiter.replenishRate: 100 # 桶内能装200个令牌,相当于峰值,要留神的是:第一秒从桶内能去200个,然而第二秒只能取到100个了,因为入桶速度是每秒100个 redis-rate-limiter.burstCapacity: 200 # 每个申请须要的令牌数 redis-rate-limiter.requestedTokens: 1指定限流维度的代码CustomizeConfig.java,这里是依据申请参数<font color="blue">username</font>的值来限流的,假如实在申请中一半申请的username的等于<font color="red">Tom</font>,另一半的username的等于<font color="red">Jerry</font>,依照application.yml的配置,Tom的申请QPS为10,Jerry的QPS也是10:package com.bolingcavalry.gateway.config;import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import reactor.core.publisher.Mono;import java.util.Objects;@Configurationpublic class CustomizeConfig { @Bean KeyResolver userKeyResolver() { return exchange -> Mono.just(exchange.getRequest().getQueryParams().getFirst("username")); }}毫无养分的启动类RequestRateLimiterApplication.java:package com.bolingcavalry.gateway;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class RequestRateLimiterApplication { public static void main(String[] args) { SpringApplication.run(RequestRateLimiterApplication.class,args); }}代码写完了,接下来开始验证;验证(桶容量等于入桶速度)首先验证的是桶容量等于入桶速度时的成果,请批改<font color="blue">gateway-requestratelimiter</font>利用的application.yml中文件,使得redis-rate-limiter.replenishRate和redis-rate-limiter.burstCapacity的值都等于100,也就是说桶的大小等于100,每秒放入的令牌数也是100确保redis曾经启动,并且与application.yml中的配置放弃始终启动nacos(provider-hello依赖)启动服务提供者<font color="blue">provider-hello</font>启动<font color="blue">gateway-requestratelimiter</font>为了模仿web申请,我这里应用了<font color="blue">Apache Benchmark</font>,windows版本的下载地址:https://www.apachelounge.com/...上述文件下载解压后即可应用,在控制台进入<font color="blue">Apache24\bin</font>后执行以下命令,意思是向指定地址发送10000个申请,并发数为2:ab -n 10000 -c 2 http://localhost:8081/hello/userinfo?username=Tom控制台输入如下,可见不到八秒的工夫,只胜利了800个,证实限流合乎预期: ...

November 23, 2021 · 1 min · jiezi

关于云计算:Spring-Cloud-Gateway自定义过滤器实战观测断路器状态变化

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览本文是《Spring Cloud Gateway实战》系列的第七篇,后面的文章咱们学习了各种内置过滤器,还在《Spring Cloud Gateway的断路器(CircuitBreaker)性能》一文深入研究了断路器类型的过滤器(实践&实战&源码剖析皆有),置信聪慧的您肯定会有此疑难:内置的再多也无奈笼罩全副场景,定制才是终极武器所以明天咱们就来开发一个本人专属的过滤器,至于此过滤器的具体性能,其实前文已埋下伏笔,如下图: 简略来说,就是在一个有断路器的Spring Cloud Gateway利用中做个自定义过滤器,在解决每个申请时把断路器的状态打印进去,这样咱们就能明明白白清清楚楚晓得断路器的状态啥时候扭转,变成了啥样,也算补全了《Spring Cloud Gateway的断路器(CircuitBreaker)性能》的知识点过滤器分为全局和部分两种,这里咱们选用部分的,起因很简略:咱们的过滤器是为了察看断路器,所以不须要全局失效,只有在应用断路器的路由中失效就够了;套路提前通晓咱们先看看自定义部分过滤器的的根本套路:新建一个类(我这里名为StatePrinterGatewayFilter.java),实现GatewayFilter和Ordered接口,重点是filter办法,该过滤器的次要性能就在这外面实现新建一个类(我这里名为StatePrinterGatewayFilterFactory.java),实现AbstractGatewayFilterFactory办法,其apply办法的返回值就是上一步新建的StatePrinterGatewayFilter的实例,该办法的入参是在路由配置中过滤器节点上面的配置,这样就能够依据配置做一些非凡的解决,而后再创立实例作为返回值StatePrinterGatewayFilterFactory类实现<font color="blue">String name()</font>办法,该办法的返回值就是路由配置文件中过滤器的<font color="red">name</font><font color="blue">String name()</font>也能够不实现,这是因为定义该办法的接口中有默认实现了,如下图,这样您在路由配置文件中过滤器的<font color="red">name</font>只能是<font color="blue">StatePrinter</font>: 在配置文件中,增加您自定义的过滤器,该操作和之前的增加内置过滤器截然不同以上就是自定义过滤器的根本套路了,可见还是非常简单的,接下来的实战也是依照这个套路来的在编写自定义过滤器代码之前,还有个拦路虎等着咱们,也就是咱们过滤器的基本功能:如何获得断路器的状态如何获得断路器的状态前文的代码剖析中,咱们理解到断路器的外围性能集中在SpringCloudCircuitBreakerFilterFactory.apply办法中(没错,就是方才提到的apply办法),关上这个类,如下图,从绿框可见断路器性能来自名为<font color="blue">cb</font>的对象,而这个对象是在红框处由reactiveCircuitBreakerFactory创立的: 开展上图红框右侧的reactiveCircuitBreakerFactory.create办法持续看,最终跟踪到了ReactiveResilience4JCircuitBreakerFactory类,发现了一个极其重要的变量,就是下图红框中的circuitBreakerRegistry,它的外部有个ConcurrentHashMap(InMemoryRegistryStore的entryMap),这外面寄存了所有断路器实例: 此时您应该想到了,拿到断路器的要害就是拿到上图红框中的<font color ="blue">circuitBreakerRegistry</font>对象,不过怎么拿呢?首先它是公有类型的,其次尽管有个办法返回了该对象,然而此办法并非public的,如下图红框: 这个问题当然难不倒聪慧的您了,没错,用反射批改此办法的拜访权限,稍后的代码中咱们就这么干还剩最初一个问题:circuitBreakerRegistry是ReactiveResilience4JCircuitBreakerFactory的成员变量,这个ReactiveResilience4JCircuitBreakerFactory从哪获取?如果您配置过断路器,对这个ReactiveResilience4JCircuitBreakerFactory就很相熟了,设置该对像是配置断路器的基本操作,回顾一下前文的代码:@Configurationpublic class CustomizeCircuitBreakerConfig { @Bean public ReactiveResilience4JCircuitBreakerFactory defaultCustomizer() { CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() // .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED) // 滑动窗口的类型为工夫窗口 .slidingWindowSize(10) // 工夫窗口的大小为60秒 .minimumNumberOfCalls(5) // 在单位工夫窗口内起码须要5次调用能力开始进行统计计算 .failureRateThreshold(50) // 在单位工夫窗口内调用失败率达到50%后会启动断路器 .enableAutomaticTransitionFromOpenToHalfOpen() // 容许断路器主动由关上状态转换为半开状态 .permittedNumberOfCallsInHalfOpenState(5) // 在半开状态下容许进行失常调用的次数 .waitDurationInOpenState(Duration.ofSeconds(5)) // 断路器关上状态转换为半开状态须要期待60秒 .recordExceptions(Throwable.class) // 所有异样都当作失败来解决 .build(); ReactiveResilience4JCircuitBreakerFactory factory = new ReactiveResilience4JCircuitBreakerFactory(); factory.configureDefault(id -> new Resilience4JConfigBuilder(id) .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofMillis(200)).build()) .circuitBreakerConfig(circuitBreakerConfig).build()); return factory; }}既然ReactiveResilience4JCircuitBreakerFactory是spring的bean,那咱们在StatePrinterGatewayFilterFactory类中用Autowired注解就能随便应用了至此,实践剖析已全副实现,问题都曾经解决,开始编码源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: ...

November 22, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway实战之五内置filter

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览作为《Spring Cloud Gateway实战》系列的第五篇,是时候理解过滤器(filter)的作用了,本篇咱们一起来理解Spring Cloud Gateway内置好的过滤器,真是品种繁多功能强大 AddRequestHeaderAddRequestHeader过滤器顾名思义,就是在申请头部增加指定的内容带有predicate的残缺配置:server: #服务端口 port: 8081spring: application: name: hello-gateway cloud: gateway: routes: - id: path_route uri: http://127.0.0.1:8082 predicates: - Path=/hello/** filters: - AddRequestHeader=x-request-foo, bar-config带有predicate的残缺动静配置:[ { "id": "path_route_addr", "uri": "http://127.0.0.1:8082", "predicates": [ { "name": "Path", "args": { "pattern": "/hello/**" } } ], "filters": [ { "name": "AddRequestHeader", "args": { "name": "x-request-foo", "value": "bar-dynamic" } } ] }]实际效果: AddRequestParameterAddRequestParameter过滤器顾名思义,就是增加申请参数配置如下,服务提供方收到的申请中会多一个参数,名为foo,值为bar-config:server: #服务端口 port: 8081spring: application: name: hello-gateway cloud: gateway: routes: - id: path_route uri: http://127.0.0.1:8082 predicates: - Path=/hello/** filters: - AddRequestParameter=foo, bar-config带有predicate的残缺动静配置:[ { "id": "path_route_addr", "uri": "http://127.0.0.1:8082", "predicates": [ { "name": "Path", "args": { "pattern": "/hello/**" } } ], "filters": [ { "name": "AddRequestParameter", "args": { "name": "foo", "value": "bar-dynamic" } } ] }]实际效果: ...

November 21, 2021 · 5 min · jiezi

关于云计算:精选案例-YRCloudFile-引领自动驾驶存储技术新趋势

随着深度学习和人工智能畛域获得突破性停顿,以及无人配送车、无人出租车、无人巴士等智驾场景逐渐落地深刻,主动驾驶行业近年来获得了越来越多的关注和提高。然而,想要真正实现在路线上行驶,还须要解决泛滥技术问题。 感知零碎作为车辆门路布局的根据之一,须要通过“数据训练”夯实根底,以监督学习的形式,将数十 PB 的训练数据提供给算法,通过其生成具备普适感知能力的模型,帮忙主动驾驶车辆领有更好地感知理论路线、车辆地位、障碍物信息等方面的能力,达到实时感知在途危险,作出具体行为决策的目标。 随着越来越多的雷达、摄像头等传感器被部署在车辆里,各个环节的工作量一劳永逸,尤其是高性能主动驾驶汽车对数据的存储需要更是微小,一天生成的数据量可达到 3-8 TB 左右。因而,如何高效、稳固地保障主动驾驶过程中收集到的大量数据,并疾速造成主动驾驶的计算模型,成为了各大主动驾驶企业关注的首要问题。 本篇文章,焱融科技将基于国内某专一于研发和利用L4级主动驾驶技术,聚焦主动驾驶出行和主动驾驶同城货运两大场景的主动驾驶公司理论案例,分享 YRCloudFile 在主动驾驶训练场景下针对 IO 模型、容器化部署、性能晋升、智能分层方面的实践经验和启发,心愿能给相干从业者解决相似问题时提供一些参考和帮忙。 海量数据,毫厘必争此前,国内某 L4 级主动驾驶公司次要采取的是开源的存储解决方案,将 GPU 计算和存储以交融的模式进行部署,然而随着文件数量的回升,性能呈现显著降落,原有的存储形式也逐步开始影响训练的效率。因而,他们开始思考降级现有的存储解决方案。在降级过程中,该公司重点关注并解决以下问题: 在日益剧增的海量数据场景下,如何晋升设施性能,放慢训练进度;开源计划尽管具备解决海量文件的能力,然而随着数据量的增多,如何保障产品稳定性,防止难以保护的问题;如何解决存算交融架构下,无奈依据需要独自扩容的问题;在数据经验收集、荡涤、训练后,如何解决过程中所产生的冷数据的问题。YRCloudFile 如何应答?在理解该公司驾驶训练场景当前,焱融科技针对其主动驾驶训练数据集进行了一系列剖析,并总结出其训练数据具备以下特色: 浩瀚数据文件,训练数据集的文件数量在几亿至几十亿甚至上百亿的规模;小文件难治理,大部分文件的大小在几 KB 到几 MB 之间,一些特色文件的大小更是只有几十到几百 Byte;读多写少,在数据写入存储后,依据训练要求会进行屡次读取。针对上述特色,焱融科技从元数据处理能力、目录热点、多级智能缓存、针对性调优再到智能分层,提供了一系列高性能、高可用、高扩大的存储计划。 焱融 YRCloudFile 主动驾驶利用场景下的工作流程 01 元数据处理能力,解决海量数据文件的基石在面临海量文件时,因为 MDS 不能及时地响应读写申请,所以极易呈现应有性能无奈施展的状况。如果想要冲破存储的瓶颈,次要解决方案是晋升元数据的解决能力。为此,焱融科技抉择通过可程度扩大设计的 MDS 架构,实现 MDS 集群化。这次要思考到以下三方面: 第一,MDS 集群化有利于缓解 CPU,升高内存压力;第二,多个 MDS 有利于企业存储更多元的数据信息;第三,在实现元数据处理能力程度扩大的同时,晋升海量文件并发拜访的性能。目前,焱融 YRCloudFile 次要采纳动态子树 + 目录Hash两者联合的形式搭建可程度扩大设计的 MDS 架构,其次要蕴含三大因素: 将根目录固定在 MDS 节点;每一级目录会依据 Entry name 进行 hash,再次抉择 MDS,以此保障横向扩大的能力;在目录下文件的元数据进行寄存过程中,不再进行 hash,而是跟父目录在同一个节点,以此保障肯定水平的元数据本地性。这种架构形式有两种益处,首先是实现了元数据的散布存储,通过扩大元数据节点,即可反对百亿级别的文件数量;其次是在肯定水平上,保障了元数据的检索性能,缩小在多个节点上进行元数据检索和操作。 02 目录热点,解决热点引发问题的要害因为大数据集群的目录以及文件数据不可胜数,所以在主动驾驶车辆训练过程中,如果遇到多个计算节点须要同时读取这批文件时,其所在的 MDS 节点就会变成一个热点。整体构造如下图所示: 为了进一步晋升小文件筛选与治理流程,焱融科技采纳了减少虚构子目录的形式,尽管这种形式减少了一层目录查问的操作,然而其具备灵活性强的特点,能够将热点摊派到集群中所有元数据节点。同时,这种解决办法还能够解决另一个问题——单目录的文件数量问题,使单目录实现撑持 20 亿左右的文件数量,并且能够依据虚构子目录的数量灵便调整。整体构造如下图所示: 咱们能够尝试通过拜访/dir1/dir2/file1,来查看虚构子目录是如何实现的。在这里,咱们假如,dir2 是开启了 dirStripe 性能。次要拜访流程如下: ...

November 19, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway的断路器CircuitBreaker功能

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览一起深刻理解Spring Cloud Gateway的断路器(CircuitBreaker)性能:先聊聊实践再联合官网和大神的信息确定技术栈再入手开发,先实现再验证再趁热打铁,看看它的源码最初,回顾一下有哪些有余(下一篇文章解决这些有余)对于断路器(CircuitBreaker)下图来自resilience4j官网文档,介绍了什么是断路器: CLOSED状态时,申请失常放行申请失败率达到设定阈值时,变为OPEN状态,此时申请全副不放行OPEN状态继续设定工夫后,进入半开状态(HALE_OPEN),放过局部申请半开状态下,失败率低于设定阈值,就进入CLOSE状态,即全副放行半开状态下,失败率高于设定阈值,就进入OPEN状态,即全副不放行确认概念有个概念先确认一下,即<font color="blue">Spring Cloud断路器</font>与<font color="blue">Spring Cloud Gateway断路器性能</font>不是同一个概念,Spring Cloud Gateway断路器性能还波及过滤器,即在过滤器的规定下应用断路器: 本篇的重点是Spring Cloud Gateway如何配置和应用断路器(CircuitBreaker),因而不会探讨Resilience4J的细节,如果您想深刻理解Resilience4J,举荐材料是Spring Cloud Circuit Breaker对于Spring Cloud断路器先看Spring Cloud断路器,如下图,Hystrix、Sentinel这些都是相熟的概念: 对于Spring Cloud Gateway的断路器性能来看Spring Cloud Gateway的官网文档,如下图,有几个关键点稍后介绍: 上图走漏了几个要害信息:Spring Cloud Gateway内置了断路器filter,具体做法是应用Spring Cloud断路器的API,将gateway的路由逻辑封装到断路器中有多个断路器的库都能够用在Spring Cloud Gateway(遗憾的是没有列举是哪些)Resilience4J对Spring Cloud 来说是开箱即用的简略来说Spring Cloud Gateway的断路器性能是通过内置filter实现的,这个filter应用了Spring Cloud断路器;官网说多个断路器的库都能够用在Spring Cloud Gateway,然而并没有说具体是哪些,这就郁闷了,此时咱们去理解一位牛人的观点:Piotr Mińkowski,就是上面这本书的作者: Piotr Mińkowski的博客对Spring Cloud Gateway的断路器性能做了具体介绍,如下图,有几个重要信息稍后会提到: 上图能够get到三个要害信息:从2.2.1版本起,Spring Cloud Gateway集成了Resilience4J的断路器实现Netflix的Hystrix进入了维护阶段(能了解为行将退休吗?)Netflix的Hystrix仍然可用,然而已废除(deprecated),而且Spring Cloud未来的版本可能会不反对再关联到官网文档也以resilience4为例(如下图),胆大的我仿佛没有别的抉择了,就Resilience4J吧: 实践剖析就到此吧,接下来开始实战,具体的步骤如下:筹备工作:服务提供者新增一个web接口<font color="blue">/account/{id}</font>,依据入参的不同,该接口能够立刻返回或者延时500毫秒返回新增名为<font color="blue">circuitbreaker-gateway</font>的子工程,这是个带有断路器性能的Spring Cloud Gateway利用在<font color="blue">circuitbreaker-gateway</font>外面编写单元测试代码,用来验证断路器是否失常运行单元测试代码,察看断路器是否失效给断路器增加fallback并验证是否失效做一次简略的源码剖析,一为想深刻理解断路器的同学捋分明源码门路,二为测验本人以前理解的springboot常识在浏览源码时有么有帮忙源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: <font color="blue">spring-cloud-tutorials</font>文件夹下有多个子工程,本篇的代码是<font color="red">circuitbreaker-gateway</font>,如下图红框所示: 筹备工作咱们要筹备一个可控的web接口,通过参数管制它胜利或者失败,这样能力触发断路器本篇的实战中,服务提供者仍旧是<font color="blue">provider-hello</font>,为了满足本次实战的需要,咱们在Hello.java文件中减少一个web接口,对应的源码如下: @RequestMapping(value = "/account/{id}", method = RequestMethod.GET) public String account(@PathVariable("id") int id) throws InterruptedException { if(1==id) { Thread.sleep(500); } return Constants.ACCOUNT_PREFIX + dateStr(); }上述代码很简略:就是接管id参数,如果等于1就延时五百毫秒,不等于1就立刻返回如果把断路器设置为超过两百毫秒就算失败,那么通过管制id参数的值,咱们就能模仿申请胜利或者失败了,<font color="blue">这是验证断路器性能的要害</font>筹备实现,开始写代码实战在父工程<font color="blue">spring-cloud-tutorials</font>上面新增子工程<font color="blue">circuitbreaker-gateway</font>减少以下依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId></dependency>配置文件application.yml如下:server: #服务端口 port: 8081spring: application: name: circuitbreaker-gateway cloud: gateway: routes: - id: path_route uri: http://127.0.0.1:8082 predicates: - Path=/hello/** filters: - name: CircuitBreaker args: name: myCircuitBreaker启动类:package com.bolingcavalry.circuitbreakergateway;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class CircuitbreakerApplication { public static void main(String[] args) { SpringApplication.run(CircuitbreakerApplication.class,args); }}配置类如下,这是断路器相干的参数配置:package com.bolingcavalry.circuitbreakergateway.config;import io.github.resilience4j.circuitbreaker.CircuitBreakerConfig;import io.github.resilience4j.timelimiter.TimeLimiterConfig;import org.springframework.cloud.circuitbreaker.resilience4j.ReactiveResilience4JCircuitBreakerFactory;import org.springframework.cloud.circuitbreaker.resilience4j.Resilience4JConfigBuilder;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import java.time.Duration;@Configurationpublic class CustomizeCircuitBreakerConfig { @Bean public ReactiveResilience4JCircuitBreakerFactory defaultCustomizer() { CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom() // .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.TIME_BASED) // 滑动窗口的类型为工夫窗口 .slidingWindowSize(10) // 工夫窗口的大小为60秒 .minimumNumberOfCalls(5) // 在单位工夫窗口内起码须要5次调用能力开始进行统计计算 .failureRateThreshold(50) // 在单位工夫窗口内调用失败率达到50%后会启动断路器 .enableAutomaticTransitionFromOpenToHalfOpen() // 容许断路器主动由关上状态转换为半开状态 .permittedNumberOfCallsInHalfOpenState(5) // 在半开状态下容许进行失常调用的次数 .waitDurationInOpenState(Duration.ofSeconds(5)) // 断路器关上状态转换为半开状态须要期待60秒 .recordExceptions(Throwable.class) // 所有异样都当作失败来解决 .build(); ReactiveResilience4JCircuitBreakerFactory factory = new ReactiveResilience4JCircuitBreakerFactory(); factory.configureDefault(id -> new Resilience4JConfigBuilder(id) .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofMillis(200)).build()) .circuitBreakerConfig(circuitBreakerConfig).build()); return factory; }}上述代码有一次须要留神:<font color="blue">timeLimiterConfig</font>办法设置了超时工夫,服务提供者如果超过200毫秒没有响应,Spring Cloud Gateway就会向调用者返回失败开发实现了,接下来要思考的是如何验证单元测试类为了验证Spring Cloud Gateway的断路器性能,咱们能够用Junit单元测试来准确管制申请参数和申请次数,测试类如下,可见测试类会间断发一百次申请,在前五十次中,申请参数始终在0和1之间切换,参数等于1的时候,接口会有500毫秒延时,超过了Spring Cloud Gateway的200毫秒超时限度,这时候就会返回失败,等失败多了,就会触发断路器的断开:package com.bolingcavalry.circuitbreakergateway;import io.github.resilience4j.circuitbreaker.CircuitBreaker;import org.junit.jupiter.api.RepeatedTest;import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.http.MediaType;import org.springframework.test.context.junit.jupiter.SpringExtension;import org.springframework.test.web.reactive.server.WebTestClient;@SpringBootTest@ExtendWith(SpringExtension.class)@AutoConfigureWebTestClientpublic class CircuitbreakerTest { // 测试的总次数 private static int i=0; @Autowired private WebTestClient webClient; @Test @RepeatedTest(100) void testHelloPredicates() throws InterruptedException { // 低于50次时,gen在0和1之间切换,也就是一次失常一次超时, // 超过50次时,gen固定为0,此时每个申请都不会超时 int gen = (i<50) ? (i % 2) : 0; // 次数加一 i++; final String tag = "[" + i + "]"; // 发动web申请 webClient.get() .uri("/hello/account/" + gen) .accept(MediaType.APPLICATION_JSON) .exchange() .expectBody(String.class).consumeWith(result -> System.out.println(tag + result.getRawStatusCode() + " - " + result.getResponseBody())); Thread.sleep(1000); }}验证启动nacos(服务提供者依赖的)启动子工程<font color="blue">provider-hello</font>运行咱们方才开发的单元测试类,控制台输出的内容截取局部如下,稍后会有剖析:[2]504 - {"timestamp":"2021-08-28T02:55:42.920+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"594efed1"}[3]200 - Account2021-08-28 10:55:43[4]504 - {"timestamp":"2021-08-28T02:55:45.177+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"427720b"}[5]200 - Account2021-08-28 10:55:46[6]503 - {"timestamp":"2021-08-28T02:55:47.227+00:00","path":"/hello/account/1","status":503,"error":"Service Unavailable","message":"","requestId":"6595d7f4"}[7]503 - {"timestamp":"2021-08-28T02:55:48.250+00:00","path":"/hello/account/0","status":503,"error":"Service Unavailable","message":"","requestId":"169ae1c"}[8]503 - {"timestamp":"2021-08-28T02:55:49.259+00:00","path":"/hello/account/1","status":503,"error":"Service Unavailable","message":"","requestId":"53b695a1"}[9]503 - {"timestamp":"2021-08-28T02:55:50.269+00:00","path":"/hello/account/0","status":503,"error":"Service Unavailable","message":"","requestId":"4a072f52"}[10]504 - {"timestamp":"2021-08-28T02:55:51.499+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"4bdd96c4"}[11]200 - Account2021-08-28 10:55:52[12]504 - {"timestamp":"2021-08-28T02:55:53.745+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"4e0e7eab"}[13]200 - Account2021-08-28 10:55:54[14]504 - {"timestamp":"2021-08-28T02:55:56.013+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"27685405"}[15]503 - {"timestamp":"2021-08-28T02:55:57.035+00:00","path":"/hello/account/0","status":503,"error":"Service Unavailable","message":"","requestId":"3e40c5db"}[16]503 - {"timestamp":"2021-08-28T02:55:58.053+00:00","path":"/hello/account/1","status":503,"error":"Service Unavailable","message":"","requestId":"2bf2698b"}[17]503 - {"timestamp":"2021-08-28T02:55:59.075+00:00","path":"/hello/account/0","status":503,"error":"Service Unavailable","message":"","requestId":"38cb1840"}[18]503 - {"timestamp":"2021-08-28T02:56:00.091+00:00","path":"/hello/account/1","status":503,"error":"Service Unavailable","message":"","requestId":"21586fa"}[19]200 - Account2021-08-28 10:56:01[20]504 - {"timestamp":"2021-08-28T02:56:02.325+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"4014d6d4"}[21]200 - Account2021-08-28 10:56:03[22]504 - {"timestamp":"2021-08-28T02:56:04.557+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"173a3b9d"}[23]200 - Account2021-08-28 10:56:05[24]504 - {"timestamp":"2021-08-28T02:56:06.811+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"aa8761f"}[25]200 - Account2021-08-28 10:56:07[26]504 - {"timestamp":"2021-08-28T02:56:09.057+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"769bfefc"}[27]200 - Account2021-08-28 10:56:10[28]504 - {"timestamp":"2021-08-28T02:56:11.314+00:00","path":"/hello/account/1","status":504,"error":"Gateway Timeout","message":"","requestId":"2fbcb6c0"}[29]503 - {"timestamp":"2021-08-28T02:56:12.332+00:00","path":"/hello/account/0","status":503,"error":"Service Unavailable","message":"","requestId":"58e4e70f"}[30]503 - {"timestamp":"2021-08-28T02:56:13.342+00:00","path":"/hello/account/1","status":503,"error":"Service Unavailable","message":"","requestId":"367651c5"}剖析上述输入的返回码:504是超时返回的谬误,200是服务提供者的失常返回504和200两种返回码都示意申请达到了服务提供者,所以此时断路器是敞开状态屡次504谬误后,达到了配置的门限,触发断路器开启间断呈现的503就是断路器开启后的返回码,此时申请是无奈达到服务提供者的间断的503之后,504和200再次交替呈现,证实此时进入半开状态,而后504再次达到门限触发断路器从半开转为开启,五十次之后,因为不在发送超时申请,断路器进入敞开状态fallback通过上述测试可见,Spring Cloud Gateway通过返回码来告知调用者错误信息,这种形式不够敌对,咱们能够自定义fallback,在返回谬误时由它来构建返回信息再开发一个web接口,没错,就是在<font color="blue">circuitbreaker-gateway</font>工程中增加一个web接口:package com.bolingcavalry.circuitbreakergateway.controller;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.text.SimpleDateFormat;import java.util.Date;@RestControllerpublic class Fallback { private String dateStr(){ return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); } /** * 返回字符串类型 * @return */ @GetMapping("/myfallback") public String helloStr() { return "myfallback, " + dateStr(); }}application.yml配置如下,可见是给filter减少了<font color="blue">fallbackUri</font>属性:server: #服务端口 port: 8081spring: application: name: circuitbreaker-gateway cloud: gateway: routes: - id: path_route uri: http://127.0.0.1:8082 predicates: - Path=/hello/** filters: - name: CircuitBreaker args: name: myCircuitBreaker fallbackUri: forward:/myfallback再运行单元测试,可见返回码全副是200,原来的谬误当初全副变成了方才新增的接口的返回内容:[2]200 - myfallback, 2021-08-28 11:15:02[3]200 - Account2021-08-28 11:15:03[4]200 - myfallback, 2021-08-28 11:15:04[5]200 - Account2021-08-28 11:15:05[6]200 - myfallback, 2021-08-28 11:15:06[7]200 - myfallback, 2021-08-28 11:15:08[8]200 - myfallback, 2021-08-28 11:15:09[9]200 - myfallback, 2021-08-28 11:15:10[10]200 - myfallback, 2021-08-28 11:15:11[11]200 - Account2021-08-28 11:15:12[12]200 - myfallback, 2021-08-28 11:15:13[13]200 - Account2021-08-28 11:15:14[14]200 - myfallback, 2021-08-28 11:15:15至此,咱们已实现了Spring Cloud Gateway的断路器性能的开发和测试,如果聪慧好学的您并不满足这寥寥几行配置和代码,想要深刻理解断路器的外部,那么请您接往下看,咱们聊聊它的源码;源码剖析RouteDefinitionRouteLocator的构造方法(bean注入)中有如下代码,将name和实例绑定:gatewayFilterFactories.forEach(factory -> this.gatewayFilterFactories.put(factory.name(), factory));而后会在loadGatewayFilters办法中应用这个map,找到下面put的bean;最终的成果:路由配置中指定了name等于<font color="blue">CircuitBreaker</font>,即可对应SpringCloudCircuitBreakerFilterFactory类型的bean,因为它的name办法返回了"CircuitBreaker",如下图: ...

November 19, 2021 · 3 min · jiezi

关于云计算:KubeSphere-320-发布带来面向-AI-场景的-GPU-调度与更灵活的网关

现如今最热门的服务器端技术是什么?答案大略就是云原生!KubeSphere 作为一个以 Kubernetes 为内核的云原生分布式操作系统,也是这热火朝天的云原生热潮中的一份子。KubeSphere 继续秉承 100% 开源的承诺,借助于开源社区的力量,迅速走向寰球。 2021 年 11 月 3 日,KubeSphere 开源社区冲动地向大家发表,KubeSphere 3.2.0 正式公布! 6 个月前,KubeSphere 3.1.0 带着 “边缘节点治理”、“计量计费” 等性能将 Kubernetes 从云端扩大至边缘,帮忙企业更加清晰地度量基础设施与利用的经营老本。3 个月前,KubeSphere 又公布了 v3.1.1,在部署 KubeSphere 时能够指定 Kubernetes 集群中已有的 Prometheus,更进一步欠缺交互设计晋升了用户体验。 明天,KubeSphere 3.2.0 带来了更多令人期待的性能,新增了对 “GPU 资源调度治理” 与 GPU 应用监控的反对,进一步加强了在云原生 AI 场景的应用体验。同时还加强了 “多集群治理、多租户治理、可观测性、DevOps、利用商店、微服务治理” 等个性,更进一步欠缺交互设计,并全面晋升了用户体验。 并且,v3.2.0 失去了来自青云科技之外的更多企业与用户的奉献和参加,无论是性能开发、功能测试、缺点报告、需要倡议、企业最佳实际,还是提供 Bug 修复、国际化翻译、文档奉献,这些来自开源社区的奉献都为 v3.2.0 的公布和推广提供了极大的帮忙,咱们将在文末予以特地致谢! 解读 KubeSphere 3.2.0 重大更新GPU 调度与配额治理以后随着人工智能机器学习等畛域技术的疾速倒退,市场上涌现了越来越多 AI 公司对服务器集群中 GPU 资源调度治理的需要,其中监控 GPU 应用状况成以及 GPU 资源配额治理等需要在社区的呼声很高,在 KubeSphere 中文论坛收到了很多 GPU 相干的需要[1],KubeSphere 自身是始终反对 GPU 的,当初在 v3.2.0 中会将 GPU 的治理变得更易用。 ...

November 18, 2021 · 2 min · jiezi

关于云计算:云原生时代需要什么样的存储系统

存储系统作为撑持业务零碎的基础设施软件的外围之一,始终处于一直变动和变革中。从晚期的物理机时代、到虚拟化技术的成熟遍及,到当初大规模部署的云环境都有存储系统在背地默默撑持。近年来,以容器、微服务、DevOps 为代表的云原生技术,受到了市场的宽泛关注,其可能更好地反对企业的云原生利用、自动化治理和业务翻新,满足用户在任何工夫、任何地点对任何利用的响应需要。相应地,存储系统作为撑持数据长久化、承载业务稳固运行的外围组件,同样面临粗浅改革。 什么是云原生存储?要了解云原生存储,咱们首先要理解云原生技术的概念,CNCF 对云原生定义如下: 云原生技术有利于各组织在私有云、公有云和混合云等新型动静环境中,构建和运行可弹性扩大的利用。云原生的代表技术包含容器、服务网格、微服务、不可变基础设施和申明式 API。 这些技术可能构建容错性好、易于治理和便于察看的松耦合零碎。联合牢靠的自动化伎俩,云原生技术使工程师可能轻松地对系统作出频繁和可预测的重大变更。 简言之:云原生利用和传统利用并没有一个规范的划分界线,其形容的是一种技术偏向,即越合乎以下特色的利用越云原生: 利用容器化服务网格化申明式 API运行可弹性扩大自动化的 DevOps故障容忍和自愈平台无关,可移植的云原生存储的概念来源于云原生利用,顾名思义:一个利用为了满足云原生个性的要求,其对存储所要求的个性是云原生存储的个性,而满足这些个性的存储计划,能够称其为云原生的存储。 为什么须要云原生存储?云原生存储仍然是容器化面临的次要挑战之一依据 CNCF 的调研报告:在应用/部署容器过程中遇到的挑战中,仍然有高达 29% 的人抉择存储。存储简直和平安问题一样,成为利用容器化过程中的次要难点。 目前,云原生存储遇到的挑战体现在以下几个方面: 易用性:存储服务部署、运维简单,云原生化水平低,短少与支流编排平台整合。 高性能:大量利用 IO 拜访,IOPS 需要高,低时延,性能成为利用运行效率瓶颈。 高可用:云原生存储曾经利用到生产环境,须要高牢靠/高可用,不能呈现单点故障。 敏捷性:PV 疾速创立、销毁、平滑的扩大/膨胀,PV 随 Pod 迁徙而疾速迁徙等。 有状态利用当初已成为容器存储的主体随着 Kubernetes 的利用水平增强,并且随同着 IoT、5G、AI 等技术的成熟,越来越多的有状态利用被搬上容器平台。依据 CNCF 的调研报告,曾经有超过一半的用户曾经在容器中运行有状态利用,并且有 23% 的用户正在评估或打算在容器中部署有状态利用。 通常,有状态利用对存储的有如下三点需要: ① Volume 领有独立与pod的生命周期。 ② Volume 中的数据是能够长久保留的。 ③每个 pod 与其应用的存储关系是稳固的,不会因降级等因素而发生变化。 当然不同类型的利用具备不同的 IO 特点,对于存储有不同需要: 数据库 —— 交易型数据库(OLTP) MySQL 和 PostgreSQL 通常承载的都是外围交易类业务,对存储系统的数据可靠性、性能要求极高。AI/ML —— ML 应用程序, TensorFlow 应用分布式计算解决不同过程中的图形局部,每个过程都能够在独自的容器中运行。大数据分析 —— 剖析型数据库(OLAP),如 Spark,存储系统的可靠性以及提早的要求都不像 OLTP 数据库那么高,须要大容量存储。HPC/渲染 —— 如图形绘制和视频转码工具,都能够应用应用程序实例集群化来解决大型批处理作业。Devops —— Jenkins/Gitlab,通常 Jenkins 基于主从模型构建分布式集群,即会应用一个文件目录来保护其状态。因而,须要在不同主机上的容器之间共享该目录。多云环境带来的云原生挑战现在,越来越多的 IT 组织正在构建混合云和多云环境以撑持其业务运行。从容器的角度来看,咱们晓得在多个云平台上运行应用程序曾经成为了容器技术应用的次要驱动力,带来了远超以往的好处,如开发者效率的晋升以及反对微服务等。然而,多云以对立的形式治理、爱护和部署存储可能具备挑战性: ...

November 17, 2021 · 2 min · jiezi

关于云计算:OpenELB-项目进入-CNCF-Sandbox

11 月 10 日,云原生计算基金会 (CNCF) 发表由青云科技 KubeSphere 团队开源的负载均衡器插件 OpenELB 正式进入 CNCF 沙箱(Sandbox)托管。 OpenELB 我的项目在此前命名为 PorterLB,是为物理机(Bare-metal)、边缘(Edge)和私有化环境设计的负载均衡器插件,可作为 Kubernetes、K3s、KubeSphere 的 LB 插件对集群外裸露 “LoadBalancer” 类型的服务,外围性能包含: 基于 BGP 与 Layer 2 模式的负载平衡基于路由器 ECMP 的负载平衡IP 地址池治理治理应用 CRD 进行 BGP 配置 为什么发动 OpenELB咱们起初在 KubeSphere 社区做了一项针对宽广社区用户装置部署 Kubernetes 所应用环境的调研,从 5000 多份 KubeSphere 用户调研数据中发现有近 36% 的用户抉择在物理机装置部署 Kubernetes,占比高居第一位。并且还有大量客户是在离线的数据中心或边缘设施装置和应用 Kubernetes 或 K3s,导致用户在公有环境对外裸露 LoadBalancer 服务比拟艰难。 咱们晓得,在 Kubernetes 集群中能够应用 “LoadBalancer” 类型的服务将后端工作负载裸露在内部。云厂商通常为 Kubernetes 提供云上的 LB 插件,但这须要将集群部署在特定 IaaS 平台上。然而,许多企业用户通常都将 Kubernetes 集群部署在裸机上,尤其是用于生产环境时。而且对于私有化环境特地是物理机或边缘集群,Kubernetes 并不提供 LoadBalancer 计划。 ...

November 17, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway实战之四内置predicate小结

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览本文是《Spring Cloud Gateway实战》系列的第四篇,咱们将已有的断言(predicate)的类型做个小结,明天的内容中,除了官网举荐的简化版配置,还给出了动静路由时该断言的JSON格局配置;After<font color="blue">After</font>示意路由在指定工夫之后才失效配置文件,留神工夫字符串的格局,<font color="blue">+08:00</font>示意东八区:spring: cloud: gateway: routes: - id: after_route uri: http://127.0.0.1:8082 predicates: - After=2021-08-16T07:36:00.000+08:00[Asia/Shanghai]动静路由的JSON格局,留神<font color="blue">args</font>参数要用<font color="red">datetime</font>:[ { "id": "after_route", "uri": "http://127.0.0.1:8082", "predicates":[ { "name": "After", "args": { "datetime": "2021-08-16T07:36:00.000+08:00[Asia/Shanghai]" } } ] }]Before<font color="blue">Before</font>示意路由在指定工夫之前才失效配置文件:spring: cloud: gateway: routes: - id: before_route uri: http://127.0.0.1:8082 predicates: - Before=2021-08-16T07:36:00.000+08:00[Asia/Shanghai]动静路由的JSON格局,留神<font color="blue">args</font>参数要用<font color="red">datetime</font>:[ { "id": "before_route", "uri": "http://127.0.0.1:8082", "predicates":[ { "name": "Before", "args": { "datetime": "2021-08-16T07:36:00.000+08:00[Asia/Shanghai]" } } ] }]Between<font color="blue">Between</font>示意路由在指定时间段之内才失效,既然是时间段就是两个参数,留神它们的写法配置文件:spring: application: name: hello-gateway cloud: gateway: routes: - id: between_route uri: http://127.0.0.1:8082 predicates: - Between=2021-08-16T07:36:00.000+08:00[Asia/Shanghai], 2021-08-16T08:15:00.000+08:00[Asia/Shanghai]动静路由的JSON格局,留神<font color="blue">args</font>参数,起始工夫是<font color="red">datetime1</font>,完结工夫是<font color="red">datetime2</font>:[ { "id": "path_route_addr", "uri": "http://127.0.0.1:8082", "predicates":[ { "name": "Between", "args": { "datetime1": "2021-08-16T07:36:00.000+08:00[Asia/Shanghai]", "datetime2": "2021-08-16T08:18:00.000+08:00[Asia/Shanghai]" } } ] }]Cookie<font color="blue">Cookie</font>示意cookie存在指定名称,并且对应的值合乎指定正则表达式,才算匹配胜利配置文件: ...

November 17, 2021 · 2 min · jiezi

关于云计算:云原生爱好者周刊Dockershim-即将被正式废弃

云原生一周动静要闻: Dockershim 行将被废除Dapr v1.5 公布正告:攻击者利用 SonarQube 破绽盗取源码OpenELB 进入 CNCF Sandbox开源我的项目举荐文章举荐云原生动静Dockershim 行将被正式废除日前,Kubernetes 发表将从 Kubernetes 代码库中删除 dockershim,取而代之的是反对间接应用为 Kubernetes 创立的容器运行时接口的运行时。 目前的打算是 dockershim 将在 Kubernetes 1.24 版本中删除,该版本定于明年 4 月左右公布。对于那些开发或运行 alpha 和 beta 版本的人,dockershim 将在 12 月 1.24 版本开发周期开始时删除。 Kubernetes 正在通过考察收集意见,以更好地理解用户应答废除 dockershim 的筹备状况。此考察将理解用户以后应用的 Kubernetes 版本,以及用户预计何时会采纳 Kubernetes 1.24。无关 dockershim 废除筹备状况的所有汇总信息将会公布。 Kubernetes 是一个成熟的我的项目。这种弃用是致力解脱永久性测试版性能并提供更多稳定性和兼容性保障的又一步。废除 dockershim,用户将取得更多的灵活性和容器运行时性能的抉择,以及应用程序对特定底层技术的更少依赖。请花工夫查看 dockershim 迁徙文档,并征询 Kubernetes 托管供应商(如果有的话)有哪些容器运行时可应用。 详情见 Dapr v1.5 公布日前,Dapr v1.5 公布,这是自 Dapr v1.0 公布以来的第五次小版本更新。 该版本有以下亮点: 组件降级为 Stable 状态用于状态治理的查问 API配置 API 构建块Go SDK 中的 ActorActors 可靠性改良反对 ARM64 MAC(预览版)新增 components详情见 ...

November 16, 2021 · 2 min · jiezi

关于云计算:浅谈-RDMA-与无损网络

为什么须要 RDMA当今是云计算、大数据的时代,企业业务持续增长须要存储系统的 IO 性能也持续增长。传统的 TCP/IP 技术在数据包处理过程中,要通过操作系统及其他软件层,数据在零碎内存、处理器缓存和网络控制器缓存之间来回进行复制,给服务器的 CPU 和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的重大"不匹配性",更加剧了网络提早效应。为了升高数据中心外部网络提早,进步带宽,RDMA 技术应运而生。RDMA 容许用户态的应用程序间接读取和写入近程内存,防止了数据拷贝和上下文切换;并将网络协议栈从软件实现 offload 到网卡硬件,实现了高吞吐量、超低时延和低 CPU 开销的成果。 以后 RDMA 在以太网上的传输协定是 RoCEv2,RoCEv2 是基于无连贯协定的 UDP 协定,相比面向连贯的 TCP 协定,UDP 协定更加疾速、占用 CPU 资源更少,但其传输是不牢靠的,一旦呈现丢包会导致 RDMA 的传输效率升高,这是由 RDMA 的 Go-back-N 重传机制决定的。RDMA 接管方网卡发现丢包时,会抛弃后续接管到的数据包,发送方须要重发之后的所有数据包,这导致性能大幅降落。所以要想 RDMA 施展出其性能,须要为其搭建一套不丢包的无损网络环境。 差异化流量分类构建无损网络,首先须要对网络流量进行分类,而后针对不同类别流量采纳具体流控策略,实现准确管制,防止相互影响。流量分类有两种不同的分类办法:传输层(Layer 2)和网络层(Layer 3)。Layer2 通过 vlan header(802.1q)里的 PCP(802.1p)位进行分类,对应 CoS(Class of Service);Layer3 通过 IP header 里的 DSCP 进行分类,对应 DSCP。 Layer 2 流量分类Layer2 层流量分类根据的是 vlan tag 中的 3 位 PCP bit,总共有 8 个类别。3 个 bit 是 Header 中第 3 个 byte 的前三位,如下图。在应用 Layer 2 流量分类时,主机端收回的包须要带有 vlan tag。因而要对网卡配置 vlan,并且设置优先级。因为 L2 层 PFC 须要依附 vlan,因而包通过三层交换机时可能存在 tag 生效等问题。 ...

November 16, 2021 · 2 min · jiezi

关于云计算:警告攻击者利用-SnoarQube-漏洞盗取国内多个机构的大量源码

2021 年 10 月 22 日,国外出名媒体 cybernews 发文称,有未知攻击者攻打并浸透了博世 iSite 的服务器,并盗取了这家制造业巨头的 5G 物联网连贯平台的源代码。 攻击者宣称通过利用 SonarQube 的零日破绽获取了这些源代码,并提供了具体的入侵过程截图和盗取到的源代码文件截图。 遭殃的不止是这一家公司,攻击者 25 号宣称梅赛德斯-飞驰中国部门的局部源代码也被他们窃取了。 26 号,攻击者又拿到了中国公安系统的医疗平台、保险和人事的 SRC 源码。 目前攻打是否还在持续,咱们无奈得悉,目前已知的就是攻击者利用了 SonarQube 的零日破绽进行入侵,而且攻打的都是我国的机构和企业。 目前该破绽 (CNVD-2021-84502) 已被收录进了国家信息安全破绽共享平台 (CNVD),并公开了破绽细节。 破绽详情SonarQube 是一种支流的代码品质继续检测工具,能够集成不同的测试工具、代码剖析工具以及继续集成工具。通过不同的插件对剖析后果进行再加工解决,通过量化的形式度量代码品质的变动,并将后果展示到 SnoarQube 可视化界面。 SonarQube 零碎存在未受权拜访破绽,短少对 API 接口拜访的鉴权管制。该破绽是因为 SnoarQube 系统配置不当,导致平台我的项目裸露在公网当中,攻击者利用该破绽在未受权的状况下拜访公网 API 接口,应用零碎默认配置口令进入平台,下载源代码文件,获取零碎敏感信息。 CNVD 将该破绽的危害级别评为“高危”! 由此可见,大家的利用和服务最好不要裸露到公网,假如某个软件有破绽,你就会成为攻击者的靶子。 破绽影响范畴该破绽影响的 SnoarQube 版本包含: SnoarQube 开源版 <= 9.1.0.47736SonarQube 稳定版 <= 8.9.3解决倡议KubeSphere 用户请留神,KubeSphere 曾经将 SonarQube 集成到了流水线中,您能够间接在 Console 界面上查看常见的代码问题。 咱们强烈建议您不要将 KubeSphere 的 Console 界面和 SonarQube 的控制台裸露到公网中,免得给了攻击者可乘之机。 ...

November 16, 2021 · 1 min · jiezi

关于云计算:是云舟呀|一招教你通过焱融云舟ELK-让日志帮你做决策

随着业务的快速增长,每天零碎产生的 log 会一直增长,这其中蕴含着大量有价值信息。咱们通过焱融云舟实现了日志备份的性能。然而,从理论业务的需要角度来看,日志备份只是最根本的性能,如何让日志施展更大价值,为开发者疾速做出决策,才是咱们最终想要的后果。 工欲善其事,必先利其器。如果咱们能领有一个残缺的软件结构,那么在肯定水平上就能够晋升工作效率。本篇文章,咱们将和大家分享,如何基于焱融云舟所提供的存储能力,通过 ELK 实时日志分享平台搭建整体软件结构。 01 工具分享焱融云舟 SaaS 数据服务平台焱融云舟SaaS 数据服务是焱融科技面向海量非结构化数据利用场景而打造的高性能分布式文件存储 NAS,作为一款寰球云文件系统,其具备灵活性、共享性和易用性的特点,在反对多个支流云的根底上,无缝对接云中的企业级部署,满足不同利用场景下的多样化存储需要。 ELKELK是 Elasticsearch, Logstash, Kibana 的缩写,它是一个开源的实时日志剖析平台,次要由 Elasticsearch, Logstash 和 Kiabana 三局部组成。ELK 是目前典型的做日志剖析的开源组件组合。其中: Elasticsearch (ES)是一个分布式的 Restful 格调的搜寻和数据分析引擎,具备可扩展性、弹性、灵活性、高速、可查问、可剖析等特点;Logstash 次要用于收集服务器日志,它是一个开源数据收集引擎,具备实时管道性能;Kibana 能够使海量数据通俗易懂,无需额定的基础设施。在 ELK 中,三大组件的大略工作流程如下图所示,由 Logstash 从各个服务中采集日志并寄存至 Elasticsearch 中,而后再由 Kiabana 从 Elasticsearch 中查问日志并展现给终端用户。 ELK 工作流程图 通过上述介绍,置信大家对咱们本次教程中应用的工具都有了肯定理解,当初让咱们步入正题。 02 环境筹备首先,咱们须要对虚构做必要的筹备,例如 SeLinux 批改,放开 root 登录,以及装置 nfs 工具等。 03 装置ElasticSearch因为 ELK 的安装包,并不在默认的操作系统 YUM 源中,所以咱们须要增加 elaistic 本人的官网源。 在进行 yum install elasticsearch 之后, 咱们能够利用焱融云舟的挂载目录作为 elasticsearch 存储数据的目录,进行配置文件以及目录权限的批改,具体请见下图: ...

November 16, 2021 · 1 min · jiezi

关于云计算:云端干货|降本必备弹性伸缩的基本原理

弹性伸缩(Auto Scaling)是云商提供的、依据本身业务需要主动调整计算能力(即实例数量)的服务。应用该服务时,实例数量可依据工作负载主动进行伸缩,从而在业务需要增长时提供资源反对、在业务需要下降时降低成本。那么,弹性伸缩的基本原理是怎么的?咱们如何判断弹性伸缩的成果、进行优化?来一探到底—— 一.什么是弹性伸缩弹性——服务器对业务量的变动应具备肯定的容忍度; 伸缩——针对业务量的变动,零碎须要在线对资源进行调整。伸缩实现当前,零碎对外服务的能力应复原到失常程度。 咱们应用弹性伸缩须要达到2大目标:1.服务牢靠;2.资源老本节俭 首先,理解一下弹性伸缩服务的部署架构: 申请从网关服务(即LoadBalance)进来后,达到利用(App)。利用所须要的云主机,往往交给伸缩组来治理。伸缩组会依据主机资源的应用状况,主动购买新机器、回收旧机器,从而让整个集群的资源使用率放弃在预期的程度。 那么,伸缩组如何实现这一系列“炫酷”操作? “伸缩”次要集中在两个方向: 程度方向,通过加节点和减节点,在节点数下面进行调整来达到伸缩成果。垂直方向:通过加配置和减配置,来达到伸缩成果。 除此以外,如果想做好弹性,咱们必须对资源的应用状况进行监控。如流程图所示,指标监控服务,负责从APP和集群进行实时的数据采集,采集到的后果会交给autoscaler(伸缩调度器)。Autoscaler会依据预约的策略进行判断(例如,基于CPU或者基于QPS),可能会设定一个伸缩的阈值,如果判断触发了扩缩容,Autoscaler会分割节点组购买机器或者回收机器。伸缩实现的节点,将会和网关进行同步,这样就实现了一个根本的弹性伸缩Web服务。 二.什么才是优良的弹性伸缩计划? 弹性伸缩流程的每一个步骤,都以不同形式影响着弹性伸缩成果: 首先,监测服务作为弹性伸缩的终点,其数据有效性、实时性,将影响伸缩的准确性和灵敏性;而监测指标的丰盛水平,则决定了策略的可操作范畴; 其次,Autoscaler的算法和策略间接决定了伸缩策略的成果。 再次,伸缩的力度和伸缩的速度会间接的影响到伸缩的效率、资源的使用率。 最初,利用作为服务自身的载体,其拉取速度、启动速度以及启动的成功率,间接决定了最终的后果。 综上,一个优良的弹性伸缩计划,应该尽量满足三个因素。 第一,牢靠,它必须具备肯定的突增压力的抵抗能力第二,高效,它可能疾速的调整到预期资源的使用量。第三,经济,它必须在正当范畴内尽量的去进步资源的使用率,缩小节约。 【弹性伸缩降本伴侣:SpotMax云资源优化服务】 对于用云企业来说,随着业务增长,用云老本将迅速减少,成为制约企业疾速倒退的“绊脚石”。SpotMax作为一款云资源优化服务,其中的MaxGroup工具可能充分发挥弹性伸缩的特点,帮忙用云企业解决Spot实例被回收、可用资源有余的问题,从而在保护服务稳固的同时,升高用云老本。 以AWS为例,通常状况下,AWS的弹性伸缩(Auto Scaling)服务在Spot实例有余时,用户无奈持续申请实例资源,导致资源长时间短缺,用户面临大流量冲击危险。而MaxGroup在发现autoscaling无奈申请资源时,能够及时为用户补充on-demand实例,使服务所须要的资源充盈,而当能持续申请到Spot资源时,MaxGroup会被动将on-demand实例替换为Spot,在服务稳固的前提下,保障老本最低的指标。长期实践证明,SpotMax均匀可帮忙企业节俭60%的用云老本,最多时可降本90%。 在云端,当资源能够按需伸缩,限度你设想的只有老本。SpotMax解决方案可能助力企业实现极致用云老本节俭,开释业务增长后劲。想要理解更多?戳“下方链接”,一键get你的云老本节俭秘籍! 理解SpotMax理解MaxGroup

November 16, 2021 · 1 min · jiezi

关于云计算:浪潮云说直播间第十一期今晚开播

主题:《工业级SQL优化器技术蓝图》主讲人:西电-浪潮数据库翻新实验室,浪潮迷信研究院分布式数据库研究所,赵衎衎博士

November 16, 2021 · 1 min · jiezi

关于云计算:科技热点周刊|马斯克套现-440-亿苹果推出数字身份证Meta-与微软合作华为捐赠欧拉

IT 科技新闻马斯克一周套现 440 亿,马斯克回怼美国参议员,暗示卖出更多特斯拉股票美国证券交易委员会(SEC)的最新文件显示,11 月 12 日,马斯克再次售出 120 万股特斯拉股票,套现逾 12 亿美元。截至目前,马斯克自 11 月 8 日以来累计发售约 636 万股特斯拉股票,总价值近 69 亿美元(折合人民币约 440 亿元)。特斯拉一周累跌逾 15%,为 2020 年 3 月以来的最大单周跌幅,市值蒸发了1895 亿美元(约合 12088 亿元)。此前,马斯克承诺发售其持有特斯拉股票的 10%,目前已发售的股票占其承诺的37%,还需发售约 1000 万股。 对接连发售股票,特斯拉 CEO 马斯克 11 月 13 日示意,他本周发售了价值近 70 亿美元的特斯拉股票的后果“更靠近于税收最大化,而不是最小化”。 11 月 14 日,美国参议员桑德斯又在社交平台上示意:“ 咱们必须要求那些最富裕的人缴纳偏心的税款”;马斯克对此回复:“要我多卖点股票吗? 只有你闭口…”。 苹果要求美国各州为 iPhone 数字身份证承担费用并提供反对苹果正在与美国各州单干推出 iPhone 用户的数字身份证。将来苹果将容许 iPhone 用户将驾照或州身份证明存储在 iPhone 钱包中。但这项打算的局部资金将由参加这项打算的州和相应纳税人提供。依据媒体取得的文件,苹果公司正在让美国各州为其将 iPhone 变成数字身份证的打算承当局部费用,并为其提供客户反对。该性能与 Apple 的 Face ID 等生物辨认安全措施相结合,能够缩小欺诈。 据报道,依据四个州签订的合同,苹果要求各州保护发放和服务证书所需的零碎,雇用项目经理与苹果对接,并突出宣传这项新性能,推动其余政府机构采纳这项性能,所有这些费用都由纳税人领取。依据签订文件显示,苹果对该打算的要害方面领有“全权酌情决定权”,包含哪些类型的设施将与数字身份证兼容、各州如何报告工作绩效以及该打算何时启动,苹果甚至能够审查和批准各州必须进行的广告宣传。 此举也引起了行业专家的质疑,为什么各州政府要将公民身份的控制权交给一家价值 2.46 万亿美元的私营公司。除此之外,将身份集成到弱小的挪动设施中曾经引起了隐衷专家对波及监督的反乌托邦场景危险的担心。 更多理解 Meta 和微软发表单干整合 Workplace 和 TeamsMeta(前身为 Facebook),日前发表与微软建设单干关系,客户能够联合应用 Workplace 和微软的 Teams。通过集成,客户能够拜访 Teams 应用程序内的 Workplace,同样用户也能够在 Workplace 利用中应用 Teams 视频会议。 ...

November 15, 2021 · 1 min · jiezi

关于云计算:编解码再进化Ali266-与下一代视频技术

过来的一年见证了人类百年不遇的大事记,也见证了多种视频利用的厚积薄发。而因而所带来的视频数据量的爆发式增长更加加剧了对高效编解码这样的底层硬核技术的急切需要。 新视频编解码规范 VVC 定稿不久之后,阿里巴巴的视频团队开始全力投入发展 VVC 软件编解码的开发工作。 在 LiveVideoStackCon 2021 北京峰会,阿里巴巴研究员,阿里云智能云视频规范与实现负责人叶琰老师开展分享视频业界现状、Ali266 自研 VVC 编解码器的技术演进史和业务瞻望、以及视频业界所面临的将来时机和挑战。 文 | 叶琰整顿 | LiveVideoStack 大家好,我是叶琰,我是阿里云智能视频规范与实现团队负责人。本次分享的话题是编解码再进化:Ali266 与下一代视频技术。 本次分享分成四个局部:首先是视频业界现状、而后 Ali266 自研 VVC 编解码器的技术演进史和业务瞻望,最初会从视频业界角度来看所面临的将来时机和挑战。 1. 视频业界现状 不夸大的说,过来一年和当初所经验的新冠疫情是人类百年不遇的小事。疫情打断了失常生活节奏和人与人之间习惯的面对面交换模式,扭转了十分多游戏规则,同时触发了先进视频科技产品的厚积薄发。 全世界疫情状况各有不同,中国属于疫情管制十分好的国家,因而人民日常生活根本照常,然而在疫情较为重大的国家和地区,因为受到疫情影响,人们的生存和工作产生了翻天覆地的变动。 这些变动包含几个方面。首先无论是工作上的交互从线下转到线上,大量应用云会议,拿钉钉的视频会议来讲,到明天累计每天用户时长超过了一亿分钟。另外,受疫情影响比较严重的国家和地区过半员工在家办公,在家工作中通过近程协同进行,和之前所习惯的面对面交换有了很大变动。 不光是工作,人们的娱乐也从线下转到线上,拿美国来讲,在过来一年多电影院关门,尽管从今年夏天开始营业,然而看电影的人寥寥无几。大家的娱乐生存次要依赖于家庭影院,包含明星也从线下转到线上上演,通过线上交互方式与粉丝进行互动。 从视频业界的角度来说,咱们在过来的一年见证了十分重要的里程碑,就是 H.266/VVC 新一代国内视频规范的定稿。VVC 规范是从 2018 年 4 月正式开始标准化,通过两年多工夫,在 2020 年夏天达到 Final Draft International Standard,也就是第一版的定稿。 VVC 在整个两年多的旅程中,尤其最初半年,受到疫情影响,来自全世界各地近 300 名的视频专家日夜颠倒的加入通过网会的模式发展技术探讨,终于如期完成 H.266/VVC 新一代规范制订。 与之前每一代国内视频规范相似,VVC 绝对于上一代 HEVC 规范带宽老本减半。 上图示意 VVC 主观性能测试后果,这里展现的是 VVC 参考平台相比于 HEVC 参考平台,在雷同主观品质的前提下,VVC 所能做到的带宽节俭。 这外面的视频内容分为 5 类,前两列为 UHD 和 HD,也就是超高清和高清视频,咱们能够看到 VVC 的 VTM 参考软件相比于 HEVC 的 HM 参考软件能够达到 43% 到 49% 的带宽节俭。 ...

November 15, 2021 · 4 min · jiezi

关于云计算:终于有人把云计算与数据库的关系讲明白了

本文转载自百度开发者核心https://developer.baidu.com/a... 导读:本文探讨云计算与数据库的关系,包含云数据库本身的技术和特色,也包含云数据库的应用形式和状态变迁。作者:李海翔起源:大数据DT(ID:hzdashuju) 2006年Google的CEO埃里克·施密特首次提出了云计算(Cloud Computing)的概念。2011年,哥伦比亚大学的Prof.Stolfo传授提出雾计算(Fog Computing),后被思科公司理论化。云计算是集中式计算,埃森哲(Accenture)公司给出了的云计算定义:第三方提供商通过网络动静提供及配置IT性能(硬件、软件或服务)。 而雾计算是云计算概念的延长,是局域网的分布式计算形式,合乎互联网的“去中心化”特色,其低延时、地位感知、宽泛的地理分布、适应移动性的利用特色,使得该计算范式可反对更多的边缘节点。 2011年,同时呈现了边缘计算(Edge Computing)的概念,OpenStack社区给出的定义为:边缘计算是为利用开发者和服务提供商在网络的边缘侧提供云服务和IT环境服务,指标是在凑近数据输出或用户的中央提供计算、存储和网络带宽。 雾计算和边缘计算的区别在于,雾计算具备层次性、网式架构;而边缘计算依赖于不形成网络的独自节点。雾计算中的不同节点之间具备宽泛的对等互连能力,而边缘计算是孤岛中运行的节点,这样的节点被包容入云或雾的网络中可实现流量传输。 云计算、雾计算、边缘计算,是三种不同但又相干的计算范式,每种范式对于数据库系统而言,都有提出不同需要的可能。现在,云计算中的云数据库的特色根本探明,但也在倒退中。而雾计算中的雾数据库的特色尚未有提出,边缘计算中的数据库是否是可从传统的单机数据库系统稍加演变失去,也尚未有提及或探讨。 然而,三种不同的计算形式,必然实用于不同类型的利用,对于数据的存储、治理、计算、替换的需要,也必有差别,深入研究不同利用的需要和特点,可失去不同类型的数据库。将来数据库的类型或状态必然会更加丰富多彩。 01 云原生早在云原生概念呈现之前,就呈现了Cloud Foundry的概念,其内容能够被概括为一种方法论,称为12因素应用程序(12-Factor App)。依据这12个因素,人们对数据库提出了如下一些具体的要求,使得数据库的架构和性能产生了变动。 12因素利用的任意部署,都应该能够在不进行任何代码改变的状况下实现,将本地MySQL数据库换成第三方服务(例如 Amazon RDS)。与此相似,本地SMTP服务应该也能够和第三方SMTP服务(例如Postmark)调换。这使得云利用研发不深度依赖于数据库系统,使得云数据库之间的性能差异化竞争被毁灭。12因素拥护与会话具备高黏性。会话中的数据应该保留在诸如Memcached或Redis等带有过期工夫的缓存中。这就要求云数据库服务要么有多种产品反对不同能力,要么在一个产品内提供带有过期工夫的缓存。12因素利用自身从不思考存储本人的输入流,即不提倡提供日志性能(不写或者治理日志文件),而是把信息间接输入到规范输入(stdout)事件流。在开发环境中,开发人员能够通过这些数据流,在终端实时看到利用的流动。在利用端不能提供日志以供确认问题,这对服务端的数据库提出了更高的要求:第一数据相对放弃强统一而不存储,第二数据库本身有剖析等位问题的能力。然而,不是所有类型的利用都适宜进行这方面的设计和实现,大型简单类利用和网站类利用的定位问题多依赖于日志。Matt Stine于2017年在一次技术大会的分享中提出“Cloud Foundry与微服务:一种共生关系”的概念,云原生(Cloud Native)的概念正式诞生。他将云原生演绎模块化、可察看、可部署、可测试、可替换、可解决6个特质。 Matt Stine认为:服务的根本准则是有一个清晰的专一点(对利用性能细分的要求)、一个清晰的契约(利用与后盾服务之间的接口定义要清晰)、一个清晰的API(利用与后盾服务之间的接口在模式上要明确好用)。 云原生通常被认为是一个思维的汇合,包含了诸多内容:DevOps、继续交付(Continuous Delivery)、微服务(MicroServices)、麻利基础设施(Agile Infrastructure)、康威定律(Conways Law)等,以及依据商业能力对公司进行重组。 这使得云原生的概念全面且简单,其成为一系列技术、企业治理办法的汇合,其中既蕴含了技术(微服务、麻利基础设施),也蕴含了治理(从DevOps、继续交付、康威定律、重组等层面对技术进行治理)。 云计算使得传统的利用形式产生了变动,其本身具备的特点如下。 1. 规模化IT设施从零散化走向集中化、规模化。大型数据中心被大量建设,作为基础设施向全社会提供集中式服务。 2. 资源池化IT设施规模化当前,基于弹性服务的要求,须要对硬件资源对立治理。业务规模应可动静刹时扩缩容,因而要池化硬件资源以提供弹性服务。 云计算,是冀望通过互联网络为用户提供按需应用的IT资源服务。因而,云服务商要保障在所提供的硬件资源上领有容量短缺的资源池,以保障在并发业务顶峰时刻能够满足用户的服务要求,这就是云服务的资源池化。 云数据库作为一种服务,同云计算类似,其所能治理应用的资源同样须要资源池化。这样用户在应用云数据库的服务时就毋庸理解云数据库中的理论架构和技术实现了,用户所感知的是其应用的独立残缺的数据管理服务和相应的计算资源。 对于用户而言,资源管理在云数据库外部体现为实现多租户个性,依据租户所租用的资源来提供服务。数据库外部资源池化后,可为用户的利用提供弹性伸缩服务。 3. 服务化云计算使得过来IT业所能提供的内容产生了变动。 交付形式从软件交付走向服务交付。用户看似在应用一个软件其实不再是一个软件,一系列软件组合成一个服务后提供给用户,对用户而言一项项具体的服务是可间接感触到的。开发方式从底层(IaaS+PaaS)走向下层(SaaS)。云计算不仅提供CPU和机架,更多的是提供用户可感触的软件服务(SaaS),或者软件都感触不到,间接感触到的就是服务(Serverless)。 4. 多样化数据模式及利用场景从单一化走向多样化。服务、微服务等曾经各自成型,无服务(Serverless)也作为一种FaaS(Function-as-a-Service)开始为世界的多样性和精彩性贡献力量。 02 云数据库为了应答云利用的研发需要,云上提供服务的数据库系统也相应产生了一些变动。云原生数据库是指通过云平台进行构建、部署、交付和主动运维的数据库服务。 该服务通常以DBaaS (Database-as-a-Service)的状态,将数据库架构和实现细节暗藏起来,采纳多租户和资源无效散发的模式将云资源主动治理起来,为用户提供一个可能满足弹性伸缩、高可用、高牢靠、高安全性、强统一等需要,且能够随时随地拜访的数据库服务。 该服务具备自动化运维能力(仅须要极少的人力),可提供主动备份和复原、主动性能调优、主动对规模化的数据库集群的资源进行调节等可超过传统DBA所做工作的能力(具备智能数据库的特色)。这种能力使得云数据库系统托管和保护的老本升高,规模化地进步资源的利用率。 总体来说,云数据库的特色能够概括为解放用户和适应业务两类。具体能够转化为如下6条内容,其中前3条属于解放用户的领域,后3条属于适应业务的领域。 1. 智能运维(智能数据库)故障可自愈,包含宕机主动迁徙、故障隔离、异样流量主动调度、负载平衡、主动限流降级等。数据库可主动调优,主动调节资源的应用,领有自适应算法以应答利用的负载等。这样的能力能够概括为自调优、自适应、主动驾驶(工业界将主动驾驶的规范分为6个级别,数据库界借用了此级别来定义数据库主动驾驶的概念)。 2. 易于治理智能运维的体现就是易于治理。云数据库具备自动化异样剖析诊断能力,可在运维操作中实现白屏化、智能化、规模化、少人化。 3. 极致体验用户对于数据库的申请、创立、监控、报警、故障定位都能够最简略的形式实现,给用户以极致便捷的体验。 4. 弹性伸缩可能依据业务的利用负载主动伸缩,具备秒级扩缩容能力,可灵便动态分配或开释资源,联合弹性计费策略,能够大幅度降低用户的应用老本。这一条中局部内容和智能运维重合,但形容问题的角度不同,本条是从零碎可扩展性的角度,对云数据库的重要特色进行形容。 业务或零碎上云,是购买了一种应答将来的可能。对于正处于业务倒退中的商户而言,随着数据的积攒在云端可随时扩大存储,也可自在扩大计算节点,这样对于一个从小向大倒退的商户而言,是一种最佳的资源利用形式,也是一种老本最低的形式。 而反对这种业务倒退的技术,就是弹性伸缩。在弹性伸缩中须要思考事务执行的先后秩序,这个秩序对于数据库架构而言,就是存算拆散。 5. 按需计费反对按量(如流量、存储量、调用次数、调用时长、核数、内存资源占用量等)制订多种定价策略,使用户可依据业务状况灵便匹配出最优计量模式,节约用户老本。 6. 平安、资源隔离云数据库采纳共享池化技术来进步计算、存储、网络等资源的利用率,隔离用户对资源的并发争用;另外提供多租户形式以做到平安隔离,防止信息泄露或蒙受攻打等。 上述内容为云数据库的设计指出了方向。 03 Serverless数据库Serverless是一种无服务器架构,其不是一个具体的编程框架、工具,而是一种软件系统架构思维和办法,其核心思想是让用户毋庸关注撑持应用服务运行的底层主机,用户可依据利用须要,按需应用底层服务器(硬件以及软件系统),并依据使用量付费。Serverless类利用所须要的计算资源由底层的云计算平台动静提供。 云原生数据库作为后盾服务,其提供一种数据库服务/拜访形式连贯用户,该形式即是Serverless形式。然而,Serverless不只是连贯数据库的一种服务形式,还是连通其余各类服务的一种形式。Serverless与云数据库都是一种服务能力。云数据库把数据存储、治理、计算能力转化为服务提供给用户。 ...

November 12, 2021 · 1 min · jiezi

关于云计算:OSS云存储管理实践体验有礼

阿里云对象存储 阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、平安、低成本、高牢靠的云存储服务。用户能够通过调用API,在任何利用、任何工夫、任何地点上传和下载数据,也能够通过用户Web控制台对数据进行简略的治理。OSS适宜寄存任意文件类型,适宜各种网站、开发企业及开发者应用。阿里云OSS图片解决服务 阿里云OSS图片解决服务(Image Service,简称 IMG) ,是阿里云OSS对外提供的海量、平安、低成本、高牢靠的图片解决服务。用户将原始图片上传保留在OSS上,通过简略的 RESTful 接口,在任何工夫、任何地点、任何互联网设施上对图片进行解决。图片解决服务提供图片解决接口,图片上传请应用OSS上传接口。基于IMG,用户能够搭建出跟图片相干的服务。图片服务解决的图片来自于OSS,所以图片的上传理论是上传到OSS的同名Bucket中。在实在的工作场景中,个别将图片、音频、视频等存储到OSS服务中,这样能够极大的进步用户的页面访问速度。11 月 9 日至 11 月 23 日期间,实现部署即可取得“TOMY 多美卡合金车模一辆”。 地址:https://developer.aliyun.com/adc/series/activity/1111 体验筹备体验需应用本人的账户开明以上服务ECS资源地址开始试验后,零碎会主动去创立一台Linux ECS。其中,创立的ECS中曾经部署了web利用和OSS python SDK。在本试验中,已创立的ECS作为web服务器,浏览器中间接拜访其IP地址会显示蕴含四个小图片的页面,并且四个图片都保留在ECS本地。通过调用OSS API将四个图片上传到OSS中,同时删除保留在ECS本地的四个图片,此时拜访ECS IP将会看到页面中没有图片能够显示。为了在页面中显示原有的四个图片,试验中须要批改web应用服务器根目录下默认拜访页面中的图片地址,将图片地址批改为四个图片别离在OSS中的拜访地址。 连贯ECS服务器1、双击关上虚构桌面的Chromium浏览器,在RAM用户登录框中单击下一步,复制云产品资源列表中子用户明码,按CTRL+V把明码粘贴到明码输区,登录子账户(后续在远程桌面里的粘贴操作均应用CTRL + V快捷键)。2、复制云服务器ECS控制台地址,在Chromium浏览器关上新页签,粘贴并拜访云服务器ECS控制台。3、在控制台左侧导航栏中,单击实例。4、在实例页面顶部菜单栏,切换到资源所在地区。 阐明 : 参考如下图片切换地区到华东2(上海)。5、在实例页面,在指标实例的操作列下单击近程连贯。 阐明 : 您可在云产品资源列表中查看指标实例的实例ID。 6、在近程连贯与命令对话框的Workbench近程连贯区域中,单击立刻登录。 7、在登录实例对话框中,输出云资源产品列表中ECS服务器的登录明码,单击确定。 返回如下页面,示意您曾经胜利近程连贯到ECS服务器。 基于单ECS的图片网站本大节将展现一个在 ECS 上已搭建的图片分享网站,以及图片分享网站的源码。 1.在Chromium浏览器关上新页签,在地址栏输出http://<ECS公网地址()弹性IP)>:8080并拜访。您能够查看到以后页面中显示1张 “花园” 的图片,该图片理论是由 4 张小图片组成的。 2.切换至终端页面。执行以下命令,进入网站零碎的根目录。 cd /alidata/www/default而后,应用如下查看命令,查看保留在根目录下的四张图片 01.png,02.png,03.png 和 04.png,也就是图片分享网站所展现的 4 张小图片。 ls 在Chromium浏览器关上新页签,在地址栏中输出 <ECS实例外网地址>/01.png,能够查看到 01.png 的图片内容。同理,能够查看 "02.png", "03.png" 以及 "04.png" 的图片内容。3.应用如下命令,查看网站首页的源码,能够看到图片分享网页中显示的图片,是从网站根目录 /alidata/www/default 中,读取图片 01.png,02.png,03.png 和 04.png 拼接的。 cat index.html ...

November 12, 2021 · 2 min · jiezi

关于云计算:双十一揭秘-1-如何保证流量激发的时候不宕机

对于双十一,优惠券、补贴金、满减是“买买买人”的噩梦,高并发、高性能、高可用也是技术人的魔咒。双十一秒杀时几万人抢同一个商品,直播间几十万人同时抢红包,每秒订单高达 58 万笔,在双十一大促流动当天,如何保障流量激发的时候不宕机?本篇文章将揭秘如何基于云平台来构建高可用的互联网利用。 什么是高并发、高性能、高可用高并发(High Concurrency)高并发是现在互联网分布式系统架构设计必须要思考的因素之一,可能保证系统同时并行处理很多申请。高并发意味着大流量,须要使用技术手段抵制流量的冲击,这些伎俩好比操作流量,能让流量更安稳地被零碎所解决,带给用户更好的体验。高并发相干罕用的一些指标有响应工夫(Response Time)、吞吐量(Throughput)、每秒查问率 QPS(Query Per Second)、每秒事务处理量 TPS(Transaction Per Second)、并发用户数等。 响应工夫(Response Time):系统对进来的申请反馈的工夫,比方你关上一个页面须要 1 秒,那么这 1 秒就是响应工夫。吞吐量(Throughput):吞吐量是指每秒能解决多少申请数量,好比你吃饭,每秒能吃下多少颗米饭。每秒查问率 QPS(Query Per Second:秒查问率是指每秒响应申请数,和吞吐量差不多。每秒事务处理量 TPS(Transaction Per Second):每秒响应事务申请数。并发用户数:同时承载失常应用零碎性能的用户数量。例如一个即时通讯零碎,同时在线量肯定水平上代表了零碎的并发用户数。高性能(High Performance)什么是高性能呢?高性能是指程序处理速度十分快,所占内存少、CPU 占用率低。高性能的指标常常和高并发的指标严密相干,想要进步性能,那么就要进步零碎高并发能力,两者相互捆绑在一起。利用性能优化的时候,对于计算密集型和 IO 密集型还是有很大差异,须要离开来思考。还有能够减少服务器的数量、内存、IO 等参数晋升零碎的并发能力和性能,但不要浪费资源,要思考硬件的使用率最高能力施展到极致。怎么样进步性能呢? 防止因为 IO 阻塞让 CPU 闲置,导致 CPU 的节约。防止多线程间减少锁来保障同步,导致并行零碎串行化。免创立、销毁、保护太多过程、线程,导致操作系统浪费资源在调度上。高可用(High Availability)高可用通常用来形容一个零碎通过专门的设计,从而缩小复工工夫,而放弃其服务的高度可用性。假如零碎始终可能提供服务,咱们说零碎的可用性是 100%。如果零碎每运行 100 个工夫单位,有 1 个工夫单位无奈提供服务,咱们说零碎的可用性是 99%。很多公司的高可用指标是 4 个 9,也就是 99.99%,这就意味着,零碎的年停机工夫为 52.6 分钟。 实现一个高可用的互联网利用和服务是个十分具备挑战的工作。每个架构师对高可用或者都有不同了解。对很多架构师而言,高可用意味着服务不存在单点故障、数据有冗余备份、架构设计上防止应用单点。 基于云平台构建高可用的互联网利用高可用自下而上可分为三个层面。 首先是资源高可用。就云平台而言,这通常指的是 IaaS 资源的高可用。IaaS 即 Infrastructure as a Service(基础设施即服务), 个别指的是云平台为用户提供的 IT 基础架构服务,如计算、存储、网络等,相似于大家生存中应用的水和电一样。 其次是利用高可用。就云平台而言,这通常指的是 PaaS 服务高可用。PaaS 即 Platform as a Service(平台即服务), 个别指的是云平台为用户提供的中间件服务、数据库服务、日志服务、大数据处理服务等一系列利用反对服务。 ...

November 12, 2021 · 2 min · jiezi

关于云计算:基于函数计算快速搭建Hexo博客体验有礼

Serverless 降本增效免运维的个性为开发者带来了实打实的益处,11 月 9 日至 11 月 23 日期间,阿里云函数计算上线了“Hexo 博客部署体验流动”,实现部署即可取得“TOMY 多美卡合金车模一辆”。 地址:https://developer.aliyun.com/adc/series/activity/1111 简介函数计算函数计算是事件驱动的全托管计算服务。应用函数计算,您无需洽购与治理服务器等基础设施,只需编写并上传代码。函数计算为您筹备好计算资源,弹性地牢靠地运行工作,并提供日志查问、性能监控和报警等性能。函数计算帮忙您无需治理服务器(Serverless),仅专一于函数代码就能疾速搭建利用。函数计算可能弹性地伸缩,您只须要按使用量付费。 函数计算Serverless服务和自建服务相比有以下长处: 上手简略,只专一业务逻辑开发,极大进步工程开发效率。自建计划有太多学习和配置老本,例如针对不同场景,ESS须要做各种不同的参数配置,导致系统环境的保护降级很麻烦。免运维,反对函数执行级别粒度的监控和告警。毫秒级弹性扩容,保障弹性高可用。对象存储OSS 对象存储OSS是一款海量、平安、低成本、高牢靠的云存储服务,提供99.9999999999%(12个9)的数据持久性,99.995%的数据可用性。多种存储类型供选择,全面优化存储老本。 容器镜像服务ACR 容器镜像服务是面向容器镜像、Helm Chart等的合乎OCI规范的云原生制品平安托管及高效散发平台。ACR反对寰球同步减速、大规模/大镜像散发减速、多代码源构建减速等全链路提效,与容器服务ACK无缝集成,帮忙企业升高交付复杂度,打造云原生利用一站式解决方案。 文件存储NAS 文件存储NAS是一个可大规模共享拜访,弹性扩大的高性能云原生分布式文件系统。反对智能冷热数据分层,无效升高数据存储老本。广泛应用于企业级利用数据共享、容器、AI机器学习、Web服务和内容治理、利用程序开发和测试、媒体和娱乐工作流、数据库备份等场景。 CDN CDN通过宽泛的网络节点散布,提供疾速、稳固、平安、可编程的寰球内容散发减速服务,反对将网站、音视频、下载等内容散发至靠近用户的节点,使用户可就近获得所需内容,进步用户拜访的响应速度和成功率。 Serverless Devs开发者工具 Serverless Devs是一个组件化与插件化的Serverless开发者平台,开发者能够在平台中可插拔式地应用不同Serverless的服务和框架,同时可参加组件和插件的开发。无论是工业级的Serverless服务,还是各类开源的Serverless框架,Serverless Devs都可敌对反对。开发者无需对市面上每一款Serverless工具进行钻研和学习,只需通过Serverless Devs,就能够简略、快捷地“上手”支流Serverless服务和框架。 体验筹备体验需应用本人的账户开明以上服务ECS资源地址 装置Serverless Devs命令行工具1.装置Node.js环境。a. 执行如下命令,下载Node.js安装包。 wget https://npm.taobao.org/mirrors/node/v12.4.0/node-v12.4.0-linux-x64.tar.xzb. 执行如下命令,解压安装包并重命名。 tar -xvf node-v12.4.0-linux-x64.tar.xz && mv node-v12.4.0-linux-x64/ /usr/local/nodec. 执行如下命令,配置环境变量。 echo "export PATH=$PATH:/usr/local/node/bin" >> /etc/profilesource /etc/profile执行如下命令,装置Serverless-Devs工具。 npm install @serverless-devs/s -g 执行如下命令,查看版本并查看装置是否正确。s -v返回后果如下,您能够看到Serverless-Devs工具的版本。 4.对于本我的项目而言,还须要装置Docker。 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun装置实现之后,能够尝试启动Docker: sudo systemctl start docker配置阿里云账号信息阐明: ...

November 11, 2021 · 1 min · jiezi

关于云计算:存储大师班-浅谈-RDMA-与无损网络

魏国武 QingStor 资深研发工程师近 10 年企业级软件开发教训,专一于大规模分布式存储研发,善于集群性能调优、高可用钻研及容灾。为什么须要 RDMA当今是云计算、大数据的时代,企业业务持续增长须要存储系统的 IO 性能也持续增长。传统的 TCP/IP 技术在数据包处理过程中,要通过操作系统及其他软件层,数据在零碎内存、处理器缓存和网络控制器缓存之间来回进行复制,给服务器的 CPU 和内存造成了沉重负担。尤其是网络带宽、处理器速度与内存带宽三者的重大"不匹配性",更加剧了网络提早效应。为了升高数据中心外部网络提早,进步带宽,RDMA 技术应运而生。RDMA 容许用户态的应用程序间接读取和写入近程内存,防止了数据拷贝和上下文切换;并将网络协议栈从软件实现 offload 到网卡硬件,实现了高吞吐量、超低时延和低 CPU 开销的成果。 以后 RDMA 在以太网上的传输协定是 RoCEv2,RoCEv2 是基于无连贯协定的 UDP 协定,相比面向连贯的 TCP 协定,UDP 协定更加疾速、占用 CPU 资源更少,但其传输是不牢靠的,一旦呈现丢包会导致 RDMA 的传输效率升高,这是由 RDMA 的 Go-back-N 重传机制决定的。RDMA 接管方网卡发现丢包时,会抛弃后续接管到的数据包,发送方须要重发之后的所有数据包,这导致性能大幅降落。所以要想 RDMA 施展出其性能,须要为其搭建一套不丢包的无损网络环境。 差异化流量分类构建无损网络,首先须要对网络流量进行分类,而后针对不同类别流量采纳具体流控策略,实现准确管制,防止相互影响。流量分类有两种不同的分类办法:传输层(Layer 2)和网络层(Layer 3)。Layer2 通过 vlan header(802.1q)里的 PCP(802.1p)位进行分类,对应 CoS(Class of Service);Layer3 通过 IP header 里的 DSCP 进行分类,对应 DSCP。 Layer 2 流量分类Layer2 层流量分类根据的是 vlan tag 中的 3 位 PCP bit,总共有 8 个类别。3 个 bit 是 Header 中第 3 个 byte 的前三位,如下图。在应用 Layer 2 流量分类时,主机端收回的包须要带有 vlan tag。因而要对网卡配置 vlan,并且设置优先级。因为 L2 层 PFC 须要依附 vlan,因而包通过三层交换机时可能存在 tag 生效等问题。 ...

November 11, 2021 · 2 min · jiezi

关于云计算:焱融科技-YRCloudFile-与安腾普完成兼容认证共创存储新蓝图

随着信息技术的疾速倒退,各大企业在放慢引入新一代 IT 数字化技术的同时,也逐步开始器重产品兼容性适配。近日,焱融科技自主研发的 YRCloudFile 高性能分布式文件存储产品,凭借本身完整性、兼容性及运行稳固等个性,实现并通过了安腾普自主研发的 Tina 备份系统软件和 ADA 数据归档系统软件的产品兼容性互认证。 据理解,安腾普作为国内先进的高性能备份和复原解决方案供应商,安腾普 Tina 备份系统软件和 ADA 数据归档系统软件,不仅满足了用户位于异构 IT 环境下,海量数据迁徙、归档、复制需要,而且达到大型企业和中小企业对数据保护的严格要求,实现让用户依据信息的价值抉择相匹配的数据安全和存储保护。实现安腾普产品兼容互认证,意味着 YRCloudFile 能够在安腾普系统软件之上平安、稳固、高效的运行,有利于单方进一步推动其产品体系的生态交融,构建稳固衰弱的单干生态。 产品兼容互认证证书 近年来,随着人工智能、主动驾驶、高性能计算等场景疾速倒退,越来越多的企业对存储系统高吞吐和大规模并行读写访问的能力提出了极高的要求。 YRCloudFile 作为一款专一于分布式文件存储的产品,不仅提供高性能、高可用的文件拜访接口,实用于多种应用场景,而且反对 Kubernetes 等支流容器编排框架,提供高性能的容器长久化存储。其次要具备以下外围特点与劣势: 高性能:反对存储数据节点和元数据节点按需横向扩大,通过多元数据服务的架构设计,使 YRCloudFile 集群对小文件及随机 IO 的拜访性能达到最大化。同时,其独有的 Windows 并行拜访客户端,反对间接拜访存储节点数据,无需通过协定服务器跳转,延时显著升高。高可用:YRCloudFile 所具备的全对称、可扩大的元数据集群架构,反对在面对数十亿文件时,对元数据的操作性能以及读写性能继续保持稳定。同时,YRCloudFile 曾经完满兼容适配以后国内外多个 Kubernetes 发行版,包含但不限于 Rancher、灵雀云、浪潮云、博云、谐云等。高效麻利:YRCloudFile 实现与容器云平台无缝对接,在反对 PV 配额设置、动静扩容、QoS、实时监控、热点探测、冷热数据分析等性能的同时,针对 MySQL 等利用的 IO 模型进行了优化,无力反对容器环境上的长久化利用,高效稳固使用。业内人士指出,此次焱融科技与安腾普的强强联合,既是单方产品技术上的交换交融,也是为单方接下来发展良好的通力合作奠定根底。焱融科技凭借在海量计算与存储畛域的技术能力和实践经验,以及安腾普在用户数据资产爱护实力,单方将会进一步施展最大技术劣势,携手推动分布式文件存储在各行各业的深度落地。 目前,企业数字化转型曾经成为数字经济时代大趋势,越来越多的企业将业务向私有云上迁徙,以升高数据存储老本。为此,焱融科技将 YRCloudFile 成熟的平台和技术创造性地部署在私有云上,于近日推出云舟 SaaS 数据服务平台,解决了企业用户上云存储需要难题,欠缺了分布式存储作为数字时代新的基础设施体系。 接下来,焱融科技将继续与各类合作伙伴开展策略单干、联合开发测试,利用资源互补倒退,通过技术交融与交换,实现在私有云、公有云、混合云环境下,为用户提供更具价值的产品和解决方案。

November 11, 2021 · 1 min · jiezi

关于云计算:双十一云起实验室体验专场七大场景体验有礼

云起实验室云起实验室是阿里云为开发者打造的一站式体验学习平台,在这里你能够理解并亲自动手体验各类云产品和云计算根底,无需关注资源开明和底层产品,无需任何费用。只有有一颗想要理解云、学习云、体验云的心,这里就是你的上云第一站。 场景介绍此次体验[《双十一云起实验室体验专场》](),波及七大技术场景实际体验,云上实际,云上成长。\ 大数据计算 场景《基于EMR离线数据分析》E-MapReduce(简称“EMR”)是云原生开源大数据平台,向客户提供简略易集成的Hadoop、Hive、Spark、Flink、Presto、Clickhouse、Delta、Hudi等开源大数据计算和存储引擎。EMR计算资源能够依据业务的须要调整。EMR能够部署在阿里云私有云的ECS和ACK、专有云平台。 数据量爆发式增长的明天,数字化转型成为IT行业的热点,数据须要更深度的价值开掘,应答将来一直变动的需要。海量离线数据分析能够利用于多种商业系统环境,例如电商海量日志剖析、用户行为画像剖析、科研行业的海量离线计算剖析工作等场景。本场景将通过开明登录EMR Hadoop集群,简略进行hive操作,应用hive对数据进行加载,计算等操作。展现了如何构建弹性低成本的离线大数据分析。\ 对象存储 场景《OSS云存储管理实际》阿里云对象存储(Object Storage Service,简称OSS),是阿里云对外提供的海量、平安、低成本、高牢靠的云存储服务。用户能够通过调用API,在任何利用、任何工夫、任何地点上传和下载数据,也能够通过用户Web控制台对数据进行简略的治理。OSS适宜寄存任意文件类型,适宜各种网站、开发企业及开发者应用。\开始试验后,零碎会主动去创立一台Linux ECS。其中,创立的ECS中曾经部署了web利用和OSS python SDK。在本试验中,已创立的ECS作为web服务器,浏览器中间接拜访其IP地址会显示蕴含四个小图片的页面,并且四个图片都保留在ECS本地。通过调用OSS API将四个图片上传到OSS中,同时删除保留在ECS本地的四个图片,此时拜访ECS IP将会看到页面中没有图片能够显示。为了在页面中显示原有的四个图片,试验中须要批改web应用服务器根目录下默认拜访页面中的图片地址,将图片地址批改为四个图片别离在OSS中的拜访地址。\ 容器服务 场景《容器服务ACK+容器网络文件系统CNFS疾速搭建NGINX网站》阿里云容器服务Kubernetes版ACK(Alibaba Cloud Container Service for Kubernetes)是寰球首批通过Kubernetes一致性认证的服务平台,提供高性能的容器利用治理服务,反对企业级Kubernetes容器化利用的生命周期治理,让您轻松高效地在云端运行Kubernetes容器化利用。 介绍如何在半小时内,通过阿里云容器ACK服务和容器网络文件系统CNFS服务搭建一个简略的弹性、高可用NGINX网站。在实现本文的所有操作后,您将取得一个单网页的网站,用户的申请将会被打散到多个容器节点上,并且依据业务负载主动扩缩容,即便某个容器节点宕机也不会影响用户拜访。另外您还能够将本地编辑的网页疾速更新到网站上 云原生场景《Chaos带你疾速上手混沌工程》故障演练(Chaos)是云原生混沌工程平台,提供了大规模、低成本、影响可控、模式多样化的故障演练服务。Chaos提供一站式架构剖析、故障巡检、故障注入、零碎稳态度量等性能,帮忙用户加强分布式系统的容错性和可恢复性,帮忙零碎安稳上云。\场景次要介绍混沌工程的思维及其原理,体验故障演练(AHAS Chaos),阿里云在混沌工程畛域的产品。\ 数据库场景 《数据库上云实战》阿里云关系型数据库RDS(Relational Database Service)是一种稳固牢靠、可弹性伸缩的在线数据库服务。基于阿里云分布式文件系统和SSD盘高性能存储,RDS反对MySQL、SQL Server、PostgreSQL和MariaDB TX引擎,并且提供了容灾、备份、复原、监控、迁徙等方面的全套解决方案,彻底解决数据库运维的懊恼。\开始试验后,零碎会主动创立一台自建MySQL的 源数据库 ECS 实例和一台 指标数据库 RDS。首先,远程登陆到 源数据库 ,查看源数据库中的信息。而后,登陆到阿里云治理控制台,建设指标数据库。最初,应用 数据传输 服务,实现ECS自建数据库迁徙到指标数据库RDS。 函数计算场景《基于函数计算疾速搭建Hexo博客》函数计算(FunctionCompute)是事件驱动的全托管计算服务。应用函数计算,您无需洽购与治理服务器等基础设施,只需编写并上传代码。函数计算为您筹备好计算资源,弹性地牢靠地运行工作,并提供日志查问、性能监控和报警等性能。函数计算帮忙您无需治理服务器(Serverless),仅专一于函数代码就能疾速搭建利用。函数计算可能弹性地伸缩,您只须要按使用量付费。\场景介绍应用函数计算服务搭建一个Hexo博客。应用Serverless Devs命令行工具能够将很多框架、利用、案例一键部署到函数计算平台中。 云服务器场景《基于ECS搭建云上博客》云服务器(Elastic Compute Service,简称ECS)是阿里云提供的性能卓越、稳固牢靠、弹性扩大的IaaS(Infrastructure as a Service)级别云计算服务。云服务器ECS免去了您洽购IT硬件的后期筹备,让您像应用水、电、天然气等公共资源一样便捷、高效地应用服务器,实现计算资源的即开即用和弹性伸缩。\场景演示了在 ECS云服务器(CentOS操作系统)的环境下,通过部署 LAMP环境并装置 WordPress 疾速搭建集体博客。\ \近期体验任意一个场景,可在专场页支付TOMY多美卡合金车模一辆!\https://developer.aliyun.com/...

November 10, 2021 · 1 min · jiezi

关于云计算:一文了解-PG-PITR-即时恢复

在数据库系统中,数据是所有的根底,数据的平安更是重中之重。但可能因为各种起因导致数据失落或损坏,因而数据的备份和复原便显得尤为重要。 PostgreSQL 是一个弱小的开源对象关系数据库系统,通过 30 多年的踊跃开发,在可靠性、性能稳健性和性能方面博得了良好的名誉。Point-In-Time Recovery(简称 PITR) 是 PostgreSQL 的基于工夫点的数据恢复技术,在开启 WAL 日志归档及根底备份后,能够即时复原用户误操作失落的数据,为您的数据库加上一重"保险"。 本文将演示 PostgreSQL 如何配置 PITR 数据备份,以及当数据被误删除后如何进行数据即时复原。 环境筹备筹备数据库筹备 PostgreSQL 11 版数据库环境。 # echo "$PGHOME" 查看 PGHOME=/usr/lib/postgresql/11 # echo "$PGDATA" 查看,PostgreSQL 的数据目录 PGDATA=/data/pgsql/main # pg 命令行执行 show config_file; 命令查看,PostgreSQL 的配置文件地位 PGCONFIG_FILE=/etc/postgresql/11/main/postgresql.conf # PostgreSQL 的启动日志地位,当启动失败时,能够通过日志疾速查看报错内容 PG_LOG=/data/pglog/start.logPITR 数据备份当用户误删除数据之后,能够通过 PITR 复原指定的工夫戳的数据。上面介绍开启备份及复原数据的具体步骤。 开启 WAL 日志归档通过批改配置文件,开启 WAL 日志归档性能。 # 创立保留wal日志归档的目录,并批改目录拥有者 $ mkdir -p /data/wallog_back $ chown -R postgres:postgres /data/wallog_back # 批改 PostgreSQL 数据库配置文件 postgresql.conf $ vim /etc/postgresql/11/main/postgresql.conf # 批改如下配置项: wal_level = archive archive_mode = on archive_command = 'test ! -f /data/wallog_back/%f && cp %p /data/wallog_back/%f' # 配置归档命令,拷贝 wal 文件到指定目录,%p 为理论的 wal 文件目录,%f 为 wal 文件名称 # 保留后重启数据库 root:~# su postgres # stop postgresql server postgres:~$ /usr/lib/postgresql/11/bin/pg_ctl stop # start postgresql server postgres:~$ /usr/lib/postgresql/11/bin/pg_ctl -D /data/pgsql/main/ start -o '-c config_file=/etc/postgresql/11/main/postgresql.conf' -l /data/pglog/start.log胜利保留配置批改,即关上了 WAL 日志归档性能。 ...

November 9, 2021 · 2 min · jiezi

关于云计算:浪潮云说丨GPU云服务器助力AI计划轻松实现

GPU云服务器产品介绍 在深度学习和图形处理等畛域,GPU相较于CPU有着数十倍到上百倍的算力,可能为企业提供更高的计算效率及更低廉的IT老本。 浪潮云GPU云服务器(EGS)可能提供优良的浮点计算能力,大幅晋升AI算力,并具备弹性、低成本、易于应用等个性,实用于人工智能的训练推理等畛域,助您轻松实现AI打算。 GPU云服务器产品劣势 GPU云服务器利用场景

November 9, 2021 · 1 min · jiezi

关于云计算:云原生爱好者周刊Dapr-成为-CNCF-孵化项目

云原生一周动静要闻: Dapr 退出 CNCF 孵化器Knative 1.0 公布Canonical 开始提供针对 Intel CPU 优化的 Ubuntu 图像Longhorn 为 CNCF 孵化器带来云原生分布式存储开源我的项目举荐文章举荐云原生动静Dapr(分布式应用程序运行时)退出 CNCF 孵化器日前,CNCF 技术监督委员会(TOC) 已投票承受 Dapr 作为 CNCF 孵化我的项目。 Dapr是一组 API,使开发人员能够轻松编写分布式应用程序。Dapr 作为应用程序旁边的 sidecar 过程运行,无论是在 Kubernetes 还是任何其余环境中,并以公布/订阅、状态治理、机密治理、事件触发器和服务到服务调用的模式为开发人员提供一组原语安全可靠。应用 Dapr,开发人员专一于构建业务逻辑而不是基础设施。 次要成分: Dapr sidecar –在应用程序旁边运行并蕴含面向开发人员的 API。CLI 和 SDK –形成我的项目的开发人员工具体验。Components-contrib 存储库——开发人员能够扩大 Dapr 以集成和反对各种云服务和开源技术。重要里程碑: 15.1k GitHub Stars1,940 个 pull requests3,703 issues1.3k 贡献者14 个稳固版本 v1.426M Docker pulls详情见 Knative 1.0 公布日前,Knative 1.0 公布,这要归功于 600 多名开发人员的奉献和合作。Knative 我的项目由 Google 于 2018 年 7 月公布,它是与 VMWare、IBM、Red Hat 和 SAP 密切合作开发的。在过来 3 年中,Knative 已成为 Kubernetes 上装置最宽泛的无服务器层。 ...

November 9, 2021 · 2 min · jiezi

关于云计算:Spring-Cloud-Gateway实战之二更多路由配置方式

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览本文是《Spring Cloud Gateway实战》系列的第二篇,通过前文咱们理解到Spring Cloud Gateway的外围是路由配置,而后在本地application.yml中配置了一条路由,但这种批改本地配置文件的形式不足灵活性,未必能满足灵便多变的业务需要,因而,本篇的目标就是找出本地配置之外的其余配置形式来,满足各种理论需要;总的来说以下三种形式都是罕用的:指标地址反对用服务名(取代之前的IP+端口);反对在nacos上配置;反对写代码的形式配置;另外还有一种更加灵便的配置形式:<font color="blue">动静代理</font>,因为波及到不少的代码所以会独自出一篇文章具体介绍源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: 筹备工作正式开始前须要再做一点筹备工作,整个《Spring Cloud Gateway实战》系列中,所有申请最初都会被路由到<font color="blue">provider-hello</font>这个web下来,该服务目前只有一个web接口<font color="blue">/hello/str</font>,当初咱们再给它减少一个,前面的实战会用到新减少的web接口来自LBTest.java,可见非常简单:package com.bolingcavalry.provider.controller;import com.bolingcavalry.common.Constants;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.text.SimpleDateFormat;import java.util.Date;@RestController@RequestMapping("/lbtest")public class LBTest { private String dateStr(){ return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); } /** * 返回字符串类型 * @return */ @GetMapping("/str") public String helloStr() { return Constants.LB_PREFIX + ", " + dateStr(); }}上述代码中的<font color="blue">Constants.LB_PREFIX</font>来自子工程<font color="red">common</font>:package com.bolingcavalry.common;public interface Constants { String HELLO_PREFIX = "Hello World"; String LB_PREFIX = "Load balance";}写完代码后,先确保nacos曾经启动在启动<font color="blue">provider-hello</font>工程,启动胜利后去看nacos,确认曾经注册: 筹备结束,能够开始实战了指标地址反对用服务名(取代之前的IP+端口)咱们从最简略的开始,先看前文的路由配置,如下图红框,指标地址是IP+端口: 玩过Spring Cloud的您天然看出了问题所在:没有注册发现,的确,这样将地址和端口写死在配置文件中是不适合的,咱们先来解决这个问题;新增名为<font color="blue">gateway-by-loadbalance</font>的子工程,其pom.xml中的依赖状况如下,可见重点是<font color="red">spring-cloud-starter-loadbalancer</font>:<dependencies> <dependency> <groupId>com.bolingcavalry</groupId> <artifactId>common</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-gateway</artifactId> </dependency> <dependency> <groupId>io.projectreactor</groupId> <artifactId>reactor-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- 路由策略应用lb的形式是,这个依赖肯定要有 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> <!--nacos:注册核心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>启动类的代码省去了(和前文的一样)配置信息如下,重点是uri的值<font color="red">lb://provider-hello</font>,用了前缀<font color="blue">lb:</font>,前面的<font color="blue">provider-hello</font>就是在nacos注册的服务名:server: #服务端口 port: 8085spring: application: name: gateway-by-loadbalance cloud: nacos: # 注册核心的配置 discovery: server-addr: 127.0.0.1:8848 gateway: routes: - id: path_route_lb uri: lb://provider-hello predicates: - Path=/lbtest/**单元测试类:package com.bolingcavalry.gateway;import com.bolingcavalry.common.Constants;import org.junit.jupiter.api.Test;import org.junit.jupiter.api.extension.ExtendWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.reactive.AutoConfigureWebTestClient;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.http.MediaType;import org.springframework.test.context.junit.jupiter.SpringExtension;import org.springframework.test.web.reactive.server.WebTestClient;import static org.junit.jupiter.api.Assertions.assertTrue;@SpringBootTest@ExtendWith(SpringExtension.class)@AutoConfigureWebTestClientpublic class HelloTest { @Autowired private WebTestClient webClient; @Test void testLoadBalance() { webClient.get() .uri("/lbtest/str") .accept(MediaType.APPLICATION_JSON) .exchange() // 验证状态 .expectStatus().isOk() // 验证后果,留神后果是字符串格局 .expectBody(String.class).consumeWith(result -> assertTrue(result.getResponseBody().contains(Constants.LB_PREFIX))); }}运行单元测试,通过,可见上述配置能够通过前缀<font color="blue">lb:</font>精确找到服务: ...

November 9, 2021 · 2 min · jiezi

关于云计算:科技热点周刊|马斯克卖掉特斯拉-10-股票Facebook-停用面部识别系统微软拥抱-Metaverse雅虎退出中国

IT 科技新闻过半网友反对马斯克卖掉特斯拉 10% 股票,马斯克:会恪守投票后果继不久前在推特上发了中文《七步诗》引发热议后,特斯拉 CEO、目前的世界首富埃隆·马斯克 11 月 6 日又在推特上发动一项网络投票流动,并发表将依据投票后果决定是否发售其领有的全副特斯拉股票的 10%。马斯克在发动投票时写道,「最近有很多人认为未实现的股票收益是一种避税伎俩,所以我筹备发售我持有的 10% 的特斯拉股票。你们是否反对这项提议?」 已有 351 万人参加投票,其中 57.9% 反对马斯克发售股票。目前马斯克在推特上共领有 6280 万粉丝。这项网络投票流动将于美国东部工夫 11 月 7 日下午 3 时完结,马斯克示意,无论后果如何,都将恪守这次投票的后果。他同时发帖称,「我没有从任何中央拿现金工资或奖金。我只有股票,所以我集体征税的惟一办法就是卖股票。」数据显示,马斯克持有的特斯拉股份约为 1.705 亿股,按美东工夫上周五开盘时特斯拉每股 1222.09 美元的股价计算,马斯克如果真的卖出其持有的 10% 的特斯拉股票,其套现金额将靠近 210 亿美元。 有媒体剖析认为,马斯克此举是在回应美国近日一项针对亿万富翁所得税的提案。该项提案的一个关键点是将对美国约 700 名亿万富翁所持有资产的「未实现收益」纳税,即对亿万富翁们的资产进行每年估值,无论他们是否发售资产,都将对收益局部进行纳税。依据该提案,马斯克五年内可能要领取 500 亿美元的税。 参考链接 Facebook 停用面部识别系统11 月 2 日,Facebook 人工智能副总裁 Jerome Pesenti 在一篇博客中发表在接下来的几周将敞开 Facebook 上的面部识别系统,登录 Facebook 的人不会在照片和视频中被自动识别,并且将删除超过 10 亿用户的集体面部辨认模板。此前曾经有超过三分之一的 Facebook 日沉闷用户(超 6 亿账户)抉择应用面部辨认技术。 Pesenti 在他的博客中指出了对面部辨认技术适用性的担心,该技术因为宽泛应用而受到审查,但目前在美国还没有受到正式监管。 “咱们须要衡量面部辨认应用的踊跃用例与日益增长的社会问题,特地是监管机构尚未提供明确的规定。” Pesenti 写道。 东北大学法律和计算机科学传授伍德罗·哈佐格 (Woodrow Hartzog) 称这一决定堪称“胜利”,表明确实须要对科技公司进行继续的隐衷爱护提倡和泄露隐衷批评。 停止使用面部辨认技术,并革除与该性能的现有用户相干数据的行动标记着 Facebook 的转变,Facebook 始终是该技术的次要使用者和支持者。多年来,社交网络让人们能够抉择应用面部辨认性能,该设置会主动在图片和视频中标记他们的信息——这一动作极大地使 Facebook 受害,因为它使用户更容易互相交换,疏导他们花更多工夫在 Facebook 上。 ...

November 8, 2021 · 2 min · jiezi

关于云计算:AliRTC-开启视频互动-零计算-时代

在 2021 云栖大会《产业视频化翻新与最佳实际》视频云主题论坛中,阿里云智能高级技术专家在《AliRTC 开启视频互动 "零解决" 时代》的主题演讲中,公布了阿里云视频云下一代实时交互解决方案 —RTC “零解决”,同时分享了阿里云视频云在 RTC 产品的摸索和实际,以下为演讲内容整顿。 一、交互演进与挑战在过来几年,视频交互产品产生了什么变动? 咱们认为 RTC 产品对行业产生了两次十分重要的改革。 第一次改革是 2014 年开始的交互从图文到音视频的降级。 2014 年,互联网创业者与 RTC 产品供应商一起摸索视频互动的商业化, 教育、娱乐成为次要的冲破方向, 基于寰球范畴内的互动授课、秀场视频连麦、多人交友互动,也大多在这工夫点实现了商业与技术的胜利联合。 2017 年是一个标志性的工夫点,RTC 产品曾经帮忙头部互联网客户实现了颠覆性倒退,标记着互动视频技术与在线互动商业模式的成熟。 接下来几年更多的是不同体量、不同场景的规模复制,所以咱们能看到,在 2018 年以及后续的几年,市场上并没有新场景、新互动的翻新,而是基于不同内容、不同客群的业务复制, 视频互动从头部走向更多的细分市场。 第二个重要改革产生在 2020 年,受疫情影响,让云视频会议全面浸透,让这个工夫提前了至多 5 年。 这次市场的变动,咱们不能称之为一次技术反动,实际上对 RTC 产品并没有新的诉求,也没有产生新的互动场景和技术,但这次大规模的浸透,从新定义了供应商的市场格局,第一次让云厂商成为了市场极其重要的一部分,让市场从繁多的会议厂商,决裂为云平台 + 会议终端供应商,让咱们的客户有了更多的抉择。 从 2018 年到当初咱们没有场景上的基本冲破,是不是因为咱们的技术上遇到了瓶颈? 带着这样的问题,阿里云对 RTC 场景技术进行了深刻的技术评测,咱们试图发现整个行业大家的技术水位是什么样的,不同于单项的视频技术,RTC 的评测要更为简单。 例如,对视频编码,咱们能够通过 PSNR,SSIM,VMAF 等来剖析,对于视频分类等视觉算法,咱们能够通过 ROC 曲线来剖析,但对视频 RTC 来说,波及的主观感触十分多,是一件比较复杂的事件,目前业界也没有对立的评测规范。 咱们从这些影响用户感触的指标外面抽出六个维度表征 RTC 的体现品质。 对评测感兴趣的话能够关注咱们的「视频云技术」公众号,外面具体介绍了咱们怎么进行自动化评测的,评测过程中咱们会发明不同的网络环境,检测 RTC 在各方面的体现。 咱们对行业里的 RTC 做了一些评测,发现有两个特点。 第一,RTC 有显著的技术门槛,比如说绿色的框代表一类典型的 RTC 能力,由规模较小的团队自研,投入较小,会有显著的差距。 ...

November 8, 2021 · 1 min · jiezi

关于云计算:浪潮云说丨千呼万唤浪潮云智能视觉来了

明天,人工智能的第三次浪潮正席卷寰球,在这次倒退浪潮中,计算机视觉功不可没,视觉解决的终极目标在于使得计算机能像人一样察看感知世界。 智能视觉利用中面临的问题 随着国家鼎力建设智慧城市、雪亮工程,布局“新基建”策略,以视频为根底的智能视觉平台,为视频图像剖析技术、计算机视觉等人工智能技术提供了最佳的落地利用场景。视频利用场景越来越宽泛,更多的行业和厂商参加,让智能视觉利用在我的项目中遇到的问题越来越多: 浪潮云智能视觉的能力 为无效解决智能视觉利用中面临的技术难题与我的项目需要,浪潮云智能视觉产品来了: 兼容并蓄,会集更多视频资源浪潮云智能视觉提供了全栈视频接入能力,可兼容市面可见大部分的视频流式传输协定。除了规范的国标、ONVIF通用协定外,智能视觉对常见设施厂商的私协均作了适配。此外,区别于传统视频厂商,平台还提供RTSP、RTMP、HLS、HTTPFLV、MPEGDASH等各种流协定的视频资源接入能力,让智能能够服务更多视频场景。 算法仓库,智能算法灵便调度智能视觉提供了视觉算法仓库能力,它是一套集成多种智能算法的对立治理调度零碎,通过对立集成框架能够注册不同厂家、不同场景、不同业务的智能算法。依据下层业务的理论需要,依照算法仓库规定的接口标准,灵便按需调度资源池中的硬件资源,并加载相应的智能算法,满足智能利用需要,实现多种智能算法的对立、灵便调度,晋升计算资源的整体利用率。 120+视频算法服务,笼罩泛滥行业利用场景此外,通过多年的钻研摸索,浪潮云积攒了大量的行业算法服务能力,能够应答更多的场景需要。如渣土车检测、积水检测等城管市政类,漂浮物检测、钓鱼检测等水务水利类,工装穿戴检测、电动车入电梯检测等应急治理类,污水泡沫辨认、河岸垃圾辨认等生态环境类,打扫工具检测、餐饮行业员工穿戴检测等市场监管类,长期路障事件辨认、事变检测等道路交通类,印章检测、证照智能分类等行政服务类,以及白酒掀开盖、施工资料检测等非凡行业类,共120余种视频类算法服务。 在AI技术的研发与产品的深度交融中,浪潮云在一直思考、摸索、翻新。作为新一轮产业改革的外围驱动力,AI让社会的生产生存形式走向数字化、智能化,浪潮云也将继续传递价值,减速AI在各场景中的利用,帮忙行业走得更远。

November 5, 2021 · 1 min · jiezi

关于云计算:是云舟呀|Kubernetes-云舟组合-个性化需求支持就没输过

焱融云舟收费试用流动及招募体验官流动正在进行中,请戳链接理解详情: https://www.yanrongyun.com/zh-cn/products/saas 焱融云舟提供了 NFS 挂载形式的容量型文件系统,可用于多种场景,例如备份、网盘、文件共享等。明天咱们将具体地解说如何联合 Kubernetes 做到按需创立挂载来进一步满足个性化需要。 01 根底环境筹备在创立了虚构之后,为了后续的操作,咱们需做必要的调整。 禁用 Selinux 批改 ssh 登录秘钥,将 authorized_keys 内的前局部校验移除,而后以 root 从新 ssh 登录。 批改 hostname 并重启 02 装置KubernetesKubernetes 的装置形式有多种,也存在多种发行版,本文采纳常见的装置形式。 首先装置 Docker 并启动,咱们采纳 CentOS 默认的1.13版本即可。 在装置 Kubernetes 并确认工作之后即可,本文仅创立了单节点的 Kubernetes 环境,依据须要,能够思考自行进行扩容。 03 筹备NFS配置焱融云舟提供了 NFS 挂载形式,但如何利用到 Kubernetes 环境,须要思考一下。将 NFS 目录挂载到宿主上,而后利用HostPath来进行存储卷的调配,不够灵便。咱们都晓得 Kubernetes 内存在 PVC 的概念,如果能用 PVC 来主动通过 NFS 创立 PV 的形式,就会灵便很多。这里咱们间接采纳官网的 nfs-client-provisioner 来满足上述需要。 先装置 nfs-utils 通过焱融云舟 (https://t.hk.uy/atc2) 创立文件系统之后,在文件系统挂载页面能够看到以下内容。 ...

November 5, 2021 · 1 min · jiezi

关于云计算:Spring-Cloud-Gateway实战之一初探

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos对于《Spring Cloud Gateway实战》系列《Spring Cloud Gateway实战》是欣宸在Java畛域的系列原创,旨在通过我的项目实战与大家一起学习和把握Spring Cloud Gateway,更好的为理论我的项目服务 本篇概览作为《Spring Cloud Gateway实战》的开篇,本文的次要内容如下: 基础知识简介确认环境波及到的工具和服务的版本启动nacos,作为后续实战的注册核心和配置核心创立maven父工程,为后续实战的代码和依赖库版本做好治理创立名为<font color="blue">common</font>的子工程,寄存共用的常量和数据结构创立名为<font color="blue">provider-hello</font>的web利用,用于gateway路由的指标运行一个简略的demo,实现spring-cloud-gateway的初体验对于Spring Cloud Gateway这是一个基于Spring技术栈构建的API网关,波及到:Spring5、Spring Boot 2、Reactor等,指标是为我的项目提供简略高效的API路由,以及弱小的扩大能力:平安、监控、弹性计算等官网架构图如下,可见申请到来后,由<font color="blue">Handler Mapping</font>决定申请对应的实在指标,而后交给<font color="blue">Web Handler</font>,由一系列过滤器(filter)执行链式解决,从红色箭头和正文能够发现,申请前后都有过滤器在运行: 版本信息《Spring Cloud Gateway实战》系列波及的软件和库版本信息如下:本篇实战波及到的次要版本状况如下:JDK:1.8.0_291IDEA:2021.1.3 (Ultimate Edition)maven:3.8.1操作系统:win10 64位springboot:2.4.2spring-cloud:2020.0.1spring-cloud-alibaba:2021.1更具体的版本匹配关系请参考:https://github.com/alibaba/sp...经典配置中的外围概念先通过一个典型的简化版配置来理解几个外围概念,假如Spring Cloud Gateway利用正在运行,监听8080端口,一旦有近程申请来到8080端口,上面的配置就会失效了,三个外围概念,以及每个配置的作用,请参考中文正文:spring: cloud: gateway: # 外围概念1:路由,一个路由代表一个解决逻辑, # 该逻辑外面蕴含三个元素:匹配条件(是否该此路由解决)、实在解决地址、过滤器 routes: # id要确保唯一性 - id: add_request_header_route # 实在解决地址,申请一旦确定是以后路由解决,就会转发到这个地址去 uri: https://example.org # 外围概念2:谓语或者断言,作用是判断申请是否由以后路由解决 predicates: # 这是断言的一种,查看申请的Cookie中mycookie的值是否等于mycookievalue - Cookie=mycookie,mycookievalue # 外围概念3:过滤器,申请前和申请后都能够有过滤器解决申请响应数据 filters: # 这个过滤器的作用是在申请header中增加一个键值对,值等于"aaabbbccc" - AddRequestHeader=X-Request-Red, aaabbbccc上述配置信息中的predicates是简化版配置,和残缺配置比照成果如下,简略的说就是把一行拆成了三项:name、args.name、args.regexp 理论知识点到为止,咱们还是尽快入手吧启动nacos-2.0.3整个《pring Cloud Gateway实战》系列,咱们会波及到多个服务,这就不可避免的会用到注册核心和配置核心,这里我抉择了nacos,它能够很好地承当注册核心和配置核心的角色,接下来介绍如何部署和启动nacos下载nacos,地址是:<font color="blue">https://github.com/alibaba/na...</font>解压后进入<font color="blue">nacos\bin</font>目录,执行以下命令启动nacos:startup.cmd -m standalone如果您的电脑是mac或者linux,请执行以下命令启动nacos:sh startup.sh -m standalone浏览器登录nacos,地址是<font color="blue">http://localhost:8848/nacos</font>,账号和明码都是<font color="red">nacos</font>登录胜利后显示如下: 源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-tutorials</font>文件夹下,如下图红框所示: 《Spring Cloud Gateway实战》系列的父工程新建名为<font color="blue">spring-cloud-tutorials</font>的maven工程,这就是《Spring Cloud Gateway实战》系列所有源码的父工程就,pom.xml内容如下,可见这里将springboot、spring-cloud、spring-cloud-alibaba库的版本号都曾经确定,今后子工程就无需关注依赖库的版本号了:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <modules> <module>hello-gateway</module> <module>provider-hello</module> <module>common</module> </modules> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.2</version> <relativePath/> </parent> <groupId>com.bolingcavalry</groupId> <artifactId>spring-cloud-tutorials</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <java.version>1.8</java.version> <spring-cloud.version>2020.0.1</spring-cloud.version> <spring-cloud-alibaba.version>2021.1</spring-cloud-alibaba.version> </properties> <packaging>pom</packaging> <description>Demo project for Spring Cloud </description> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>${spring-cloud-alibaba.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.14.9</version> <scope>compile</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency> </dependencies> </dependencyManagement></project>创立名为common的子工程,寄存共用的常量和数据结构当初创立名为<font color="blue">common</font>的子工程,整个《Spring Cloud Gateway实战》系列波及的常量和数据结构都放在这个子工程中,不便其余工程应用新增常量Constants.java:package com.bolingcavalry.common;public interface Constants { String HELLO_PREFIX = "Hello World";}创立web利用,作为服务提供方当初创立名为<font color="blue">provider-hello</font>的web利用,这是个极其一般的web利用,提供几个http接口服务,咱们在尝试Spring Cloud Gateway的基本功能时,都会将申请路由到<font color="blue">provider-hello</font>上来<font color="blue">provider-hello</font>是个一般的springboot利用,会在nacos进行注册,其pom.xml内容如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-tutorials</artifactId> <groupId>com.bolingcavalry</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>provider-hello</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.bolingcavalry</groupId> <artifactId>common</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--nacos:用于服务注册与发现--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- 如果父工程不是springboot,就要用以下形式应用插件,能力生成失常的jar --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.bolingcavalry.provider.ProviderApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build></project>工程的配置文件application.yml如下,web端口是<font color="red">8082</font>,还有一处要留神的是nacos服务地址:server: #服务端口 port: 8082spring: application: name: provider-hello cloud: nacos: discovery: # nacos服务地址 server-addr: 127.0.0.1:8848启动类ProviderApplication.javapackage com.bolingcavalry.provider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplicationpublic class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); }}一般的Controller类<font color="blue">Hello.java</font>,对外提供一个http服务:package com.bolingcavalry.provider.controller;import com.bolingcavalry.common.Constants;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import java.text.SimpleDateFormat;import java.util.Date;@RestController@RequestMapping("/hello")public class Hello { private String dateStr(){ return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); } /** * 返回字符串类型 * @return */ @GetMapping("/str") public String helloStr() { return Constants.HELLO_PREFIX + ", " + dateStr(); }}新增测试类HelloTest.java,用于查看利用的服务是否失常:package com.bolingcavalry.provider.controller;import com.bolingcavalry.common.Constants;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.http.MediaType;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import static org.hamcrest.Matchers.containsString;import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@SpringBootTest@AutoConfigureMockMvc@Slf4jclass HelloTest { @Autowired private MockMvc mvc; @Test void hello() throws Exception { String responseString = mvc.perform(MockMvcRequestBuilders.get("/hello/str").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(containsString(Constants.HELLO_PREFIX))) .andDo(print()) .andReturn() .getResponse() .getContentAsString(); log.info("response in junit test :\n" + responseString); }}执行单元测试(此时nacos是否启动无所谓,只是不启动的话控制台会有一些错误信息,然而没有影响),如下,测试通过示意服务是失常的: ...

November 5, 2021 · 3 min · jiezi

关于云计算:OpenStackDockerK8s开源如何逐步占领云计算上

https://www.bilibili.com/vide...

November 4, 2021 · 1 min · jiezi

关于云计算:科技热点周刊|ClickHouse-融资-25-亿美元个人信息保护法正式实施Facebook-改名-Meta

IT 科技新闻Facebook 发表改名为 Meta据外媒报道,美国当地工夫周四,在年度 Connect 大会上,社交媒体巨头 Facebook 发表正式更名为 Meta,公司自 12 月 1 日将开始按新的股票代码 “MVRS” 交易。马克・扎克伯格 (Mark Zuckerberg) 成为新公司的首席执行官兼董事长。据理解,“Meta”,来源于“元宇宙”(Metaverse)。 往年 8 月,扎克伯格发表要率领团队 all in 元宇宙。Facebook 负责 AR 和 VR 工作的硬件部门 Facebook Reality Labs 将成为一个独立的报告部门,Facebook 示意往年要为 Reality Labs 部门投入至多 100 亿美元,以进一步推动加强(AR)/ 虚拟现实(VR)软硬件和相干内容资源的开发。Facebook 还心愿在将来几年持续减少投资。Facebook 还在这个部门成立了一个新的团队,专责倒退元宇宙事业。10 月 19 日,Facebook 发表将打算在将来五年内,在欧盟发明 1 万个待业岗位,以帮忙新团队建设“元宇宙”平台。 扎克伯格预计,在将来十年内,元宇宙将有 10 亿用户,领有数千亿美元的数字商务,并为数百万创作者和开发者提供工作岗位。但他抵赖,公司还有很长的路要走。扎克伯格示意,了解元宇宙的最好办法是亲自体验它,只管它还不齐全存在。扎克伯格示意,元宇宙方面的投资并不能立即带来利润,预计或者到这个十年的晚些时候,或会更像个真正的商业故事。 参考链接:【1】https://www.cnbc.com/2021/10/... ClickHouse: 以 20 亿美元的估值筹集了 2.5 亿美元的新一轮融资开源 OLAP 数据库初创公司 ClickHouse Inc. 日前发表实现 2.5 亿美元 B 轮融资,本轮由 Coatue、Altimeter 领投,现有股东 Index、Benchmark、Yandex、Almaz、Lead Edge 等参投,Lightspeed、Redpoint、FirstMark 作为新投资人退出。此次融资后,ClickHouse 估值达到 20 亿美元。 ...

November 4, 2021 · 2 min · jiezi

关于云计算:阿里云视频云用技术普惠打造平民化虚拟人

近日,国内首个超写实数字人 AYAYI 发表入职阿里,成为天猫超级品牌日的数字主理人,二者将独特开启元宇宙的营销世界。在将来她将与天猫解锁多个身份,如 NFT 艺术家、数字策展人、潮牌主理人、顶流数字人等等。 提到虚构数字人,大家第一工夫想到就是 2012 年诞生的洛天依。她的呈现补了国内空白的虚构偶像市场。尽管她最后只领有声音与立绘,但九年来,粉丝们一直为她写歌作曲、绘制插画、制作 MMD,这些同人创作,一点点填充着最后的空白。相比于真人养成偶像,依靠于 UGC 内容长大的虚构偶像,更像是一场纯正的养成式造星。而在 2021 年初以洛天依为代表的、次元特色的虚构偶像开始在春晚大放荣耀,这意味着国家级平台对次元文化的尊重与认可,也是虚构与事实产生的一次无益互动。 洛天依亮相春晚节目少儿歌舞《听我说》 iiMedia Research (艾媒征询) 数据显示,2020 年中国虚构偶像外围产业规模为 34.6 亿元,同比增长 70.3%,预计 2021 年将达到 62.2 亿元;另一方面,随着商业价值被一直挖掘,越来越多产业与虚构偶像分割在一起,虚构偶像带动产业规模 2020 年为 645.6 亿元,预计 2021 年为 1074.9 亿元。而在国外的短视频平台上,虚构数字人也是大行其道。一位名叫 Lil Miquela 的虚构偶像,其人设是一个 19 岁混血女孩,有着可恶雀斑,长期定居在洛杉矶,领有西班牙裔、巴西裔和美国血统的虚构模特及音乐人。据央视网 2021 年 01 月 30 日的报道,Lil Miquela 在 2019 年的支出折合人民币大概为 7600 万。 什么是虚构数字人?“虚构数字人”一词最早源于 1989 年美国国立医学图书馆发动的“可视人打算”(Visible Human Project, YHP)。2001 年, 国内以“中国数字化虚构人体的科技问题”为主题的香山 迷信会议第 174 次学术讨论会提出了“数字化虚构人体”的概 念。这些“虚构数字人”次要是指人体构造的可视化,以三维模式显示人体解剖构造的大小、形态、地位及器官间的互相空间关系,即利用人体信息,实现人体解剖构造的数字化。次要利用于医疗畛域的人体解剖教学、临床诊疗等。 不同于上述医疗畛域的数字化人体,目前网络上围绕元宇宙所探讨的虚构数字人(以下简称“数字人”)是指具备数字化形状的虚构人物。与具备实体的机器人不同,虚构数字人依赖显示设施存在。虚构数字人宜具备以下三方面特色:一是领有人的外观,具备特定的面貌、性别和性情等人物特色;二是领有人的行为,具备用语言、面部表情和肢体动作表白的能力;三 是领有人的思维,具备辨认外界环境、并能与人交换互动的能力。 近年来,得益于深度学习算法的冲破,数字人的制作过程变成更加简略,虚构数字人开始进入公众的视线,利用在各行各业,例如曾经呈现了娱乐型数字人(如虚构主播、 虚构偶像)、教育型数字人(如虚构老师)、助手型数字人 (如虚构客服、虚构向导、智能助手)、影视数字人(如替 身演员或虚构演员)等。不同形状、不同性能的虚构数字人赋能影视、传媒、游戏、金融、文旅等畛域,依据需要为用户提供定制化服务。 ...

November 4, 2021 · 1 min · jiezi

关于云计算:四种-AI-技术方案教你拥有自己的-Avatar-形象

大火的 Avatar到底是什么 ?随着元宇宙概念的大火,Avatar 这个词也开始越来越多呈现在人们的视线。2009 年,一部由詹姆斯・卡梅隆执导 3D 科幻大片《阿凡达》让很多人意识了 Avatar 这个英语单词。不过,很多人并不知道这个单词并非导演杜撰的,而是来自梵文,是印度教中的一个重要术语。依据剑桥英语词典解释,Avatar 目前次要蕴含三种含意。 avatar 在剑桥词典的翻译后果 © Cambridge University Press 最后,Avatar 起源于梵文 avatarana ,由 ava ( off , down )+ tarati ( cross over )形成,字面意思是 “下凡”,指的是神灵来临世间的化身,通常特指主神毗湿奴 ( VISHNU ) 下凡化作人形或者兽形的状态。后于1784年进入英语词语中。 1985 年切普・莫宁斯塔和约瑟夫・罗梅罗在为卢卡斯影视公司Lucasfilm Games ( LucasArts ) 设计网络角色扮演游戏Habitat时应用了 Avatar 这个词来指代用户网络形象。而后在1992 年,科幻小说家 Neal Stephenson 撰写的《Snow Crash》一书中形容了一个平行于事实世界的元宇宙。所有的事实世界中的人在元宇宙中都有一个网络分身 Avatar,这一次也是该词首次呈现在公众媒体。 互联网时代,Avatar 一词开始被程序员们宽泛应用在软件系统中,用于代表用户集体或其性情的一个图像,即咱们常说的 “头像” 或 “集体秀”。这个头像能够是网络游戏或者虚拟世界里三维平面的图像,也能够是网络论坛或社区里罕用的二维立体图像。它是能够代表用户自己的一个标志物。 从QQ秀到Avatar现在反对让用户创立属于本人的头像曾经成为了各种软件应用的标配,用户应用的头像也随着技术倒退从一般 2D形象倒退到了3D形象。里程碑事件当属2017 年,苹果在 iPhone X 公布了新性能 ——Animoji,应用面部辨认传感器来检测用户面部表情变动,同时用麦克风记录用户的声音,并最终生成可恶的 3D 动画表情符号,用户能够通过 iMessage 与敌人分享表情符号。然而第一代不反对用户自定义形象,仅支持系统内置的动物卡通头像。随后更新的 Animoji 二代开始反对用户自由化捏脸,生成风格化的人脸头像。以后不少场景中能够看到自动化捏脸性能,仅通过拍摄一张或几张照片,主动生成合乎用户人脸特点的CG模型,但背地依赖于简单的CG建模及渲染技术支持。 ...

November 4, 2021 · 2 min · jiezi

关于云计算:一张图教你玩转阿里云双11上云狂欢节

一年一度的双11狂欢节曾经开启啦!上面一张图教你如何玩转阿里云双11上云狂欢节! 双11主会场地址:http://click.aliyun.com/m/1000305076/

November 4, 2021 · 1 min · jiezi

关于云计算:springcloudsquare源码速读retrofit-okhttp篇

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demosspring-cloud-square系列文章五分钟搞懂spring-cloud-squarespring-cloud-square开发实战(三种类型全笼罩)spring-cloud-square源码速读(spring-cloud-square-okhttp篇)spring-cloud-square源码速读(retrofit + okhttp篇)本篇概览本文是《spring-cloud-square学习》系列的终篇,上一篇咱们理解了spring-cloud-square-okhttp库的源码和原理,明天晋升一点难度,看看spring-cloud-square的另一种类型的源码:<font color="blue">spring-cloud-square-retrofit</font>,也就是下图红框中的那种: 源码剖析指标接下来开始剖析spring-cloud-square-retrofit工程的源码,如下图红框所示: 本篇指标十分明确,只搞清楚一件事:在应用spring-cloud-square的时候,以前文的consumer-retrofit-okhttp子工程为例,为什么咱们只写了HelloService接口,但却能通过Autowired注解应用HelloService的实现类?提前小结如果您想理解spring-cloud-square的retrofit局部的原理,却又苦于没有工夫深入研究,能够看看上面这份提前小结的内容:整个机制的运行,能够分为绝对独立的四个局部:业务利用编码应用spring-cloud-square相干的注解、bean的factory注册到spring环境、bean的factory类在spring环境实例化、通过factory的实例在spring生产HelloService接口的实现类依据下面的剖析,最重要的应该是bean的factory类:<font color="blue">RetrofitClientFactoryBean</font>,它实现了FactoryBean接口,其getObject办法就是依据HelloService接口生成实现类和要害,最终会调用下图红框中的Retrofit.create办法创立实例: Retrofit类并非spring-cloud的我的项目,而是来自Retrofit库,其create办法中应用了JDK的Proxy.newProxyInstance办法,该办法能够依据HelloService接口生成一个实现了该接口的实例: 在应用spring-cloud-square的retrofit + okhttp计划时,HelloService接口中应用的还是近程服务的服务名,而不是地址和端口,这是因为应用了spring-cloud-square-okhttp库,所以服务名转为<font color="red">地址+端口</font>的逻辑与前文《spring-cloud-square源码速读(spring-cloud-square-okhttp篇)》保持一致以上就是整个源码剖析的论断了,我将波及到的关联代码流程整顿成简图,如下所示: 回顾利用如何应用spring-cloud-square-retrofit在剖析源码之前,先回顾一下《spring-cloud-square开发实战》中的代码,咱们过后是如何应用<font color="blue">spring-cloud-square-retrofit</font>的(对应demo中的consumer-retrofit-okhttp子工程)新建配置类OkHttpClientConfig,应用了EnableRetrofitClients注解,向spring环境注册OkHttpClient.Builder实例:@Configuration@EnableRetrofitClientsclass OkHttpClientConfig{ @Bean @LoadBalanced public OkHttpClient.Builder okHttpClientBuilder() { return new OkHttpClient.Builder(); }}定义HelloService接口,用注解RetrofitClient润饰,注解的值是近程调用的服务名<font color="blue"></font>,外面申明hello办法,用注解GET润饰,注解的值是近程调用的接口的path:@RetrofitClient("provider")public interface HelloService { @GET("/hello-obj") Call<HelloResponse> hello(@Query("name") String name);}在业务要做近程调用的时候,用Autowired注解润饰HelloService接口,即可调用HelloService.hello办法,至于接口对应的实例来自哪里,开发者不用关注:@RestControllerpublic class RemoteHello { @Autowired(required = false) HelloService helloService; @GetMapping("/remote-obj") public HelloResponse hello(@RequestParam("name") String name) throws IOException { return helloService.hello(name).execute().body(); }}以上就是咱们开发业务代码时应用spring-cloud-square的要害操作,接下来就从源码角度来剖析这些操作到底施展了什么作用源码剖析(类定义注册阶段)回顾一下咱们写的OkHttpClientConfig.java,外面应用了注解<font color="blue">EnableRetrofitClients</font>,这就是本次浏览代码的入口:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.TYPE)@Documented@Import({ RetrofitConfiguration.class, RetrofitClientsRegistrar.class })public @interface EnableRetrofitClients { String[] value() default {}; String[] basePackages() default {}; Class<?>[] basePackageClasses() default {}; Class<?>[] defaultConfiguration() default {}; Class<?>[] clients() default {};}从上述代码可见RetrofitConfiguration和RetrofitClientsRegistrar都会比实例化,RetrofitConfiguration过于简略就不看了,重点关注RetrofitClientsRegistrar,先来看它的类图,搞清楚继承和实现如下图所示,RetrofitClientsRegistrar集成自AbstractRetrofitClientsRegistrar,而AbstractRetrofitClientsRegistrar又集成自ImportBeanDefinitionRegistrar ...

November 4, 2021 · 7 min · jiezi

关于云计算:Kubernetes-上调试-distroless-容器

TL;DR本文内容: 介绍 distroless 镜像、作用以及简略的应用如何针对 distroless 容器的进行调试长期容器(v.1.18+)的应用Distroless 镜像Distroless 容器,顾名思义应用 Distroless 镜像作为根底镜像运行的容器。 "Distroless" 镜像只蕴含了你的应用程序以及其运行时所须要的依赖。不蕴含你能在规范 Linxu 发行版里的能够找到的包管理器、shells 或者其余程序。GoogleContainerTools/distroless 针对不同语言提供了 distroless 镜像: gcr.io/distroless/static-debian11gcr.io/distroless/base-debian11gcr.io/distroless/java-debian11gcr.io/distroless/cc-debian11gcr.io/distroless/nodejs-debian11gcr.io/distroless/python3-debian11Distroless 镜像有什么用?那些可能是构建镜像时须要的,但大部分并不是运行时须要的。这也是为什么上篇文章介绍 Buildpacks 时说的一个 builder 的 stack 镜像蕴含构建时根底镜像和运行时根底镜像,这样能够做到镜像的最小化。 其实管制体积并不是 distroless 镜像的次要作用。将运行时容器中的内容限度为应用程序所需的依赖,此外不应该装置任何货色。这种形式可能极大的晋升容器的安全性,也是 distroless 镜像的最重要作用。 这里并不会再深刻探索 distroless 镜像,而是如何调试 distroless 容器 没有了包管理器,镜像构建实现后就不能再应用相似 apt、yum 的包管理工具;没有了 shell,容器运行后无奈再进入容器。 “就像一个没有任何门的房间,也无奈装置门。” Distroless 镜像在晋升容器安全性的同时,也为调试减少了难度。 应用 distroless 镜像写个很简略的 golang 利用: package mainimport ( "fmt" "net/http")func defaultHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "Hello world!")}func main() { http.HandleFunc("/", defaultHandler) http.ListenAndServe(":8080", nil)}比方应用 gcr.io/distroless/base-debian11 作为 golang 利用的根底镜像: ...

November 3, 2021 · 3 min · jiezi

关于云计算:是云舟呀|云舟之上个人网盘

欢送登录以下网址体验云舟 SaaS 数据服务: https://console.yanrongyun.co... 实际分享当初国内可抉择的网盘越来越少,自建网盘无疑是一个不错的选项。搭建集体网盘的软件有很多,例如 NextCloud, ownCloud, Seafile, Cloudreve,性能都根本相似,但很显著选用的存储是一个重要的方面,例如价格、容量等。 在本文中,咱们利用 焱融云舟 提供的存储来简略疾速的搭建一个集体网盘,以下实操以 Cloudreve 为例。 1. 在通过焱融云舟申请了文件系统空间,并且创立了虚拟机之后,间接利用文档中的挂载步骤挂载。 2. 下载官网 Release 版本, 因为软件在 GitHub 上,须要进行适当的变通,而后拜访 https://t.hk.uy/arWs。 3. 本次运行在 linux 操作系统上,所以抉择 amd64.tar.gz 即可。 4. 解压后,间接运行 ./cloudreve。 5. 在放开相应的虚拟机平安组后,间接拜访虚拟机公网 IP 的5212端口,登录即可看到如下页面: 6. 首先到右上角的集体设置内,关上治理面板\存储策略,并抉择批改。 其中标注地位为批改到咱们在虚拟机内挂载的云舟存储目录,进行保留。 7. 而后抉择左侧参数设置/站点信息 ,批改站点 URL,便于做文件的分享。 其中标注地位须要批改为对应的浏览器拜访地址。 8. 返回到主页后,能够抉择建设目录,或者上传文件,同时分享给其余的人,这样其他人就能够随便的拜访文件了。 9. 在虚拟机上,能够直观便捷的看到文件保留状况。 至此,咱们顺利地通过焱融云舟文件系统作为公有网盘的后端贮存,既保证数据的可靠性,又十分便当的将数据分享进来。 云舟系列文章: 喜大普奔!焱融科技正式推出云舟数据服务平台一看就懂|焱融云舟数据服务平台上手指南云舟之上部落格

November 2, 2021 · 1 min · jiezi

关于云计算:完整版直播回顾2021-MAXP-无服务器赛题讲解

Gartner 最近的一份报告表明:到 2021 年,寰球将有 20% 的企业部署无服务器架构。无服务器架构不再只是一个热门话题,而是逐步地成为云计算畛域的重要技术方向,并且曾经在软件世界掀起一场反动。诸多大型科技企业(如亚马逊、微软和谷歌)曾经在无服务器架构畛域重资投入,追赶反动的浪潮。与其名字相同,无服务器架构实际上并没有把服务器去掉。那么,到底什么是无服务器架构? 9 月 24 日,biendata 邀请亚马逊云科技解决方案架构师吕宁,针对 2021 MAXP 无服务器赛题发展了一场线上直播解说。在本次直播中吕宁老师别离介绍了亚马逊云科技的 Serverless 服务:Lambda 和 S3;以及内容散发网络服务 Amazon CloudFront;最初具体解说了本次大赛无服务器赛题的解题技巧。本文为残缺直播内容的转写图文回顾,心愿可能帮忙各参赛团队宽阔思路,获得更好的问题。 直播视频回顾:https://www.bilibili.com/vide... 对于 2021 MAXP2021 MAXP 高性能云计算翻新大赛(2021 MAXP)由中国计算机学会高性能计算业余委员会和中国信息通信研究院领导,ACM 中国高性能计算专家委员会(ACMSIGHPC)和云计算开源产业联盟联结主办,亚马逊云科技和腾讯云反对,阿里云、华为云、UCloud、天翼云等厂商参加。大赛以高性能云计算为主题,旨在进一步推动国内高性能计算的倒退,并为参赛者提供了高达 40 万元的奖金池,还会提供实习机会和权威荣誉证书。 直播回顾针对无服务器的赛题分为三局部进行解说。首先是 AWS Serverless服务,分为 Lambda 和 S3 两个模块。其次是 CloudFront。最初解说 Serverless 无服务器赛题。 无服务器具备 4 个特点。第一个特点是不须要治理服务器;第二个特点是可能继续拓展,它可能依据流量的大小进行主动拓展;第三个特点是为价值付费,也就是即用即付费。如果无服务器的利用处于闲暇状态,那么这个利用不免费;第四个特点是具备高可用和容错的特点。 Lambda 是无服务器的计算服务,让用户能够无需预置服务器即可运行代码,Lambda 能够被事件源触发。 事件源次要蕴含三种类型。第一种是服务端点申请。例如 API Gateway 的 HTTP 申请。第二种是数据状态扭转,例如数据库中有新的数据写入。第三种是资源状态扭转,例如像 EC 机器变成了运行状态。Lambda 目前反对 Node.js , Python ,Java 等罕用语言。依据 Lambda 的业务逻辑,它能够和任意的服务交互。 以 Lambda 的事件源举例,事件源里有与数据存储相干的,例如 S3 , DynamoDB 等。也能够被 ENDPOINTS 触发,例如 API Gateway。还能被开发和管理工具触发,CloudFormation 状态和资源变动,也能够触发 Lambda。通过事件和音讯服务来触发。例如 SNS , SQS 等。 ...

November 2, 2021 · 2 min · jiezi

关于云计算:springcloudsquare源码速读springcloudsquareokhttp篇

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 前文回顾本篇是欣宸《spring-cloud-square原创》系列的第三篇,咱们疾速回顾一下后面两篇:《五分钟搞懂spring-cloud-square》:说分明了spring-cloud-square是什么《spring-cloud-square开发实战(三种类型全笼罩)》:说分明了spring-cloud-square怎么用接下来,为了深刻理解spring-cloud-square,我打算读它的源码,爱学习的您有没有趣味一起呢?浏览源码的动机先说一下为什么要去看spring-cloud-square源码spring是java开源我的项目的榜样,它的源码具备很高的品质和参考价值和其余spring我的项目相比,spring-cloud-square的源码少得可怜,花起码的工夫浏览spring我的项目的源码,这事儿我挺有趣味主动拆卸、拦截器、业务接口主动实现,这些技术都呈现在spring-cloud-square我的项目中,看懂了学会了,对本人的我的项目有很高的参考价值把握外围方向在spring-cloud-square这种集成了多个库的我的项目中,波及的源码是很多的,很容易陷入一个又一个代码的细节中(不停的开展波及的类和源码),因而,这里先确定本次源码剖析的外围方向:okhttp源码,只看要害局部,其余一律跳过只想晓得在应用spring-cloud-square-okhttp.jar的时候,为何输出服务名就能拜访到对应的服务以上就是这次浏览源码的主方向,在陷入细节时,这个主方向会及时将我拉回来,持续朝既定目标后退下载源码下载地址是:https://github.com/spring-clo...,我选则了下图红框中的release版下载: 下载结束后解压,用IDEA关上源码,失去的我的项目构造如下: 明天,咱们的指标就是上图的<font color="blue">spring-cloud-square-okhttp</font>子工程,读它源码,学它精华!提前小结总所周知,欣宸文笔程度在CSDN垫底,还喜爱废话,导致很多读者都看不下去,因而这里提前做个小结,将本篇精髓间接奉上,如果您工夫无限,或者罗唆没趣味深刻理解,能够看完小结后间接来到,也不算毫无播种.....将整个工程源码串起来小结:spring-cloud-square-okhttp.jar的使用者是个java利用,该利用要写代码实例化OkHttpClient.Builder对象spring.factories中配置的OkHttpLoadBalancerAutoConfiguration,会被spring框架扫到并实例化OkHttpLoadBalancerAutoConfiguration中实例化了OkHttpLoadBalancerInterceptor,并将LoadBalancerClient实例传给它OkHttpLoadBalancerAutoConfiguration中实例化了OkHttpClientBuilderCustomizer接口的实现,这外面是个lambda表达式,性能是将所有Interceptor传给lambda表达式对应的builderOkHttpLoadBalancerAutoConfiguration中实例化了OkHttpBuilderBeanPostProcessor,当步骤1中的OkHttpClient.Builder对象被实例化后,OkHttpBuilderBeanPostProcessor会调用OkHttpClient.Builder的addInterceptor对象,将OkHttpLoadBalancerInterceptor传给OkHttpClient.Builder业务代码近程拜访的时候,用OkHttpClient.Builder创立OkHttpClient对象,此时的OkHttpClient就失去了OkHttpLoadBalancerInterceptor,在近程拜访时,业务代码传入的URL中是近程服务的名字,然而OkHttpLoadBalancerInterceptor会借助LoadBalancerClient将近程服务的名字替换成对应的IP和端口,而后再执行真正的网络申请据说一图胜千言,欣宸二把刀的作图技术切实不敢恭维,但还是保持把重要步骤用图表达出来了,如下所示,心愿您能将就着看: 接下来,如果您还想深入研究和理解spring-cloud-square,就随欣宸一起畅游它的源码世界吧知识点补充(OkHttpClient.Builder.addInterceptor)首先要补充一个重要知识点:OkHttpClient.Builder.addInterceptor办法的作用是什么?看源码很简略,就是将interceptor放入汇合<font color="blue">interceptors</font>中: public Builder addInterceptor(Interceptor interceptor) { if (interceptor == null) throw new IllegalArgumentException("interceptor == null"); interceptors.add(interceptor); return this; }builder是为实例化OkHttpClient服务的,去看OkHttpClient的构造方法,发现interceptors被复制过去了: 在应用OkHttpClient拜访网络的时候,会执行下图红框中的getResponseWithInterceptorChain: 而后就是经典的链式解决了,所有的interceptor都会被执行,下图展现了如何结构和启动链式解决: 进入proceed外部,可见每次执行proceed办法,都会取出一个interceptor,调用其intercept办法: 以spring-cloud-square框架的OkHttpLoadBalancerInterceptor为例,下图红框中的办法<font color="red">极为重要</font>,这行代码执行后,会回到上一幅图中的proceed办法,持续解决下一个interceptor: 至此能够小结了:OkHttpClient.Builder.addInterceptor办法的作用,是传入一个Interceptor实现类,在OkHttpClient执行网络申请的时候,该Interceptor的intercept办法会被执行,请记住这个小结,前面有大用处!spring-cloud-square-okhttpspring-cloud-square提供了三种具体的实现,第一种是<font color="blue">spring-cloud-loadbalancer + spring-cloud-square-okhttp</font>的组合,而spring-cloud-loadbalancer是另一个我的项目不在此文中开展,因而,咱们最先看的就是<font color="red">spring-cloud-square-okhttp</font>的源码了关上我的项目如下图,我只能感叹两个字:<font color="blue">就这?</font> 对于配置文件additional-spring-configuration-metadata.json,在spring文档中有提到,如下图红框,负责解决注解的处理器会将additional-spring-configuration-metadata.json的内容合并到元数据文件中去: 看看additional-spring-configuration-metadata.json的内容,如下,定义了属性<font color="blue">okhttp.loadbalancer.enabled</font>的默认值为true:{ "groups": [ ], "properties": [ { "name": "okhttp.loadbalancer.enabled", "type": "java.lang.Boolean", "description": "Allows disabling OkHttp Spring Cloud LoadBalancer support.", "defaultValue": "true" } ]}如果您写过自定义starter库,那么您肯定晓得,整个spring-cloud-square-okhttp我的项目应该从spring.factories文件看起,这外面会确定那些配置类要被实例化:org.springframework.boot.autoconfigure.EnableAutoConfiguration=\org.springframework.cloud.square.okhttp.loadbalancer.OkHttpLoadBalancerAutoConfiguration可见配置类OkHttpLoadBalancerAutoConfiguration会被实例化,咱们去看看OkHttpLoadBalancerAutoConfiguration.java,如下图,通过一长串剖析失去一个论断:OkHttpBuilderBeanPostProcessor被实例化了 再看OkHttpBuilderBeanPostProcessor.java,如下图,重点关注红框中的三个关键点: 回顾《spring-cloud-square开发实战(三种类型全笼罩)》中的代码,咱们在应用spring-cloud-square-okhttp.jar的时候,要本人写一个配置类来实例化OkHttpClient.Builder,如下所示,因而可见:OkHttpBuilderBeanPostProcessor就是给咱们创立的OkHttpClient.Builder实例筹备的,简略的说,就是OkHttpClient.Builder在创立后,就有OkHttpBuilderBeanPostProcessor将OkHttpLoadBalancerInterceptor传递给OkHttpClient.Builder:package com.bolingcavalry.consumer;import okhttp3.OkHttpClient;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationclass OkHttpClientConfig{ @Bean @LoadBalanced public OkHttpClient.Builder okHttpClientBuilder() { return new OkHttpClient.Builder(); }}此刻的您有没有豁然开朗呢?原来如此啊,所谓spring-cloud-square-okhttp,其实就是要求用户本人做一个OkHttpClient.Builder实例,而后spring-cloud-square-okhttp负责将OkHttpLoadBalancerInterceptor塞给OkHttpClient.Builder实例,如此一来,咱们在应用OkHttpClient做近程调用的时候,OkHttpLoadBalancerInterceptor的intercept办法就会被执行了!最初要看的就是OkHttpLoadBalancerInterceptor了,其实聪慧的您此刻曾经猜到它的作用了,它持有了LoadBalancerClient实例,那么在拜访网络的时候,就能够将URL中的服务名抠出来,用LoadBalancerClient查到对应的服务地址,而后OkHttpClient近程拜访能够用这个地址了,没错,就是如此: ...

November 2, 2021 · 1 min · jiezi

关于云计算:springcloudsquare开发实战三种类型全覆盖

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览前文《五分钟搞懂spring-cloud-square》具体介绍了什么是spring-cloud-square,以及三种实现类型的具体概念,爱入手的您已急不可待想编码体验spring-cloud-square了,本篇咱们就来畅快实战,体验这个spring官网带给咱们的smart client如题目所述,接下里咱们会将spring-cloud-square提供的三种client都编码体验,总的来说本篇由以下内容形成:新建maven工程,名为<font color="blue">spring-cloud-square-tutorials</font>,这是本篇所有利用的父工程,库版本在此工程中对立治理;创立子工程<font color="blue">eureka</font>,作为注册核心创立子工程<font color="blue">client</font>,放一些专用的数据结构创立子工程<font color="blue">provider</font>,身份是服务提供者,接下来的三个用到spring-cloud-square的子工程,都调用provider的服务创立子工程<font color="blue">consumer-okhttp</font>,基于spring-cloud-square的<font color="red">okhttp</font>能力做近程调用创立子工程<font color="blue">consumer-retrofit-okhttp</font>,基于spring-cloud-square的<font color="red">retrofit + okhttp</font>能力做近程调用创立子工程<font color="blue">consumer-retrofit-webflux</font>,基于spring-cloud-square的<font color="red">retrofit + webflux</font>能力做近程调用上述几个服务的关系如下图: 如何验证代码写完之后,如何验证性能是否合乎预期呢?本篇采纳单元测试的形式,consumer-okhttp、consumer-retrofit-okhttp、consumer-retrofit-webflux这三个子工程都有本人的单元测试代码,执行通过就意味着代码性能合乎预期了源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">spring-cloud-square-tutorials</font>文件夹下,如下图红框所示:版本信息本篇实战波及到的次要版本状况如下:JDK:1.8.0_291IDEA:2021.1.3 (Ultimate Edition)maven:3.8.1操作系统:win10 64位springboot:2.4.4spring-cloud:2020.0.2spring-cloud-square:0.4.0-SNAPSHOT父工程spring-cloud-square-tutorials父工程名为<font color="blue">spring-cloud-square-tutorials</font>,其pom.xml如下,除了依赖库的版本在此对立治理,还要留神的是两个仓库的引入(https://repo.spring.io/snapshot和https://repo.spring.io/milestone),引入它们是因为spring-cloud-square还在孵化阶段,没有公布到maven地方仓库:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.4.4</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.bolingcavalry</groupId> <artifactId>spring-cloud-square-tutorials</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <java.version>1.8</java.version> <spring-cloud.version>2020.0.2</spring-cloud.version> <square.dependency.version>0.4.0-SNAPSHOT</square.dependency.version> </properties> <packaging>pom</packaging> <description>Demo project for Spring Cloud Square Retrofit Web</description> <modules> <module>provider</module> <module>eureka</module> <module>consumer-okhttp</module> <module>client</module> <module>consumer-retrofit-okhttp</module> <module>consumer-retrofit-webflux</module> </modules> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.14.9</version> <scope>compile</scope> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.16.16</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-square-okhttp</artifactId> <version>${square.dependency.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-square-retrofit</artifactId> <version>${square.dependency.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-boot-starter-webflux</artifactId> <version>${square.dependency.version}</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-square-retrofit-webclient</artifactId> <version>${square.dependency.version}</version> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <!--skip deploy (this is just a test module) --> <artifactId>maven-deploy-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories></project>注册核心eurekaeureka利用并没有什么特别之处,pom.xml如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-square-tutorials</artifactId> <groupId>com.bolingcavalry</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>eureka</artifactId> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <start-class>com.bolingcavalry.eureka.EurekaApplication</start-class> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId><!-- <version>Finchley.BUILD-SNAPSHOT</version>--> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <!-- defined in spring-cloud-starter-parent pom (as documentation hint), but needs to be repeated here --> <configuration> <requiresUnpack> <dependency> <groupId>com.netflix.eureka</groupId> <artifactId>eureka-core</artifactId> </dependency> <dependency> <groupId>com.netflix.eureka</groupId> <artifactId>eureka-client</artifactId> </dependency> </requiresUnpack> </configuration> </plugin> <plugin> <!--skip deploy (this is just a test module) --> <artifactId>maven-deploy-plugin</artifactId> <configuration> <skip>true</skip> </configuration> </plugin> </plugins> </build></project>中规中矩的配置文件application.yml,端口是8761,前面的利用也要保持一致:server: port: 8761spring: application: name: eurekaeureka: client: registerWithEureka: false fetchRegistry: false server: waitTimeInMsWhenSyncEmpty: 0启动类EurekaApplication.java,记得用注解EnableEurekaServer开启eureka服务:package com.bolingcavalry.eureka;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;@SpringBootApplication@EnableEurekaServerpublic class EurekaApplication { public static void main(String[] args) throws Exception { SpringApplication.run(EurekaApplication.class, args); }}eureka利用曾经实现,接下来是服务提供者了服务提供者provider-新建名为<font color="blue">provider</font>的利用,pom.xml如下,可见是个一般的web工程,会将本人注册到eureka下来:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-square-tutorials</artifactId> <groupId>com.bolingcavalry</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>provider</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.bolingcavalry</groupId> <artifactId>client</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-context</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <!-- 如果父工程不是springboot,就要用以下形式应用插件,能力生成失常的jar --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.bolingcavalry.provider.ProviderApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build></project>配置文件application.yml:spring: application: name: providerserver: port: 18080eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/启动类ProviderApplication .java:package com.bolingcavalry.provider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class ProviderApplication { public static void main(String[] args) { SpringApplication.run(ProviderApplication.class, args); }}web服务类,可见对外提供了两个接口<font color="blue">hello-str</font>和<font color="blue">hello-obj</font>,前者返回字符串,或者返回对象:package com.bolingcavalry.provider.controller;import com.bolingcavalry.client.HelloResponse;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.cloud.client.ServiceInstance;import org.springframework.cloud.client.discovery.DiscoveryClient;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import java.text.SimpleDateFormat;import java.util.Date;import java.util.List;import java.util.Random;@RestControllerpublic class Hello { public static final String HELLO_PREFIX = "Hello World"; @Autowired DiscoveryClient client; /** * 随机取一个provider实例,返回其形容信息, * 如果只有一个provider实例时,返回的就是以后服务信息 * @return */ private String providerDescription() { List<ServiceInstance> instances = client.getInstances("provider"); ServiceInstance selectedInstance = instances .get(new Random().nextInt(instances.size())); return String.format("serviceId [%s], host [%s], port [%d]", selectedInstance.getServiceId(), selectedInstance.getHost(), selectedInstance.getPort()); } private String dateStr(){ return new SimpleDateFormat("yyyy-MM-dd hh:mm:ss").format(new Date()); } @GetMapping("/hello-str") public String helloStr() { List<ServiceInstance> instances = client.getInstances("provider"); ServiceInstance selectedInstance = instances .get(new Random().nextInt(instances.size())); return HELLO_PREFIX + " : " + providerDescription() + ", " + dateStr(); } @GetMapping("/hello-obj") public HelloResponse helloObj(@RequestParam("name") String name) { return new HelloResponse(name, dateStr(), providerDescription()); }}这个provider利用算是个最朴实无华的web服务了启动服务当初能够将eureka和provider服务先后启动,这样前面的利用编码实现后能够间接测试consumer-okhttp,基于spring-cloud-square的okhttp能力接下来要创立的利用<font color="blue">consumer-okhttp</font>,应用的是spring-cloud-square三种能力的第一种:okhttppom.xml内容如下,重点是spring-cloud-square-okhttp和spring-cloud-starter-loadbalancer这两个库的引入:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>spring-cloud-square-tutorials</artifactId> <groupId>com.bolingcavalry</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>consumer-okhttp</artifactId> <packaging>jar</packaging> <dependencies> <dependency> <groupId>com.bolingcavalry</groupId> <artifactId>client</artifactId> <version>${project.version}</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-square-okhttp</artifactId> <version>0.4.0-SNAPSHOT</version> <scope>compile</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-loadbalancer</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 如果父工程不是springboot,就要用以下形式应用插件,能力生成失常的jar --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.bolingcavalry.ConsumerApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build></project>配置文件application.yml,还是常见的那几个配置:利用名、端口、eureka:spring: application: name: consumer-okhttpserver: port: 18081eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/启动类:package com.bolingcavalry.consumer;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class OkhttpApplication { public static void main(String[] args) { SpringApplication.run(OkhttpApplication.class, args); }}接下来是重要的配置类OkHttpClientConfig.java,用于实例化OkHttpClient.Builder对象并注册到spring环境:package com.bolingcavalry.consumer;import okhttp3.OkHttpClient;import org.springframework.cloud.client.loadbalancer.LoadBalanced;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationclass OkHttpClientConfig{ @Bean @LoadBalanced public OkHttpClient.Builder okHttpClientBuilder() { return new OkHttpClient.Builder(); }}而后就能够应用这个Builder来创立OkHttpClient实例了,如下所示,可见入参request的url字段里应用了服务名<font color="blue">provider</font>,相当于OkHttpClient内如也能通过服务名获得具体的服务地址,至于是如何获取的,会在前面的文章详细分析,整段代码除了url应用服务名,并没有什么值得关注的中央了,一般的OkHttpClient应用而已:package com.bolingcavalry.consumer.controller;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RestController;import java.io.IOException;@RestControllerpublic class RemoteHello { @Autowired private OkHttpClient.Builder builder; @GetMapping("/remote-str") public String hello() throws IOException { // 间接应用服务名 Request request = new Request.Builder().url("http://provider/hello-str").build(); // 近程拜访 Response response = builder.build().newCall(request).execute(); return "get remote response : " + response.body().string(); }}接下来看看单元测试代码,应用MockMvcRequestBuilders结构http申请,查看返回码和返回内容:package com.bolingcavalry.consumer.controller;import com.bolingcavalry.client.Constants;import lombok.extern.slf4j.Slf4j;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.http.MediaType;import org.springframework.test.web.servlet.MockMvc;import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;import static org.hamcrest.Matchers.containsString;import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;@SpringBootTest@AutoConfigureMockMvc@Slf4jclass RemoteHelloTest { @Autowired private MockMvc mvc; @Test void hello() throws Exception { String responseString = mvc.perform(MockMvcRequestBuilders.get("/remote-str").accept(MediaType.APPLICATION_JSON)) .andExpect(status().isOk()) .andExpect(content().string(containsString(Constants.HELLO_PREFIX))) .andDo(print()) .andReturn() .getResponse() .getContentAsString(); log.info("response in junit test :\n" + responseString); }}如果eureka和provider都运行起来了,那么此时能够间接运行单元测试类,顺利通过测试,如下图: ...

November 1, 2021 · 6 min · jiezi

关于云计算:云函数SCF全面集成腾讯数字身份管控平台CIAM快速实现账号管理

Web利用的开发搭建中,为利用的用户提供登录认证性能都是一项根底且广泛的需要,从以往的开发者反馈来看,这一模块往往须要自主搭建,耗时费劲。而腾讯数字身份管控平台(公众版)(以下简称Tencent CIAM)的呈现则帮忙开发者大大简化了这一部分的应用体验。 Tencent CIAM 用于治理公众互联网用户的账号、注册和认证规定,买通扩散的用户数据孤岛、帮忙利用更好地进行用户辨认与画像,帮忙开发者疾速搭建平安、牢靠的登录认证体系,实现用户登录认证。目前,云函数 SCF 曾经反对全面集成 CIAM,只需几行代码批改,即可疾速在利用中实现身份认证模块的增加。 01.Tencent CIAM 性能劣势• 灵便的注册/认证流程配置反对自定义配置登录、注册、多因素认证、遗记用户、遗记明码等流程,反对自定义 Logo、公司名称、域名配置能力。• 多种利用类型反对反对 Web 利用、单页利用、挪动 APP 利用、小程序利用等利用类型。• 多渠道对立登录体验反对通过 Web 利用、挪动利用、H5利用、小程序利用、微信公众号等多种渠道登录的对立登录体验。• 多种认证形式反对反对账号密码认证、短信认证、邮箱认证、等通用认证形式,反对微信、QQ、支付宝等支流社交认证源形式。• 灵便用户数据模型自定义反对依据业务配置不同的用户模型,反对用户自定义属性,反对为属性字段配置是否必填、字段类型等,提供正则表达式等高级能力。• 账号交融反对反对基于手机号、邮箱、微信 openid、微信 unionid 等认证属性辨认同一个自然人用户并进行账号交融。 02.Express Web 框架疾速集成认证接下来将以云函数 SCF 的 Express 框架模版为例,介绍 SCF 和 CIAM 的集成业务流程,开发者只须要在 SCF 模版创立中间接抉择「Express 框架模版(Auth)」,通过简略的配置操作即可领有 Tencent CIAM 的认证能力。1. 计划架构 开发者通过拜访 SCF 内置的 Express 框架模板(Auth) 模版代码,通过调用 Tencent CIAM 提供的 SDK(CIAM-NODE-SDK )提供的办法,使 SCF 能够间接调用和拜访 Tencent CIAM 中的登录、获取用户信息以及退出等认证能力,并向外裸露该认证能力,使开发者利用依据现有业务实现认证能力的集成。开发者在集成 SCF Express 框架模板(Auth)版本后,将即刻领有Tencent CIAM 提供的弱小的用户体系的认证治理能力。2. 配置流程SCF 云函数目前已反对预集成 CIAM 登录认证模块的函数模版「Express框架模版(Auth)」,能够通过模版疾速部署,也能够基于模版示例实现您自主业务的集成。接下来将为大家介绍如何疾速创立、应用和集成 SCF 中的 Express 框架模版(Auth),并预览集成认证后的成果,只须要以下四步就能够轻松实现: ...

October 29, 2021 · 1 min · jiezi

关于云计算:最佳实践丨云上虚拟IDC私有池如何为客户业务的确定性连续性保驾护航

简介: 企业业务上云后,还面临特定可用区购买云上特定计算产品实例失败的窘境?云上公有池pick一下 Why 云上业务为什么须要资源确定性、服务连续性云计算正朝着像水电煤一样的基础设施演进,反对用户按需应用、按量付费。目前,国内外各云服务商联结生态搭档,致力晋升云产品服务的疾速迭代、推广应用,然而事实很骨感:用户仍然面临偶发的在特定可用区购买云上特定计算产品实例失败的窘境。云服务的计算理念--随时随地弹性,怎么这个场景下就不Work了?咱们来剖析剖析。 目前,客户云上业务整个生命周期过程,须要感知算力的“商品化”载体:例如某客户A,将集体博客的Web服务迁徙到阿里云上时,须要购买阿里云弹性计算云服务器,客户须要感知云服务器规格信息,如最新的ecs.g7.xlarge。例如某客户B,将在线制作3D创意成果的业务部署在阿里云上,依靠阿里云弱小GPU等算力资源,此时,须要购买阿里云弹性计算的GPU云服务器,如ecs.gn7i-c8g1.2xlarge。 艰深了解:相似用户向“酒店”租住一个“房间”。云上环境,用户购买云上的一个具体的计算实例规格。 这与水电煤“即插即用”存在区别:云上的算力须要感知商品实例信息。水电煤是对立的‘用量’,屏蔽了后端的供货商(哪个电网供电、哪条线路输送)、供货的生产设施(水力发电、火力发电、风能发电、太阳能发电等)。目前国内外头部云服务供应商的算力服务售卖实体,支流仍然是算力对应具体商品。因为面向具体商品,那么就存在商品之间服务个性、适宜的业务场景、业务所需数量等差别。云服务供应商也就须要在不同地区提前准备好不同的商品,以及供给数量。 因为很难精准地预测各种具体算力商品的用户量级、购买工夫、购买数量,一旦呈现行业热点,同一行业的大多数客户短时间大量购买某一个个性的商品,较容易呈现针对特定商品的抢购而导致局部用户购买失败。典型如疫情背景下,挖矿、在线教育的衰亡,对本地盘、视频编解码算力需要旺盛,导致相干商品抢购景象突出。 艰深了解:相似“酒店”的残余房间曾经用完了,新客户入住失败。对应云环境,用户在云上购买计算实例,短时库存售磬,可能购买失败。 另外,电商每年在不同时间段会有各种“节日”促销流动,典型如618、双11。在促销期间和促销完结的一段时间内,须要大量的算力资源反对在线流动和流动完结后的海量数据分析。客户服务经验“失常态”、“大促态”、“大促收尾态”、“失常态”这样的典型服务间断过程。客户为了确保全年服务的连续性,特地是资源需要按预期布局确定进行,那么,云上资源确定性交付就是重要撑持。 艰深了解:例如奥运这样的预期流动,用户入住酒店,保险的措施就是提前预订好房间。对于云环境,就是在云上预订一个虚构的IDC(公有池),这样就能够在公有池上确定性地交付资源。 图1-水电煤基础设施与云计算基础设施“服务状态”现阶段的比照 综上剖析,现阶段,在云服务的支流服务售卖模式仍然是“算力商品化”的大背景下,用户须要感知业务在云上生命周期过程所需商品个性,云平台须要面向商品进行供给生产。因为需要的变动和市场环境的不确定性,供给和需要短时间的不匹配比拟容易产生。所以,服务特定行业的特定客户、针对特定算力商品的确定性购买,即云上资源确定性交付就成为解决这种窘境的重要能力。 How 如何保障云上业务资源确定性、服务连续性后面剖析了主观现状,存在特定地区、特定时间段、特定算力商品的短时购买失败景象。对客户来说,须要联合本身场景,市场上云商品供给状况,适合的老本投入来实现资源交付的确定性,从而确保业务连续性。 下文的剖析以整体性概念为主,具体到客户的业务场景,还须要具体案例具体分析。例如预约地区的抉择、实例规格的抉择、预约时长的抉择、预约数量的抉择、总的老本最优等。资源交付的一种划分如图2所示,其中公有池是确定性交付的重要实现形式。联合业务场景,举荐最佳的公有池选购计划本文暂不介绍,后续专门出文档形容,帮忙用户更好地依靠云的产品服务,实现资源的确定性交付,保障业务服务的连续性。 图2-资源交付的一种划分 图3-确定性交付的可选策略 图4-灵便弹性交付的可选策略 Aliyun 公有池选购和价值1- 相干概念公有池: 当用户在ECS 控制台,“资源保障”服务标签页下,购买“弹性保障”或者“容量预约”等产品后,就取得了云上的一个具备确定性库存资源预留,并且是专属调配应用的资源池。如图5-公有池模式形象和多种产品实现。图5左侧,一个公有池的服务有两个阶段:公有池预留和公有池资源交付。针对公有池预留,产品指标是履约:确保公有池真正被应用。例如弹性保障EA elastic assurance,一次性预收取这个公有池费用。 图5-公有池模式和多种产品实现 iCR:immediately Capacity Reservesion 立刻失效按量预留CR,公有池全副用完,无额定的老本开销,只在公有池有残余容量的时候,收取残余容量局部费用。 aCR:advance Capacity Reservation 指定工夫、提早失效的容量预约,基于信用分等级收取一些预订金,信用等级越高,预定金越低。 针对公有池资源交付,产品指标是:确定性交付、零门槛应用。当实例开进去后,会按实例进行失常的免费。 资源保障:资源保障是包含资源供应量化感知、资源的确定性预约、公有池布局应用的全链路资源确定性服务,它可能全面晋升您在查问、预约、购买、应用资源过程中的体验,使您在复杂多变的市场环境下仍然可能享受到专有保障资源。 弹性保障:通过弹性保障,您只须要领取一笔较低的保障费用,即可换取固定周期(反对1个月~5年)的资源确定性保障。购买弹性保障时设置可用区、实例规格、保障数量等属性,零碎会以公有池的形式预留指定数量属性相匹配的资源,例如在华东1(杭州)可用区I预留10台ecs.c6.large规格的实例。在弹性保障有效期内,您创立按量付费实例时抉择应用公有池的容量,即可享受到资源确定性保障。在弹性保障有效期内,您能够反复创立/开释指定数量的实例而无需放心资源供给的问题。超出弹性保障有效期或者弹性保障曾经没有闲暇的容量时,资源确定性保障将不再提供。 立刻失效容量预约:您能够随时购买立刻失效容量预约,预约胜利后立刻失效,即可享受资源确定性服务。容量预约失效后即开始依照按量实例费率免费,直至立刻失效容量预约到期主动开释或者您提前手动开释。购买立刻失效容量预约时设置可用区、实例规格、操作系统类型、容量大小等属性,零碎会以公有池的形式预留指定数量属性相匹配的资源。在容量预订有效期内,您创立按量付费实例时抉择应用公有池的容量,即可享受到资源确定性保障。通过一般场景购买的ECS,因为资源的供给变幻无穷,线上的资源可能无奈每时每刻满足您的定制化需要;而在容量预订有效期内,您能够反复创立/开释指定数量的实例而无需放心资源供给的问题。容量预约未处于失效状态或者容量预约曾经没有闲暇的容量时,资源确定性保障将不再提供。在容量预约计费周期内,如果您购买了按量实例,并且应用了资源确定性,这部分按量实例的计算资源费用将会抵扣与按量实例匹配的容量预约的局部或者全副费用。 当一个按量实例与弹性保障和容量预订均匹配时,零碎会优先选取容量预约产品对应的公有池进行匹配。 2- 公有池价值价值1: 确定性资源交付 随着云原生概念和实际的宽泛遍及,基于云的算力研发已成为新常态。客户业务云原生后,业务的疾速倒退过程中,往往针对特定场景,有着资源确定性交付的诉求,冀望100%地保障业务按既定布局上线、经营、推广等。 资源保障相干产品提供了全链路确定性交付能力。 具备确定性交付的能力,从业务角度就防止了云上某个可用区下、某种稀缺资源的抢购带来的购买成功率低的不确定性危险,例如GPU大规格实例。在原有共有资源池弹性交付根底上,配合确定性交付,能够进一步保障高优先级业务的资源100%保障。例如之前按量购买了20台A规格实例,这些实例会有业务的一些运维、变更等操作,购买20个A规格形成的公有池,这样就确保这些实例操作运维过程中资源具备100%确定性,不会被其余客户抢占。失常状况下20个A规格公有池容量被20个A规格实例全副应用,无任何闲暇容量,从而无任何额定老本投入。当理论应用资源确定性的A实例数量有余20个的时候,例如仅应用18个实例,产生2个闲暇容量,此时闲暇容量会按秒级计费,按小时出账单。 价值2: 资源专属调度调配应用 在客户业务架构、业务演进深度交融云产品服务的迭代降级过程中,除了资源确定性交付之外,资源灵活性交付也随之成为重要的诉求。阿里云资源保障服务目前曾经反对基于云上公有池的专属调度调配,用户专属调度目前有两种实际形式。 形式一:用户基于Open、Target、None的匹配规定,进行实例的调度调配 用户在创立公有池的时候,指定公有池的匹配属性:Open(凋谢)、Target(指定)。在创立实例的时候指定实例匹配属性Open 或者Target(应用Target模式须要显示指定公有池ID),后端进行属性匹配调度。 当实例匹配属性值为Open的时候,零碎会优先从用户公有池创立实例;如果无匹配的公有池,则依照共有池流程创立实例,同时保留资源确定性特色,一旦发现有闲暇的容量,零碎会准时的主动将这些实例从新与闲暇公有池进行匹配和关联;当实例匹配属性值为Target的时候,明确指定某个公有池,此时零碎在指定的公有池进行容量和公有池资源规定的匹配校验。例如公有池region、zone、instanceType、platform、payType等校验。 运行过程中,当实例的匹配属性产生批改,零碎会准时进行实例和公有池的从新匹配,确保实例尽可能地关联到公有池,从而缩小用户的费用老本(公有池的闲暇容量及时应用掉);当匹配模式为Open的公有池被开释的时候,零碎会准时的对与该公有池关联的并且应用Open匹配模式的实例从新匹配,确保实例尽可能地关联到公有池,从而缩小用户的老本(公有池的闲暇容量及时应用掉)。 形式二:用户基于Tags匹配规定,进行实例的调度调配 用户在创立公有池的时候,指定公有池的tag信息,而后创立实例的时候指定tag信息,后端就能够依照客户指定的tag匹配规定,从公有池或者共有池进行精细化资源调度调配。 为了升高用户应用门槛,或者零门槛,不管形式一还是形式二,阿里云资源保障服务都反对用户在现有CreateInstance、RunInstnaces接口根底上,间接应用形式一或者形式二进行资源专属调度。例如用户申请白名单后,后端按用户需要,将用户创立实例时候的匹配属性指定为默认值,这样用户既有的集成接口参数毋庸改变。 3- 公有池的获取控制台购买获取 https://help.aliyun.com/docum... OpenAPI集成式获取 相干Demo如下: 1.1 Java下载地址:https://search.maven.org/search?q=aliyun-java-sdk-ecs1.2 Pythonhttps://pypi.org/project/aliyun-python-sdk-ecs/Python可间接通过pip装置:pip install aliyun-python-sdk-ecs2.将SDK导入到工程中具体操作步骤可参考官网帮忙文档,地址:https://help.aliyun.com/document_detail/25699.html?spm=a2c4g.11186623.6.1483.512e73fbxDWOfZ3.创立立刻失效容量预约公有池创立容量预约公有池的对应API为CreateCapacityReservation其中<accessKeyId>和<accessSecret>须要替换为对应购买账号的AK信息。3.1 Java版Demo创立公有池:立刻失效容量预留在线接口体验:https://api.aliyun.com/?spm=5176.12818093.resource-links.dapi_platform.54ce16d07XdZhp#/?product=Ecs&version=2014-05-26&api=CreateCapacityReservation&tab=DEMO&lang=JAVAimport com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.exceptions.ServerException;import com.aliyuncs.profile.DefaultProfile;import com.google.gson.Gson;import java.util.*;import com.aliyuncs.ecs.model.v20140526.*;public class CreateCapacityReservation { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>"); IAcsClient client = new DefaultAcsClient(profile); CreateCapacityReservationRequest request = new CreateCapacityReservationRequest(); request.setRegionId("cn-hangzhou"); List<String> zoneIdList = new ArrayList<String>(); zoneIdList.add("cn-hangzhou-i"); request.setZoneIds(zoneIdList); request.setInstanceType("ecs.c6.2xlarge"); request.setPeriod(1); request.setPeriodUnit("Hour"); request.setPrivatePoolOptionsName("PrivatePoolName"); request.setDescription("PrivatePoolDescription"); request.setPrivatePoolOptionsMatchCriteria("Open"); request.setEndTimeType("Unlimited"); request.setInstanceAmount(10); List<RunInstancesRequest.Tag> tagList = new ArrayList<RunInstancesRequest.Tag>(); RunInstancesRequest.Tag tag1 = new RunInstancesRequest.Tag(); tag1.setKey("11"); tag1.setValue("22"); tagList.add(tag1); request.setTags(tagList);//注入tags try { CreateCapacityReservationResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } }}创立实例-Open 凋谢匹配在线接口体验:https://api.aliyun.com/?spm=5176.12818093.resource-links.dapi_platform.54ce16d07XdZhp#/?product=Ecs&version=2014-05-26&api=RunInstances&tab=DEMO&lang=JAVAimport com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.exceptions.ServerException;import com.aliyuncs.profile.DefaultProfile;import com.google.gson.Gson;import java.util.*;import com.aliyuncs.ecs.model.v20140526.*;public class RunInstances { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>"); IAcsClient client = new DefaultAcsClient(profile); RunInstancesRequest request = new RunInstancesRequest(); request.setRegionId("cn-hangzhou"); request.setZoneId("cn-hangzhou-i"); request.setInstanceType("ecs.c6.2xlarge"); request.setInstanceChargeType("PostPaid"); request.setPeriod(1); request.setPeriodUnit("Hour"); request.setNetworkType("vpc"); request.setImageId("aliyun_2_1903_x64_20G_alibase_20200529.vhd"); request.setSystemDiskSize(40); request.setSystemDiskType("cloud_ssd"); request.setPrivatePoolOptionsMatchCriteria("Open"); // 公有池 凋谢匹配参数 request.setSecurityGroupId("sg-xxx"); request.setVSwitchId("vsw-xxx"); try { RunInstancesResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } }}创立实例-Target 指定匹配import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.exceptions.ClientException;import com.aliyuncs.exceptions.ServerException;import com.aliyuncs.profile.DefaultProfile;import com.google.gson.Gson;import java.util.*;import com.aliyuncs.ecs.model.v20140526.*;public class RunInstance { public static void main(String[] args) { DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>"); IAcsClient client = new DefaultAcsClient(profile); RunInstancesRequest request = new RunInstancesRequest(); request.setRegionId("cn-hangzhou"); request.setZoneId("cn-hangzhou-i"); request.setInstanceType("ecs.c6.2xlarge"); request.setInstanceChargeType("PostPaid"); request.setPeriod(1); request.setPeriodUnit("Hour"); request.setNetworkType("vpc"); request.setImageId("aliyun_2_1903_x64_20G_alibase_20200529.vhd"); request.setSystemDiskSize(40); request.setSystemDiskType("cloud_ssd"); request.setPrivatePoolOptionsMatchCriteria("Target"); // 公有池 指定匹配 request.setPrivatePoolOptionsId("crp-xxx"); // 公有池id request.setSecurityGroupId("sg-xxx"); request.setVSwitchId("vsw-xxx"); try { RunInstancesResponse response = client.getAcsResponse(request); System.out.println(new Gson().toJson(response)); } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { System.out.println("ErrCode:" + e.getErrCode()); System.out.println("ErrMsg:" + e.getErrMsg()); System.out.println("RequestId:" + e.getRequestId()); } }}4- 公有池用户案案例一:零门槛的Tags匹配,实现业务的精准、确定性交付 ...

October 29, 2021 · 2 min · jiezi

关于云计算:无需-Dockerfile-的镜像构建BuildPack-vs-Dockerfile

过来的工作中,咱们应用微服务、容器化以及服务编排构建了技术平台。为了晋升开发团队的研发效率,咱们同时还提供了 CICD 平台,用来将代码疾速的部署到 Openshift(企业级的 Kubernetes) 集群。 部署的第一步就是应用程序的容器化,继续集成的交付物从以往的 jar 包、webpack 等变成了容器镜像。容器化将软件代码和所需的所有组件(库、框架、运行环境)打包到一起,进而能够在任何环境任何基础架构上统一地运行,并与其余利用“隔离”。 咱们的代码须要从源码到编译到最终可运行的镜像,甚至部署,这所有在 CICD 的流水线中实现。最后,咱们在每个代码仓库中都退出了三个文件,也通过我的项目生成器(相似 Spring Initializer)在新我的项目中注入: Jenkinsfile.groovy:用来定义 Jenkins 的 Pipeline,针对不同的语言还会有多种版本Manifest YAML:用于定义 Kubernetes 资源,也就是工作负载及其运行的相干形容Dockerfile:用于构建对象这个三个文件也须要在工作中一直的演进,起初我的项目较少(十几个)的时候咱们根底团队还能够去各个代码仓库去保护降级。随着我的项目爆发式的增长,保护的老本越来越高。咱们对 CICD 平台进行了迭代,将“Jenkinsfile.groovy”和 “manifest YAML”从我的项目中移出,变更较少的 Dockerfile 就保留了下来。 随着平台的演进,咱们须要思考将这惟一的“钉子户” Dockerfile 与代码解耦,必要的时候也须要对 Dockerfile 进行降级。因而调研了一下 buildpacks,就有了明天的这篇文章。 什么是 DockerfileDocker 通过读取 Dockerfile 中的阐明主动构建镜像。Dockerfile 是一个文本文件,蕴含了由 Docker 能够执行用于构建镜像的指令。咱们拿之前用于测试 Tekton 的 Java 我的项目的 Dockerfile 为例: FROM openjdk:8-jdk-alpineRUN mkdir /appWORKDIR /appCOPY target/*.jar /app/app.jarENTRYPOINT ["sh", "-c", "java -Xmx128m -Xms64m -jar app.jar"]镜像分层你可能会听过 Docker 镜像蕴含了多个层。每个层与 Dockerfile 中的每个命令对应,比方 RUN、COPY、ADD。某些特定的指令会创立一个新的层,在镜像构建过程中,如果某些层没有发生变化,就会从缓存中获取。 在上面的 Buildpack 中也同样通过镜像分层和 cache 来减速镜像的构建。 ...

October 29, 2021 · 3 min · jiezi

关于云计算:五分钟搞懂springcloudsquare

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos初识spring-cloud-square2021年4月13日,spring在官网博客上发表,一个名为<font color="blue">Spring Cloud Square</font>的我的项目正式公布首个公开可用的里程碑版本: 热门视频网站于2021年7月7日公布一段介绍<font color="blue">Spring Cloud Square</font>的视频,如下图,大佬Josh Long给咱们演示了如何用Spring Cloud Square将SpringBoot利用的HTTP客户端做得更智能,B站搜寻<font color="blue">spring-cloud-square</font>即可 在介绍spring-cloud-square之前,咱们先去理解一下square,会对咱们前面的了解有很大帮忙,网站是:https://square.github.io,如下图,这是个开源网站,向社区奉献了很多库,到底有哪些库呢?点击下图红框中的Java试试: 如下图,Java库还真不少呢,红框中的两位:okhttp和retrofit,都是赫赫有名: 至此,聪慧的您应该猜到了:spring-cloud-square和下面提到的square无关,具体的说应该是和square的java库无关,例如将okhttp和retrofit与SpringBoot的主动拆卸联合,玩出点花色来另外关键字还有<font color="red">spring-cloud</font>,再加上okhttp和retrofit都和网络拜访无关,spring-cloud-square的身份就更具体了:借助square的库,不便Spring Cloud环境中的服务调用!提前小结为防止因废话太多而被聪慧的您摈弃,当初就小结什么是spring-cloud-square:spring-cloud-square的重点是<font color="red">集成</font>Spring Cloud LoadBalance提供了依据服务名获取对应IP和端口的能力OkHttpClient和Retrofit是近程拜访的框架Spring Cloud LoadBalance和OkHttpClient组合的话,在用OkHttpClient近程拜访的时候能够用服务名做地址了,具体的IP和端口由Spring Cloud LoadBalance负责获取Spring Cloud LoadBalance和Retrofit组合,也是同样的情理于是,Spring官网就推出了上述组合,用AutoConfig再加大量代码(例如OkHttpClient增加Interceptor,性能是将服务名替换成IP和端口),将上述关键技术做组合,再包装成jar,例如spring-cloud-square-okhttp.jar就是 Spring Cloud LoadBalancer与OkHttpClient的组合咱们开发SpringBoot利用时,间接依赖spring-cloud-square-okhttp.jar,再增加大量代码(如Builder实例化),就能不便的近程调用了;这种组合型jar包,Spring一口气做了三个,而后起个名字叫做<font color="red">spring-cloud-square</font>,而后,您爱用哪个就用哪个咱们开发SpringBoot利用时,间接依赖spring-cloud-square-okhttp.jar,再增加大量代码(如Builder实例化),就能不便的近程调用了;看到这里,聪慧的您应该明确了,spring-cloud-square原来这么简略,只是将注册核心和和网络工具集成,为利用开发提供了一些辅助而已,实际上看过spring-cloud-square源码之后也的确如此,不过spring-cloud-square目前还只是孵化我的项目,因为Spring技术栈在一直演进,置信它会越来越合乎官网的形容:Smart,做更智能的HTTP客户端接下来再看看spring-cloud-square提供的具体的能力有哪些spring-cloud-square的具体能力如下图所示,spring-cloud-square一共有三种能力,下图每一个红色背景的节点代表一种具体的能力,稍后会具体阐明: okhttp类型容易了解,只有一个jar文件:spring-cloud-square-retrofit.jar,用在最简略的申请响应场景retrofit的益处很多(简洁易用,解耦,扩展性强,可搭配多种Json解析框架(例如Gson),反对RxJava),就不在本文开展了,博览群书的您应该记得,retrofit无奈独立实现网络操作,其底层还要依赖更加根底的库,这个特点在spring-cloud-square中也体现进去了:和okhttp搭配是常见的经典组合(安卓开发的同学肯定很相熟),或者和webflux搭配,用在响应式异步非阻塞场景;看到这里,聪慧的您应该得出一个论断:<font color="red">欣宸废话太多...</font>您说的没错,下一篇咱们进入实战环节,写代码体验spring-cloud-square,欣宸原创,必不会辜负您的期待你不孤独,欣宸原创一路相伴Java系列Spring系列Docker系列kubernetes系列数据库+中间件系列DevOps系列欢送关注公众号:程序员欣宸微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...https://github.com/zq2599/blog_demos

October 29, 2021 · 1 min · jiezi

关于云计算:浪潮云说直播间第十期将于今晚1930准时开播

工夫:10月28日(周四)19:30主题:《走进云溪数据库之HTAP个性解析》主讲人:云溪数据库资深架构师-苑晓龙老师

October 28, 2021 · 1 min · jiezi

关于云计算:技术解读|云上企业级存储打开存储新维度促进用户核心业务创新

简介: 将企业级存储和云的特点进行完满的交融是云上企业级存储的指标,它关上存储更多新的维度,在保障用户业务永续的同时,帮忙用户更好的进行业务翻新。本文属ESSD技术解读的总篇,总体介绍ESSD 云盘翻新交融了云和企业级存储的个性,以服务为核心,为用户提供了更便捷、更智能的存储服务体验。 前言提到企业级存储,大家印象最深的是“高稳固”、“高性能”、“丰盛的企业级个性”等关键词;而说到云计算,大家会想到“大规模”、“寰球部署”、“弹性”、“服务化”、“智能化”、“即时开明"、“按量付费”这些鲜明特征。如果把两者联合,会产生什么样的新存储状态呢?云上企业级存储的指标就是将企业级存储和云的特点进行完满的交融,关上存储更多新的维度,在保障用户业务永续的同时,帮忙用户更好的进行业务翻新。 以块存储为例,常见的企业级解决方案是存储区域网络(Storage Area Network,简称 SAN),通过专用网路连贯存储阵列和业务主机,提供存储对立治理和共享,并实现高性能低提早的数据拜访。但 SAN 存在老本高、运维简单、可扩展性差等有余,而这些问题恰好是云技术最善于的方面。为此,阿里云推出了基于 ESSD 云盘的云上企业级存储,帮忙用户更好的满足以后数字化转型和翻新的须要。 ESSD 企业级云盘ESSD 云盘为用户提供高可用、高牢靠、高性能的块级随机拜访服务,并提供原生快照数据保护和跨域容灾等丰盛的企业个性。它于 2016 年启动我的项目, 基于盘古 2.0 分布式存储底座,采纳 RDMA 和 NVMe SSD 全用户态 IO 技术,并联合阿里 10 多年分布式存储自研技术积攒, 在 2017 年首次亮相阿里“双11”购物节,承载数据库和中间件等外围业务局部峰值流量,获得了惊艳的体现;于是在 2018 年开始在阿里外部大规模推广应用,并开始凋谢给局部内部客户应用,都获得了十分踊跃的反馈;在 2019 年 ESSD 云盘大规模商业化,率先率领云盘进入了微秒时代; 2020 年推出普惠型规格 ESSD PL0,让中小客户也能获取 ESSD 全闪技术的红利;到 2021 年 9 月,ESSD 云盘曾经在 59 个可用区规模售卖, 95% 的阿里云头部客户抉择应用 ESSD, 成为最受欢迎的云盘产品。 作为云产品服务,ESSD 云盘提供服务化、平安、智能的运维管控服务,帮忙用户屏蔽了底层简单的硬件和零碎运维,以申明式凋谢 API 不便用户构建下层的业务零碎。同时,ESSD 云盘服务随着云的基础设施在寰球部署输入,无论是核心区域、还是本地云、边缘云,更好的满足用户多样化的部署需要。 ESSD 云盘为用户提供了三大方面的数据服务: 高稳固、高性能、高弹性的数据拜访服务, 轻量、实时、弹性的原生快照数据保护服务,随时随地、容灾多活服务。 在最根底的数据拜访方面,ESSD 云盘提供了 9 个 9 的高牢靠和 5 个 9 的高可用,并提供端到端的数据保护,百微秒低提早和百万 IOPS,反对自定义密钥加密、在线扩容和秒级性能变配。并且在近期公布按业务负载性能主动弹性伸缩的 ESSD Auto PL 云盘,反对 NVMe 标准协议和共享拜访, 以及满足平安合规物理隔离的专属集群。 ...

October 28, 2021 · 2 min · jiezi

关于云计算:Java版流媒体编解码和图像处理JavaCPPFFmpeg

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; FFmpeg、JavaCPP、JavaCV的关系先简略的梳理一下FFmpeg、JavaCPP、JavaCV的关系:FFmpeg、OpenCV能够了解成C语言版的本地库(Native library),Java利用无奈间接应用JavaCPP将FFmpeg、OpenCV这些罕用库做了包装(wrapper),使得Java利用也能应用这些Native API(JavaCPP的底层实现是JNI)这些JavaCPP包装后的API,被JavaCV封装成了工具类(utility classes),这些工具类比原生API更简略易用简略的说如下图所示,JavaCPP是Native API转Java API,JavaCV是Java API封装成工具类,这些工具类更加简略易用: 学习目标欣宸的指标是学习和把握JavaCV,而深刻JavaCV外部去理解它用到的JavaCPP,就相当于打好根底,今后应用JavaCV的时候,也能看懂其外部的实现原理;于是乎,通过JavaCPP应用FFmpeg就成了基本功,本文会开发一个java利用,调用JavaCPP的API实现以下工作:关上指定的流媒体取一帧解码,失去YUV420P格局的图像将YUV420P格局的图像转为YUVJ420P格局将图像用jpg格局保留在指定地位开释所有关上的资源可见上述一系列步骤已笼罩编解码和图像处理等常见操作,对咱们理解FFmpeg库有很大帮忙常识储备在理论编码前,建议您对FFmpeg的重要数据结构和API做一些理解,这方面最经典的材料莫过于雷神的系列教程了,尤其是解协定、解封装、解码波及到的数据结构(上下文)和API,都应该简略理解一遍如果您切实太忙没有工夫翻阅这些经典,我这筹备了一份快餐版,对重要知识点做了简略的小结,这里要申明一下:欣宸的快餐版远不如雷神的经典系列...先看数据结构,次要分为媒体数据和上下文两大类,以及底层指针对应的java类: 接着是罕用API,依照雷神的解协定、解封装、解码思路(还有反过来的编码和封装解决)去分类和了解,很容易将它们梳理分明: 版本信息本次编码波及的操作系统、软件、库的版本信息如下: 操作系统:win10 64位IDE:IDEA 2021.1.3 (Ultimate Edition)JDK:1.8.0_291maven:3.8.1javacpp:1.4.3ffmpeg:4.0.2(所以ffmpeg-platform库的版本是4.0.2-1.4.3)源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">javacv-tutorials</font>文件夹下,如下图红框所示: <font color="blue">javacv-tutorials</font>文件夹下有多个子工程,本篇的源码在<font color="red">ffmpeg-basic</font>文件夹下,如下图红框: 开始编码为了对立治理源码和jar依赖,我的项目采纳了maven父子构造,父工程名为<font color="blue">javacv-tutorials</font>,外面有一些jar的版本定义,就不多说了在<font color="blue">javacv-tutorials</font>上面新建名为<font color="red">ffmpeg-basic</font>的子工程,其pom.xml内容如下,可见仅用了JavaCPP,并未用到JavaCV:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>javacv-tutorials</artifactId> <groupId>com.bolingcavalry</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>ffmpeg-basic</artifactId> <dependencies> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacpp</artifactId> </dependency> <dependency> <groupId>org.bytedeco.javacpp-presets</groupId> <artifactId>ffmpeg-platform</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </dependency> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> </dependency> </dependencies></project>接下来开始编码,先写一个最简略的外部类,将AVFrame和它对应的数据指针BytePointer都放在这个类中,在调用办法的时候便于传递:class FrameData { AVFrame avFrame; BytePointer buffer; public FrameData(AVFrame avFrame, BytePointer buffer) { this.avFrame = avFrame; this.buffer = buffer; }}接下来是整个程序最重要的办法<font color="blue">openMediaAndSaveImage</font>,该办法是整个程序的主体,负责将关上流媒体、解码、转格局、保留、开释等五个步骤串起来,内部只有调用这个办法就能实现整个性能:/** * 关上流媒体,取一帧,转为YUVJ420P,再保留为jpg文件 * @param url * @param out_file * @throws IOException */ public void openMediaAndSaveImage(String url,String out_file) throws IOException { log.info("正在关上流媒体 [{}]", url); // 关上指定流媒体,进行解封装,失去解封装上下文 AVFormatContext pFormatCtx = getFormatContext(url); if (null==pFormatCtx) { log.error("获取解封装上下文失败"); return; } // 控制台打印流媒体信息 av_dump_format(pFormatCtx, 0, url, 0); // 流媒体解封装后有一个保留了所有流的数组,videoStreamIndex示意视频流在数组中的地位 int videoStreamIndex = getVideoStreamIndex(pFormatCtx); // 找不到视频流就间接返回 if (videoStreamIndex<0) { log.error("没有找到视频流"); return; } log.info("视频流在流数组中的第[{}]个流是视频流(从0开始)", videoStreamIndex); // 失去解码上下文,曾经实现了初始化 AVCodecContext pCodecCtx = getCodecContext(pFormatCtx, videoStreamIndex); if (null==pCodecCtx) { log.error("生成解码上下文失败"); return; } // 从视频流中解码一帧 AVFrame pFrame = getSingleFrame(pCodecCtx,pFormatCtx, videoStreamIndex); if (null==pFrame) { log.error("从视频流中取帧失败"); return; } // 将YUV420P图像转成YUVJ420P // 转换后的图片的AVFrame,及其对应的数据指针,都放在frameData对象中 FrameData frameData = YUV420PToYUVJ420P(pCodecCtx, pFrame); if (null==frameData) { log.info("YUV420P格局转成YUVJ420P格局失败"); return; } // 长久化存储 saveImg(frameData.avFrame,out_file); // 按程序开释 release(true, null, null, pCodecCtx, pFormatCtx, frameData.buffer, frameData.avFrame, pFrame); log.info("操作胜利"); }当初整体逻辑曾经分明了,再来看外面openMediaAndSaveImage外面调用的那些办法的源码,先看关上流媒体的<font color="blue">getFormatContext</font>: /** * 生成解封装上下文 * @param url * @return */ private AVFormatContext getFormatContext(String url) { // 解封装上下文 AVFormatContext pFormatCtx = new avformat.AVFormatContext(null); // 关上流媒体 if (avformat_open_input(pFormatCtx, url, null, null) != 0) { log.error("关上媒体失败"); return null; } // 读取流媒体数据,以取得流的信息 if (avformat_find_stream_info(pFormatCtx, (PointerPointer<Pointer>) null) < 0) { log.error("取得媒体流信息失败"); return null; } return pFormatCtx; }流媒体解封装后有一个保留了所有流的数组,<font color="blue">getVideoStreamIndex</font>办法会找到视频流在数组中的地位: /** * 流媒体解封装后失去多个流组成的数组,该办法找到视频流咋数组中的地位 * @param pFormatCtx * @return */ private static int getVideoStreamIndex(AVFormatContext pFormatCtx) { int videoStream = -1; // 解封装后有多个流,找出视频流是第几个 for (int i = 0; i < pFormatCtx.nb_streams(); i++) { if (pFormatCtx.streams(i).codec().codec_type() == AVMEDIA_TYPE_VIDEO) { videoStream = i; break; } } return videoStream; }解封装之后就是解码,<font color="blue">getCodecContext</font>办法失去解码上下文对象: /** * 生成解码上下文 * @param pFormatCtx * @param videoStreamIndex * @return */ private AVCodecContext getCodecContext(AVFormatContext pFormatCtx, int videoStreamIndex) { //解码器 AVCodec pCodec; // 失去解码上下文 AVCodecContext pCodecCtx = pFormatCtx.streams(videoStreamIndex).codec(); // 依据解码上下文失去解码器 pCodec = avcodec_find_decoder(pCodecCtx.codec_id()); if (pCodec == null) { return null; } // 用解码器来初始化解码上下文 if (avcodec_open2(pCodecCtx, pCodec, (AVDictionary)null) < 0) { return null; } return pCodecCtx; }紧接着从视频流解码取帧解码: /** * 取一帧而后解码 * @param pCodecCtx * @param pFormatCtx * @param videoStreamIndex * @return */ private AVFrame getSingleFrame(AVCodecContext pCodecCtx, AVFormatContext pFormatCtx, int videoStreamIndex) { // 调配帧对象 AVFrame pFrame = av_frame_alloc(); // frameFinished用于查看是否有图像 int[] frameFinished = new int[1]; // 是否找到的标记 boolean exists = false; AVPacket packet = new AVPacket(); try { // 每一次while循环都会读取一个packet while (av_read_frame(pFormatCtx, packet) >= 0) { // 查看packet所属的流是不是视频流 if (packet.stream_index() == videoStreamIndex) { // 将AVPacket解码成AVFrame avcodec_decode_video2(pCodecCtx, pFrame, frameFinished, packet);// Decode video frame // 如果有图像就返回 if (frameFinished != null && frameFinished[0] != 0 && !pFrame.isNull()) { exists = true; break; } } } } finally { // 肯定要执行开释操作 av_free_packet(packet); } // 找不到就返回空 return exists ? pFrame : null; }解码后的图像是YUV420P格局,咱们将其转成YUVJ420P: /** * 将YUV420P格局的图像转为YUVJ420P格局 * @param pCodecCtx 解码上下文 * @param sourceFrame 源数据 * @return 转换后的帧极其对应的数据指针 */ private static FrameData YUV420PToYUVJ420P(AVCodecContext pCodecCtx, AVFrame sourceFrame) { // 调配一个帧对象,保留从YUV420P转为YUVJ420P的后果 AVFrame pFrameRGB = av_frame_alloc(); if (pFrameRGB == null) { return null; } int width = pCodecCtx.width(), height = pCodecCtx.height(); // 一些参数设定 pFrameRGB.width(width); pFrameRGB.height(height); pFrameRGB.format(AV_PIX_FMT_YUVJ420P); // 计算转为YUVJ420P之后的图片字节数 int numBytes = avpicture_get_size(AV_PIX_FMT_YUVJ420P, width, height); // 分配内存 BytePointer buffer = new BytePointer(av_malloc(numBytes)); // 图片解决工具的初始化操作 SwsContext sws_ctx = sws_getContext(width, height, pCodecCtx.pix_fmt(), width, height, AV_PIX_FMT_YUVJ420P, SWS_BICUBIC, null, null, (DoublePointer) null); // 将pFrameRGB的data指针指向方才调配好的内存(即buffer) avpicture_fill(new avcodec.AVPicture(pFrameRGB), buffer, AV_PIX_FMT_YUVJ420P, width, height); // 转换图像格式,将解压进去的YUV420P的图像转换为YUVJ420P的图像 sws_scale(sws_ctx, sourceFrame.data(), sourceFrame.linesize(), 0, height, pFrameRGB.data(), pFrameRGB.linesize()); // 及时开释 sws_freeContext(sws_ctx); // 将AVFrame和BytePointer打包到FrameData中返回,这两个对象都要做显示的开释操作 return new FrameData(pFrameRGB, buffer); }而后就是另一个很重要办法<font color="blue">saveImg</font>,外面是典型的编码和输入流程,咱们后面曾经理解了关上媒体流解封装解码的操作,当初要看看怎么制作媒体流,包含编码、封装和输入: /** * 将传入的帧以图片的模式保留在指定地位 * @param pFrame * @param out_file * @return 小于0示意失败 */ private int saveImg(avutil.AVFrame pFrame, String out_file) { av_log_set_level(AV_LOG_ERROR);//设置FFmpeg日志级别(默认是debug,设置成error能够屏蔽大多数不必要的控制台音讯) AVPacket pkt = null; AVStream pAVStream = null; int width = pFrame.width(), height = pFrame.height(); // 调配AVFormatContext对象 avformat.AVFormatContext pFormatCtx = avformat_alloc_context(); // 设置输入格局(波及到封装和容器) pFormatCtx.oformat(av_guess_format("mjpeg", null, null)); if (pFormatCtx.oformat() == null) { log.error("输入媒体流的封装格局设置失败"); return -1; } try { // 创立并初始化一个和该url相干的AVIOContext avformat.AVIOContext pb = new avformat.AVIOContext(); // 关上输入文件 if (avio_open(pb, out_file, AVIO_FLAG_READ_WRITE) < 0) { log.info("输入文件关上失败"); return -1; } // 封装之上是协定,这里将封装上下文和协定上下文关联 pFormatCtx.pb(pb); // 构建一个新stream pAVStream = avformat_new_stream(pFormatCtx, null); if (pAVStream == null) { log.error("将新的流放入媒体文件失败"); return -1; } int codec_id = pFormatCtx.oformat().video_codec(); // 设置该stream的信息 avcodec.AVCodecContext pCodecCtx = pAVStream.codec(); pCodecCtx.codec_id(codec_id); pCodecCtx.codec_type(AVMEDIA_TYPE_VIDEO); pCodecCtx.pix_fmt(AV_PIX_FMT_YUVJ420P); pCodecCtx.width(width); pCodecCtx.height(height); pCodecCtx.time_base().num(1); pCodecCtx.time_base().den(25); // 打印媒体信息 av_dump_format(pFormatCtx, 0, out_file, 1); // 查找解码器 avcodec.AVCodec pCodec = avcodec_find_encoder(codec_id); if (pCodec == null) { log.info("获取解码器失败"); return -1; } // 用解码器来初始化解码上下文 if (avcodec_open2(pCodecCtx, pCodec, (PointerPointer<Pointer>) null) < 0) { log.error("解码上下文初始化失败"); return -1; } // 输入的Packet pkt = new avcodec.AVPacket(); // 调配 if (av_new_packet(pkt, width * height * 3) < 0) { return -1; } int[] got_picture = { 0 }; // 把流的头信息写到要输入的媒体文件中 avformat_write_header(pFormatCtx, (PointerPointer<Pointer>) null); // 把帧的内容进行编码 if (avcodec_encode_video2(pCodecCtx, pkt, pFrame, got_picture)<0) { log.error("把帧编码为packet失败"); return -1; } // 输入一帧 if ((av_write_frame(pFormatCtx, pkt)) < 0) { log.error("输入一帧失败"); return -1; } // 写文件尾 if (av_write_trailer(pFormatCtx) < 0) { log.error("写文件尾失败"); return -1; } return 0; } finally { // 资源清理 release(false, pkt, pFormatCtx.pb(), pAVStream.codec(), pFormatCtx); } }最初是开释资源的操作,请留神开释不同对象要用到的API也不同,另外AVFormatContext的场景不同用到的API也不同(输入输出场景),用错了就会crash,另外release办法一共被调用了两次,也就说关上媒体流和输入媒体流用到的资源和对象,最终都须要开释和回收: /** * 开释资源,程序是先开释数据,再开释上下文 * @param pCodecCtx * @param pFormatCtx * @param ptrs */ private void release(boolean isInput, AVPacket pkt, AVIOContext pb, AVCodecContext pCodecCtx, AVFormatContext pFormatCtx, Pointer...ptrs) { if (null!=pkt) { av_free_packet(pkt); } // 解码后,这是个数组,要遍历解决 if (null!=ptrs) { Arrays.stream(ptrs).forEach(avutil::av_free); } // 解码 if (null!=pCodecCtx) { avcodec_close(pCodecCtx); } // 解协定 if (null!=pb) { avio_close(pb); } // 解封装 if (null!=pFormatCtx) { if (isInput) { avformat_close_input(pFormatCtx); } else { avformat_free_context(pFormatCtx); } } }最初写个main办法,调用openMediaAndSaveImage试试,传入媒体流的地址,以及寄存图片的门路: public static void main(String[] args) throws Exception { // CCTV13,1920*1080分辨率,不稳固,关上失败时请多试几次 String url = "http://ivi.bupt.edu.cn/hls/cctv13hd.m3u8"; // 安徽卫视,1024*576分辨率,较为稳固// String url = "rtmp://58.200.131.2:1935/livetv/ahtv"; // 本地视频文件,请改为您本人的本地文件地址// String url = "E:\\temp\\202107\\24\\test.mp4"; // 残缺图片寄存门路,留神文件名是以后的年月日时分秒 String localPath = "E:\\temp\\202107\\24\\save\\" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".jpg"; // 开始操作 new Stream2Image().openMediaAndSaveImage(url, localPath); }以上所有代码都在子工程<font color="blue">ffmpeg-basic</font>的<font color="red">Stream2Image.java</font>文件中,运行main办法,控制台输入如下,可见流媒体关上胜利,并且输入了具体的媒体信息:18:28:35.553 [main] INFO com.bolingcavalry.basic.Stream2Image - 正在关上流媒体 [http://ivi.bupt.edu.cn/hls/cctv13hd.m3u8]18:28:37.062 [main] INFO com.bolingcavalry.basic.Stream2Image - 视频流在流数组中的第[0]个流是视频流(从0开始)18:28:37.219 [main] INFO com.bolingcavalry.basic.Stream2Image - 操作胜利[hls,applehttp @ 00000188548ab140] Opening 'http://ivi.bupt.edu.cn/hls/cctv13hd-1627208880000.ts' for reading[hls,applehttp @ 00000188548ab140] Opening 'http://ivi.bupt.edu.cn/hls/cctv13hd-1627208890000.ts' for reading[NULL @ 000001887ba68bc0] non-existing SPS 0 referenced in buffering period[NULL @ 000001887ba68bc0] SPS unavailable in decode_picture_timing[h264 @ 000001887ba6aa80] non-existing SPS 0 referenced in buffering period[h264 @ 000001887ba6aa80] SPS unavailable in decode_picture_timingInput #0, hls,applehttp, from 'http://ivi.bupt.edu.cn/hls/cctv13hd.m3u8': Duration: N/A, start: 1730.227267, bitrate: N/A Program 0 Metadata: variant_bitrate : 0 Stream #0:0: Video: h264 (Main) ([27][0][0][0] / 0x001B), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 25 fps, 25 tbr, 90k tbn, 50 tbc Metadata: variant_bitrate : 0 Stream #0:1: Audio: aac (LC) ([15][0][0][0] / 0x000F), 48000 Hz, 5.1, fltp Metadata: variant_bitrate : 0[swscaler @ 000001887cb28bc0] deprecated pixel format used, make sure you did set range correctlyProcess finished with exit code 0去存储图片的目录下查看,图片曾经生成: ...

October 28, 2021 · 5 min · jiezi

关于云计算:浪潮云说丨构建全域业务联动枢纽挖掘数据要素创新价值

迎接数字时代,激活数据因素潜能,数字化转型正在驱动生产方式、生存形式和治理形式产生粗浅改革,成为推动数字经济、数字社会、数字政府建设的新动能。浪潮云能力集成中枢平台产品可能充分发挥海量数据和丰盛利用场景劣势,实现技术交融、业务交融、数据交融,开掘数据因素新价值,推动政企客户数字化转型,催生新产业、新业态、新模式,壮大经济社会倒退新引擎。 全域数据联动面临的问题 近年来,智慧城市、智慧社区、智慧园区、工业互联网等集成了泛滥利用的交融类场景疾速倒退,呈现出业务复杂化、数据宏大化、技术多样化等特色,业务和数据在交融、链接过程中遇到的问题越来越多: 浪潮云能力集成中枢提供的解决思路 浪潮云能力中枢集成平台ICHIP是一个全栈式的交融集成平台,通过技术交融、业务交融、数据交融,将利用、服务、数据、设施等集成交融集成到一个平台内,以业务流编排为根底进行按需连贯,进而达到外部拉通、数据交融共享、赋能数据新价值,帮忙政府和企业疾速联接云上云下,打消数字鸿沟,实现数字化转型。 交融集成,推动信息有序共享 能力集成中枢提供交融集成其余平台提供的数据、服务、音讯、设施的集成能力,拉通利用和数据的协同,实现数据、服务、音讯、设施的信息互通,满足传统业务零碎、云上零碎、云下零碎的信息的有序共享。 对立治理,晋升一体化解决问题能力 传统利用、新开发利用、第三方利用的数据源、服务、音讯、设施等资源,可在能力集成中枢进行对立治理、注册、受权、管控,防止资源重复建设。通过实时收集和剖析数据,及时发现问题并解决问题,晋升管理效率,满足一体化治理须要。 统一标准,促成数据交融和凋谢的标准化 数据、服务、音讯、设施等多种数据源,提供的数据结构往往不同,为满足多源异构数据共享和凋谢的需要,能力集成中枢提供数据链接规范,通过规范API、SDK等对外提供服务。 业务流编排,赋能数据新价值 传统利用、新开发利用、第三方利用的数据源、服务、音讯、设施等资源,通过能力集成中枢提供的串接调用、并行处理、条件筛选、分支判断、脚本解决、数据拆分、定时触发等处理器性能,满足简单业务场景业务流编排须要,数据通过交融、碰撞、提炼,开掘数据因素新价值。 对立管控,晋升领导驾驶舱能力 收集和剖析已交融集成的各个利用和服务的运行指标数据,实时把握能力集成中枢平台的各项性能指标,准确把握平台的运行状况,制订运行指标项的告警规定,晋升智慧城市、智慧社区、智慧园区、工业互联网等场景领导驾驶舱能力。 将来,浪潮云能力集成中枢平台将集成数字和利用翻新之力,开掘数据因素新价值,继续助力数字经济、数字社会、数字政府建设,催生新产业、新业态、新模式,壮大经济社会倒退新引擎,为推动政府和企业数字化转型奉献浪潮力量。

October 27, 2021 · 1 min · jiezi

关于云计算:科技热点周刊|微软发布-Web-版-VSCode-删除-NET-6-热重载引发不满IBM-发布开源混合云介绍指南

IT 科技新闻微软公布 vscode.dev,把 VSCode 带入浏览器!微软持续向开发者的主导地位进军,推出了 Visual Studio Code for the Web,开源代码编辑器的轻量级版本,能够齐全在浏览器中运行。Web 版 VSCode 并不是真正在浏览器中运行的 VSCode 的全功能版本,因为它没有后端来反对它,这意味着它的次要目标是针对客户端的 HTML、JavaScript 和 CSS 应用程序。 “因为 VS Code for the Web 齐全在浏览器中运行,与在桌面应用程序中执行的操作相比,某些体验天然会受到更多限度。例如,终端和调试器不可用,因为无奈在浏览器沙箱中编译、运行和调试 Rust 或 Go 应用程序(只管 Pyodide 和 Web 容器等新兴技术有一天可能会扭转这一点),”微软解释说,并补充阐明代码编辑、导航和浏览体验可能“有点奥妙”。 对于大多数编程语言,vscode.dev 为你提供代码语法着色、基于文本的实现和括号对着色。应用 Tree-sitter 语法树,咱们可能为风行语言(如 C/C++、C#、Java、PHP、Rust 和 Go)提供额定的体验,例如纲要 / 转到符号和符号搜寻。 TypeScript、JavaScript 和 Python 体验都由在浏览器中本地运行的语言服务提供反对。应用这些编程语言,你将取得 “良好” 体验以及丰盛的单文件补全、语义突出显示、语法错误等。 对于许多 “webby” 语言,例如 JSON、HTML、CSS 和 LESS,vscode.dev 中的编码体验简直与桌面雷同(包含 Markdown 预览!)。 除此之外,VS Code for the Web 确定为平板电脑、Chromebook 甚至 XBOX 等设施提供轻量级、随处可用的代码编辑器。 参考链接:【1】https://code.visualstudio.com... ...

October 27, 2021 · 2 min · jiezi

关于云计算:第二存储解决方案白皮书-专为非生产数据而设计的存储方案

QingStor 是 QingCloud 基于多年的大规模私有云实际,通过软件定义,为云而生、为外围业务打造的企业级分布式存储产品。QingStor 家族包含 NeonSAN、文件存储、对象存储等产品,服务数字化转型 2.0,提供全生命周期的数据存储和治理,用数据驱动企业决策,以更麻利、易用、低成本的计划引领数字业务翻新。 安钛飞(Active IO)简介,成⽴于 2015 年,专一于云和数据时代的新⼀代数据管理技术,通过⼀体化数据管理云服务平台,提供数据保护、数据利⽤、数据治理等服务,实现数据管理的全⽅位⾃动化服务,笼罩场景蕴含备份、容灾、测试数据治理、数据抽取、数据运维环境搭建等等,目前服务客户笼罩⾦融、挪动、电信、联通、国家电⽹等。 序言咱们十分关注生产数据的安全性、空间、性能、可靠性等等,十分关注生产数据的存储架构来满足生产的要求。咱们也十分关注非生产数据为生产数据提供的各种性能,比方备份时是否影响生产、复原时是否能满足生产的要求,但却很少有人深刻关注非生产数据自身的存储需要。 非生产数据的存储架构十分凌乱,而且往往不能满足非生产数据对存储的各种要求,比方对立治理、空间、性能等等,因而也限度了其对生产的服务能力。 第二存储,是一种新型的存储系统,专为非生产数据而设计,满足非生产数据对存储的各种需要,并通过各种麻利数据服务能力,为生产数据和整体业务提供服务。 [非生产数据] 是指所有从生产拷贝进去的所有数据的统称,如备份数据、容灾数据、开发测试所用数据。现有非生产数据存储架构的现状非生产数据的产生有多种起因,如数据备份、容灾等须要从生产获取数据,如 DBA 须要克隆库,如利用测试人员须要测试数据的环境。这些非生产数据都须要非生产存储来提供存储服务。 咱们能够通过观察,很轻松得出结论:现有非生产存储的架构非常复杂和凌乱。就存储品种来说,有备份一体机、磁带库、光盘、云存储等,其中很多都是关闭而专有的存储系统;就用处来说,有备份、容灾、开发测试等;就数据从生产零碎获取的形式来说,有备份、数据库复制、存储复制、快照、逻辑导出等等。 这种凌乱现状的由来也很简单,有所用数据获取技术过于老旧的起因,比方传统备份技术实际上依然是磁带备份的技术;有供应商提供的性能和硬件绑定的起因,比方备份一体机只提供备份性能并应用专用设备;有生产数据对数据保护、数据应用等方面的需要的确十分多而且简单的起因。 这种架构造成了很大的问题,首先,因为各性能与设施各自为政,使得非生产数据无奈复用,产生了大量的复制数据(Copy Data),据 IDC 统计,企业内普遍存在 10 到 20 份的复制数据,占据了大量的存储空间, 耗费了一半以上的企业存储估算。 其次,这种架构无奈提供古代企业对数据服务的服务等级要求,反向连累了生产零碎。比方生产环境实现了云架构,所有资源已实现了麻利化服务,分钟级提供存储、服务器等资源,存储或服务器故障时,能够不影响生产环境或分钟级复原。但如果备份零碎提供数据复原,却须要几小时甚至几天的工夫,显然,这个复原的服务等级和生产环境齐全不匹配。测试人员如须要更新测试数据用于利用的测试,往往须要破费几天甚至几周的工夫,这显然连累了企业业务利用迭代的效率。 从整体 IT 架构的倒退来看,企业的生产环境基本上实现了 IT 架构的云化,包含服务器、存储、网络,为生产环境的老本、效率带来了极大的益处。但非生产环境却远远落后于这个云化过程,依然是以洽购专有设施为次要建设模式,比方备份一体机、虚构带库、专有重删设施等等。 企业长期重点关注生产环境的建设,对非生产环境的投入和关注远小于生产环境,比方运维、人力、资金等方面,造成了二者之间的代差。如果从云化的角度去考查,非生产环境的架构要落后生产环境 10 到 20 年。其后果是,非生产环境成为了整体 IT 这一木桶中最短一块木板,制约了整体 IT 的能力。比方: 一个 10TB 的生产数据库呈现逻辑故障,须要 1 天以上的工夫去修复;DevOps 建设中,利用从开发、测试到上线都实现了全流程自动化,但测试环境的搭建却依然须要以周为单位;业务连续性建设中,劫难事件能够在 2 小时内复原(RTO 为 2 小时),但机房内的各种小故障,却须要以天为单位进行复原,如误操作、勒索病毒等;所有这些后果,都是因为非生产环境的服务能力远远落后于生产环境。 如何解决这些问题?这须要从非生产数据的整体存储架构动手,以云架构及数据时代对非生产数据的服务等级为指标,构建出全新架构的存储系统,这就是“第二存储”。 第二存储的定义云架构下的存储系统分为块存储、NAS 存储、对象存储,这是从存储接口、适宜的数据类型等角度来分类,然而,次要指寄存的数据都是生产数据。 而从数据的生命周期的角度,企业内的存储能够划分成:第一存储和第二存储。 第一存储是指生产数据所用的存储,如生产数据库、应用服务器、生产文件系统等等所用的存储。这些存储可能是块存储、NAS、对象存储的一种或多种,第一存储对存储服务的需要次要在性能、可靠性、稳定性等。 第二存储是所有非生产数据所用的存储,笼罩备份、容灾、开发测试等等所用的存储。 第二存储是一种全新的存储类型,它能够用一个存储系统,取代现有的各种非生产数据所用存储,如备份一体机、磁带库、光盘库、快照等等。 作为一种新的存储类型,是为了解决上述非生产数据存储架构的各种问题,因而,第二存储必须有三个根底能力: 首先,第二存储必须是提供海量存储空间的存储系统。非生产数据的数据量要远高于生产数据,第二存储将为所有非生产数据提供存储服务,因而必须具备海量的存储空间,并能按需横行平滑扩大。 其次,第二存储必须是是一种功能性的存储系统。第二存储须要能提供备份、容灾、数据供应、数据抽取等等数据服务性能,从而能够代替原来的各种软硬件的性能;相比第一存储只须要提供性能、可靠性等根底能力,第二存储是一种提供数据服务性能的存储系统。 最初,第二存储必须能满足古代企业的数据服务等级的要求。第二存储须要能满足云架构及数据时代对数据服务等级的要求,如分钟级的数据恢复能力、分钟级的测试数据供应能力等。解决现有架构下数据服务等级远远落后于生产环境的要求的问题。 第二存储的架构为了实现第二存储的三个根底能力,第二存储的架构体系和功能设计如下: 第一,必须采纳分布式架构:解决海量数据的存储空间要求和扩大要求,在保障根底性能的前提下,至多能最大提供几 PB 甚至几十 PB 的存储空间。在目前三种根底的存储系统中:块存储、NAS 存储、对象存储,咱们认为对象存储是最合适的存储类型,咱们选择对象存储作为第二存储的底层存储系统。 ...

October 27, 2021 · 2 min · jiezi

关于云计算:终于有人把云原生存储讲明白了

什么是云原生存储云原生是一种开发和运行软件应用程序的新范式,它交融了云计算、容器化、Serverless 和微服务等技术趋势。云原生存储是一种旨在用于云原生环境的存储技术。 云原生存储平台能够存储管理有状态应用程序的数据,并解决 Kubernetes 或其它基于云原生环境的基础设施中始终存在的数据存储挑战问题。分布式架构中的对象存储能够基于古代对象存储、块存储或传统磁盘驱动器提供数据存储服务。 云原生利用和传统利用并没有一个规范的划分界线,其形容的是一种技术偏向,即越合乎以下特色的利用越云原生化: 利用容器化服务网格化申明式 API运行可弹性扩大自动化的 DevOps故障容忍和自愈平台无关,可移植的云原生利用是一簇利用特色能力的汇合,而实现了这些能力的利用在可用性、稳定性、扩展性、性能等外围能力都会有大幅的优化。优异的能力代表了技术的方向,云原生利用正在引领各个应用领域实现云原生化,同时也在粗浅扭转着应用服务的方方面面。存储作为利用运行的基石,也在服务云原生化过程中遇到了更多的需要与挑战。 云原生存储的次要特点云原生存储的要害个性如下: 高可用性 云原生存储必须在高需要中可用。存储系统须要具备即便在事件失败时也能拜访数据的性能——无论是在传输零碎、存储介质、控制器还是其余组件中。存储高可用性的 3 个因素: 在其它存储设备上,保护数据的复制正本。在任何故障状况下,冗余设施都会解决故障转移。故障组件能够修复和复原。以下几个是掂量高可用性的指标: 复原工夫指标 (RTO) - 从故障到服务复原的工夫。复原点指标 (RPO):最新的数据正本有多近?它会影响在产生故障时可能失落的大部分数据。失常运行工夫百分比:服务启动和可用总工夫的百分比。均匀故障间隔时间 (MTBF):故障产生的频率。均匀复原工夫 (MTTR):服务从故障中复原所需的工夫。可扩展性 云原生存储能够轻松灵便扩大。存储系统的可扩展性能够从 4 个维度来定义: 客户端可扩展性:有能力减少拜访存储系统的客户端和用户的强度。吞吐量可扩展性:可能以更高的吞吐量运行,以 MB/s或 GB/s为单位,或通过同一接口每秒同时进行大量操作。容量可扩展性:具备在单次部署中减少存储系统的存储容量的能力。集群可扩展性:能够依据须要通过增加更多组件来减少存储组件。存储性能 云原生存储应该反对可预测的、可扩大的性能,服务水平通常从以下角度进行掂量。 实现读/写操作的工夫。每秒最大存储操作数。数据的吞吐量,以 MB/s 或 GB/s 为单位存储或检索。一致性 云原生存储应该反对如下的一致性: 在写、更新或删除操作之后,读操作应该返回正确和更新的数据。零碎“强一致性”:批改数据返回实现后,从客户端读取立马可能读取最新的数据,相比弱一致性。零碎“最终一致性”:批改数据返回实现后,从客户端读取可能不是读取最新的数据,要过一会可能能力读取到最新的数据。在一致性零碎中,读取提早能够被视为复原点指标 (RPO),因为这代表了组件故障时数据失落最多的状况。 耐用性 云原生存储应该是长久的,须要爱护数据免受任何失落。不仅仅是可拜访性,存储系统要确保数据能够长期存储。一些因素会影响存储系统的耐用性: 数据保护层,例如可用的多个数据正本。冗余级别——本地冗余、近程站点冗余、私有云可用区冗余以及区域冗余。存储介质的耐用个性——例如 SSD、旋转磁盘、磁带。零碎可能检测因为组件故障、流量溢出等导致的损坏,并主动重建或复原损坏的数据。动静部署 动静部署是云原生存储系统的最终现实规范,能够依据须要疾速部署或配置,也能够通过多种形式进行部署和实例化,其中包含: 硬件部署:部署在数据中心的物理存储设备。应用此部署模型来构建标准化组件,这些组件无需非凡配置即可增加到集群中、须要时进行替换和删除。软件部署:存储组件被定义为软件组件部署在硬件、设施或云实例上。无论是本地环境还是云环境,云原生软件解决方案通常都能够装置。一些软件定义的存储系统被构建为容器,并且能够应用容器编排主动部署。云服务:这些云服务能够由私有云提供商治理并作为服务交付,形象了底层存储实现。用户能够通过应用 Web 界面或 API,配置新实例或额定存储。 云原生存储解决方案云原生存储的最佳解决方案定义如下: 私有云存储 私有云能够提供一系列云原生存储选项,包含对象存储(例如 Amazon S3 或 青云QingCloud 对象存储)、基于云的文件共享以及附加到计算实例的托管磁盘。 公有云存储 每当公司构建公有云时,他们通常会偏向于抉择具备简略可扩展性、高可靠性和便利性个性的商业云存储服务商。大多数服务商提供部署反对和经营与保护 (O&M) 服务。随着云原生存储需要的增长,公有云基础设施供应商提供了最成熟的云原生接口,容许本地资源耗费云存储。 自行保护的存储服务 公司能够在外部构建的存储服务类型次要有 2 种:块存储和简略文件存储。 Ceph RBD 和存储区域网络 (SAN) 被认为是绝对成熟的块存储解决方案,然而因为它们的复杂性,通常须要专门的反对和保护团队。 决定要创立本人的分布式存储系统的公司能够抉择 GlusterFS、NFS 和 CephFS 等服务做文件存储。NFS 绝对成熟,但不足以解决高性能利用需要。GlusterFS 和 CephFS 通常无奈满足要害工作应用程序所需的性能和可靠性。 ...

October 27, 2021 · 1 min · jiezi

关于云计算:3000份限量款云小宝手办全网首发等你带回家

联合大多数程序员对手办的爱好,以及Aliyun的首字母“A”,阿里云团队单干设计太空主题限量版云小宝手办,正式公布「云小宝A打算」! 「云小宝A打算」赋予云小宝更强的趣味属性,并增强其友善、积极向上的形象,帮忙用户感知阿里云的品牌调性,并疏导参与者积极参与流动,集齐炫酷上云配备! 流动玩法: 流动分为五个子工作,每实现一个子工作可取得一个云小宝组件(以下简称组件)以及一种权利,实现全副五个子工作可取得五个组件以及一个超级大礼包,用户可通过五个组件兑换云小宝手办,子工作及对应权利如下: 1)子工作一:流动期间实现3次签到可得一个组件及开发者社区电子书奖品,每日仅可实现1次签到; 2)子工作二:去双十一主会场支付优惠券礼包,支付胜利可得一个组件及阿里云盘50G空间; 3)子工作三:报名双十一主会场全民拉新流动,报名胜利可得一个组件及阿里云认证视频; 4)子工作四:邀请7名用户注册助力,每胜利邀请一名助力用户即可取得一次抽奖机会,最多可得7次抽奖机会,实现7次助力可得一个组件; 5)子工作五:流动期间购买阿里云官网商品,购买胜利可得一个组件及一份ACA认证5折优惠权利; 实现以上五个子工作后可支付云小宝手办及超级大礼包。 限量手办获取:http://click.aliyun.com/m/100...

October 27, 2021 · 1 min · jiezi

关于云计算:Java版人脸检测详解下篇编码

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览如果您看过《三分钟极速体验:Java版人脸检测》一文,甚至入手实际操作过,您应该会对背地的技术细节感兴趣,开发这样一个利用,咱们总共要做以下三件事:筹备好docker根底镜像开发java利用将java利用打包成package文件,集成到根底镜像中,失去最终的java利用镜像对于<font color="blue">筹备好docker根底镜像</font>这项工作,咱们在前文《Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)》曾经实现了,接下来要做的就是开发java利用并将其做成docker镜像版本信息这个java利用的波及的版本信息如下:springboot:2.4.8javacpp:1.4.3javacv:1.4.3源码下载本篇实战中的残缺源码可在GitHub下载到,地址和链接信息如下表所示(https://github.com/zq2599/blo...):名称链接备注我的项目主页https://github.com/zq2599/blo...该我的项目在GitHub上的主页git仓库地址(https)https://github.com/zq2599/blo...该我的项目源码的仓库地址,https协定git仓库地址(ssh)git@github.com:zq2599/blog_demos.git该我的项目源码的仓库地址,ssh协定这个git我的项目中有多个文件夹,本篇的源码在<font color="blue">javacv-tutorials</font>文件夹下,如下图红框所示: 编码为了对立治理源码和jar依赖,我的项目采纳了maven父子构造,父工程名为<font color="blue">javacv-tutorials</font>,其pom.xml如下,可见次要是定义了一些jar的版本:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.bolingcavalry</groupId> <artifactId>javacv-tutorials</artifactId> <packaging>pom</packaging> <version>1.0-SNAPSHOT</version> <modules> <module>face-detect-demo</module> </modules> <properties> <java.version>1.8</java.version> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <maven-compiler-plugin.version>3.6.1</maven-compiler-plugin.version> <springboot.version>2.4.8</springboot.version> <!-- javacpp以后版本 --> <javacpp.version>1.4.3</javacpp.version> <!-- opencv版本 --> <opencv.version>3.4.3</opencv.version> <!-- ffmpeg版本 --> <ffmpeg.version>4.0.2</ffmpeg.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.18</version> </dependency> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> <version>${javacpp.version}</version> </dependency> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> <version>${javacpp.version}</version> </dependency> <!-- javacpp --> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacpp</artifactId> <version>${javacpp.version}</version> </dependency> <!-- ffmpeg --> <dependency> <groupId>org.bytedeco.javacpp-presets</groupId> <artifactId>ffmpeg-platform</artifactId> <version>${ffmpeg.version}-${javacpp.version}</version> </dependency> <dependency> <groupId>org.bytedeco.javacpp-presets</groupId> <artifactId>ffmpeg</artifactId> <version>${ffmpeg.version}-${javacpp.version}</version> </dependency> </dependencies> </dependencyManagement></project>在<font color="blue">javacv-tutorials</font>上面新建名为<font color="red">face-detect-demo</font>的子工程,这外面是咱们明天要开发的利用,其pom.xml如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>javacv-tutorials</artifactId> <groupId>com.bolingcavalry</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <artifactId>face-detect-demo</artifactId> <packaging>jar</packaging> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>${springboot.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <!--FreeMarker模板视图依赖--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv-platform</artifactId> </dependency> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacv</artifactId> </dependency> <!-- javacpp --> <dependency> <groupId>org.bytedeco</groupId> <artifactId>javacpp</artifactId> </dependency> <!-- ffmpeg --> <dependency> <groupId>org.bytedeco.javacpp-presets</groupId> <artifactId>ffmpeg-platform</artifactId> </dependency> <dependency> <groupId>org.bytedeco.javacpp-presets</groupId> <artifactId>ffmpeg</artifactId> </dependency> </dependencies> <build> <plugins> <!-- 如果父工程不是springboot,就要用以下形式应用插件,能力生成失常的jar --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.bolingcavalry.facedetect.FaceDetectApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> </plugins> </build></project>配置文件如下,要重点关注前段模板、文件上传大小、模型文件目录等配置:### FreeMarker 配置spring.freemarker.allow-request-override=false#Enable template caching.启用模板缓存。spring.freemarker.cache=falsespring.freemarker.check-template-location=truespring.freemarker.charset=UTF-8spring.freemarker.content-type=text/htmlspring.freemarker.expose-request-attributes=falsespring.freemarker.expose-session-attributes=falsespring.freemarker.expose-spring-macro-helpers=false#设置面板后缀spring.freemarker.suffix=.ftl# 设置单个文件最大内存spring.servlet.multipart.max-file-size=100MB# 设置所有文件最大内存spring.servlet.multipart.max-request-size=1000MB# 自定义文件上传门路web.upload-path=/app/images# 模型门路opencv.model-path=/app/model/haarcascade_frontalface_default.xml前端页面文件只有一个<font color="blue">index.ftl</font>,请原谅欣宸不入流的前端程度,前端只有一个页面,能够提交页面,同时也是展现处理结果的页面:<!DOCTYPE html><head> <meta charset="UTF-8" /> <title>图片上传Demo</title></head><body><h1 >图片上传Demo</h1><form action="fileUpload" method="post" enctype="multipart/form-data"> <p>抉择检测文件: <input type="file" name="fileName"/></p> <p>四周检测数量: <input type="number" value="32" name="minneighbors"/></p> <p><input type="submit" value="提交"/></p></form><#--判断是否上传文件--><#if msg??> <span>${msg}</span><br><br><#else > <span>${msg!("文件未上传")}</span><br></#if><#--显示图片,肯定要在img中的src发申请给controller,否则间接跳转是乱码--><#if fileName??><#--<img src="/show?fileName=${fileName}" style="width: 100px"/>--><img src="/show?fileName=${fileName}"/><#else><#--<img src="/show" style="width: 200px"/>--></#if></body></html>再来看后盾代码,先是最常见的利用启动类:package com.bolingcavalry.facedetect;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplicationpublic class FaceDetectApplication { public static void main(String[] args) { SpringApplication.run(FaceDetectApplication.class, args); }}前端上传图片后,后端要做哪些解决呢?先不贴代码,咱们把后端要做的事件捋一遍,如下图: ...

October 27, 2021 · 4 min · jiezi

关于云计算:LiveVideoStackCon2021-北京站专访从上云到创新视频云的新技术新场景

随同着视频技术的提高和规范的迭代,视频产业从模仿进入到数字时代,实现了从电影电视到互联网的媒介转换,并且衍生出了超高清、3D、AR/VR 等多种翻新状态。特地是在后疫情的当下,咱们能够看到音视频技术畛域的诸多新变动,云与端的协同互动、算法翻新与工程利用的深度交合、场景与需要的浸透促成,在严厉的挑战下,为各行各业带来了新的场景与生机。 在行将举办的 LiveVideoStackCon 2021 北京站,来自阿里云智能视频云的专家将与泛滥行业搭档,一起摸索与探讨视频云技术在云上的翻新摸索。为此,咱们采访了阿里巴巴研究员 —— 叶琰,以及资深技术专家 —— 何亚明,与两位专家围绕编解码技术及视频云的新场景利用开展了深刻对话。 “视频社会化”:视频云成为新的基础设施从 2006 年网络视频的衰亡,到当初迈入 “视频社会化” 时代,5G、云、AI 已成为社会的发展趋势,视频不再局限于电影、电视、广告等传统媒体畛域,视频会议、 互动视频、电商直播等新型利用使产业边界逐步融化,视频行业需要和技术一直降级。随着技术的倒退和基础设施的夯实,视频将会成为新的交互方式和信息承载的状态。 (材料起源:艾瑞征询 ——2021 年中国视频云场景利用洞察白皮书) 对于竞争强烈、疾速迭代的大视频产业而言,视频云曾经逐步倒退为一项要害的基础设施。家喻户晓,当下的视频业务对算力、存储、带宽这些资源的耗费十分高,比方一场风行的直播演唱会,可能会有上百万的人在观看,这不仅须要有弱小的端侧实时视频解决能力,还要依靠大规模的 CDN 散发网络实现晦涩的散发工作,甚至一些 AR/VR 的非凡视觉效果须要通过边缘节点的计算能力得以出现,所以仅仅把服务器搬到云上曾经远远不能满足将来的场景需要,如何利用云的劣势进行技术架构和业务的演进成为业界独特面临的课题。 叶琰:推动下一代视频规范落地,开释行业生产力 叶琰是阿里巴巴研究员,阿里云智能视频云视频规范与实现负责人。她负责视频云在 ITU-T VCEG、ISO/IEC MPEG 、AVS 等国内和国家视频规范组织的技术开发,波及视频编解码、AI 视频品质评估、VR/AR 等先进技术的研发工作。她参加了多项视频编解码与流媒体的国际标准制订工作,包含 H.266/VVC,H.265/HEVC,SHVC 等规范。她是 50 多篇学术论文的作者,130 多篇美国受权专利以及 230 多篇美国专利申请的发明人。她还是 IEEE 高级会员。她在中国科技大学取得本科及硕士学位,在加州大学圣地亚哥分校取得博士学位。视频离不开编解码技术,编解码离不开规范的疏导。视频规范始终是视频行业倒退的基础设施,视频规范笼罩宽泛,从零碎规范 MPEG CMAF 到编解码规范 H.266/VVC,视频规范的不断更新迭代对视频生产的效率晋升、老本升高和新的体验起到至关重要的作用,也关系着整个行业将来的走向。 叶琰作为阿里巴巴研究员、阿里云视频云视频规范与实现团队的负责人,始终以来是国内视频标准化工作的深度参与者和推动者,在叶琰看来 “视频标准化组织是见证最前沿技术和把握最新行业脉搏的最佳场合之一,正是通过业界专家们凋谢的技术探讨,同时充沛聆听市场的需要,才让咱们能一次次迭代出更高效的规范,继续推动行业的提高。” 然而,面对新的倒退阶段,业界也对一些视频规范组织提出了不同声音。有一种观点认为,像 MPEG 这样的规范组织曾经失去了主导的角色,大家还在为了零点几的性能增益搜索枯肠,而这带来的是更大的计算成本,这种自嗨式的翻新更多是一种刷存在感,并没有带来实质上的技术后退或翻新,业界应该找到新的思路解决视频压缩问题。 面对这样的杂音,叶琰表白了本人的判断 ——“我不太认同把传统框架和全新框架当成隔离甚至对抗关系这种观点。尽管传统框架下开掘性能越来越难,然而这个方向是基于大家相熟的框架,有利于软件硬件实现,而 ECM 也充沛展现了这个框架依然能够提供可观的性能增益,所以不能轻易放弃。另一方面来说,JVET 也在摸索什么样的新框架或者新工具能够欲速不达,拿到大幅的性能增益。同时咱们也十分关注这个新框架须要耗费什么水位的计算成本?瞎话说,咱们当初还在摸索,所以必须依附两条腿走路的形式,能力找到最有后劲并且可实现的下一代编解码技术。” 确实,每制订一代编码标准都是一个十分艰巨的工作,不能欲速不达。以目前业界的最新规范 VVC 为例,其正式开始之前的预研工作就花了 3 年左右的工夫。正是因为如此,在 VVC 规范定稿不到一年, JVET 于往年上半年就设立了 ECM 软件平台,用以进行下一代编码标准的技术预研和开发。叶琰说到:“尽管目前 ECM 的压缩能力曾经超过 VVC 大略 14%,然而依照之前的教训,这个预研工作还须要若干年的工夫能力达到新一代规范的压缩性能增益要求。在市场和业务变动万千的明天,我预计这几年将会见证很多 5G 视频利用场景的衰亡。” ...

October 26, 2021 · 1 min · jiezi

关于云计算:终于有人把前端鉴权讲明白了

什么是鉴权鉴权也叫身份认证,指验证用户是否有零碎的拜访权限。就很像咱们常常乘坐动车的票据(对应的标识,肯定的工夫范畴)。 认证形式接下来介绍几种咱们工作中通常用到的认证形式。 Session-Cookie 认证利用服务端的 Session(会话)和浏览器(客户端)的 Cookie 来实现的前后端通信认证模式。 起源因为 HTTP 申请时是无状态的,服务端失常状况下无奈得悉申请发送者的身份。这个时候如果咱们要记录状态,就须要在服务端创立会话,将雷同客户端的申请都保护在各自的会话记录中,每当申请达到服务端时,先校验申请中的用户标识是否存在于 Session 中,如果有则示意曾经认证胜利,否则示意认证失败。 流程 实际boss(咱们的一个产品) 这边 Session ID 存在数据库外面,在 Memcached 外面做缓存。客户端每次调用接口的时候会通过 response headers 外面的 Set-Cookie 更新过期工夫(boss 这边设置的是 6 个小时),这样做的作用是避免你在做一些简单操作的时候,cookie 忽然过期。 ⚠️整个过程是比拟重的,因为每次的接口调用都得更新过期工夫。 优缺点长处:简略易用,浏览器会主动带上毛病:脱离浏览器没法用,比方原生利用对于 Cookie 的平安问题Cookie 属性: 进步安全性的方法 Expires/Max-Age 设置正当过期工夫HttpOnly 设置为 trueSecure 设置为 true(应用 https)Token 认证起源负载平衡多服务器的状况,不好确认以后用户是否登录,因为多服务器不共享 Session。这个问题也能够将 Session 存在一个服务器中来解决,然而就不能齐全达到负载平衡的成果。Token 和 Session-Cookie 认证形式中的 Session ID 不同,并非只是一个标识符。Token 个别会蕴含用户的相干信息,通过验证 Token 不仅能够实现身份校验,还能够获取预设的信息。客户端能够将 token 寄存于 localStroage 等容器中。客户端每次拜访都传递 token,服务端解密 token,服务端就不须要存储 Session 占用存储空间,就很好的解决负载平衡多服务器的问题了。 流程 实际平时用的最多的就是 JSON Web Token(JWT),也是目前最风行的跨域身份验证解决方案。JWT 组成:头部. 载荷. 签名头部和载荷用 base64 编码签名计算: ...

October 26, 2021 · 2 min · jiezi

关于云计算:云原生爱好者周刊玩-Kubernetes-游戏赢取免费机票

云原生一周动静要闻: Grafana 8.2.2 公布OSM(Open Service Mesh)公布 v1.0 的第一个候选版本谷歌发表推出 Google Distributed CloudKubeSphere 3.2.0 RC 版公布,反对 Kubernetes 1.22开源我的项目举荐文章举荐云原生动静Grafana 8.2.2 公布Grafana 是一个功能丰富的指标规范仪表板和图形编辑器,用于剖析和监控 Graphite、Elasticsearch、OpenTSDB、Prometheus 和 InfluxDB。日前,Grafana 8.2.2 公布。 性能和加强性能:Annotations:改良了标签搜寻性能。Application: 当初能够配置谬误模板的题目。AzureMonitor:从资源过滤器查问中删除了一个限度。Caching:当初可选缓存大小的指标收集(企业版)。Packaging:删除了 systemd 中的 ProcSubset 选项,此选项会阻止 Grafana 在 LXC 环境中启动。Prometheus:删除了指标主动实现限度。Request interceptor:容许 MSSQL 的命名实例。(企业)Table:改良了类型图标的款式,使它们与列/字段名称更加不同。ValueMappings:您当初能够在统计、仪表、条形仪表和饼图可视化中应用值映射。更多更新内容请查看更新布告 OSM(Open Service Mesh)公布 v1.0 的第一个候选版本OSM 是一个云原生服务网格,容许你在动静微服务环境中对立治理、爱护和察看应用程序流量。它当初运行在 Kubernetes 上,很快也会在多集群和混合环境中反对 OSM。随着 1.0 版本在将来几周的公布,将提供一组稳固的、强壮的服务网格个性。你能够应用 OSM: 利用主动服务实现业务流量加密(mTLS)针对 HTTP、TCP 和 gRPC 流量,增强在网格内通信的应用程序之间的访问控制金丝雀(灰度)和蓝/绿格调的部署通过 OSM 收集和裸露的流量指标,理解应用程序流量的行为形式为入口和进口流量定义细粒度的流量管制其余更多详情见 谷歌发表推出 Google Distributed CloudGoogle Distributed Cloud 是一个由硬件和软件组成的解决方案组合,可将基础架构扩大到边缘和数据中心。 依据您组织的需要,您能够在多个地位运行 Google Distributed Cloud,包含: 谷歌的网络边缘-容许客户利用寰球 140 多个谷歌网络边缘地位。运营商边缘-使客户可能利用运营商的边缘网络并从咱们当先的通信服务提供商 (CSP) 合作伙伴提供的 5G/LTE 服务中受害。运营商边缘通过优化以反对低提早用例,运行具备严格提早和带宽要求的边缘应用程序。客户边缘-反对客户领有的边缘或近程地位,例如零售店、工厂车间或分支机构,这些地位须要间接在边缘地位进行本地化计算和解决。客户数据中心-反对客户领有的数据中心和托管设施,以满足严格的数据安全和隐衷要求,并在满足法规合规性的同时实现本地部署的现代化。Google Distributed Cloud 基于 Anthos 构建,一个基于开源的平台,可对立跨本地、边缘和多个公共云中的基础设施和应用程序的治理,同时提供统一的大规模经营。 ...

October 26, 2021 · 1 min · jiezi

关于云计算:Java版人脸检测详解上篇运行环境的Docker镜像CentOSJDKOpenCV

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览如果您看过《三分钟极速体验:Java版人脸检测》一文,甚至入手实际操作过,您应该会对背地的技术细节感兴趣,接下来就请随欣宸一起入手实战,从无到有将这个利用开发进去;首先确定咱们的指标:开发出java版的人脸检测利用将此利用制作成docker镜像在docker环境运行这个利用基于上述指标,咱们能够确定以下操作步骤:筹备好docker根底镜像开发java利用将java利用打包成package文件,集成到根底镜像中,失去最终的java利用镜像本篇的指标就是上述第一步:<font color="blue">筹备好docker根底镜像</font>对于人脸检测利用的根底镜像如果您有过制作java利用镜像的经验,肯定会产生疑难:如下图红框所示,个别不都是把OpenJDK的官网镜像作为根底镜像吗?为啥要拿一篇文章来讲根底镜像的事件? 对于人脸检测的利用来说,OpenJDK的官网镜像是不够用的,因为用java实现人脸检测须要一个关键技术:<font color="red">javacv</font>,在javacv运行过程中须要用到opencv的一些本地库,因而须要在运行环境中装置opencv如下图所示,一个人脸检测利用自下而上由以下六局部形成,如果将底部的操作系统、JDK、OpenCV做成根底镜像就不便多了,咱们开发利用的时候只有需关注下面三层即可,而下面三层不就是个一般的maven工程吗? 至此,聪慧的您对接下来要做的事件应该很分明了:编写Dockerfile文件用来制作镜像,这个镜像中要有<font color="blue">CentOS + JDK1.8 + OpenCV</font>分两步走我打算先做一个CentOS + JDK的镜像,在此基础上再做一个集成了OpenCV的镜像,这样在一些不须要OpenCV的场景中,我还能独自应用CentOS + JDK1.8的镜像剖析实现,开始入手吧CentOS + JDK的镜像之所以抉择CentOS作为操作系统,是因为平时工作中最罕用的就是它了纵观OpenJDK官网的各种镜像,并没有发现CentOS作为操作系统的,因而本人入手吧,思路很简略:找到OpenJDK的Dockerfile文件,把它的根底镜像换成CentOS7.6即可以下是Dockerfile的所有内容,可见外围是依据不同的操作系统下载文件而后装置,逻辑简略清晰就不多说了:FROM centos:7.6.1810RUN set -eux; \ yum install -y \ gzip \ tar \ binutils \ freetype fontconfig \ ;ENV JAVA_HOME /usr/java/openjdk-8ENV PATH $JAVA_HOME/bin:$PATH# Default to UTF-8 file.encodingENV LANG C.UTF-8RUN set -eux; \ \ arch="$(objdump="$(command -v objdump)" && objdump --file-headers "$objdump" | awk -F '[:,]+[[:space:]]+' '$1 == "architecture" { print $2 }')"; \ case "$arch" in \ 'i386:x86-64') \ downloadUrl='https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_8u292b10.tar.gz'; \ ;; \ 'aarch64') \ downloadUrl='https://github.com/AdoptOpenJDK/openjdk8-upstream-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_aarch64_linux_8u292b10.tar.gz'; \ ;; \ *) echo >&2 "error: unsupported architecture: '$arch'"; exit 1 ;; \ esac; \ \ curl -fL -o openjdk.tgz "$downloadUrl"; \ curl -fL -o openjdk.tgz.asc "$downloadUrl.sign"; \ \ export GNUPGHOME="$(mktemp -d)"; \# pre-fetch Andrew Haley's (the OpenJDK 8 and 11 Updates OpenJDK project lead) key so we can verify that the OpenJDK key was signed by it# (https://github.com/docker-library/openjdk/pull/322#discussion_r286839190)# we pre-fetch this so that the signature it makes on the OpenJDK key can survive "import-clean" in gpg gpg --batch --keyserver keyserver.ubuntu.com --recv-keys EAC843EBD3EFDB98CC772FADA5CD6035332FA671; \# TODO find a good link for users to verify this key is right (https://mail.openjdk.java.net/pipermail/jdk-updates-dev/2019-April/000951.html is one of the only mentions of it I can find); perhaps a note added to https://adoptopenjdk.net/upstream.html would make sense?# no-self-sigs-only: https://salsa.debian.org/debian/gnupg2/commit/c93ca04a53569916308b369c8b218dad5ae8fe07 gpg --batch --keyserver keyserver.ubuntu.com --keyserver-options no-self-sigs-only --recv-keys CA5F11C6CE22644D42C6AC4492EF8D39DC13168F; \ gpg --batch --list-sigs --keyid-format 0xLONG CA5F11C6CE22644D42C6AC4492EF8D39DC13168F \ | tee /dev/stderr \ | grep '0xA5CD6035332FA671' \ | grep 'Andrew Haley'; \ gpg --batch --verify openjdk.tgz.asc openjdk.tgz; \ rm -rf "$GNUPGHOME"; \ \ mkdir -p "$JAVA_HOME"; \ tar --extract \ --file openjdk.tgz \ --directory "$JAVA_HOME" \ --strip-components 1 \ --no-same-owner \ ; \ rm openjdk.tgz*; \ \ rm -rf "$JAVA_HOME/jre/lib/security/cacerts"; \# see "update-ca-trust" script which creates/maintains this cacerts bundle ln -sT /etc/pki/ca-trust/extracted/java/cacerts "$JAVA_HOME/jre/lib/security/cacerts"; \ \# https://github.com/oracle/docker-images/blob/a56e0d1ed968ff669d2e2ba8a1483d0f3acc80c0/OracleJava/java-8/Dockerfile#L17-L19 ln -sfT "$JAVA_HOME" /usr/java/default; \ ln -sfT "$JAVA_HOME" /usr/java/latest; \ for bin in "$JAVA_HOME/bin/"*; do \ base="$(basename "$bin")"; \ [ ! -e "/usr/bin/$base" ]; \ alternatives --install "/usr/bin/$base" "$base" "$bin" 20000; \ done; \ \# basic smoke test javac -version; \ java -version写完之后执行<font color="blue">docker build -t bolingcavalry/centos7.6-jdk8:0.0.1 .</font>即可生成镜像,如果您有hub.docker.com的账号,还能够将其推送到地方仓库,给更多人应用用history命令看看镜像内容,详情如下,共计五百多兆,曾经不小了:CN0014009475M:~ will$ docker history bolingcavalry/centos7.6-jdk8:0.0.1IMAGE CREATED CREATED BY SIZE COMMENTa5dead4a6505 2 days ago /bin/sh -c set -eux; arch="$(objdump… 209MB <missing> 2 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B <missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/java/openjd… 0B <missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/o… 0B <missing> 2 days ago /bin/sh -c set -eux; yum install -y … 144MB <missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 2 years ago /bin/sh -c #(nop) ADD file:54b004357379717df… 202MB我这里曾经推送到hub.docker.com下来了,执行以下命令即可下载到本地:docker pull bolingcavalry/centos7.6-jdk8:0.0.3CentOS+JDK+OpenCV镜像接下来能够集成OpenCV了,Dockerfile内容如下所示,根底镜像是刚刚做好的<font color="blue">bolingcavalry/centos7.6-jdk8:0.0.1</font>,先是装置一大堆编译所需的利用,而后下载OpenCV-3.4.3版本的源码,而后编译,就这么简略(但其间的调试工作还是不少的,不说了,说多了都是泪):FROM bolingcavalry/centos7.6-jdk8:0.0.1RUN echo "export LC_ALL=en_US.UTF-8" >> /etc/profile \ && source /etc/profileRUN set -eux; \ yum install -y \ make \ cmake \ gcc \ gcc-c++ \ gtk+-devel \ gimp-devel \ gimp-devel-tools \ gimp-help-browser \ zlib-devel \ libtiff-devel \ libjpeg-devel \ libpng-devel \ gstreamer-devel \ libavc1394-devel \ libraw1394-devel \ libdc1394-devel \ jasper-devel \ jasper-utils \ swig \ python \ libtool \ nasm \ build-essential \ ant \ unzip \ ;RUN set -eux; \ curl -fL -o opencv-3.4.3.zip https://codeload.github.com/opencv/opencv/zip/3.4.3; \ unzip opencv-3.4.3.zip; \ rm -rf opencv-3.4.3.zip; \ cd opencv-3.4.3; \ mkdir build; \ cd build; \ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..; \ make; \ make install; \ cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_TESTS=OFF ..;\ make -j8; \ make install写完之后执行<font color="blue">docker build -t bolingcavalry/opencv3.4.3:0.0.3 .</font>即可生成镜像,如果您有hub.docker.com的账号,还能够将其推送到地方仓库,给更多人应用用history命令看看镜像内容,详情如下,倒吸一口凉气,这么大的体积,敬爱的读者们会不会打死我...:CN0014009475M:~ will$ docker history bolingcavalry/opencv3.4.3:0.0.3IMAGE CREATED CREATED BY SIZE COMMENTf0306d7a2594 2 days ago /bin/sh -c set -eux; curl -fL -o opencv-… 2.99GB <missing> 2 days ago /bin/sh -c set -eux; yum install -y … 638MB <missing> 2 days ago /bin/sh -c echo "export LC_ALL=en_US.UTF-8" … 1.84kB <missing> 2 days ago /bin/sh -c set -eux; arch="$(objdump… 209MB <missing> 2 days ago /bin/sh -c #(nop) ENV LANG=C.UTF-8 0B <missing> 2 days ago /bin/sh -c #(nop) ENV PATH=/usr/java/openjd… 0B <missing> 2 days ago /bin/sh -c #(nop) ENV JAVA_HOME=/usr/java/o… 0B <missing> 2 days ago /bin/sh -c set -eux; yum install -y … 144MB <missing> 2 years ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B <missing> 2 years ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B <missing> 2 years ago /bin/sh -c #(nop) ADD file:54b004357379717df… 202MB我这里曾经推送到hub.docker.com下来了,执行以下命令即可下载到本地:docker pull bolingcavalry/opencv3.4.3:0.0.3这里要揭示一下,opencv的编译是十分耗时的,请确保docker宿主机的性能不要太差,也请您急躁期待编译过程至此,合乎咱们要求的根底镜像<font color="blue">bolingcavalry/opencv3.4.3:0.0.3</font>已制作实现,有了它,咱们的Java利用所需的jdk和opencv就凑齐了,接下来的文章咱们一起去开发这个人脸检测的利用吧;你不孤独,欣宸原创一路相伴Java系列Spring系列Docker系列kubernetes系列数据库+中间件系列DevOps系列欢送关注公众号:程序员欣宸微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...https://github.com/zq2599/blog_demos

October 26, 2021 · 4 min · jiezi

关于云计算:RIP路由协议

好买网 IT技术交易平台动静路由定义:各个路由器之间运行某种协定(算法),通过收发数据包的模式获取未知门路(路由器替换信息)。动静路由的特点 缩小了治理工作占用了网络带宽动静路由协定概述路由器协定:路由器之间用来替换信息的语言。 度量值:跳数、带宽、负载、时延、可靠性、老本路由器通过度量值来确定最优路由门路收敛使所有路由表都达到统一状态的过程动态路由和动静路由的关系网络中动态路由和动静路由相互补充动静路由协定分类依照路由执行的算法分类 间隔矢量路由协定根据从源网络到目标网络所通过的路由器的个数抉择路由(例如:RIP、思科公有协定IGRP)2.链路状态路由协定综合思考从源网络到指标网络的各个门路的状况,抉择路由(例如OSPF、IS-IS)RIP路由协定RIP协定是间隔矢量路由协定RIP的基本概念RIP协定次要用于小型网络的路由信息传递,通过UDP报文和街坊替换路由信息(整个路由表的音讯)的,具体是520端口, 更新周期是30S ;RIP协定提供跳跃计数作为尺度来掂量路由间隔,跳跃计数是一个包达到指标所必须通过的路由器的数目,RIP最多反对的跳数为15,16就不可达。 定期更新街坊播送更新全路由表更新路由表的造成 路由器学习直连路由更新周期30s到了,路由器发送本人的路由表给街坊再过30s第二更新周期,路由器再次发送路由表给街坊程度宰割与毒性逆转为避免路由环路产生,进步收敛速度,RIP反对程度宰割(Split Horizon) 和 毒性逆转(Poison Reverse)性能。 程度宰割:在路由信息传送过程中,路由器从某个接口接管到的更新信息不容许再从这个接口收回去。同时也缩小路由更新信息占用的链路带宽资源。毒性逆转:路由器从某个接口上接管到某个网段的路由信息之后,并不是不往回发送信息了,只不过是将这个网段标记为不可达再发送进来。收到此种的路由信息后,接管方路由器会立即摈弃该路由,而不是期待期老化工夫到来。能够减速收敛。RIP版本比照命令 [R1]rip 1 ###启动RIP[R1-rip-1]version 2 ###启动版本2(缺省为版本1)[R1-rip-1]undo summary ###敞开路由器主动聚合(即所有路由信息都会依照IP地址分类归类)[R1-rip-1]network 192.168.10.0(网段) ###宣告主网络号,v2会携带掩码组播更新224.0.0.9,v1不携带,播送更新255.255.255.255[R1-rip-1]network 200.1.0.0-----------------------------------©著作权归作者所有:来自51CTO博客作者可能再无晚安的原创作品,如需转载,请注明出处,否则将查究法律责任RIP路由协定https://blog.51cto.com/u_15382300/4305107兼容模式 [R1]int g0/0/1[R1-GigabitEthernet0/0/1]rip version 2 multicast ###把设置成rip1路由器的某一接口独自设置成rip版本2©著作权归作者所有:来自51CTO博客作者可能再无晚安的原创作品,如需转载,请注明出处,否则将查究法律责任RIP路由协定https://blog.51cto.com/u_1538...

October 25, 2021 · 1 min · jiezi

关于云计算:三分钟极速体验Java版人脸检测

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 本篇概览检测照片中的人脸,用Java能够实现吗?当然能够,明天咱们用起码的工夫、最简略的操作来体验这个实用的性能,当您提交一张带有人脸的照片后,会看到下图成果,所有人脸都被辨认到并被框选进去了: 本篇以体验为主,不波及具体的开发,前面还会有文章介绍残缺的开发过程(包含源码)危险提前告知为了简化操作,接下来会用到docker,对应的镜像体积微小,达到了恐怖的<font color="red">4.69G</font>,建议您为本人的docker做好减速配置,能够缩小下载等待时间;因为opencv体积宏大,再加上javacv的依赖库也不小,这才导致超大镜像的呈现,还望您多多海涵,题目中的《三分钟极速体验》是要去掉镜像的等待时间的,您要是感觉欣宸的题目起得很无耻,我感觉您是对的...环境信息为了简化体验过程,接下来会用到docker,举荐的环境信息如下:操作系统:Ubuntu 16.04.1 LTS 服务器版(MacBook Pro也能够,版本是11.2.3,macOS Big Sur)docker:20.10.2 Community为了放慢docker镜像的下载速度,建议您提前做好docker减速配置文章题目号称三分钟极速体验,没工夫说太多,筹备好环境就火速入手啦部署新建名为<font color="red">images</font>的目录,用于存储解决后的文件,我这里残缺门路是<font color="blue">/root/temp/202107/17/images</font>新建名为<font color="red">model</font>的目录,用于存储稍后要下载的模型文件,我这里残缺门路是<font color="blue">/root/temp/202107/17/model</font>下载训练好的模型文件,我筹备了两个下载地址,您任选一个即可,一个是csdn的(无需积分):https://download.csdn.net/dow...,另一个是https://raw.githubusercontent...上述文件下载下来是个压缩包,请先解压,再将文件<font color="blue">haarcascade_frontalface_default.xml</font>放入<font color="red">model</font>目录(model里放的必须是解压后的文件)执行以下命令,会先下载docker镜像文件再创立容器:docker run \--rm \-p 18080:8080 \-v /root/temp/202107/17/images:/app/images \-v /root/temp/202107/17/model:/app/model \bolingcavalry/facedetect:0.0.1部署实现,开始体验体验浏览器拜访<font color="red">http://localhost:18080</font>,这里的localhost请改成docker宿主机IP(要敞开防火墙!),能够见到操作页面,如下图(欣宸的前端开发程度渣到令人发指,果然不是空穴来风): 找一张有人脸的图片(我在百度图片随机找的),点击上图的<font color="red">选取图片</font>按钮进行上传,至于<font color="blue">四周检测数量</font>那里先放弃默认值32不要动点击<font color="blue">提交</font>按钮后,页面会显示检测后果,如下图,人脸被精确的框选进去了: 再试试多人的,如下图,竟然一个人脸都没有检测到: 把<font color="blue">四周检测数量</font>的值调低些,改成<font color="red">4</font>再试,如下图,这次胜利了,八张人脸全副检测到: 至此,Java版人脸检测的体验曾经实现,一分钟概览,一分钟部署,一分钟体验,咱们足够高效(下载超大镜像的工夫不能算,不敢算...)此刻您应该能感触到Java在人脸识别畛域的魅力了,聪慧的您当然会有很多疑难,例如:用了啥框架?写了啥代码?运行环境好不好配置?只有jar依赖吗?还须要其余操作吗?这些疑难在上面这两篇文章中齐全揭秘,而后您也能轻易做出集成了人脸识别的SpringBoot利用了:Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)Java版人脸检测详解下篇:编码顺便剧透一下:设置运行环境很麻烦,所幸欣宸已解决此问题,并胜利封装为根底镜像,咱们能够专一的开发利用,对运行环境再也无需解决了你不孤独,欣宸原创一路相伴Java系列Spring系列Docker系列kubernetes系列数据库+中间件系列DevOps系列欢送关注公众号:程序员欣宸微信搜寻「程序员欣宸」,我是欣宸,期待与您一起畅游Java世界...https://github.com/zq2599/blog_demos

October 25, 2021 · 1 min · jiezi

关于云计算:全场景效能平台猪齿鱼-Agenthelm组件升级

此前文章猪齿鱼 Agent——基于GitOps的云原生继续交付模型介绍了Choerodon Agent基于helm2版本在猪齿鱼平台继续交付部署流水线中的作用以及实现原理。 当初最新helm版本曾经到helm3,持续应用helm2会面临着如下问题: helm2版本应用的k8s api较老,不利于Choerodon Agent对k8s高版本进行反对helm2架构是client-server架构。其中tiller-pod须要高集群权限,不不便集群中权限治理。同时在Choerodon Agent这边又属于客户端,呈现问题后不不便进行调试因而Choerodon Agent须要反对helm3版本,同时迁徙helm2版本下装置的实例。 helm2与helm3区别tiller被删除 如图所示,helm2中部署Release须要通过tiller-pod,然而在helm3就间接通过kubeconfig部署实例 helm2中Release是全局资源,在helm3中Release存储在各自的命名空间Values反对JSON Schema校验器,主动查看所有输出的变量格局移除了用于本地长期搭建Chart Repository的helm serve 命令helm install 不再默认生成一个Release的名称,除非指定了–generate-nameHelm Cli个别更名 helm2到helm3的迁徙helm2到helm3的迁徙包含如下步骤: helm2的配置迁徙helm2的release迁徙革除helm2的配置、release数据以及Tileer deployment 应用helm-2to3进行数据迁徙装置2to3插件helm3 plugin install https://github.com/helm/helm-2to3插件个性反对性能: 迁徙helm2的配置迁徙helm2的releases革除helm2的配置,rel ease 数据以及Tiller deployment 迁徙helm2的配置首先须要迁徙helm2的配置和数据文件夹,包含如下内容: Chart startersRepositoriesPlugins通过如下命令开始迁徙: helm3 2to3 move config迁徙helm2的实例通过如下命令开始迁 移: helm3 2to3 convert [ReleaseName]革除helm2的数据如果迁徙实现后没有呈现谬误,就能够通过 此条命令分明helm2的数据,包含如下内容: Configuration(Helm homedirectory)v2release dataTiller deployment通过如下命令开始分明数据: helm3 2to3 cleanup留神:如果运行分明命令,所有被删掉的 数据都不能复原。所以没必要的话,还是将以前的数据保留下来 Choerodon Agent的降级解决helm2到helm3的变动十分大,所以Choerdon Agent调用helm也产生巨大变化。其中有两局部须要进行批改 helm客户端获取、装置、降级、卸载实例须要重构须要迁徙helm2装置的实例到helm3,不然降级后Choerodon Agent无奈持续治理以前的实例 helm客户端重构在helm2的时候,Choerodon Agent间接将helm源代码作为Choerodon Agent局部代码进行应用。而在helm3,间接对helm3的源码进行二次开发,而后通过依赖援用。这样做的益处是将helm代码与Choerodon Agent代码解藕,有利于helm相干代码更新降级。 在Choerodon Agent外面,装置或降级实例会对Chart中的资源增加Choeordon Agent相干的label,比方choerodon.io/release、choeroodn.io/command等等,所以helm3的二次开发次要是增加资源label,以装置(Install)操作举例,其余操作(降级、删除)大同小异。%E6%93%8D%E4%BD%9C%E4%B8%BE%E4%BE%8B%EF%BC%8C%E5%85%B6%E4%BB%96%E6%93%8D%E4%BD%9C(%E5%8D%87%E7%BA%A7%E3%80%81%E5%88%A0%E9%99%A4)%E5%A4%A7%E5%90%8C%E5%B0%8F%E5%BC%82%E3%80%82) 1. 批改模块名称进行二次开发,首先须要批改该项目标模块名称,该步骤也是最麻烦的,因为批改后须要批改代码外面所有的包援用门路 如图所示,go.mod文件中的module进行如下批改 github.com/choerodon/helm => github.com/open-hand/helm而后代码文件中批改援用门路 ...

October 22, 2021 · 3 min · jiezi

关于云计算:JavaCPP快速入门官方demo增强版

欢送拜访我的GitHubhttps://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,波及Java、Docker、Kubernetes、DevOPS等; 对于JavaCPPJavaCPP 使得Java 利用能够在高效的拜访本地C++办法,JavaCPP底层应用了JNI技术,能够宽泛的用在Java SE利用中(也包含安卓),以下两个个性是JavaCPP的要害,稍后咱们会用到:提供一些注解,将Java代码映射为C++代码提供一个jar,用<font color="blue">java -jar</font>命令能够将C++代码转为java利用能够拜访的动态链接库文件;目前JavaCPP团队曾经用JavaCPP为多个驰名C++我的项目生成了残缺的接口,这意味着咱们的java利用能够很不便的应用这些C++库,这里截取局部我的项目如下图,更具体的列表请拜访:https://github.com/bytedeco/j... 本篇概览明天咱们先写C++函数,再写Java类,该Java类用JavaCPP调用C++函数;提前小结JavaCPP开发的根本步骤如下图,稍后就按这些步骤去做: 与官网demo的差别聪慧的您应该会想到:入门demo,JavaCPP官网也有啊(https://github.com/bytedeco/j...),难道欣宸还能比官网的好?官网的入门demo肯定是最好的,这个毋庸置疑,我这里与官网的不同之处,是增加了上面这些官网没提到的内容,更合乎本人的开发习惯(官网没有这些的起因,我感觉应该是更关注JavaCPP自身,而不是一些其余的细枝末节):如下图,官网的C++代码只有一个<font color="blue">NativeLibrary.h</font>文件,函数性能也在这个文件中,最终生成了一个jni的so文件,而实际上,应该是头文件与性能代码拆散,因而本文中的头文件和C++函数的源码是离开的,学生成函数性能的so,再在java中生成jni的so,一共会有两个so文件,至于这两个so如何配置和拜访,也是本文的重点之一: 官网demo的java源码如下图,是没有package信息的,而理论java工程中都会有package,由此带来的门路问题,例如头文件放哪里?编译和生成so文件时的命令行怎么解决package信息,等等官网并没有提到,而在本篇咱们的java类是有package的,与之相干的门路问题也会解决: 官网demo在运行时应用的依赖库是<font color="blue">org.bytedeco:javacpp:1.5.5</font>,运行时会输入以下正告信息,本篇会解决这个告警问题:Warning: Could not load Loader: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path环境信息这里给出我的环境信息,您能够作为参考:操作系统:Ubuntu 16.04.5 LTS (server版,64位)g++:(Ubuntu 5.4.0-6ubuntu1~16.04.10) 5.4.0 20160609JDK:1.8.0_291JavaCPP:1.5.5操作账号:rootjavacpp-1.5.5.jar文件下载本篇不会用到maven或者gradle,因而所需的jar文件须要自行筹备,您能够从官网、maven地方仓库等中央下载,也能够从上面两个中央任选一个下载:CSDN(不必积分):https://download.csdn.net/dow...GitHub:https://raw.githubusercontent...残缺源码和相干文件下载本次实战的所有源码以及相干文件,我这里都依照实战的目录地位打包上传到服务器,如果有须要,您能够从上面两个中央任选一个下载,用以参考,CSDN(不必积分):https://download.csdn.net/dow...GitHub:https://raw.githubusercontent...接下进入实战环节C++开发新建一个文件夹,我这边是<font color="blue">/root/javacpp/cpp</font>,C++开发都在此文件夹下进行C++局部总共要写三个文件,别离是:C++函数的源码:NativeLibrary.cpp头文件:NativeLibrary.h测试函数性能的文件:test.cpp(该文件仅用于测试C++函数是否失常可用,与JavcCPP无关)接下来别离编写,首先是NativeLibrary.cpp,如下,仅有加法的办法:#include "NativeLibrary.h" namespace NativeLibrary { int MyFunc::add(int a, int b) { return a + b; }}头文件:#include<iostream>namespace NativeLibrary { class MyFunc{ public: MyFunc(){}; ~MyFunc(){}; int add(int a, int b); };}测试文件test.cpp,可见是验证MyFunc类的办法是否失常:#include<iostream>#include"NativeLibrary.h"using namespace NativeLibrary;int main(){ MyFunc myFunc; int value = myFunc.add(1, 2); std::cout << "add value " << value << std::endl; return 0;}执行以下命令,编译NativeLibrary.cpp,失去so文件<font color="blue">libMyFunc.so</font>:g++ -std=c++11 -fPIC -shared NativeLibrary.cpp -o libMyFunc.so执行以下命令,编译和链接test.cpp,失去可执行文件<font color="blue">test</font>:g++ test.cpp -o test ./libMyFunc.so运行可执行文件试试,命令是<font color="blue">./test</font>:root@docker:~/javacpp/cpp# ./testadd value 3将<font color="red">libMyFunc.so</font>文件复制到<font color="blue">/usr/lib/</font>目录下test的执行后果合乎预期,证实so文件创建胜利,记住上面两个要害信息,稍后会用到:头文件是<font color="blue">NativeLibrary.h</font>so文件是<font color="blue">libMyFunc.so</font>接下来是java局部Java开发简略起见,咱们手写java文件,不创立maven工程新建一个文件夹,我这边是<font color="blue">/root/javacpp/java</font>,java开发都在此文件夹下进行将文件<font color="red">javacpp-1.5.5.jar</font>复制到<font color="blue">/root/javacpp/java/</font>目录下出于集体习惯,喜爱将java类放在packgage下,因而建好package目录,我这里是<font color="blue">com/bolingcavalry/javacppdemo</font>,在我这里的绝对路径就是<font color="blue">/root/javacpp/java/com/bolingcavalry/javacppdemo</font>将文件<font color="red">NativeLibrary.h</font>复制到<font color="blue">com/bolingcavalry/javacppdemo</font>目录下在<font color="blue">com/bolingcavalry/javacppdemo</font>目录下新建Test.java,有几处要留神的中央稍后会提到:package com.bolingcavalry.javacppdemo;import org.bytedeco.javacpp.*;import org.bytedeco.javacpp.annotation.*;@Platform(include="NativeLibrary.h",link="MyFunc")@Namespace("NativeLibrary")public class Test { public static class MyFunc extends Pointer { static { Loader.load(); } public MyFunc() { allocate(); } private native void allocate(); // to call add functions public native int add(int a, int b); } public static void main(String[] args) { MyFunc myFunc = new MyFunc(); System.out.println(myFunc .add(111,222)); }}Test.java有以下几处须要留神:Namespace注解的值是命名空间,要与后面C++代码保持一致动态类名为<font color="red">MyFunc</font>,这个要和C++中申明的类保持一致Platform注解的include属性是NativeLibrary.h,作用是指定头文件Platform注解的link属性的值是<font color="red">MyFunc</font>,和so文件名libMyFunc.so相比,少了后面的lib前缀,以及so后缀,这是容易出错的中央,要千万小心,须要依照这个规定来设置link属性的值对so中的add办法,通过native关键字做申明,而后就能够应用了当初开发工作曾经实现,接下来开始编译和运行编译和运行首先是编译java文件,进入目录<font color="blue">/root/javacpp/java</font>,执行以下命令,即可生成class文件:javac -cp javacpp-1.5.5.jar com/bolingcavalry/javacppdemo/Test.java接下来要用javacpp-1.5.5.jar实现c++文件的创立和编译,生成linux下的so文件:java \-jar javacpp-1.5.5.jar \com/bolingcavalry/javacppdemo/Test.java控制台输入以下信息,表名so文件曾经生成,并且清理掉了两头过程产生的临时文件:root@docker:~/javacpp/java# java \> -jar javacpp-1.5.5.jar \> com/bolingcavalry/javacppdemo/Test.javaInfo: javac -cp javacpp-1.5.5.jar:/root/javacpp/java com/bolingcavalry/javacppdemo/Test.java Info: Generating /root/javacpp/java/jnijavacpp.cppInfo: Generating /root/javacpp/java/com/bolingcavalry/javacppdemo/jniTest.cppInfo: Compiling /root/javacpp/java/com/bolingcavalry/javacppdemo/linux-x86_64/libjniTest.soInfo: g++ -I/usr/lib/jvm/jdk1.8.0_291/include -I/usr/lib/jvm/jdk1.8.0_291/include/linux /root/javacpp/java/com/bolingcavalry/javacppdemo/jniTest.cpp /root/javacpp/java/jnijavacpp.cpp -march=x86-64 -m64 -O3 -s -Wl,-rpath,$ORIGIN/ -Wl,-z,noexecstack -Wl,-Bsymbolic -Wall -fPIC -pthread -shared -o libjniTest.so -lMyFunc Info: Deleting /root/javacpp/java/com/bolingcavalry/javacppdemo/jniTest.cppInfo: Deleting /root/javacpp/java/jnijavacpp.cpp此时的<font color="blue">com/bolingcavalry/javacppdemo</font>目录下新增了一个名为<font color="red">linux-x86_64</font>的文件夹,外面的<font color="red">libjniTest.so</font>是javacpp-1.5.5.jar生成的您能够将<font color="blue">/usr/lib/</font>目录下的<font color="red">libMyFunc.so</font>文件挪动到<font color="blue">linux-x86_64</font>目录下(不挪动也能够,只是集体感觉业务so文件放在/usr/lib/这种公共目录下不太适合)将java利用运行起来:java -cp javacpp-1.5.5.jar:. com.bolingcavalry.javacppdemo.Test控制台输入的信息如下所示,333示意调用so中的办法胜利了:root@docker:~/javacpp/java# java -cp javacpp-1.5.5.jar:. com.bolingcavalry.javacppdemo.TestWarning: Could not load Loader: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path333最初,将我这里c++和java的文件夹和文件的信息具体列出来,您能够参考:root@docker:~# tree /root/javacpp/root/javacpp├── cpp│ ├── libMyFunc.so│ ├── NativeLibrary.cpp│ ├── NativeLibrary.h│ ├── test│ └── test.cpp└── java ├── com │ └── bolingcavalry │ └── javacppdemo │ ├── linux-x86_64 │ │ ├── libjniTest.so │ │ └── libMyFunc.so │ ├── NativeLibrary.h │ ├── Test.class │ ├── Test.java │ └── Test$MyFunc.class └── javacpp-1.5.5.jar6 directories, 12 files一点小问题咱们回顾一下java利用的输入,如下所示,其中有一段告警信息:root@docker:~/javacpp/java# java -cp javacpp-1.5.5.jar:. com.bolingcavalry.javacppdemo.TestWarning: Could not load Loader: java.lang.UnsatisfiedLinkError: no jnijavacpp in java.library.path333上述告警信息不会影响性能,如果想打消掉,就不能只用<font color="blue">org.bytedeco:javacpp:1.5.5</font>这一个库,而是<font color="blue">org.bytedeco:javacpp-platform:1.5.5</font>,<font color="red">以及它的依赖库</font>因为本篇没有用到maven或者gradle,因而很难将<font color="blue">org.bytedeco:javacpp-platform:1.5.5</font>及其依赖库集齐,我这里曾经将所有jar文件打包上传,您能够抉择上面任意一种形式下载:CSDN(不必积分):https://download.csdn.net/dow...GitHub:https://raw.githubusercontent...下载下来后解压,是个名为<font color="blue">lib</font>的文件夹,将此文件夹放在<font color="blue">/root/javacpp/java/</font>目录下lib文件夹下的jar只是在运行时用到,编译时用不上,因而当初能够再次运行java利用了,命令如下:java -cp lib/*:. com.bolingcavalry.javacppdemo.Test在看控制台输入如下图,这次没有告警了: ...

October 22, 2021 · 2 min · jiezi

关于云计算:凌晨-12-点突发-Istio-生产事故一顿操作猛如虎解决了

事变起因业务上新集群,原本认为"洒洒水",11 点切,12 点就能在家睡觉了。流量切过来后,在验证过程中,发现网页可能失常关上,在登录时返回了 502,当场懵逼。在相干的容器日志发现一个高频的报错条目“7000 端口无奈连贯”,向业务组理解到这是 redis 集群中的一个端口,前后端是通过 redis 交互的,该集群同时还有 7001-7003 其它三个端口。 用 nc 命令对 redis 集群进行连贯测试:向服务端发送 keys * 命令时,7000 端口返回的是 HTTP/1.1 400 Bad Request,其余三个端口是 redis 返回的 -NOAUTH Authentication required。 $ nc 10.0.0.6 7000 keys * HTTP/1.1 400 Bad Request content-length: 0 connection: close $ nc 10.0.0.6 7003 keys * -NOAUTH Authentication required判断 7000 端口连贯到了其余利用上,至多不是 redis。在宿主机上抓包发现没有抓到拜访 7000 端口的流量,而后查看容器的 nf_conntrackb 表,发现 7000 端口的数据只有到本地的会话信息;7003 的有两条会话信息,一条到本机的,一条到指标服务器的。 $ grep 7000 /proc/net/nf_conntrack ipv4 2 tcp 6 110 TIME_WAIT src=10.64.192.14 dst=10.0.0.6 sport=50498 dport=7000 src=127.0.0.1 dst=10.64.192.14 sport=15001 dport=50498 [ASSURED] mark=0 zone=0 use=2 $ grep 7003 /proc/net/nf_conntrack ipv4 2 tcp 6 104 TIME_WAIT src=10.64.192.14 dst=10.0.0.6 sport=38952 dport=7003 src=127.0.0.1 dst=10.64.192.14 sport=15001 dport=38952 [ASSURED] mark=0 zone=0 use=2 ipv4 2 tcp 6 104 TIME_WAIT src=10.64.192.14 dst=10.0.0.6 sport=38954 dport=7003 src=10.0.0.6 dst=10.64.192.14 sport=7003 dport=38954 [ASSURED] mark=0 zone=0 use=2由此判断出 istio 没有代理转收回 7000 的流量,这忽然就涉及到了我的常识盲区,一大堆人看着,办公室 26 度的空调,始终在冒汗。没方法了,在与业务磋商后,只能先敞开 istio 注入,优先复原了业务。回去后恶补 istio 的相干材料。终于将问题解决。记录下相干信息,以供日后参考。 ...

October 21, 2021 · 9 min · jiezi

关于云计算:以太网链路聚合

以太网链路聚合一、以太网的链路聚合是Eth-trunk多链路汇聚,将多条物理链路变为一条E-trunk的逻辑链路,从而实现减少链路带宽的目标。链路聚合分为手工模式和LACP模式。1.手工模式手工模式下,Eth-Trunk的建设、成员接口的退出由手工配置,没有链路聚合控制协议LACP的参加。当须要在两个直连设施间提供一个较大的链路带宽而设施又不反对LACP协定时,能够应用手工模式。手工模式能够实现减少带宽、进步可靠性、负载分担的目标。当一条链路故障时,故障链路无奈转发数据,链路聚合组主动在残余的两条流动链路中分担流量。手工模式Eth-Trunk能够实现多个物理接口聚合成一个Eth-Trunk口来进步带宽,同时可能检测到同一聚合组内的成员链路有断路等无限故障,然而无奈检测到链路层故障、链路错连等故障。2.LACP模式须要有链路汇合控制协议LACP的参加当须要在两个直连设施间提供一个较大的链路带宽而设施反对LAC时,倡议应用Lacr模式,LACP模式式不仅能够实现减少带宽、进步可靠性、负载分担的目标,而且能够提供Eth-trunk的容错性、提供备份性能。LACP模式下,局部链路是流动链路,所有流动链路均参加数据转发。如果某条流动链路故障,链路聚合组主动在非流动链路中抉择一条链路作为话动链路、使得参加数据转发的链路数目不变。链路聚合的目标:为了进步链路的可靠性与带宽3·链路聚合组和链路聚合接口链路聚合组( Link Aggregation Group,LAG)是指将若干条以太链路捆绑在一起所造成的逻辑链路。每个聚合组惟一对应着一个逻辑接口,这个逻辑接口称之为链路聚合接口或Eth- Trunk接口。链路聚合接口能够作为一般的以太网接口来应用,与一般以太网接口的差异在于:转发的时候链路聚合组须要从成员接口中抉择一个或多个接口来进行数据转发。4.成员接口和成员链路组成Eth- Trunk接口的各个物理接口称为成员接口。成员接口对应的链路称为成员链路5.流动接口和非流动接口、流动链路和非流动链路链路聚合组的成员接口存在流动接口和非流动接口两种。转发数据的接口称为流动接口,不转发数据的接口称为非流动接口。流动接口对应的链路称为流动链路,非流动接口对应的链路称为非流动链路。6.流动接口数下限阈值设置流动接口数下限阈值的目标是在保障带宽的状况下进步网络的可靠性。以后流动链路数目达到下限阈值时,再向Eth- Trunk中增加成员接口,不会减少Eth- Trunk流动接口的数目,超过下限阈值的链路状态将被置为Down,作为备份链路。例如,有8条无故障链路在一个Eth- Trunk内,每条链路都能提供1G的带宽,当初最多须要5G的带宽,那么下限阈值就能够设为5或者更大的值。其余的链路就主动进入备份状态以进步网络的可靠性。 以太网物理链路的带宽总和,从而达到了减少链路带宽的目标;同时,这三条以太网物理链路互相备份,无效地进步了链路的可靠性。7.流动接口数上限阈值设置流动接口数上限阈值是为了保障最小带宽,以后流动链路数目小于上限阈值时,Eth- Trunk接口的状态转为Down。例如,每条物理链路能提供16的带宽,当初最小须要2G的带宽,那么流动接口数上限阈值必须要大于等于2。二、试验根底命令交换机1配置[Huawei] lacp priority 1000 (配置零碎LACP优先级)[Huawei] int Eth-Trunk 1 (进入Eth-Trunk视图)[Huawei-Eth-Trunk 1] bpdu enable (配置接口上发送到BPDU报文到CPU解决,起到防环作用)[Huawei-Eth-Trunk 1] mode lacp-static (配置Eth-Trunk为动态LACP模式)[Huawe1] int e0/0/10 (接口在退出Eth-trunk前必须要放弃为默认hybrid模式类型,可在退出 Eth-trunk后再配trunk)[Huawei-e0/0/10] eth-trunk 1 (以后接口退出Eth-Trunk)[Huawei] int e0/0/11[Huawei-int e0/0/11]eth-trunk 1[Huawei] int e0/0/12[Huawei-int e0/0/12]eth-trunk 1[Huawei] dis eth-trunk 1 (上面有三个成员,此时三个口是跑流量的负载冗余)[Huawei]int eth-trunk 1[Huawei-eth-trunk 1]max active-linknumber 2配置链路聚合流动接口数下限阈值。残余的成员的接口处于备份状态,未配置下限阈值则Eth-Trunk 最多容许8个接口同时处于活动状态[Huawei-eth-trunk 1]dis this交换机2配置[Huawei] int Eth-Trunk 1[Huawei-Eth-Trunk 1]bpdu enable交换机2配置 [Huawei] int Eth-Trunk 1[Huawei-Eth-Trunk 1]bpdu enable[Huawei-Eth-Trunk 1]mode lacp-static[Huawei] int e0/0/10[Huawei-e0/0/1o]eth-trunk 1[Huawei] int e0/0/11[Huawei-int e0/0/11]eth-trunk 1[Huawei]int e0/0/12[Huawei-int e0/0/12]eth-trunk 1[Huawei] interface eth-trunk 1[Huawei-Eth-Trunkl] trunkport ethernet 0/0/10 to 0/0/12 (向Eth-Trunk批量减少成员接口)[Huawei] dis eth-trunk 1[Huawei] dis trunkmembership eth-trunk 1 (查看链路负载状况)负载冗余测试shdown掉其中的一条链路GoodMai。comIT交易平台[Huawei] dis trunkmembership eth-trunk 1 (查看链路负载状况)©著作权归作者所有:来自51CTO博客作者最强飞雷神水门的原创作品,如需转载,请注明出处,否则将查究法律责任以太网链路聚合blog.51cto.com/u_15382049/… ...

October 21, 2021 · 1 min · jiezi

关于云计算:DL4J实战之六图形化展示训练过程

欢送拜访我的GitHub这里分类和汇总了欣宸的全副原创(含配套源码):https://github.com/zq2599/blog_demos本篇概览本篇是《DL4J实战》系列的第六篇,咱们持续夯实基本功,这次学习的是如何更加形象残缺的展现训练过程:图形化页面,成果如下图所示: 接下来抉择一个已有的子工程,为其减少图形化界面的成果,我这里选的是《DL4J实战之三:经典卷积实例(LeNet-5)》一文中的<font color="blue">simple-convolution</font>子工程总的来说本篇由以下内容形成:根本的图形化性能图形化数据的继续存储问题图形化页面的端口配置问题依赖库配置首先是增加依赖库,一共须要两步:关上父工程<font color="blue">dlfj-tutorials</font>的pom.xml,这是治理依赖库版本号的中央,在<font color="blue">dependencies</font>节点确保以下子节点是存在的,这里dl4j-master.version的值是<font color="blue">1.0.0-beta7</font>:<dependency> <groupId>org.deeplearning4j</groupId> <artifactId>deeplearning4j-ui</artifactId> <version>${dl4j-master.version}</version></dependency>关上子工程<font color="blue">simple-convolution</font>的pom.xml,增加deeplearning4j-ui库的依赖:<dependency> <groupId>org.deeplearning4j</groupId> <artifactId>deeplearning4j-ui</artifactId></dependency>如果您在用的是IDEA,倡议执行下图中的操作,确保配置立刻失效: 减少图形化相干代码图形化相干的代码很少,只有寥寥几句,写在MultiLayerNetwork实例初始化之后的地位即可,如下图红框所示: 上图红框中的代码在此,不便您应用:// 初始化用户界面后端UIServer uiServer = UIServer.getInstance();// 配置要存储网络信息(梯度、分数、工夫等)的地位。这里:存储在内存中。StatsStorage statsStorage = new InMemoryStatsStorage();// 将StatsStorage实例附加到UI:这容许StatsStorage的内容可视化uiServer.attach(statsStorage);//而后增加StatsListener来收集网络上的信息net.setListeners(new StatsListener(statsStorage));最初,为了防止过程过早完结导致无奈持续查看图形化信息,在main办法的开端动一点手脚,如期待输出或者延时,我这里加了个延时:Thread.sleep(Integer.MAX_VALUE);至此编码实现,运行起来,在浏览器输出<font color="blue">http://localhost:9000</font>,成果如下图: 还能够将页面语言换成中文,如下图: 点击下图红框中的菜单,还能够看到神经网络每一层的详情: 基本功能曾经实现,接下来看看长久化问题长久化存储页面展现的内容后面的图形化性能有个显著的问题:一旦过程完结,web服务也就完结了,下次再启动,页面上展现的也是最新一次训练的数据,如果想保留页面上展示的内容以便前面再回放,应该如何做呢?接下来一起操作,改成能够长久化存储的找到这一行代码:StatsStorage statsStorage = new InMemoryStatsStorage();把下面那行代码删除,换成上面这行,File对象的入参是数据存储地位,请依照您电脑的理论状况批改:StatsStorage statsStorage = new FileStatsStorage(new File("E:\\temp\\202107\\11", "ui-stats.dl4j"));把上面这行代码也删除,这样训练实现后过程会立刻完结:Thread.sleep(Integer.MAX_VALUE);当初运行代码执行一次训练,实现后,在<font color="blue">E:\temp\202107\11</font>目录发现生成了名为<font color="red">ui-stats.dl4j</font>的文件: 上图看起来曾经把数据保留硬盘,接下来试试能不能再次读取到,在<font color="blue">simple-convolution</font>工程中新增<font color="red">Test.java</font>,代码如下所示,寥寥几行,全是后面那点货色:package com.bolingcavalry.convolution;import org.deeplearning4j.api.storage.StatsStorage;import org.deeplearning4j.ui.api.UIServer;import org.deeplearning4j.ui.storage.FileStatsStorage;import java.io.File;public class Test { public static void main(String[] args) throws Exception { UIServer uiServer = UIServer.getInstance(); StatsStorage statsStorage = new FileStatsStorage(new File("E:\\temp\\202107\\11", "ui-stats.dl4j")); // 将StatsStorage实例附加到UI:这容许StatsStorage的内容可视化 uiServer.attach(statsStorage); Thread.sleep(99999); }}再次关上浏览器拜访<font color="blue">http://localhost:9000</font>,已经的数据再现: 聪慧的您看了下面的Test.java代码,肯定会对欣宸投来鄙视的眼光,就这程度?请容我解释一下,这里只是演示如何加载和展现数据,所以写的过于简陋,您能够将此代码段放在罕用的web利用中,如SpringBoot,这样就能按须要加载和查看了解决了存储问题,咱们再来看看web端口如何调整,因为端口抵触,或者一些端口治理,都有调整端口的需要,而不能固定在<font color="blue">9000</font>对于图细化服务的web端口图细化服务是通过浏览器拜访的,默认端口为9000,如果您想扭转端口,例如改为9001,该如何操作呢?先看官网怎么说,如下图红框,地址:https://deeplearning4j.kondui... 听官网的,配置启动参数,操作如下图: 确保下图红框2中的菜单被选中: ...

October 21, 2021 · 1 min · jiezi

关于云计算:研究表明到2025年多接入边缘云市场规模将稳步增长

调研机构IDC公司示意,2021年将是多接入边缘计算(MEC)市场减速投资的一年。宽泛的边缘利益相关者(例如无线和有线通信服务提供商、有线公司、内容交付网络和云计算提供商)致力于构建MEC设施,以交付对提早敏感的边缘网络服务。 除了网络连接之外,构建MEC还将为企业提供在办公场合和边缘云站点上托管应用程序的机会。其潜在的益处包含可能满足严格的数据流量政策,进步安全性,并改善实时控制和决策。 市场参与者(电信厂商、超大规模公司、运营商、基础设施供应商)的用例、市场定位、产品开发和原生架构仍在开发中。 随着挪动边缘云生态系统的减速倒退,有线零碎运营商更多投资边缘计算,云计算服务提供商托管网络边缘工作负载,并与通信服务提供商单干为企业提供MEC解决方案,将推动挪动网络运营商在预测期内的大部分投资。 到2025年,多接入边缘云市场支出将达到167亿美元 MEC包含虚构网络性能、网络性能虚拟化基础设施(NFVI)和云原生网络性能。寰球MEC市场支出包含挪动边缘、有线边缘、电缆边缘和CDN边缘这四个细分市场的支出,将从2020年的35亿美元增长到2025年的167亿美元。这意味着2020~2025年的复合年增长率为37.0%。 IDC公司运营商网络基础设施钻研总监Ajeet Das说,“随着MEC成为各种垂直企业的可行抉择,它正成为网络连接之外的新支出流的要害驱动因素,并对试图将5G实现货币化的挪动网络运营商至关重要。 尽管目前边缘投资次要与5G/MEC相干,但咱们预计边缘投资将扩充有线市场规模,有线零碎运营商、CDN和有线服务提供商将为下一代企业应用构建低提早、可用性和安全性的边缘平台。” (起源:企业网D1Net)

October 20, 2021 · 1 min · jiezi