反了!居然让我教她自动化测试!
一个做测试的居然让我教她怎么做自动化测试,真是反了……行吧,正好懂一些 Selenium,今天就来跟大家一起了解下 Python 如何使用 Selenium 进行自动化测试。简单介绍Selenium 大家应该都很熟悉了吧,简单说它就是个基于浏览器的 Web 自动化测试工具,基本上是自动化测试人员首选工具。因为相比其他工具,它有很多的优势:支持多种语言,比如 Python、Java、C或C#、ruby 等都支持;支持多种浏览器, 比如 IE、FireFox、Safari、Opera、Chrome 这些主流浏览器基本都支持;支持多种操作系统,比如 Windows、Mac、Linux 这个款主流操作系统。其实单就上面这些优势就足以证明它的强大了,再加上它还支持分布式部署自动化测试程序,在多台不同的机器上同时执行。是不是感觉很厉害?然而这么强大的工具它居然还是免费的,并且代码已经开源,这简直不敢想象。说的这么厉害,那它要如何使用呢?环境安装首先你得先装好了 Python,然后通过 pip install selenium 命令进行安装就可以了(参见 https://pypi.org/project/selenium/)。安装完 selenium 后,还需要再下载 webdriver ,不同的浏览器需要下载不同的驱动,以下是常见浏览器驱动的下载地址:我平时都是用?Chrome?浏览器,所以我下载了?chromedriver?,但有一点需要注意,你下载的?chromedriver?版本要和你安装的浏览器版本一致,不然使用中可能会出现各种问题。简单开始好了,现在我们就从最最简单的启动浏览器,然后打开一个网页开始。写好后保存为?test1.py?Python 文件,然后执行命令?python test1.py,然后就可以看到如下效果:程序通过 selenium 调用 chromedriver 驱动 Chrome 浏览器启动,并让浏览器打开百度的首页,大概就是这么个过程。除了使用 Chrome 浏览器,我们也可以使用其他的,比如 Firefox、EDGE 等。好了,通过对比上面代码相信你也能看出来,其实用哪个浏览器其实区别都不是很大,这里就不再一一截图了,接下来我就使用 Chrome 来介绍和演示效果了。简单使用当然启动浏览器,并打开页面我们只是走出了第一步,也就是写了个 Hello World,下面我们再慢慢介绍如何使用,再来看个简单例子:好了,我们再保存下然后执行命令?python test1.py,然后看下效果:没错,这次是打开百度首页后,又在搜索框输入 python selenium 字符串,并且点击 百度一下 按钮搜索出了结果。但它是怎么获取到搜索框,这里我们用的是 find_element_by_id() 方法,也就是通过 HTML 标签元素的 id 找到了这个输入框。那除了通过这个方法,还有别的方法能找到搜索框吗?总结好了,今天我们简单介绍了下 selenium 是什么,以及在 Python 中如何安装配置使用 selenium。如果你也对这个工具感兴趣,可以继续关注了解更多。OK,今天就聊这些,如果你喜欢记得点 在看。
NFT跨链多币种钱包开发系统搭建技术
跨链互操作性有利于Web3不同生态的集成,同时对于连接现有Web2基础设施和Web3服务有至关重要的作用。通过启用跨链智能合约,跨链互操作性解决方案减少了生态系统的碎片化,并释放了更高的资本效率和更好的流动性条件。 DeFi的无需许可的可组合性催生了越来越复杂的应用程序,这些应用程序允许开发人员将不同的dApp组合成一个结构,该结构可以实现的效果超过其各部分的总和。然而,数百个不同网络的可组合性受到显着阻碍,因为智能合约只能与同一网络上的其他合约本地组合。如果一个应用程序想要跟随用户并在快速变化的多链环境中保持竞争力,它必须部署在多个平台上,导致流动性碎片化和用户体验下降。此外,单个dApp部署会占用宝贵的开发资源,否则这些资源可能会用于提升应用程序的业务逻辑。 在多链环境中,每个dApp实例都是一组孤立的智能合约,与其他区块链没有连接。 跨链互操作性使开发人员能够构建一个原生的跨链应用程序,其中一个统一的dApp可以部署在多个不同区块链上,而不必在不同的网络上部署多个单独的版本。 跨链智能合约由部署在多个网络中的多个智能合约组成,创建一个统一的dApp。 跨链技术的原理是什么? 跨链解决方案通常涉及验证源区块链的状态并将后续交易中继到目标区块链。这两个功能都是完成大多数跨链交互所必需的。 基础设施的一个关键部分是跨链桥,它使通证能够从源区块链转移到目标区块链。跨链桥通常涉及通过智能合约在源链上锁定或销毁通证,并通过目标链上的另一个智能合约解锁或铸造它们。实际上,跨链桥是一种跨链消息传递协议,适用于非常狭窄的用例——在不同区块链之间传输通证。因此,跨链桥通常是两个区块链之间的特定于某个应用程序的服务。 跨链桥只是一个提供跨链功能的简单应用程序。可编程的通证桥支持更复杂的跨链交互,例如在执行跨链函数的交易中交换、借出、抵押或存入通证,而任意数据消息传递协议提供更通用的跨链功能,它可以支持创建更复杂的dApp,例如跨链去中心化交易所(DEX)、跨链货币市场、跨链NFT、跨链游戏等等。 绕过源链上代币的锁定过程,却获得了代币的锁定证明,进而在目标链铸造资产 deposit()用于ERC20代币的存款,depositETH()用于WETH/WBNB代币的存款。 Bridge合约提供了两种方法:deposit()和depositETH()用于上述两种代币的存款,但是deposit()并没有阻止WETH/WBNB的存款交易,并且存在有着缺陷的逻辑判断。 当tokenAddress不为_wtokenAddress地址时进行ERC20代币的销毁或锁定,若为_wtokenAddress则直接跳过该部分处理. 跨链桥合约中的depositETH函数会将链平台币转为wToken后转至depositHandler地址,所以在depositHandler执行deposit逻辑时,已处理过代币转移,故跳过代币处理逻辑 但跨链桥合约的deposit函数中并没有处理代币转移及校验,在转由deposiHandler执行deposit时,若data数据构造成满足tokenAddress==_wtokenAddress即可绕过处理
亚马逊卖家做市场分析业务可以用静态IP代理完成吗?
亚马逊作为全球最大的电商平台之一,其庞大的销售数据和用户行为数据成为了许多商家和市场研究人员进行市场分析和竞争研究的重要来源。而使用IP代理则能够为亚马逊市场分析带来许多帮助,下面就来一一介绍。静态IP代理可以为市场分析带来哪些帮助?1、收集全球市场数据亚马逊作为全球性电商平台,拥有遍布全球的卖家和买家,而使用IP代理则可以模拟不同地区的网络环境,访问不同国家或地区的亚马逊平台,从而收集全球市场数据。通过对全球市场的数据进行分析,可以发现不同国家或地区的产品需求和市场趋势,有助于企业进行全球化战略规划和产品定位。2、检测产品定价策略亚马逊平台上的卖家往往会根据产品的不同地区和不同时间段采取不同的定价策略,而使用IP代理则可以在不同的地区和时间段下单购买同一款产品,从而检测产品的定价策略。通过对定价策略的分析,企业可以找到合适的价格策略,从而提高产品的销售量和盈利能力。3、监测竞争对手亚马逊平台上的卖家竞争激烈,而使用IP代理则可以监测竞争对手的产品定价、产品销售数据、广告投放等行为。通过对竞争对手的监测和分析,企业可以了解市场的竞争格局和趋势,从而优化自己的产品定价、推广和服务等方面,提高自身的市场竞争力。4、获取更精准的广告投放数据亚马逊平台提供广告投放服务,而使用IP代理则可以模拟不同地区的网络环境,从而获取更精准的广告投放数据。通过对广告投放数据的分析,企业可以了解广告的效果和投放策略,从而优化自己的广告投放策略,提高广告的转化率和ROI。总之,IP代理为亚马逊市场分析提供了重要的数据来源和分析工具,帮助企业了解全球市场、检测产品定价策略、监测竞争对手、获取精准数据等。除此之外静态IP代理对亚马逊卖家还有哪些帮助?除了用于市场分析业务,亚马逊卖家可以利用IP代理来获取其他方面的帮助。下面是几个常见的用例:1、保护账户安全亚马逊卖家账户是非常重要的,因为它们包含着卖家的资金和销售数据。使用IP代理可以帮助卖家隐藏自己的真实IP地址,防止黑客和欺诈分子利用IP地址入侵卖家账户,保护账户安全。2、躲避竞争对手的监视在亚马逊平台上,卖家之间的竞争非常激烈。使用IP代理可以帮助卖家隐藏自己的真实IP地址,防止竞争对手通过监视IP地址来了解卖家的产品和定价策略,从而躲避竞争对手的监视。3、搜索引擎优化在亚马逊平台上,卖家的产品能否被潜在客户找到,对于卖家的销售业绩有着至关重要的影响。使用IP代理可以帮助卖家优化其产品的搜索引擎排名,提高产品的曝光率和销售额。4、提高销售速度使用IP代理可以帮助卖家提高其销售速度。通过利用不同的IP地址,卖家可以同时在多个区域或国家投放广告,吸引更多的客户,提高销售速度。总之,利用IP代理是亚马逊卖家在竞争激烈的电商平台上获取优势的一种方式。卖家可以通过使用IP代理来保护账户安全、躲避竞争对手的监视、优化产品的搜索引擎排名,提高销售速度等,从而取得更大的成功。最后Smartproxy是海外HTTP代理服务器提供商,服务于大数据采集领域帮助企业/个人快速高效获取数据源。
【JAVA】让 ChatGPT 来浅说 AQS
前言又迎来了一年一度的金三银四,虽然说今年的大环境不好,但是招聘还是在火热进行中。面试过 Java 工程师的小伙伴都知道,Java 中的 AQS 是面试高频题,面试官上来就直接了当地问,AQS 知道是什么吧,来讲讲它是怎么实现的,以及哪些地方用到了它。那么接下来,让我们使用 ChatGPT 并结合自己的理解来讲述一下 AQS 的相关内容。什么是 AQS当博主提问 ChatGPT 什么是 AQS 时,ChatGPT 给出了如下回答:大致意思就是说,AQS 全称 AbstractQueuedSynchronizer,是 Java 中并发包中用于实现锁和其他同步器的基础框架。它使用了 CAS 操作和 unsafe 类来实现同步器的状态更新以及线程的挂起和唤醒等操作,提供了一种通用的、高效且可扩展的同步机制,可以用来构建各种同步组件。AQS 内部维护了一个 FIFO 队列,用于存储等待获取同步状态的线程。同时定义了一些模板方法,这些方法被子类实现,用于实现不同类型的同步器,例如 ReentrantLock、CountDownLatch、Semaphore 等。AQS 使用了一种独特的模板方法设计模式,使用内部状态(一个 volatile 修饰的 state 变量)来控制同步器的行为,子类通过实现模板方法来控制同步器的状态变化。AQS 的内部状态可以被子类用于实现独占式、共享式的同步器。综上,想要理解 AQS,以下几个方面是必要的:同步器:AQS 是同步器的一个抽象基类,通过继承 AQS 可以构建各种同步组件,如锁、信号量等。状态:AQS 内部维护了一个状态变量,表示同步器的状态。同步器的具体含义由子类来定义。队列:AQS 内部使用 FIFO 队列来存储等待获取同步状态的线程。当多个线程同时请求同步状态时,AQS 会将其中一个线程设置为独占模式,即该线程成为获取到同步状态的唯一持有者,其他线程则会被加入到等待队列中。模板方法:AQS 采用了模板方法设计模式,在 AQS 中定义了一系列抽象方法和钩子方法,子类需要实现这些方法来定义自己的同步逻辑。CAS 和 volatile:AQS 内部使用了 CAS 和 volatile 等原语来保证同步器的正确性和并发性能。总之,AQS 是 Java 中并发包中实现锁和其他同步器的基础框架,使用模板方法设计模式和 CAS 操作实现了高效、可扩展性高的同步器。理解 AQS 对于理解 Java 中并发编程的原理和实现非常重要。AQS 如何实现那接下来问一下 ChatGPT AQS 是如何实现地:首先,AQS 的内部维护了一个 FIFO 的双向链表,用于存储等待获取锁的线程。当一个线程调用 acquire 方法时,如果当前没有其他线程持有锁,则直接获取锁;否则,将当前线程加入等待队列,并阻塞线程,直到获取到锁的时候再唤醒。其次,AQS 还提供了一个 ConditionObject 类,用于实现线程的等待/通知机制。每个ConditionObject对象内部都维护了一个等待队列,用于存储等待条件满足的线程。当一个线程调用 await 方法时,将当前线程加入等待队列,并阻塞线程,直到条件满足的时候再唤醒;当一个线程调用 signal 方法时,将等待队列的第一个线程唤醒,使其从等待队列中移除,并加入到同步队列中等待获取锁。在使用 ConditionObject 时,需要先获取锁,才能调用 await、signal 方法。最后,AQS还提供了一个 getState 和 setState 方法,用于获取和设置当前同步状态。这个同步状态可以用于实现不同的同步语义,如读写锁中的读锁计数器。在实现自定义同步器时,可以使用这些方法来实现特定的同步语义。需要注意的是,虽然 AQS 提供了强大的同步器框架,但是自定义同步器需要非常小心,以避免出现死锁、饥饿等问题。在实现自定义同步器时,需要仔细分析应用场景,理清线程之间的依赖关系,以确保同步器的正确性和高效性。AQS 实现不可重入锁上述光说理论可能不易于理解,因此让 ChatGPT 生成一个与 AQS 相关的代码示例:相关代码如下:import java.util.concurrent.locks.AbstractQueuedSynchronizer;public class SimpleLock {private final Sync sync = new Sync();
private static class Sync extends AbstractQueuedSynchronizer {
@Override
protected boolean tryAcquire(int arg) {
if (getState() == 0 && compareAndSetState(0, 1)) {
setExclusiveOwnerThread(Thread.currentThread());
return true;
}
return false;
}
@Override
protected boolean tryRelease(int arg) {
if (getState() == 0) {
throw new IllegalMonitorStateException();
}
setExclusiveOwnerThread(null);
setState(0);
return true;
}
@Override
protected boolean isHeldExclusively() {
return getState() == 1;
}
}
public void lock() {
sync.acquire(1);
}
public void unlock() {
sync.release(1);
}}复制代码在上述示例代码中,我们首先定义了一个继承自 AbstractQueuedSynchronizer 的内部类 Sync,用于实现不可重入锁。然后,我们在 tryAcquire 方法中尝试获取锁,如果当前状态为0,且能够使用 CAS 操作将状态修改为1,表示成功获取到锁,否则获取锁失败。在 tryRelease 方法中,我们释放锁,首先检查当前状态是否为0,如果是0,表示当前没有线程持有锁,抛出非法监视器状态异常,否则,使用 CAS 操作将状态修改为0,并将持有锁的线程设置为 null。在 isHeldExclusively 方法中,我们判断当前是否有线程持有锁,如果状态为1,表示有线程持有锁,返回 true,否则返回 false。然后,我们定义一个 SimpleLock 类,使用 Sync 内部类实现不可重入锁。在 lock 方法中,我们调用 acquire 方法来获取锁;在 unlock 方法中,我们调用 release 方法来释放锁。设计一个测试用例,发现正如我们所预料的那样,获取锁与释放锁的功能正常,且当对象有锁之后,不能再获取到该对象了,即不可重入:上述示例代码只是 AQS 的一个非常简单的应用,更复杂的应用可以参考 Java 中 ReentrantLock、CountDownLatch、Semaphore 等同步器的实现。后记以上就是?让 ChatGPT 来浅说 AQS?的所有内容了,希望本篇博文对大家有所帮助!
数禾科技 AI 模型服务 Serverless 容器化之旅
作者:周伟鹏、魏文哲、元毅“使用阿里云容器服务 Knative 和 ECI 虚拟节点配合部署,在保证线上模型应对突发流量的稳定性大幅提升的同时,又使资源利用效率获得了显著的提高,极大的节约了资源成本。”?-- 数禾科技 AI 实验室AI 平台负责人?周伟鹏“数禾 DevOps 平台 BetterCDS 集成了阿里云容器服务 Knative,支持模型服务的多版本运行和弹性伸缩,在降低运行成本的同时,也提升了服务的可用性,极大地方便了运维人员和开发人员。”?-- 数禾科技基础架构研发部工程效率组负责人 邓志背景数禾科技以大数据和技术为驱动,为金融机构提供高效的智能零售金融解决方案,服务银行、信托、消费金融公司、保险、小贷公司等持牌金融机构,业务涵盖消费信贷、小微企业信贷、场景分期等多个领域,提供营销获客、风险防控、运营管理等服务。数禾科技通过自主开发的消费信贷产品,连接金融机构与普罗大众,赋能金融机构数字化转型,迎接中国消费升级的大潮。遇到问题在风险管理业务中,根据公司的风险容忍度、风险偏好波动以及阶段性业务目标需要针对公司客户进行风险属性的调整,这其中包括用户额度、定价、可借期限等相关要素。那么这不可避免的需要应用批量数据处理能力通过计算规则来对大量用户做调额、调价等,当然,模型作为风险管理的重要组成部分也必不可少的会被运用至批量处理的动作中来。因此对于模型的计算能力就提出了很高的要求,包括计算速度、计算结果准确性、计算数据实时性等。而当前的困扰所在是支撑模型计算的底层应用资源无法灵活且快速的根据请求量来智能化调整机器资源支持运算能力,这也是当前业务快速发展过程中亟待解决的痛点。同时,随着模型在线推理服务数量的增加,数禾的模型服务也变得越来越庞大、臃肿,难以管理。这种状况不仅导致了资源浪费,还增加了维护和升级的成本。基于以上的各种情况,我们开始寻求新的技术架构方案,希望新方案可以具备随流量高效使用资源,降低模型服务成本,同时最好具备版本管理功能,可以实现多版本同时提供服务,较小响应的运维成本。解决方案经过内部的沟通与调研,我们最终选择了基于 Knative 的 Serverless 服务方案,它具备根据请求的扩缩容能力、允许 pod 缩容到 0 的冷启动能力以及多版本的管理能力。与此同时,由于数禾本身的技术架构都是部署在阿里云的底层资源上,而阿里云 ACK 又对 Knative 做了组件集成,可以支持一键部署,极大的减小了我们部署调试的时间成本。客户价值通过对内部模型部署的 pipeline 进行改造后,目前数禾的所有新增模型均已通过 ACK + Knative 方式部署在线上提供服务,得益于 Knative 的多版本管理能力,我们快速解决了模型的灰度发布和多版本并存的问题。同时加之基于请求的自动扩缩容能力,在多个版本并存的情况下,并没有对资源产生额外的消耗,而且对晚上的谷时资源继续了很好的节约。下图是我们一个模型服务的资源消耗与请求量的对比图,上图为 Pod 资源数量,下图为服务请求量。由下图对比可以看出,整个服务资源的使用情况于服务请求量保持高度一致,使用效率非常高。查看大图:https://img.alicdn.com/imgextra/i4/O1CN01uHrVr51sc2SJ76y4x_!!6000000005786-0-tps-2559-1341.jpg对于上文提到的批量作业任务,虽然我们已经具备了 Knative 的扩缩容能力,但依然需要在底层准备好足够的资源池来供模型进行扩容。但是在一天的大部分场景中这部分资源又是浪费的,对于这个问题,我们通过在 Knative 中使用 ECI 虚拟节点来得到了很好的解决。我们对上线之后的模型服务进行了持续监控,对比使用之前的方案,模型服务在应对突发批量流量的稳定性获得大幅提升,同时资源的使用效率也获得了显著提高,节约成本约 60%。关于 Serverless众所周知,Serverless 是一种云原生的开发模型,客户只需构建和运行应用、而无需管理托管应用所在的服务器。在实际实现上,IT 架构里还是有服务器的,只是对从客户应用研发不可见了,服务器由云厂商托管和维护,用户只需要将代码打包成容器即可。随着云原生技术的演进,以应用为中心,资源按需使用的 Serverless 技术逐渐成为主流。Gartner 预测,2025 年将有 50% 以上的全球企业部署 Serverless。Knative 是基于 Kubernetes 之上提供的一款开源 Serverless 应用框架,其目标就是制定云原生、跨平台的 Serverless 容器编排标准,帮助您部署和管理现代化的 Serverless工作负载,打造企业级 Serverless 容器平台。Knative 于 2021 年 11 月 2 日正式发布 1.0 版本,达到了一个重要的里程碑,随着 2022 年 3 月 2 日加入到 CNCF,越来越多的开发者拥抱 Knative 。阿里云容器服务从 Knative 早期版本开始产品化集成,持续跟进 Knative 社区功能迭代,并与容器服务 ACK、消息、存储、网络等云产品进行了全方位的融合,提供了生产级别的 Knative 能力。点击此处了解更多阿里云 Knative 产品相关信息
五分钟!获得轻量级的云原生应用控制平面
作者:乔中沛云原生的不断成熟让大量基础设施层的能力可以被业务应用直接使用,然而广大的开发者们却苦于很高的上手门槛和学习成本,一直没有机会深入了解云原生生态的工具体系。今天我们将为你介绍一个好用的工具,它能够在离线环境帮你快速安装 Kubernetes 集群,低门槛的上手业务应用部署,还能具备多集群、云资源等一系列高阶能力,而你只需要准备一个能够运行 Docker 的系统环境。这个工具就是?VelaD[1],它可以帮助开发者从零开始,在三分钟内快速搭建基于 K3s 和 KubeVela 的云原生应用控制平面。准备工作如果你使用的是 Mac 或者 Windows,需要准备 Docker 环境,推荐使用?Docker Desktop[2]。如果你使用的是 Linux,则无需准备工作。安装 VelaDMac/Linuxcurl -fsSl https://static.kubevela.net/script/install-velad.sh | bashWindows使用 Powershell 运行powershell -Command "iwr -useb https://static.kubevela.net/script/install-velad.ps1 | iex"安装中需要你输入当前用户的密码来安装到 PATH 中,用以下命令确认你已经安装成功:velad versionCore Version: v1.7.5VelaD Version: v1.7.5一键安装 Kubernetes 和 KubeVela 控制平面最简单的情况下,使用 VelaD 创建多集群控制平面,只需要一条命令:velad install整个安装过程是离线完成的,只需要 1 分钟左右便可安装完成,除了 Kubernetes 以外,还会安装 KubeVela 这个现代化的云原生应用交付和管理平台,帮你轻松上手云原生应用的部署。不仅如此,你还可以通过添加更多节点和数据库来保证集群数据的更高可用性(见“添加集群”小节)。另外,以上命令所创建的控制平面并不会自动将集群暴露给公网。如果你需要通过公网访问你在远程服务器上创建的控制平面,参见远程访问文档[3]。该命令的背后是基于 K3s/K3d 技术为你在机器上创建一个单节点的 Kubernetes 集群,并在其中安装 KubeVela,及其命令行工具 vela。基于这个环境,你可以立刻开始交付你的业务应用。开箱即用的应用交付功能开启 VelaUX随着 velad install 的执行,广受欢迎的控制台插件 VelaUX 也一并在你的机器上就绪了。注意 velad install 执行结束后的提示:💡 To enable dashboard, run `vela addon enable /Users/qiaozp/.vela/addons/velaux`
🔑 To access the cluster, set KUBECONFIG:
export KUBECONFIG=$(velad kubeconfig --name default --host)复制安装成功后的提示命令,执行,启用 VelaUX 插件,命令中的路径在你的环境有所不同Linux/Macexport KUBECONFIG=$(velad kubeconfig --name default --host)
vela addon enable $HOME/.vela/addons/velauxWindows$env:PATH += ";$HOME\.vela\bin;"
$env:KUBECONFIG = $(velad kubeconfig --host)
vela addon enable $HOME\.vela\addons\velauxVelaUX 是一个控制平面上运行的应用,你可以通过浏览器来访问,将 VelaUX 的端口转发到本机来访问:vela port-forward addon-velaux -n vela-system 8080:80使用上下方向键选择 >local | velaux | velaux。接下来你就能在浏览器中访问:http://127.0.0.1:8080/初始管理员用户名和密码分别为 admin 和 VelaUX12345,登陆后你需要设置邮箱和密码。部署应用下面将带你体验使用 VelaUX 三步部署一个 Wordpress 应用。Wordpress 是一个著名的博客软件,可以通过 Helm Chart 部署。第一步:在插件列表中启用 fluxcd 插件。fluxcd 插件为 KubeVela 提供了交付 Helm Chart 的能力。等待 fluxcd 插件就绪,状态转为 running。Tips: KubeVela 的微内核设计,可以通过插件系统不断扩充系统能力,你可以借此持续采纳云原生领域中最新的实践。目前 KubeVela 官方插件目录中含有 40+ 正式插件,30+ 实验插件,涉及工作负载、云资源、可观测性、滚动发布等多个领域,并且还在不断扩充中。第二步:创建应用,填入名称 wordpress,选择主组件类型为 helm,并绑定 default 环境。Tips: 环境是 VelaUX 的重要概念,可以帮助用户区分例如开发、测试、生产等环境。点击下一步,填写如下参数:仓库地址:https://charts.bitnami.com/bitnamiChart: wordpress开启高级参数,给 Values 添加四个值:service.type:ClusterIPwordpressUsername:adminwordpressPassword:wordpress_passwordmariadb.db.password:mariadb_passwordTips: 参数的来源是 wordpress/README.md[4],你还可以选择其它你需要的参数。以上参数保证我们可以完成交付。第三步:点击“部署”,你可以看到正在执行的工作流,我们的应用没有额外配置工作流,所以 VelaUX 会生成一个默认工作流。点击左侧状态栏,可以追踪整个应用的拓扑结构。等待直至工作流完成。以及资源拓扑图中所有资源都达到健康状态。Tips: 除了通过应用的拓扑结构观察全部底层资源的状态,你还可以在其它 Tab 中查看容器状态、事件、日志、资源指标等信息,如果开启了 cloudshell 插件,用户还能进入 pod shell 执行命令。整个过程受到 VelaUX 多租户权限体系的严格管控。你可以通过 KubeVela 文档[5]进一步了解权限管理、单点登录等问题。Tips: 应用的工作流是 KubeVela 中对应用发布过程的一部分。提供了面向过程的灵活性,可以实现条件判断、暂停、状态等待、数据流传递、多环境灰度等复杂操作。访问应用接下来,你就可以访问刚刚部署的应用了!运行如下命令,将 Wordpress 的端口转发到本地。使用上下键和回车选择 local | wordpress | wordpress:80vela port-forward wordpress 8081:80使用浏览器访问:http://127.0.0.1:8081/login,使用刚刚填写的用户名和密码:admin/wordpress_password 登录为管理员。我们一直在使用端口转发来访问应用,但是在实际情况中,你可能更多采用其它更高效和安全的方式来暴露服务,但是在测试环境中,端口转发已经足够好用。我们在高级功能中将展示如何在跨环境差异化部署,并且不同环境甚至可以在不同集群中!因为多集群应用的部署在 KubeVela 中是一等公民。回收应用在 wordpress 应用的 Default 环境里,选择左侧状态栏,可以回收应用,这一操作会回收下发的应用以及其下的工作负载。添加插件,扩展你的应用控制平面通过上文我们知道 KubeVela 通过插件来提供许多功能。VelaUX、fluxcd 、dex 都是 KubeVela 优秀的插件体系的一部分。插件帮助我们把“以应用为中心”的理念发扬光大,想要增强控制平面的应用交付、管理能力,只需要启用不同的插件即可。需要快速迭代并控制发布的风险?kruise-rollout 插件提供应用灰度发布能力,支持原生 Deployment/Helm Chart,详见文档[6]。需要提高团队生产力和协作效率?backstage 插件帮助将应用信息关联至开发者门户,详见?demo[7]。需要更高资源弹性以及可用性?terraform 插件赋予平台交付云资源的能力,借助你需要的云资源完成应用构建。详见文档[8]。需要掌握应用运行状态?一组可观测插件集成了包括 Prometheus、Loki、Grafana 在内的可观测项目,提供全栈的声明式可观测能力,帮助业务开发者灵活定制,轻松洞察各类复杂的云原生工作负载。KubeVela 插件仓库还包含了在工作流、网关、大数据、安全、混部等领域的插件,更多来自社区的最佳实践正在以插件形式沉淀下来。高级功能添加节点 - 扩容集群本功能要求 VelaD 控制平面安装在 Linux 中想要使用 VelaD 作为轻量级控制平面,单节点在加入更多插件时,或者在控制面部署过多应用时,可能达到计算资源上限,这时你可以向原本的控制平面添加 worker 节点来扩容集群。1.在你已经运行过 velad install 的第一个节点上,运行 velad token 获得该集群的注册 Token。velad token2.在第二个节点上,通过如下命令向控制平面加入新的 worker 节点,从而组建多节点的控制平面。velad join --master-ip <master-ip> --token <token> --worker-name <worker-name>其中↓<master-ip>:是 VelaD 控制平面第一个节点的 IP 地址,只要 worker 节点可以访问该 IP 地址即可,例如二者在同一个内网环境内。需要 worker 通过公网访问第一个节点时,请参见远程访问文档[9]来创建第一个节点。(必填参数)<token> 是在第一步中命令打印的结果:VelaD 控制平面的 Token。(必填参数)<worker-name> 是新工作节点的名称。(可选参数)3.确认节点已经加入,在任意一个节点上运行,得到两个条目即为加入成功。kubectl get node4.当你需要卸载节点时,只需在被卸载的节点上运行 velad uninstall 即可。添加集群 ?- 跨多集群环境部署应用上文提到 VelaD 可以作为多集群的控制平面,但到目前为止你可能会问,没有多集群的事啊?下面就会介绍如何使用 KubeVela 跨集群环境部署应用。我们将继续采用 VelaUX 作为演示平台。这次我们的目标是将 wordpress 跨集群、跨环境部署,并且在生产环境中做一些自定义,具体来说:在本地集群发布测试版本,人工确认无误后,将应用发布到生产集群。在生产集群中将 wordpress 容器副本数提高到 2 个以提高可用性。准备集群我们需要一个子集群(相对于 KubeVela 所在的管控集群)作为生产集群,如果你没有其它可用集群,可以通过 VelaD 可以在单台 MacOS 或者 Windows 机器上轻松创建另一个集群,运行如下命令Linux 平台怎么办?VelaD 不支持在单台 Linux 机器中创建多个集群。如果你正在使用 Linux 并尝试 VelaD 作为多集群控制平面,可以在其它 Linux 机器中创建集群并继续。将集群暴露给其它机器的方式见远程访问文档。velad install --name cluster-worker --cluster-only相比于之前的安装命令,该命令添加了名字参数(默认为 default)。因为该集群将作为子集群,我们用 --cluster-onlyflag 跳过安装 KubeVela。使用如下命令来检查两个集群的状态:velad status期望输出Checking cluster status...
K3d images status:
? image rancher/k3s:v1.24.8-k3s1 ready
? image ghcr.io/k3d-io/k3d-tools:latest ready
? image ghcr.io/k3d-io/k3d-proxy:5.4.6 ready
Cluster(K3d) status:
? cluster [cluster-worker] ready
? kubevela status: not installed
? cluster [default] ready
? kubevela status: deployed
Checking KubeVela status...
Vela status:
? Vela CLI installed
? Vela CLI path: /usr/local/bin/vela
? VelaUX addon dir ready
? VelaUX addon dir path: /Users/qiaozp/.vela/addons/velaux
Tips:VelaD 创建的第二个集群是为了模拟实际上的生产集群,它实际上还是运行在本地的 Docker 环境的容器。将集群加入控制平面的管控使用已经配套安装好的 vela 命令行工具,将子集群加入到控制平面的管控中来。Linux/MacWORKER_KUBECONFIG=$(velad kubeconfig --name cluster-worker --internal)
vela cluster join $WORKER_KUBECONFIG --name=cluster-workerWindows$WORKER_KUBECONFIG = $(velad kubeconfig --name cluster-worker --internal)
vela cluster join $WORKER_KUBECONFIG --name=cluster-worker期望输出子集群加入之后,你可以使用 vela cluster list 来查看被管控的所有集群。在 VelaUX 中也能查看到刚刚加入的集群。其中 local 集群是 KubeVela 所在的控制平面集群的默认名称,也就是你第一个创建的集群。vela cluster list期望输出升级插件新集群加入后,我们需要回到插件页升级 fluxcd 插件,使其在新集群生效。新增环境和交付目标在左侧环境列表中新增 prod 环境,先后创建并添加两个交付目标local 集群,wordpress-test 命名空间cluster-worker 集群,wordpress-prod 命名空间发布应用在 wordpress 应用配置中绑定 prod 环境新增一个策略使其在生产环境的副本数为 2。这里要添加的策略是配置覆盖。首先选择应用到的工作流和步骤,在组件中选择选择 Add a component patch来添加一个 Patch,选择 wordpress 组件。由于 Properties 的 patch 非常自由,VelaUX 提供了黑屏编写 YAML 的方式开放该接口。选择 Assign the default properties 并点击右上角绿框中的“切换黑屏”图标。在如图的 value 字段中,添加 replicaCount: 2 一行并最终创建策略。点击上方的 prod 环境,VelaUX 以可视化的方式编辑应用的工作流。选择工作流画板,在两个步骤之间添加 suspend 步骤并保存。这允许我们在工作流中暂停并检查测试环境的应用状态,并人工确认继续工作流完成发布到生产环境。点击部署并选择 prod 环境的工作流、部署。由于我们添加的 suspend 步骤,在 local/wordpress-test 部署成功后,我们将看到状态 SUSPENDING 旁边提示我们是否继续工作流,假设此时我们通过访问测试环境确认应用工作正常,就可以批准继续执行。或者发现测试环境的应用工作异常,选择停止发布工作流进行排查。这里我们继续执行工作流。工作流成功执行后,通过状态栏可以查看到:我们作为生产环境的 cluster-worker 集群中 wordpress-prod 有两个正在运行的 Pod 副本。验证了我们对于应用策略的设置。当然 KubeVela 有更多对多集群管控的能力,你可以在?KubeVela 文档[10]中找到更多用法。高可用的控制平面具有单个 master 节点的控制平面满足了一些使用需求,但是对于控制平面稳定性要求更高的用户,VelaD 还能帮助搭建一个具备更高可用性的多集群控制平面。它由以下部分组成两个及以上的 server 节点一个外部数据库一个负载均衡器Note:这些组件的要求:server 和负载均衡节点要求是 Linux 系统,外部数据库可以采用云服务或者自建数据库。VelaD 尽量将全部的搭建过程变得简单且顺手,为了搭建具备高可用性的控制平面,你仅需运行几条命令:1. 在第一个 server 节点上运行velad install --bind-ip=<LB_IP> --database-endpoint=<DB_ENNDPOINT> --token=<TOKEN> --node-ip=<IP>其中 是负载均衡节点的 IP 地址。 是外部数据库的连接串,其格式可见数据库格式文档[11]。2. 在其他 server 节点运行几乎相同的命令,额外加上 --cluster-only 参数,这意味着仅将节点作为 master 加入集群,跳过安装 KubeVela,因为在第一个 server 节点运行命令时,已经安装了 KubeVela。velad install --bind-ip=<LB_IP> --database-endpoint=<DB_ENNDPOINT>\
--token=<TOKEN> \
--cluster-only
--node-ip=<IP>3. 通过在任意一个节点上运行配置负载均衡的向导,获得负载均衡的配置命令。velad load-balancer wizardTo setup load-balancer, run the following command on node acts as load-balancer:
velad load-balancer install --http-port 32196 --https-port 30297 --host=<IP1>,<IP2>4. 在负载均衡节点上,将上述向导输出的第二行复制过来并运行。velad load-balancer install --http-port 32355 --https-port 30421 --host=172.19.0.5Tips:其中 IP1 等为 server 节点的 IP 地址,load-balancer install 命令背后帮助用户设置了一个转发到 Server 的 Nginx 服务。5. 在任何一个 server 节点打印 kubeconfig 的位置,并将该文件复制到任何可以访问到负载均衡节点的位置(例如你的笔记本上)。其中 --external 表示该 kubeconfig 是从外部访问集群所需要的。velad kubeconfig --externalBoom!你可以通过这个 kubeconfig 访问和管理这个控制平面了!任何一个 server 节点故障都不会影响控制平面的可用性。结语以上就是本次的全部内容,感谢你的阅读和尝试。云原生的逐渐成熟涌现出了大量开箱即用的生态功能,但是广大开发者群体往往被云原生复杂的生态图景劝退,今天我们介绍了 VelaD 项目,期望以最简单、最快的方式帮助你上手云原生并立刻开始交付应用。随着你的需要,VelaD 能不断提高控制平面的容量和可用性。你还能通过向控制面注册子集群的方式,将应用部署到更多你需要的位置。其背后的 KubeVela 项目在开箱即用的应用交付功能的基础上,不断以插件形式将云原生领域的最佳实践带给你,让你以更快更简单的方式增强自己的应用交付过程。官方插件仓库已经拥有了囊括变体工作负载、云资源、可观测性、滚动发布等多个领域的 70+ 插件。目前 KubeVela 的插件生态还在快速成长中,欢迎你来社区提出需求或做出贡献。近期 KubeVela 即将发布 v1.8 版本,带来集群资源一键纳管功能,帮助你无痛迁移遗留系统。还有对大规模应用场景的压测报告、性能优化以及控制器分片方案,帮助你轻松面对业务规模增长的挑战。写在最后关于 VelaD,关于 KubeVela,你还有什么需求或者疑问?欢迎通过如下材料了解更多 VelaD 和 KubeVela 的项目细节:VelaD 代码库:https://github.com/kubevela/velad 欢迎 Star/Watch/Fork!KubeVela 代码库:https://github.com/kubevela/kubevela 欢迎 Star/Watch/Fork!项目官方主页和文档:kubevela.io项目钉钉群:23310022;Slack:CNCF #kubevela Channel加入微信群:请先添加以下 maintainer 微信号,表明进入 KubeVela 用户群:相关链接:[1]?VelaDhttps://github.com/kubevela/velad[2]?Docker Desktophttps://www.docker.com/products/docker-desktop/[3]?远程访问文档https://github.com/kubevela/velad/blob/main/docs/05.expose-cluster.md[4]?wordpress/README.mdhttps://github.com/helm/charts/blob/master/stable/wordpress/README.md[5]?KubeVela 文档https://kubevela.io/docs/how-to/dashboard/user/[6]?文档https://kubevela.io/zh/docs/end-user/traits/rollout[7]?demohttps://www.bilibili.com/video/BV1v84y1a75x/?vd_source=d7602cf3dc8bc4dbd24e1a83d93c150b[8]?文档https://kubevela.io/zh/docs/tutorials/consume-cloud-services[9] 远程访问文档https://github.com/kubevela/velad/blob/main/docs/05.expose-cluster.md[10]?KubeVela 文档https://kubevela.io/zh/docs/case-studies/multi-cluster[11]?数据库格式文档https://github.com/kubevela/velad/blob/main/docs/db-connect-format.md点击此处查看 KubeVela 项目官网
[版本更新]PolarDB-X v2.2.1 生产级关键能力开源升级
架构简介PolarDB-X 采用 Shared-nothing 与存储分离计算架构进行设计,系统由5个核心组件组成。PolarDB-X 架构计算节点(CN, Compute Node)计算节点是系统的入口,采用无状态设计,包括 SQL 解析器、优化器、执行器等模块。负责数据分布式路由、计算及动态调度,负责分布式事务 2PC 协调、全局二级索引维护等,同时提供 SQL 限流、三权分立等企业级特性。存储节点(DN, Data Node)存储节点负责数据的持久化,基于多数派 Paxos 协议提供数据高可靠、强一致保障,同时通过 MVCC 维护分布式事务可见性。元数据服务(GMS, Global Meta Service)元数据服务负责维护全局强一致的 Table/Schema, Statistics 等系统 Meta 信息,维护账号、权限等安全信息,同时提供全局授时服务(即 TSO)。日志节点(CDC, Change Data Capture)日志节点提供完全兼容 MySQL Binlog 格式和协议的增量订阅能力,提供兼容 MySQL Replication 协议的主从复制能力。列存节点 (Columnar)列存节点负责提供列式存储数据,基于行列混存 + 分布式计算节点构建HTAP架构,预计在今年底或者明年初会正式开源开源地址:https://github.com/polardb/polardbx-sql版本说明梳理下PolarDB-X 开源脉络:2021年10月,在云栖大会上,阿里云正式对外开源了云原生分布式数据库PolarDB-X,采用全内核开源的模式,开源内容包含计算引擎、存储引擎、日志引擎、Kube等。2022年1月,PolarDB-X 正式发布 2.0.0 版本,继 2021 年 10 月 20 号云栖大会正式开源后的第一次版本更新,更新内容包括新增集群扩缩容、以及binlog生态兼容等特性,兼容 maxwell 和 debezium 增量日志订阅,以及新增其他众多新特性和修复若干问题。2022年3月,PolarDB-X 正式发布 2.1.0 版本,包含了四大核心特性,全面提升 PolarDB-X 稳定性和生态兼容性,其中包含基于Paxos的三副本共识协议。2022年5月,PolarDB-X正式发布2.1.1 版本,重点推出冷热数据新特性,可以支持业务表的数据按照数据特性分别存储在不同的存储介质上,比如将冷数据存储到Aliyun OSS对象存储上。2022年10月,PolarDB-X 正式发布2.2.0版本,这是一个重要的里程碑版本,重点推出符合分布式数据库金融标准下的企业级和国产ARM适配,共包括八大核心特性,全面提升 PolarDB-X 分布式数据库在金融、通讯、政务等行业的普适性。2023年3月,PolarDB-X 正式发布2.2.1版本,在分布式数据库金融标准能力基础上,重点加强了生产级关键能力,全面提升PolarDB-X面向数据库生产环境的易用性和安全性,比如:提供数据快速导入、性能测试验证、生产部署建议等。01 内核的稳定性和高性能PolarDB-X 2.2.1版本,重点面向生产级的部署要求,优化数据库实例的稳定性和性能、以及提供面向生产部署的相关实践。1. 最低部署规格 (建议>=2c8g)组件CPU内存磁盘类型网卡最低数量CN2 核8 GB+SSD, 200 GB+万兆网卡2DN2 核8 GB+SSD, 1 TB+推荐2块万兆网卡2.5(详见下方说明)GMS2 核8 GB+SSD, 200 GB+万兆网卡2.5(详见下方说明)CDC2 核8 GB+SSD, 200 GB+万兆网卡2(可选)GMS 和 DN 2.5 倍资源说明:GMS 和 DN 是基于多数派 Paxos 协议构建的高可靠存储服务,因此一个 GMS(DN)会包括三个角色的节点:Leader,Follower,Logger。 Leader 与 Follower 资源要求相同,保证高可用切换后的服务质量,而 Logger 节点,只存储日志,不回放日志,固定为2核4GB的资源规格,即可满足常见百万级TPS的需求。因此一个 GMS(DN)需要 2.5 倍的资源,其中 2 是 Leader 和 Follower的资源,0.5 是 Logger的资源。可以参考文档:PolarDB-X 服务器推荐配置2. 在线/离线安装部署PolarDB-X 2.2.1在面向很多线下用户POC测试,受限于现场网络条件,需要提供离线部署安装的能力,比如:从3台裸机开始,从0到1安装PolarDB-X。PolarDB-X提供了一键下载离线安装包的能力,可参考文档:PolarDB-X 软件包下载# 下载 x86_64 架构的 PXD 离线安装包
pxd download -env pxd -arch amd64 -repo "registry:5000" -dest ~/ -i images.list
# 下载 ARM64 架构的 PXD 离线安装包
pxd download -env pxd -arch arm64 -repo "registry:5000" -dest ~/ -i images.list
# 下载 x86_64 架构的 K8s 离线安装包
pxd download -env k8s -arch amd64 -repo "registry:5000" -dest ~/ -i images.list
# 下载 ARM64 架构的 K8s 离线安装包
pxd download -env k8s -arch arm64 -repo "registry:5000" -dest ~/ -i images.list同时,结合生产部署稳定性的要求,提供一份系统与环境配置,包含系统OS参数、磁盘配置等,可参考文档:PolarDB-X 系统与环境配置3. 性能全面提升PolarDB-X 2.2.1在公有云上选择了标准ECS进行了性能测试和摸底,相比于2.2.0版本结合多方面的优化,有了明显的性能提升测试资源:组件名称机型说明OPS机器ecs.g7.4xlarge安装部署计算节点 (CN)ecs.hfg7.4xlarge * 316c64g,主机单价:2324元/月存储节点 (DN) + 元数据节点(GMS)ecs.i4.4xlarge * 316c128g + 3.5TB的存储,主机单价:3776元/月sysbench测试:Sysbench场景2.2.1版本800并发2.2.1版本2000并发2.2.0版本800并发2.2.0版本2000并发性能提升point_select368768.08401115.95357033.85383850.57+3~5%read_only164165.17175842.29132726.85139712.47+20~25%read_write106222.37122152.4277727.5782000.08+35~50%write_only47657.7161934.6139171.1246697.96+20~30%TPC-C测试:TPC-C场景2.2.1版本1000并发2.2.0版本1000并发性能提升tpmC176861.03148623.13+19%可参考性能白皮书:PolarDB-X sysbench 测试报告PolarDB-X TPC-C 测试报告4. 分布式1024节点PolarDB-X 分布式数据库中最重要的特性就是线性扩展,目前市面上也有众多分布式数据库号称超大规模的线性扩展,但理论和实践还是需要相结合,通过面向用户可验证的方式,来体验下PolarDB-X在分布式1024节点下的稳定性。PolarDB-X提供了基于k8s生态构建的 polardbx-operator 组件,基于k8s的分布式容器技术可以快速构建PolarDB-X 1024节点,考虑用户的体验成本,采用了虚拟化的压缩部署方式,选择在24台ECS主机上完成分布式1024超大规格节点的部署,并通过近百万级别TPS的稳定性验证。PolarDB-X 1024节点主机资源说明:PolarDB-X采用存储计算分离的架构,CN和DN是可以独立部署,实验设计部署1024个DN节点,比如公有云PolarDB-X单个DN节点可支持3TB,那超大规模节点下可支持 1024 * 3TB = 3PBDN节点选择了最小的1C8GB (1024节点下也需要8TB的内存),通过k8s的多租户cgroup技术,采用24台高配ECS进行部署,单个ECS平均需要承载40+的PolarDB-X CN/DN节点。本实验所需要的测试资源的成本,24台ECS按量付费 288元/小时,测试时间1天左右,预计花费7000元。参考文档:分布式1024节点!1天玩转PolarDB-X超大规模集群02 分布式CDC架构升级Binlog是MySQL记录变更数据的二进制日志,它可以看做是一个消息队列,队列中按顺序保存了MySQL中详细的增量变更信息,通过消费队列中的变更条目,下游系统或工具实现了与MySQL的实时数据同步,此机制也称为CDC(Change Data Capture,增量数据捕捉)PolarDB-X是兼容MySQL生态的分布式数据库。通过实例内PolarDB-X的CDC组件,能够提供与MySQL binlog格式兼容的变更日志,并且对外隐藏了实例扩缩容、分布式事务、全局索引等分布式特性,让您获得与单机MySQL数据库一致的使用体验PolarDB-X 2.2.1版本后,提供了两种形态的binlog日志消费订阅能力,且两种形态可同时共存。单流形态:即单流binlog日志(也称为Global binlog),将所有DN的binlog归并到同一个全局队列,提供了保证事务完整性和有序性的日志流,可以提供更高强度的数据一致性保证。例如在转账场景下,基于Global binlog接入PolarDB-X的下游MySQL,可以在任何时刻查询到一致的余额。多流形态:即多流binlog日志(也称为Binlog-X),并不是将所有DN的binlog归并到一个全局队列,而是将数据进行Hash打散并分发到不同的日志流,在一定程度上牺牲了事务的完整性,但大大提升了扩展性,可以解决大规模集群下单流binlog存在的单点瓶颈问题。CDC 单流形态:PolarDB-X CDC单流形态CDC 多流形态:PolarDB-X CDC多流形态多流binlog提供了3种形式的数据拆分级别,在开通多流服务时可进行设定,满足不同场景下的使用需求。库级别按照数据库的名字计算Hash值并进行分发,即对应同一个库的binlog数据,会始终按序路由给同一个binlog数据流,适用于单个PolarDB-X实例上数据库比较多的场景,如果事务不涉及跨库操作,该策略下不仅可以具备多流能力,还可以保证事务的完整性。表级别按照数据表的名字计算Hash值并进行分发,即对应同一张表的binlog数据,会始终按序路由给同一个binlog数据流,适用于表的数量较多且希望针对单张表的操作(如DML、DDL等)在binlog日志流中保持有序的场景。记录级别按照数据行的主键计算Hash值并进行分发,即对应同一数据行的binlog数据,会始终按序路由给同一个binlog数据流,适用于希望将数据充分打散且不要求日志数据按库或按表保持有序的场景,该策略要求数据表必须含有主键,无主键表的数据会被直接丢弃。使用例子:# 查看binlog多流stream列表
SHOW BINARY STREAMS;
返回例子:
+--------+-----------------+-------------------------------+----------+
| GROUP | STREAM | FILE | POSITION |
+--------+-----------------+-------------------------------+----------+
| group1 | group1_stream_0 | group1_stream_0#binlog.000001 | 3625148 |
| group1 | group1_stream_1 | group1_stream_1#binlog.000001 | 3625148 |
| group1 | group1_stream_2 | group1_stream_2#binlog.000001 | 3625148 |
| group1 | group1_stream_3 | group1_stream_3#binlog.000001 | 3625148 |
+--------+-----------------+-------------------------------+----------+MySQL相关指令体验:#不加WITH子句,可查看单流服务的global binlog文件列表。
# 添加WITH子句,可查看多流服务的某个流下面的binlog文件列表。参数stream_name表示某个流的名称
SHOW MASTER STATUS [WITH stream_name]
SHOW BINLOG EVENTS [WITH stream_name]
SHOW BINARY LOGS [WITH stream_name];
## 单流返回的例子
+---------------+-----------+
| LOG_NAME | FILE_SIZE |
+---------------+-----------+
| binlog.000001 | 4 |
+---------------+-----------+
## 多流返回的例子
+-------------------------------+-----------+
| LOG_NAME | FILE_SIZE |
+-------------------------------+-----------+
| group1_stream_0#binlog.000001 | 3626808 |
+-------------------------------+-----------+PolarDB-X CDC引入多流形态,可以在满足binlog兼容性的同时,结合业务场景提升分布式增量日志变更的吞吐量。同时CDC多流形态,为了更好的兼容现有binlog开源生态,联合alibaba canal提供了多流兼容消费的能力,参考PR:add support for polardbx multi binlog streams #4660canal使用例子:# canal一键拉起PolarDB-X的多流binlog
sh run.sh -e canal.auto.scan=false
-e canal.instance.master.address=pxc-xxxx.polarx.xxxx.rds.aliyuncs.com:3306
-e canal.instance.dbUsername=tpcc
-e canal.instance.dbPassword=xxxx
-e canal.instance.connectionCharset=UTF-8
-e canal.instance.tsdb.enable=true
-e canal.instance.gtidon=false
-e canal.instance.multi.stream.on=false
-e canal.destinations.expr=group1_stream_{0-7}参考文档:CDC单流性能解读,Sysbench 30w QPS / TPC-C 100w tpmC下,增量数据延迟时间 < 1秒CDC高可用架构解读,可以在各种故障形态下,满足RTO在20~45秒内CDC多流形态,以及 如何创建CDC节点03 基于时间点的恢复(point-in-time recovery, PITR)PolarDB-X 2.2.0的版本中,我们正式提供了静态的全量备份集恢复能力,通过 PolarDB-X Buckup工具 (基于XtraBuckup改造而来) ,我们基于DN的物理备份的方式,结合分布式并行提升备份吞吐量,备份速度可达到GB/s,同时提供了分布式下的一致备份集。在阿里云数据库服务用户过程中,经常会遇到用户误删数据后期望通过备份恢复的方式找回数据,对于基于时间点的恢复有比较强的诉求。因此,PolarDB-X 2.2.1开源版本中,我们提供了日志增量备份 + 基于时间点的恢复的完整能力,满足用户数据库安全性的需求。大致的工作原理:PolarDB-X 指定时间点恢复的工作原理图说明:全量备份集,指定调度规则进行定期全量备份,参考文档:PolarDB-X 备份调度0 2 * * 1,4 周一和周四的2点发起备份增量日志备份,准实时备份增量的日志数据,备份的实时性决定了数据可恢复的最近时间点,参考文档:PolarDB-X 增量日志备份发起指定时间点恢复(PITR),找到恢复时间点最近的一个全量备份集,再从增量备份中找到全量备份集时间点和恢复时间点之间的增量日志,执行一个全量+增量的物理恢复,参考文档:PolarDB-X 指定时间点恢复使用的例子:apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
name: polardb-x-clone # 恢复出的集群名字
spec:
topology: # 集群规格
nodes:
cn:
template:
image: polardbx/polardbx-sql:latest
dn:
template:
image: polardbx/polardbx-engine:latest
restore: # 指定集群的创建方式是恢复
from:
clusterName: polardb-x # 源PolarDB-X 集群名称
time: "2023-03-24T11:11:11Z" # 恢复的时间点04 MySQL一键导入PolarDB-X开源MySQL的主备复制协议,主要支持增量日志的同步和消费,在MySQL 8.0开始在内核中新增了Clone Plugin,全量通过物理文件拷贝,结合增量日志的同步和消费提供了clone实例的效果。PolarDB-X作为分布式数据库,在物理数据分布和文件格式上和开源MySQL略有差异,为了方便用户体验类似MySQL 8.0的Clone Plugin的效果,PolarDB-X 2.2.1提供了类似Clone Plugin的一键导入能力,通过一条DDL指令,可以对存量MySQL进行表结构迁移、存量数据的全量迁移,最后保持一个持续的增量数据同步工作原理:PolarDB-X 一键导入工作原理使用例子:// 配置MySQL与PolarDB-X的复制关系
CHANGE MASTER TO
MASTER_HOST='10.0.0.1',
MASTER_USER='root',
MASTER_PASSWORD='xxxxxx',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql_bin.000001',
MASTER_LOG_POS='58050130',
SOURCE_HOST_TYPE=mysql,
Mode='IMAGE'; // 指定mode为image镜像复制模式
// 设置需要同步的库表,不配置就是默认整个实例
CHANGE REPLICATION FILTER REPLICATE_DO_DB=(tpcc);
// 开启任务
START SLAVE;
// 查看任务
SHOW SLAVE STATUS \G整个操作体验,最大化的兼容了MySQL DBA的运维体验,基于常见的主备复制管理方式可以很方便的实现单机MySQL到PolarDB-X分布式的一键迁移,如果考虑数据割接后的回滚链路,可以反向配置PolarDB-X到MySQL的主备复制链路。参考文档:PolarDB-X 一键导入更详细的ChangeLogPolarDB-X 各组件的开源地址,欢迎访问github?Github 仓库名称仓库地址总项目polardbxhttps://github.com/polardb/polardbx计算节点polardbx-sqlhttps://github.com/polardb/polardbx-sql存储节点polardbx-enginehttps://github.com/polardb/polardbx-engine日志节点polardbx-cdchttps://github.com/polardb/polardbx-cdck8s operator 组件polardbx-operatorhttps://github.com/polardb/polardbx-operatorrpc 组件polardbx-gluehttps://github.com/polardb/polardbx-glue备份工具polardbx-backuphttps://github.com/polardb/polardbx-backup常用工具polardbx-toolshttps://github.com/polardb/polardbx-tools文档polardbx-operator-docshttps://github.com/polardb/polardbx-operator-docs结尾PolarDB-X 是由阿里自主研发的原生MySQL分布式数据库,坚持以全内核开源的方式,保持开源的持续迭代。本次发布V2.2.1的升级版本,重点加强了生产级关键能力,全面提升PolarDB-X面向数据库生产环境的易用性和安全性。期望PolarDB-X未来能作为国内原生MySQL分布式数据库的开源领导者,持续做好开源!本文来源:PolarDB-X知乎号
阿里云马小婷:ECS使用成熟度评估与洞察(Insight)分享
摘要:2022年3月22日,【全新升级 阿里云ECS CloudOps 2.0来啦!】发布会正式播出,本次发布会上阿里云宣布CloudOps(云上自动化运维)套件全新升级,并发布了CloudOps云上自动化运维白皮书2.0版本。?随着本次产品的升级,阿里云推出了配套的智能化产品方案,即“ECS成熟度评估与洞察(ECS insight)”,它基于用户的ECS多维度的使用数据,从基础能力、成本管理、自动化、可靠性、弹性和安全性六个维度帮助用户分析定位潜在的运维风险,并推荐对应解决方案与最佳实践,全方位帮助企业用户降本增效,提升业务连续性。?阿里云弹性计算高级产品专家马小婷在本次直播中带来了题为《新品介绍:ECS使用成熟度评估与洞察(ECS Insight)》的演讲,以下是她的演讲内容整理:??ECS使用成熟度评估与洞察,简称ECS Insight。顾名思义,ECS使用成熟度评估与洞察是对用户使用ECS的情况,进行分析和评估,然后给出评估后的优化建议。??这个产品是一个数据驱动产品,它的目的是帮助ECS用户能够持续挖掘ECS上的业务风险,结合企业云上运维的最佳实践,进行持续优化,最终实现云上业务的稳定永续。由于ECS使用成熟度评估与洞察的名称比较长,所以后面我们统一简称为“ECS Insight”。?在Cloud白皮书2.0中,我们对CloudOps的定义给出了明确说明,即CloudOps = DevOps x Cloud。因为我们发现95%的企业已经开始使用DevOps进行软件开发和交付,但只有不到20%的企业,真正发挥了云本身的特性和优势,去提升DevOps实践的效率。比如云天然具备高弹性的特性,以及标准化的自服务能力。与此同时,随着FinOps、DevSecOps等概念的盛行,业务的安全性和成本也是DevOps落地过程中不可忽略的重要部分。?在这些背景下,我们提出了CloudOps的概念以及它包含的五个维度,即成本洞察(Cost)、自动化能力(Automation)、可靠性能力(Reliability)、弹性能力(Elasticity)和安全性能力(Security),五个维度简称为CARES。这也意味着,如果用户在使用DevOps缩短开发周期、提升业务效率的同时,同时希望让业务保持稳定、安全、可靠,且低成本的持续运营,我们就可以从这五个方面入手,进行持续的完善。这与我们希望用户能够提升CloudOps成熟度的出发点不谋而合。??接下来,让我们看一看CloudOps和ECS Insight之间的关系。上图展示了三部分的内容。?最底层是IaaS层的基础能力,它包含平台侧的基础能力,比如各种计算形态、镜像等服务和用户侧的原子能力,包括资源分组管理,以及Guest OS的个性化配置管理。这些是所有IaaS服务必须提供的能力。?在中间部分,是阿里云提供的CloudOps的产品能力。对于CloudOps定义的CARES五个维度,在每个垂直领域,阿里云都提供了对应的自动化和自服务工具,帮助用户不断提升该垂直领域的成熟度。每个维度的成熟度越高,意味着业务在该领域做的更好,整体业务更稳定、更可靠、更高效、更安全,性价比更高。?比如在成本管理维度,阿里云目前提供了非常丰富的资源付费方式,包括包年、包月、按量预留实例、节省计划等等,用来应对不同场景的需求。对于长期稳定的业务,我们推荐用户采用包年/包月的方式进行购买,这样能够享受长周期优惠。?对于临时测试的需求,我们推荐用户采用按量购买的方式。虽然按量每个小时的单价略高,但它非常灵活,可以随时释放。如果业务存在不同时段的临时需求,且整个业务需求量不小的情况下,我们推荐用户购买节省计划进行抵扣。这样既能享受到随时需要随时创建或释放资源的灵活性,还能够通过节省计划按小时进行抵扣,降低整体的使用成本。?既然有这么丰富的付费方式,在不同阶段我们应该选择什么样的付费方式进行组合,既能够满足不同业务场景的业务负载需求,还能降低整体的使用成本,持续保持超高性价比的优势?这需要用户持续分析和运营。?那究竟该怎么运营呢?基于这些问题,我们就推出了CloudOps的落地实践,即ECS的使用成熟度评估与洞察。它基于用户在CloudOps定义CARES五个维度的使用数据,对该维度的使用情况进行分析,然后提出对应的优化建议,帮助用户持续完善该维度的不足之处,保障业务高效可用、稳定有序。整体来说,ECS Insight是CloudOps定义的落地指南。?二、ECS Insight详细介绍??接下来,我将详细介绍一下ECS Insight这个产品。首先,简单了解一下ECS Insight的工作原理。?ECS Insight是对用户账号下的所有ECS以及关联资源的使用情况进行分析,包括ECS的分布情况,快照的使用情况,ECS、云盘、带宽、各个维度的使用率数据、以及ECS的费用分布等等。通过结合阿里云服务上万家企业沉淀的云上运维最佳实践经验,我们最终会给用户产出两个结果。?一是当前用户在CloudOps多个维度的成熟度现状。每个维度以百分制进行统计,采用扣分制,如果某项没有满足云上推荐的最佳实践,则扣除对应的分数。用户可以查看每个维度的评分项,对应的分值以及是否得分。这个评估结果的更新频次是T+1天。这些用户数据的分析来源,其实是非常丰富的。它不仅包含ECS的操作日志、云监控,还包含用户去的资源管控行为等等。覆盖了用户使用ECS的所有关键指标。?在ECS中,除了CloudOps定义的CARES五个维度以外,我们还增加了一个ECS基础能力维度。因为我们发现,对于云上ECS规模达到一定程度的企业用户而言,ECS对应的规格、可用区、地域分布、以及资源使用率都会影响到整个业务的连续性。所以我们增加了这一部分内容,作为ECS的补充。?二是,对于没有得分项,ECS Insight会明确标识出存在风险的资源,并提供对应优化的最佳实践指南。这些最佳实践自于各个行业,中大型企业的经验沉淀,是大家多年摸索和成长的积累,非常具有参考意义。?了解完ECS的工作原理之后,我们可以快速看一下ECS的产品页面。目前,这个产品还处于测试阶段。用户通过申请后,就可以在ECS控制台,看到自己当前账号下,ECS成熟度评估的报告。?这个报告可以分成三部分,如上图所示。第一部分是左侧以雷达图展示ECS使用成熟度评估现状的全貌,从ECS的基础能力和CloudOps的六个维度,对用户当前使用ECS的情况进行全面评分,您可以看到总得分以及每个维度的分值。?第二部分是页面上方展示的每个维度的得分详情以及该维度总得分,包括该维度一共包含了多少个评分项,多少项得分,多少项没得分。虽然最终分值和成熟度的匹配,不完全相关,比如80分以上表示高级,79分是中级,但是,分数越高意味着业务在该维度存在的风险较少。目前,每个维度的评分项并不完善,分值分配仍有完善空间。我们后续将持续进行优化,欢迎大家提供反馈建议。?第三部分是页面下方的评分项详情。用户可以经常看得分项或失分项。针对每个失分项,我们提供了失分的原因说明,以及如何进行优化的建议指南。对于非常具体的评分项,我们还会列举具有风险的资源详细信息,包括资源ID、可用区、IP信息等等,从而方便用户快速定位出现问题的资源,并及时采取行动。?接下来,让我们看一下ECS每个维度的产品能力,帮助大家对每个维度成熟度的提升方式有更直接的体验。首先,看一下ECS的基础能力。虽然CloudOps成熟度中,并没有包含ECS的基础能力,但它与公有云本身的特性密切相关,会直接影响到云上业务的连续性。所以我们增加了这个维度。??大家都知道,公有云上的云服务器都是分为规格族和规格,比如通用型实例、计算型实例、内存型实例。随着芯片、硬件、服务器的演进,实例规格族还在不断的增加。阿里云目前提供的实例规格,已经超过了300种。上图展示了,阿里云提供的不同场景的最新实例规格族,这个图几乎每年都会全部更新一轮。对于一些比较老的实例规格,比如经典网络的实例,它不仅性价比低,而且不支持部分新功能的特性,面临较多的限制。所以我们推荐用户需要跟随着实例规格的演进,持续的更新底层资源的规格,不仅能够提升性价比,还能够保障业务的稳定性,一举两得。?此外,随着资源规模的增加,资源使用者的数量也会逐渐变多。不同用户对于不同资源的使用权限不一样。当资源规模达到一定程度后,如果我们不根据业务单元对资源进行分组和分权管理,不仅会面临资源查找慢的问题,还会因为部分用户权限过大,导致误操作等一系列严重后果。?面对这些痛点,ECS的基础能力从计算、存储、网络和账号管理四个维度,评估ECS以及关联资源的分布情况、使用情况是否合理,及时发现并识别业务在性能高、可用等维度存在的一些潜在风险,并提供对应的优化建议,为云上业务的持续运营,提供指导方针。?总体来说,ECS基础能力的成熟度评估是,识别云上资源管理最基本的分布,使用情况是否合理,从而避免单个资源的常规性风险。第二部分是成本洞察能力。?前面提到的ECS实例不仅规格繁多,还提供了非常丰富的付费方式。包括包年、包月、按量、抢占式实例、预留实例、节省计划等等。上张展示了不同付费方式,适合的业务场景。如何根据业务的形态,选择性价比最高的付费方式?这非常考验大家的算数能力。?同时,如果企业里存在多个不同的团队,出现一起使用云资源的场景。如果我们不对资源的使用方或团队进行准确的核算和分摊,会导致大量的资源浪费。最终,导致企业的云上支出远远超出预期。这与企业想推进FinOps的初衷,背道而驰。如果我们采用一刀切的方式进行成本控制,势必会影响部分业务的正常发展。如何根据资源的实际使用情况,进行准确识别,并且针对性的进行优化,最终实现成本优化与业务发展两不误是非常重要的。?面对这些问题,成本洞察能力从三个方面提供了分析和推荐。?首先,我们需要帮助用户识别一些闲置或低使用率的资源。推荐用户使用云上灵活的变配、停机、不计费等自服务能力,避免一些显而易见的铺张浪费。?其次,我们推荐用户使用类似于预留实例券、节省计划等权益类产品。对一些临时的按量资源进行抵扣,最终降低这一部分的使用成本。?最后,我们推荐用户借助标签、财务单元、预算管理等工具,进行端到端的成本管理分析,持续优化成本支出,最终实现FinOps的落地。?整体来说,成本洞察能力的成熟度评估是,指导用户更好地利用云上灵活的付费方式和成本管理工具。在避免不必要的成本浪费的基础上,端到端的进行成本的管理。?第三部分,是自动化能力。?不少人对于DevOps一直有一个误解,认为DevOps就是自动化。其实自动化只是实践的一种手段,而且是一个非常重要的手段。为什么自动化如此重要呢??因为受限于技术能力或业务发展阶段的限制,不少企业的自动化能力目前都严重不足。不少企业靠人海战术支撑,不仅响应周期长,而且容易出现失误。同时,我们也观察到部分用户能通过脚本完成一些基础的运维工作。但这部分脚本大多数是个人独自维护,很难复用或形成规范。?上图展示了,目前在自动化领域的演进方向和现状。欧美企业在IT管理上的自动化的程度更高,主要是因为欧美企业的人工成本高。国内企业的自动化处于偏下水平,大量用户依赖UI控制台、终端工具或脚本进行自动化。?面对这些问题,自动化能力的成熟度评估从三个层面上提供了分析和推荐。?最基础的是,通过控制台或open API的方式,完成基础的资源管控操作。这个能力大多数的用户都能做到。?中级水平意味着用户能够借助自动化工具,完成DevOps中的基础设施及其代码、或运维及其代码的自动化管理,提升类似于CICD等高频管理场景的效率。?在阿里云上,用户可以借助类似资源编排、云助手运维编排等工具,完成应用的发布和部署。它涉及资源交付申请、应用打包分发、以及应用灰度发布等多个环节。如果每个环节都能自动化,可以将整个应用的发布周期从以前的3~5天,缩短到一个小时。?如果需要达到更高级的水平,需要用户组合使用多种自动化的服务和工具。并且形成标准化的运维流程和统一的配置管理平台,最终实现标准化和统一化的运维。?整体来说,自动化能力的成熟度反映了当前用户在ECS管理运维上的自动化的水平。同时也为用户提升自动化水平,提供了对应的路径和工具。用户借助这些自动化工具的使用,能够更高效地解决日常运维的痛点。?第四部分是可靠性能力。?讲到可靠性,大家首先想到的是底层基础设施的稳定性,比如SLA。但是这里存在一个大家都忽略的问题,即底层基础设施的稳定性,只要不是100%,意味着不完全可靠。如果我们将业务的可用性寄希望于单个实例的稳定性是非常不可取的。如果从根源解决问题,应该加强应用构建,使它具备高可用的特性。?同时,在同一个企业里,不同的业务团队对稳定性的诉求不一样。比如一些离线业务的大数据计算集群,可能会要求晚上12点~7点之间业务是不能中断的。对于一些在线服务业务而言,它的高峰期可能是早上9点到晚上10点。在不影响业务可用性的情况下,多个部门对底层变更响应的协同成本实非常高。一旦出问题需要一些自动化的辅助工具,帮助工作人员快速排查和定位。?上图展示了ECS可靠性的能力支撑,ECS的可靠性主要来自两部分。第一部分是,底层基础设施的稳定性。第二部分是,ECS内的稳定性。基础设施的稳定性取决于公有云的地域、可用区的分布、以及单个物理服务器的稳定性。所以要实现初级的可靠性,我们需要将业务尽可能的分散在不同的物理机、不同的可用区进行部署,从而避免大规模故障的风险。?对于ECS内的稳定性,则需要借助高可用架构的保障。我们需要周期性的进行数据备份,需要实时监控实例的性能波动。当实例的性能出现异动时,我们需要快速的自动完成业务切换,提升业务本身和数据高可用的能力。?高级的可靠性则离不开更多维度的实时监控,故障演练、故障注入等工具的支持。这是一个更偏系统工程的建设,工具和能力只是辅助手段,更重要的是多个不同团队的协同。?整体来说,在可靠性的成熟度上,ECS Insight从实例的稳定性、数据的可靠性、性能的可靠性、以及可观测性四个维度进行评估。我们推荐用户先要做到初级和中级的可靠性。目前这四个维度的衡量,基本上可以帮助用户做到初级、中级和部分高级的可靠性。至于更高级的可靠性,则需要配合持续的演练才能达到。?第五部分是弹性能力。?弹性能力是云最基础的优势之一,按需取用按量付费是弹性的本质,也是云的重要特性之一。相比于线下IDC,对于临时大规模的弹性需求,不仅交付周期长,还有可能因为预估不准,导致资源准备不足,最终影响业务效果。对于存在峰谷波动的业务而言,如果提前扩容,会存在资源超配的情况,不仅前期投入高,而且存在大量的资源浪费。如果进行人工扩容,则存在反应慢,可能因为扩容不及时,导致业务受损,最终影响用户体验。?所以如何利用云上灵活的弹性能力,在满足业务需求的同时,避免资源和成本的浪费是至关重要的。ECS Insight的弹性能力从以下三个维度,为我们提供了指导。?最初级的方式是,通过控制台或Open API批量购买或释放按量的ECS实例。这样就能够通过半人工的方式,满足临时的弹性需求。对于明确的弹性需求,ECS建议使用弹性伸缩,实现资源跟随业务的波动,自动进行水平扩缩容。在提升业务高可用的同时,降低使用成本。?在这个基础上,如果用户有更复杂的业务需求。我们可以借助弹性伸缩的生命周期,挂钩弹性强度评估以及实例规格范式的方式,提升业务的弹性、灵活性和韧性,最终实现全自动的、自适应的弹性资源管理,保障在线业务的连续性。?弹性能力是用户判断使用是否合适的,最直接的体现之一。弹性能力的成熟度评估,则反映了用户对云的使用深度。用好了弹性,在某种程度上可以说用户也就用好了云的一半。?最后一部分是安全性能力。??安全问题是一个很难证明,也很难证伪的问题。安全防护不容易直接看到效果,不少企业都存在侥幸心理。一旦安全防护没有做到位,后果也非常严重,轻则业务临时不可用,重则核心数据丢失,损失巨大。基于这个事实,我们观察到不少企业客户的安全意识严重不足。包括对关键业务的关键数据缺少防护意识,导致实例被攻击后,重要的数据被删除,无法找回。?云上安全能力的构建是一个责任共担模式,它需要云厂商和用户一起进行构建。云厂商负责对底层基础设施的安全性进行保障,包括云服务器镜像、支撑云服务器、镜像底层的软硬件服务。除此之外,还包括各个地域和可用区的服务器、网络设备、存储设备等安全性,以及虚拟化系统的安全性。?用户则需要对语音服务器ECS上的操作系统、操作系统里的应用数据、以及应用业务架构的安全性负责。包括环境变量配置,软件应用,数据安全,安全合规等等。如果用户自身不做任何安全防护和措施,完全依赖底层基础设施的安全性,相当于在裸奔。?除了安全意识不足,用户在安全实践的落地层面,也面临门槛高的问题,包括明确制定安全规范,及时扫描并发现不符合安全规范的安全问题等等。在这个维度上,ECS Insight从访问安全、数据安全和应用安全三个维度为用户提供了明确的提升路径。?访问安全关注的是,资源的访问权限和访问审计的问题,包括设置更安全的实例登录方式,为实例访问提供登录审计、防止未授权的访问等等。?数据安全是不少用户面临的问题,与线下机房不同的是,云上数据一旦被删除是无法找回的。因此,养成定期备份重要数据或对高敏数据进行加密,能够大大提升数据的安全性。?应用安全性则是业务持续运行的终极目标,应用安全的保障在访问安全、数据安全的基础上,需要持续的完善应用本身的代码的安全性。以及通过类似WAF、DDOS等安全防护能力进行保障。?整体来说,安全无小事,业务的安全性需要云厂商和用户共同创建。在体系化的构建业务安全时,我们需要从访问安全、数据安全和应用安全等多个维度进行综合考虑。?三、总结与展望??综上所述,ECS Insight产品和CloudOps一脉相承。它从CloudOps定义的CARES五个维度,对用户使用ECS的情况进行全面的分析和评估。结合云厂商的最佳实践,识别各个维度中存在的可优化点,并提供对应的建议来帮助用户进行持续优化。?目前,每个纬度下的能力评估和准确度不够完美。因此在新一年里,ECS Insight会持续在两个方向进行优化。一方面,我们会持续优化并提升CloudOps CARES五大维度评分的准确度,让每个维度的评分能更准确的反映用户的实际情况。这个能力的完善离不开采集更多的ECS指标和使用数据,离不开用户对阿里云的信任和支持。?另一方面,我们将持续完善CloudOps的自服务能力,为用户在云上进行DevOps的实践提供更全面、更智能、更自动化的能力支撑,帮助用户充分利用于本身的优势,助力其业务高质量的交付和安全稳定的运行。?点击链接回看精彩直播,点击链接/扫码还可阅读/下载《CloudOps云上自动化运维白皮书2.0》?
IDEA 插件上新! 生成接口文档就是这么快!
当有接口对接需求的时候,开发终于不用再担心 API 文档难写了,也不用再一个个接口文档重新写!安装这个 IDEA 插件,可以一步将文档导入到 Postcat。这款插件操作简单,容易上手,能够让开发者省去API文档编写的工作,更专注于开发。插件通过分析用户注释进行接口解析,最终生成接口文档并上传至 Postcat 服务器,使得开发者可以在 Postcat 上进行 API 管理和分享,提高协作能力和开发速度。和Swagger 有什么区别呢?Postcat 插件不会入侵到代码内部,无需添加任何jar包依赖插件通过分析用户注释进行接口解析,最终生成接口文档并上传至 Postcat 服务器,使得开发者可以在 Postcat 上进行 API 管理和分享,提高协作能力和开发速度。Postcat 提供了多种拓展注释,如@path、@url、@method、@name、@hidden和@required,这些注释可以在设置界面进行自定义或兼容现有注释。此外,Postcat 还提供了注释生成功能,对于没有或仅有少量注释的类和方法,开发者无需费力手动添加,该功能可以分析方法字段含义并自动生成注释。开发者只需要检查或根据实际场景进行微调,即可生成一份较完善的API文档。如果原有注释不足,Postcat 会通过添加方式补充注释,移除注释时只会移除Postcat提供的那些拓展性注释,不会破坏用户自身的注释。同时,开发者还可以使用"意图"功能局部生成插件注释,并进行调整和修改。Postcat提供了多种 API 上传方式,方便开发者在不同的场景下使用:对于首次使用Postcat的现有项目,开发者可以使用主菜单中Tools分组下的Upload Project Api Doc来完成项目级别的接口上传。对于新需求下创建的Controller,在完成接口定义后,开发者可以右键菜单,选择 Upload All Api 来进行单个文件级别全部上传,做到先有文档再有逻辑,前后端工作不再串行阻塞。对于某个部分单独接口的改动,无需全部上传,开发者可以右键菜单,选择Upload Api功能,该功能会展示当前编辑类的接口信息,并提供接口预览和接口选择界面,使得用户可以勾选需要更新或上传的目标API进行信息核对和上传。如何安装配置?IDEA 版本需大于 IntelliJ IDEA 2022.03在 IDEA “设置-插件-Marketplace” 中搜索 Postcat,找到 Postcat 插件安装即可。同时也可在IDEA插件市场上进行下载安装,本地的IDEA没有自动唤起时,可以直接把zip包拖入IDEA中即可完成安装/更新。填写配置信息1.首次上传需要填写配置信息,配置信息项目之间独立。2.配置信息获取途径:登陆 Postcat 进入项目中获取 Token、WorkspaceID 和 ProjectID。Server 默认填写:https://postcat.com/api, 用户无需修改Token获取 3.WorkspaceID 和 ProjectID 获取进入项目设置页面,点击项目名右侧“问号” 4.StringType 决定出入参的字符串类型,只有参数名一开始就是遵守驼峰规范才会发现改变,预览窗口可看到变化结果 1. 当参数名为userInfo,选择 camelCase,依旧是userInfo,这是默认选项 2. 当参数名为userInfo,选择 lower_underscore,会变成user_info 3. 当参数名为userInfo,选择 UPPER_UNDERSCORE,会变成USER_INFO注意事项1. 进行解析上传前,请确保 IDEA 在项目中已经构建完,相关依赖已经下载好。2. 强烈推荐使用插件定义的注释,插件有强大的生成注释功能,强烈建议先生成插件的注释进行编辑再上传,注释可以在设置也进行自定义。3. 在识别不到插件注释时,仅对Spring MVC、Swagger.v2和Swagger(OpenAPI).v3的注解只做部分简单支持。为避免必要参数的缺失,推荐使用插件注释。4. 生成注释功能会对Spring MVC、Swagger.v2 和Swagger(OpenAPI).v3的注解只做部分简单支持,而不会让你重头编写。5.HTTP接口通过路由和请求方式判断唯一做覆盖更新处理6. 对于已经上传的 API,在 web 上进行过手动修改,不建议再使用上传功能,因为插件上传会覆盖掉之前的内容。7. 在生成/手敲了插件javadoc后,对接口uri,请求方式(GET/POST)等做了修改,需要手动修改插件javadoc,否则插件还是会识别到旧的插件javadoc信息。8. 自动生成的类注释默认会上传到默认分组,请用户自行填写真实的分组,分组通过名字识别。如多级分组,则用.隔开,比如需要把接口传到第三方分组下的用户分组,则 group-name 填写 第三方.用户。9.@group-name注释 支持到方法级别,默认不生成,可手动添加到方法注释,插件会帮你将当前方法存到对应分组中。10. 项目级别的 api 扫描和上传,顶部菜单[Tools -> Upload Project Api Doc],具体使用规则看 项目级上传。11. 生成类注释不在默认生成@required注释,只会针对有javax.validation.constraints.NotNull注解的字段才生成。12. 不推荐使用@remark注释,插件保留了识别功能且将内容拼接到字段说明中,生成类注释不会自动生成。13. 通过@PathVariable,POST方法默认把参数识别成 Formdata 类型,GET方法默认把参数识别成 query 类型。14.//标识的注释无法被识别出来,请使用/** */标识。 了解 Postcat:Postcat 是一个强大的开源、跨平台(Windows、Mac、Linux、Browsers...)的 API 开发测试工具,支持 REST、Websocket 等协议(即将支持 GraphQL、gRPC、TCP、UDP),帮助你加速完成 API 开发和测试工作。Postcat 核心功能:API 文档管理:可视化 API 设计,生成 API 文档API 测试:自动生成测试参数,自动生成测试用例,可视化数据编辑插件拓展:众多插件扩展产品功能,打造属于你和团队的 API 开发平台Mock:根据文档自动生成 Mock,或创建自定义 Mock 满足复杂场景团队协作:既能实现 API 分享也能可以创建云空间共同协作Postcat 优势:免登录即可测试:省去繁琐的验证登录的操作界面简洁:没有冗余的功能与复杂选项免费:中小团队以及个人使用丰富的插件:支持数据迁移、主题、API 安全等高达 25 款插件国产:能更好的理解国内用户的需求,与开发团队沟通无障碍完善的用户文档:跟着操作就能快速上手多提 Issue !多反馈!在使用过程中有任何疑问,可以进群交流,也可以在线提 Issue(强烈推荐这种开源的方式),提问题本身就已经在贡献社区了:https://github.com/Postcatlab/postcat/issues如果喜欢,不妨 Star 支持一下这个项目是开源的,如果你觉得这个项目还不错的话,不妨点个 Star 支持一下!Github :https://github.com/Postcatlab/postcat
反了!居然让我教她自动化测试
简单介绍Selenium 大家应该都很熟悉了吧,简单说它就是个基于浏览器的 Web 自动化测试工具,基本上是自动化测试人员首选工具。因为相比其他工具,它有很多的优势:支持多种语言,比如 Python、Java、C或C#、ruby 等都支持;支持多种浏览器, 比如 IE、FireFox、Safari、Opera、Chrome 这些主流浏览器基本都支持;支持多种操作系统,比如 Windows、Mac、Linux 这个款主流操作系统。其实单就上面这些优势就足以证明它的强大了,再加上它还支持分布式部署自动化测试程序,在多台不同的机器上同时执行。是不是感觉很厉害?然而这么强大的工具它居然还是免费的,并且代码已经开源,这简直不敢想象。说的这么厉害,那它要如何使用呢?环境安装首先你得先装好了 Python,然后通过 pip install selenium 命令进行安装就可以了(参见 https://pypi.org/project/selenium/)。安装完 selenium 后,还需要再下载 webdriver ,不同的浏览器需要下载不同的驱动,以下是常见浏览器驱动的下载地址:浏览器下载地址Chromehttps://sites.google.com/a/chromium.org/chromedriver/downloadsEdgehttps://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/Firefoxhttps://github.com/mozilla/geckodriver/releasesSafarihttps://webkit.org/blog/6900/webdriver-support-in-safari-10/我平时都是用?Chrome?浏览器,所以我下载了?chromedriver?,但有一点需要注意,你下载的?chromedriver?版本要和你安装的浏览器版本一致,不然使用中可能会出现各种问题。简单说明好了,现在我们就从最最简单的启动浏览器,然后打开一个网页开始。Chrome 浏览器// 导入 webdriver
from selenium import webdriver
// executable_path 用于指定driver存放路径
browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')
// 打开百度页面
browser.get('https://wwww.baidu.com/')写好后保存为?test1.py?Python 文件,然后执行命令?python test1.py,然后就可以看到如下效果:程序通过 selenium 调用 chromedriver 驱动 Chrome 浏览器启动,并让浏览器打开百度的首页,大概就是这么个过程。除了使用 Chrome 浏览器,我们也可以使用其他的,比如 Firefox、EDGE 等。Firefox 浏览器// 导入 webdriver
from selenium import webdriver
// executable_path 用于指定driver存放路径
browser = webdriver.Firefox(executable_path='/Users/xx/python/firefoxdriver')
// 打开百度页面
browser.get('https://wwww.baidu.com/')EDGE 浏览器// 导入 webdriver
from selenium import webdriver
// executable_path 用于指定driver存放路径
browser = webdriver.Edge(executable_path='/Users/xx/python/edgedriver')
// 打开百度页面
browser.get('https://wwww.baidu.com/')好了,通过对比上面代码相信你也能看出来,其实用哪个浏览器其实区别都不是很大,这里就不再一一截图了,接下来我就使用?Chrome?来介绍和演示效果了。简单使用当然启动浏览器,并打开页面我们只是走出了第一步,也就是写了个?Hello World,下面我们再慢慢介绍如何使用,再来看个简单例子:// 导入 webdriver
from selenium import webdriver
// executable_path 用于指定driver存放路径
browser = webdriver.Chrome(executable_path='/Users/xx/python/chromedriver')
// 打开百度页面
browser.get('https://wwww.baidu.com/')
// 在搜索框内输入 `python selenium` 并点搜索返回结果
browser.find_element_by_id("kw").send_keys("python selenium")好了,我们再保存下然后执行命令 python test1.py,然后看下效果:没错,这次是打开百度首页后,又在搜索框输入 python selenium 字符串,并且点击 百度一下 按钮搜索出了结果。但它是怎么获取到搜索框,这里我们用的是 find_element_by_id() 方法,也就是通过 HTML 标签元素的 id 找到了这个输入框。那除了通过这个方法,还有别的方法能找到搜索框吗?总结好了,今天我们简单介绍了下?selenium?是什么,以及在?Python?中如何安装配置使用?selenium。如果你也对这个工具感兴趣,可以继续关注了解更多。