新用户注册入口 老用户登录入口

[转载]DevOps相关知识点

文章作者:转载 更新时间:2023-03-19 16:00:05 阅读数量:44
文章标签:持续部署DevOps自动化测试高频率迭代可靠发布敏捷开发
本文摘要:本文详细阐述了DevOps中的持续集成、持续交付和持续部署三个关键阶段。持续集成通过自动化测试实现高频代码合并,确保产品快速迭代与高质量;持续交付在此基础上将可交付产物部署至模拟生产环境,并通过严格自动化测试保证软件符合预期;而持续部署则在获得审批后自动将代码部署到生产环境,目标是实现随时可部署的高效敏捷开发模式。敏捷开发作为支撑实践,强调个体互动、灵活响应变化及可工作的软件价值。同时,Open-falcon作为一款开源监控解决方案,提供强大的数据采集能力与高可用性,支持系统基础监控至业务应用监控等多个层面。SNMP作为网络管理标准协议,在简化运维工作的同时,助力进行设备的有效监控与管理。
转载文章

本篇文章为转载内容。原文链接:https://blog.csdn.net/anqiongsha8211/article/details/101592137。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

DevOps

持续集成

简述

持续集成简称CI,是软件的开发和发布标准流程的最重要的部分

作为一个开发实践,在C中可以通过自动化等手段高频地去获取产品反馈并响应反馈的过程

简单的来说,持续集成就是持续不断地(一天多次)将代码合并(集成)到主干源码仓库,让产品可以快速迭代,同时保持高质量

代码每次通过集成到主干之前,必须通过自动化测试,以便快速发现和定位错误

持续集成并不能消除错误,而是让它们非常容易发现和改正

优点

  1. 缩减开发的周期,快速迭代版本

    (尽早的持续集成,尽早进入迭代之中,尽早的暴露出问题,尽早解决,尽量在规定的时间内完成任务)(四尽早一尽量)

  2. 自动化流水线操作带来的高效

    (CI的精髓在于持续,持续意味着自动化)

    (自动化验证代码变更的过程,可以在软件开发的早期发现缺陷和与其他代码、组件的集成问题)

  3. 随时可部署

    (高频率的集成可以尽可能地保证随时部署上线,缩短开发复杂软件的市场交付时间)

  4. 极大程度避免低级错误

    (减少大量内容合并到主干分支的请看看,避免代码合并冲突和无法预料的行为)

    低级错误:编译错误,安装问题,接口问题,性能问题等

难点

  • 迁移遗留代码到现有CI系统,需要的投入通常爱预料之外

  • 在文化和组织上如果没有采用敏捷原则或DecOps的工作方式,那么很可能没有持续不断的提交,那么CI的存在意义不大

  • 随着业务增长、工具的更替、技术的演进。CI系统也必然随之改动,往往会导致阶段性的不稳定和人力物力的耗费

  • 如果CI的基本设定不到位,开发流程将会增加特别的开销

注意点

CI流程的触发方式

  • 跟踪触发式:在每次提交到源码版本管理系统时触发

  • 计划任务:预配置好的计划

  • 手动:无论是通过CI服务器的管理界面还是脚本,用户可以手工执行CI工作流

代码审核

  • 可在持续集成服务器里使用代码分析工具(例如Sonar)来执行自动代码审查

  • 自动代码审查通过后,可发起一个人工代码审查,揪出那些自动审查无法找出的问题,即验证业务需求,架构问题,代码是否可读,以及是否易于扩展。

  • 可灵活配置代码审核策略,例如:如果某些人没有审查代码便阻止对主干分支的任何提交。

  • 最常用的工具是Gerrit

持续交付

简述

持续交付简称CDCDE,是一种能够使得软件在较短的循环中可靠的发布的软件工程方法

与持续集成相比,持续交付的重点在于 交付,其核心对象不在于代码,而在于可交付的产物。

由于持续集成仅仅针对于新旧代码的集成过程执行来了一定的测试,其变动到持续交付后还需要一些额外的流程

持续交付可以看作为是持续集成的下一步,它强调的是,不敢怎么更新,软件是随时随快可以交付的

有图可看出,持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实的运行环境的[类生产环境]中

目的

持续交付永爱确保让代码能够快速、安全的部署到产品环境中,它通过将每一次改动都会提交到一个模拟产品环境中,使用严格的自动化测试,确保业务应用和服务能符合预期

好处

持续交付和持续集成的好处非常相似:

  • 快速发布。能够应对业务需求,并更快地实现软件价值

  • 编码→测试→上线→交付的频繁迭代周期缩短,同时获得迅速反馈

  • 高质量的软件发布标准。整个交付过程标准化、可重复、可靠

  • 整个交付过程进度可视化,方便团队人员了解项目完成度

  • 更先进的团队协作方式。从需求分析、产品的用户体验到交互、设计、开发、测试、运维等角色密切协作,相比于传统的瀑布式软件团队,更少浪费

 

持续部署

简述

持续部署 意味着:通过自动化部署的手段将软件功能频繁的进行交付

持续部署是持续交付的下一步,指的是代码通过审批以后,自动化部署到生产环境。

持续部署是持续交付的最高阶段,这意味着,所有通过了一系列的自动化测试的改动都将自动部署到生产环境。它也可以被称为“Continuous Release”

持续化部署的目标是:代码在任何时候都是可部署的,可以进入生产阶段。

持续部署的前提是能自动化完成测试、构建、部署等步骤

注:持续交付不等于持续集成

与持续交付以及持续集成相比,持续部署强调了通过 automated deployment 的手段,对新的软件功能进行集成

目标

持续部署的目标是:代码在任何时刻都是可部署的,可以进入生产阶段

有很多的业务场景里,一种业务需要等待另外的功能特征出现才能上线,这是的持续部署成为不可能。虽然使用功能切换能解决很多这样的情况,但并不是没每次都会这样。所以,持续部署是否适合你的公司是基于你们的业务需求——而不是技术限制

优点

持续部署主要的好处是:可以相对独立地部署新的功能,并能快速地收集真实用户的反馈

敏捷开发

简述

敏捷开发就是一种以人为核心、迭代循环渐进的开发方式。

在敏捷开发中,软件仙姑的构建被切分成多个子项目,各个子项目的成果都经过测试,具备集成和可运行的特征。

简单的说就是把一个大的项目分为多个相互联系,但也可以独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态

注意事项

敏捷开的就是一种面临迅速变化的需求快速开发的能力,要注意一下几点:

  1. 敏捷开发不仅仅是一个项目快速完成,而是对整个产品领域需求的高效管理

  2. 敏捷开发不仅仅是简单的快,而是短周期的不断改进、提高和调整

  3. 敏捷开发不仅仅是一个版本只做几个功能,而是突出重点、果断放弃当前的非重要点

  4. 敏捷开发不仅仅是随时增加需求,而是每个迭代周期对需求的重新审核和排序

如何进行敏捷开发

1、组织建设

​ 也就是团队建设,建立以产品经理为主导,包含产品、设计、前后台开发和测试的team,快速进行产品迭代开发;扁平化的团队管理,大家都有共同目标,更有成就感;

2、敏捷制度

​ 要找准适合自身的敏捷开发方式,主要是制定一个完善的效率高的设计、开发、测试、上线流程,制定固定的迭代周期,让用户更有期待;

3、需求收集

​ 这个任何方式下都需要有,需求一定要有交互稿,评审通过后,一定要确定功能需求列表、责任人、工作量、责任人等;

4、工具建设

​ 是指能够快速完成某项事情的辅助工具,比如开发环境的一键安装,各种底层的日志、监控等平台,发布、打包工具等;

5、系统架构

​ 略为超前架构设计:支持良好的扩容性和可维护性;组件化基础功能模块:代码耦合度低,模块间的依赖性小;插件化业务模块:降低营销活动与业务耦合度,自升级、自维护;客户端预埋逻辑;技术预研等等;

6、数据运营与灰度发布

​ 点击率分析、用户路径分析、渠道选择、渠道升级控制等等

原则、特点和优势

敏捷开发技术的12个原则:

1.我们最优先要做的是通过尽早的、持续的交付有价值的软件来使客户满意。

2.即使到了开发的后期,也欢迎改变需求。

3.经常性地交付可以工作的软件,交付的间隔可以从几周到几个月,交付的时间间隔越短越好。

4.在整个项目开发期间,业务人员和开发人员必须天天都在一起工作。

5.围绕被激励起来的个人来构建项目。

6.在团队内部,最具有效果并且富有效率的传递信息的方法,就是面对面的交谈。

7.工作的软件是首要的进度度量标准。

8.敏捷过程提倡可持续的开发速度。

9.不断地关注优秀的技能和好的设计会增强敏捷能力。

10.简单使未完成的工作最大化。

11.最好的构架、需求和设计出自于自组织的团队。

12.每隔一定时间,团队会在如何才能更有效地工作方面进行反省,然后相应地对自己的行为进行调整。

特点:

  1. 个体和交互胜过过程和工具

  2. 可以工作的软件胜过面面俱到的文档

  3. 客户合作胜过合同谈判

  4. 响应变化胜过遵循计划

优势总结:

敏捷开发确实是项目进入实质开发迭代阶段,用户很快可以看到一个基线架构班的产品。敏捷注重市场快速反应能力,也即具体应对能力,客户前期满意度高

适用范围:

  1. 项目团队的人不能太多

  2. 项目经常发生变更

  3. 高风险的项目实施

  4. 开发人员可以参与决策

劣势总结:

  1. 敏捷开发注重人员的沟通

  2. 忽略文档的重要性

  3. 若项目人员流动太大,维护的时候很难

  4. 项目存在新手的比较多的时候,老员工会比较累

  5. 需要项目中存在经验较强的人,要不然大项目中容易遇到瓶颈问题

 

Open-falcon

简述

open-falcon是小米的监控系统,是一款企业级、高可用、可扩展的开源监控解决方案

公司用open-falcon来监控调度系统各种信息,便于监控各个节点的调度信息。在服务器安装了falcon-agent自动采集各项指标,主动上报

特点

  1. 强大灵活的数据采集

    (自动发现,支持falcon-agent、snmp、支持用户主动push、用户自定义插件支持、opentsdb data model like(timestamp、endpoint、metric、key-value tags) )

  2. 水平扩展能力

    (支持每个周期上亿次的数据采集、告警判定、历史数据存储和查询 )

  3. 高效率的告警策略管理

    (高效的portal、支持策略模板、模板继承和覆盖、多种告警方式、支持callback调用 )

  4. 人性化的告警设置

    (最大告警次数、告警级别、告警恢复通知、告警暂停、不同时段不同阈值、支持维护周期 )

  5. 高效率的graph组件

    (单机支撑200万metric的上报、归档、存储(周期为1分钟) )

  6. 高效的历史数据query组件

    (采用rrdtool的数据归档策略,秒级返回上百个metric一年的历史数据 )

  7. dashboard(面向用户的查询界面,可以看到push到graph中的所有数据,并查看数据发展趋势 )

    (对维度的数据展示,用户自定义Screen)

  8. 高可用

    (整个系统无核心单点,易运维,易部署,可水平扩展)

  9. 开发语言

    (整个系统的后端,全部golang编写,portal和dashboard使用python编写。 )

监控范围

Open-Falcon支持系统基础监控,第三方服务监控,JVM监控,业务应用监控

基础监控指的是Linux系统的指标监控,包括CPU、load、内存、磁盘、IO、网络等,

这些指标由Openfalcon的agent节点直接支持,无需插件

第三方服务监控指的是一些常见的服务监控,包括Mysql、Redis、Nginx等

OpenFalcon官网提供了很多第三方服务的监控插件,也可以自己实现插件,定义采集指标。而采集到的指标,也是通过插件先发送给agent,再由agent发送到OpenFalcon。

JVM监控主要通过插件完成,插件通过JVM开放的JMX通信端口,获取到JVM参数指标,并推送到agent节点,再由agent发送到OpenFalcon。

业务应用监控就是监控企业自主开发的应用服务

主要通过插件完成,插件通过JVM开放的JMX通信端口,获取到JVM参数指标,并推送到agent节点,再由agent发送到OpenFalcon。

数据流向

常见的OpenFalcon包含transfer、hbs、agent、judge、graph、API几个进程

以下是各个节点的数据流向图,主数据流向是agent -> transfer -> judge/graph:

SNMP

简述

SNMP:简单网络管理协议,是TCP/IP协议簇 的一个应用层协议,由于SNMP的简单性,在Internet时代得到了蓬勃的发展 ,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能。现在,已经有了SNMPv3版本(它对网络管理最大的贡献在于其安全性。增加了对认证和密文传输的支持 )。

一套完整的SNMP系统主要包括:管理信息库(MIB)、管理信息结构(SMI)和 SNMP报文协议

为什么要用SNMP

作为运维人员,我们很大一部分的工作就是为了保证我们的网络能够正常、稳定的运行。因此监控,控制,管理各种网络设备成了我们日常的工作

优点和好处

优点:

简单易懂,部署的开销成本也小 ,正因为它足够简单,所以被广泛的接受,事实上它已经成为了主要的网络管理标准。在一个网络设备上实现SNMP的管理比绝大部分其他管理方式都简单直接。

好处:

  1. 标准化的协议:SNMP是TCP/IP网络的标准网络管理协议。

  2. 广泛认可:所有主流供应商都支持SNMP。

  3. 可移植性:SNMP独立于操作系统和编程语言。

  4. 轻量级:SNMP增强对设备的管理能力的同时不会对设备的操作方式或性能产生冲击。

  5. 可扩展性:在所有SNMP管理的设备上都会支持相同的一套核心操作集。

  6. 广泛部署:SNMP是最流行的管理协议,最为受设备供应商关注,被广泛部署在各种各样的设备上。

 

 

 

MIB、SMI和SNMP报文

MIB

  1. 管理信息库MIB:任何一个被管理的资源都表示成一个对象,称为被管理的对象。

  2. MIB是被管理对象的集合。

  3. 它定义了被管理对象的一系列属性:对象的名称、对象的访问权限和对象的数据类型等。

  4. 每个SNMP设备(Agent)都有自己的MIB。

  5. MIB也可以看作是NMS(网管系统)和Agent之间的沟通桥梁。

     

MIB文件中的变量使用的名字取自ISO和ITU管理的对象表示符命名空间,他是一个分级数的结构

SMI

SMI定义了SNNMP框架多用信息的组织、组成和标识,它还未描述MIB对象和表述协议怎么交换信息奠定了基础

SMI定义的数据类型:

  1. 简单类型(simple):

    Integer:整型是-2,147,483,648~2,147,483,647的有符号整数

    octet string: 字符串是0~65535个字节的有序序列

    OBJECT IDENTIFIER: 来自按照ASN.1规则分配的对象标识符集

  2. 简单结构类型(simple-constructed ):

    SEQUENCE 用于列表。这一数据类型与大多数程序设计语言中的“structure”类似。一个SEQUENCE包括0个或更多元素,每一个元素又是另一个ASN.1数据类型

    SEQUENCE OF type 用于表格。这一数据类型与大多数程序设计语言中的“array”类似。一个表格包括0个或更多元素,每一个元素又是另一个ASN.1数据类型。

  3. 应用类型(application-wide):

    IpAddress: 以网络序表示的IP地址。因为它是一个32位的值,所以定义为4个字节;

    counter:计数器是一个非负的整数,它递增至最大值,而后回零。在SNMPv1中定义的计数器是32位的,即最大值为4,294,967,295;

    Gauge :也是一个非负整数,它可以递增或递减,但达到最大值时保持在最大值,最大值为232-1;

    time ticks:是一个时间单位,表示以0.01秒为单位计算的时间;

    SNMP报文

    SNMP规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。

    1. get-request操作:从代理进程处提取一个或多个参数值。

    2. get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值。

    3. set-request操作:设置代理进程的一个或多个参数值。

    4. get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。

    5. trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。

操作命令

SNMP协议之所以易于使用,这是因为它对外提供了三种用于控制MIB对象的基本操作命令。它们是:Get、Set 和 Trap

  1. Get:管理站读取代理者处对象的值

  2. Set:管理站设置代理者处对象的值

  3. Trap: 代理者主动向管理站通报重要事件

SLA

简述

SLA(服务等级协议):是关于网络服务供应商和客户之间的一份合同,其中定义了服务类型、服务质量和客户付款等术语

一个完整的SLA同时也是一个合法的文档,包括所涉及的当事人、协定条款(包含应用程序和支持的服务)、违约的处罚、费用和仲裁机构、政策、修改条款、报告形式和双方的义务等。同样服务提供商可以对用户在工作负荷和资源使用方面进行规定。

KPI

简述

KPI(关键绩效指标):是通过对组织内部流程的输入端、输出端的关键参数进行设置、取样、计算、分析,衡量流程绩效的一种目标式量化管理指标,是把企业的战略目标分解为可操作的工作目标的工具,是企业绩效管理的基础。

KPI可以是部门主管明确部门的主要责任,并以此为基础,明确部门人员的业绩衡量指标,建立明确的切实可行的KPI体系,是做好绩效管理的关键。

KPI(关键绩效指标)是用于衡量工作人员工作绩效表现的量化指标,是绩效计划的重要组成部分

 

 

转载于:https://www.cnblogs.com/woshinideyugegea/p/11242034.html

本篇文章为转载内容。原文链接:https://blog.csdn.net/anqiongsha8211/article/details/101592137。

该文由互联网用户投稿提供,文中观点代表作者本人意见,并不代表本站的立场。

作为信息平台,本站仅提供文章转载服务,并不拥有其所有权,也不对文章内容的真实性、准确性和合法性承担责任。

如发现本文存在侵权、违法、违规或事实不符的情况,请及时联系我们,我们将第一时间进行核实并删除相应内容。

相关阅读
文章标题:[转载][洛谷P1082]同余方程

更新时间:2023-02-18
[转载][洛谷P1082]同余方程
文章标题:[转载]webpack优化之HappyPack实战

更新时间:2023-08-07
[转载]webpack优化之HappyPack实战
文章标题:[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法

更新时间:2023-09-10
[转载]oracle 同时更新多表,在Oracle数据库中同时更新两张表的简单方法
文章标题:[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo

更新时间:2024-03-11
[转载][Unity] 包括场景互动与射击要素的俯视角闯关游戏Demo
文章标题:[转载]程序员也分三六九等?等级差异,一个看不起一个!

更新时间:2024-05-10
[转载]程序员也分三六九等?等级差异,一个看不起一个!
文章标题:[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集

更新时间:2024-01-12
[转载]海贼王 动漫 全集目录 分章节 精彩打斗剧集
名词解释
作为当前文章的名词解释,仅对当前文章有效。
持续集成持续集成是一种软件开发实践,它要求开发团队成员频繁地(如每天多次)将各自编写的代码合并到主干分支或共享仓库中。在合并过程中,通过自动化构建和测试工具对新代码进行验证,以快速发现并解决问题,确保代码的质量和稳定性。在文章中,持续集成是DevOps流程中的关键组成部分,旨在缩短开发周期、提高软件质量,并通过高频迭代使得产品能够更快响应市场需求。
持续交付持续交付是软件工程方法论的一种,它关注于能够在任何时候可靠地将软件发布到生产环境。在实现持续交付的过程中,软件项目始终保持可部署状态,每次代码变更都经过一系列自动化测试和验证流程后,可以被安全地部署至预生产或生产环境。相较于持续集成更侧重于代码合并与自动化测试,持续交付则强调了从代码提交到最终用户接收的整个过程的自动化和可靠性。
敏捷开发敏捷开发是一种以人为本、迭代且灵活的软件开发方法论,适用于需求不断变化或者高度不确定性的项目。在敏捷开发模式下,项目被划分为多个小的迭代周期(例如两周或一个月),每个迭代周期结束时都会产出可供用户使用的功能完备的软件版本。敏捷开发强调个体和团队之间的沟通协作、面对面交流以及对客户需求的快速响应,力求在最短的时间内提供最大价值的功能给客户,并通过不断的反馈和调整优化产品的开发过程和结果。在本文中,敏捷开发作为支持DevOps实践和持续集成、持续交付的重要理念被提及。
延伸阅读
作为当前文章的延伸阅读,仅对当前文章有效。
在深入理解了DevOps持续集成、持续交付、持续部署的核心概念,以及敏捷开发的实践方法之后,我们发现这些理念和技术正逐渐成为现代软件工程的基石。为了进一步紧跟行业趋势,读者可以关注以下延伸阅读内容:
1. 近期实例应用:近期,亚马逊AWS在其年度re:Invent大会上宣布了一系列新服务和更新,其中包括针对CI/CD流程优化的新功能,如CodePipeline的增强版自动化构建与部署工具。了解这些最新动态有助于企业提升其DevOps实践水平,实现更高效的产品迭代。
2. 深度解析文章:“持续交付2.0:应对微服务架构挑战”一文从实际案例出发,详尽剖析了在微服务架构下如何调整和优化持续交付流程,从而确保快速响应市场变化并保持软件质量。
3. 学术研究论文:“敏捷开发在复杂项目环境中的适应性及效果评估”这篇学术论文通过严谨的数据分析,探讨了敏捷开发在不同规模和复杂度项目中所展现出的优势与局限,为从业者提供了理论指导。
4. 行业报告解读:Gartner最近发布的《全球DevOps现状报告》揭示了当前业界对于DevOps工具链的选择偏好、实践中遇到的主要挑战以及未来发展趋势。阅读此类报告可帮助决策者把握行业脉搏,制定更符合市场需求的策略。
5. 技术社区讨论:Stack Overflow和GitHub等技术社区中,关于如何实施Open-Falcon监控系统以支持大规模分布式系统的讨论帖,不仅分享了实践经验,也为解决实际运维问题提供了宝贵参考。
总之,随着科技日新月异的发展,DevOps与敏捷开发领域的研究与实践也在不断深化。关注相关领域最新的研究成果、行业报告以及实战经验分享,将有助于广大开发者与时俱进,更好地利用这些理念和技术手段推动软件开发工作的创新与发展。
知识学习
实践的时候请根据实际情况谨慎操作。
随机学习一条linux命令:
tar --list -f archive.tar.gz - 列出压缩包内的文件列表。
随便看看
拉到页底了吧,随便看看还有哪些文章你可能感兴趣。
可自定义logo的jQuery生成二维码插件 01-03 jquery每日签到日历插件 10-10 高度可定制的jQuery瀑布流网格布局插件 03-15 Consul中服务实例自动注销问题解析:健康检查、稳定性与Agent配置的影响及解决策略 01-22 怎么看mysql 的安装路径 12-31 jquery横向手风琴效果 12-23 蓝色数码电子产品销售HTML5网站模板 12-14 jQuery和CSS3汉堡包导航菜单打开动画特效 10-19 python模拟生存游戏 10-08 本次刷新还10个文章未展示,点击 更多查看。
jQuery.eraser-实现橡皮擦擦除功能的jquery插件 05-26 Netty中ChannelNotRegisteredException异常处理:理解原因与确保Channel注册状态的方法示例 05-16 响应式游戏开发类企业前端cms模板下载 05-02 精美的花甲美食网站HTML模板下载 03-09 soulmate粉色干净浪漫唯美婚礼单页响应式网站模板 03-07 Vue.js项目中proxyTable数据转发遭遇504错误:服务器响应时间与网络连接问题排查及解决方案 03-05 SpringCloud服务路由配置错误与失效:识别问题、排查步骤及组件解析这个涵盖了的核心内容,包括SpringCloud框架下的服务路由配置错误失效问题的识别,以及涉及到的服务注册中心、Gateway、Zuul等组件的功能解析和故障排查的具体步骤。同时,字数控制在了50个字以内,满足了要求。 03-01 css水平线长度设置 02-11 [转载]Proxy 、Relect、响应式 01-11 蓝色响应式软件营销代理公司网站静态模板 01-06 python正太分布校验 01-05
时光飞逝
"流光容易把人抛,红了樱桃,绿了芭蕉。"