【序】elasticsearch具有的快速和高效的即时索引查询优势特点,已经越来越多的使用在很多生产环境下,像电商、车联网、Ai、大数据、高速计算已经成为平台系统的必备组件之一。

目前,Elasticsearch 被广泛使用,也越来越受到欢迎。这不单单是因为它的典型特征,比如易于部署、无需额外的软件即可扩展到数百个节点、内置 RESTful API、上手快、开源、更新快、社区活跃等。更重要的是 Elastic 已经形成了包含 Elasticsearch、logstash、kibana、Beats 等的 Elastic Stack 一体化解决方案。
Metaversant 创始人 Jeff Potts 以 15 年国外经典博客的框架为线索,剔除过时的技术体系、技术栈内容,结合近千万级业务场景和最新 Elastic 技术洞察梳理出 Elasticsearch 方案选型必须了解的 10 件事。继续阅读

【摘要】 经过不断发展,DevOps逐渐演变为一种方法框架,使能企业综合运用人员(People)、流程(Processes)与技术(Technologies)等,从而将价值持续交付给最终客户与用户。基于DevOps的价值观(Value)、原则(Principles)与实践(Practices),分析许多企业的DevOps落地案例,DevOps变革会存在6大常见的主要原因,称之为六大“焦油坑”

当今,DevOps能显著提升企业的商业敏捷与能力,因此在企业中广受欢迎。然而,对于大多数企业来讲,DevOps变革并非一帆风顺,此过程中会面临各种各样的挑战。为了提高DevOps变革成功的可能性,企业领导者亟需识别或者理解DevOps变革失败的常见原因,并采取一定的措施来避免。

经过不断发展,DevOps逐渐演变为一种方法框架,使能企业综合运用人员(People)、流程(Processes)与技术(Technologies)等,从而将价值持续交付给最终客户与用户。基于DevOps的价值观(Value)、原则(Principles)与实践(Practices),分析许多企业的DevOps落地案例,DevOps变革会存在6大常见的主要原因,称之为六大“焦油坑”:

    • 无的放矢
    • 乌合之众
    • 各自为政
    • 一蹴而就
    • 好高骛远
    • 沙上建塔

继续阅读

golang是一门全新的语言,比其他目前主流语言都新,2009年后公开,相比其他语言更是面向了当前网络化编程和未来智能编程,例如在摩尔定理的逐渐失效问题,所以其有非常明显的特点:面向接口、高并发goroutine(CSP)、易于使用、数据结构丰富、自有gcc。
故而,搞清楚golang的设计思想和重要优缺点是成为一个高级程序工程师必不可少的必经之路。由此,本文主要述说面向对象设计思想、结构化设计思想和面向接口设计思想的异同,使在实际开发程序时和、解决问题时,能更清醒深刻的解决问题。
面向结构、面向对象之异同
  • 软件工程实际是解决软件开发和软件设计的认识论和方法论,目的是解决软件开发中的实际问题。软件工程实际又分为两个主要软件设计思想:结构化设计(结构化方法包括结构化分析(Structured Analysis,简称SA)、结构化设计(Structured Design,简称SD)和结构化程序设计(Structured Program Design,简称SP)三部分内容。),另外,面向对象设计(面向对象方法包括面向对象分析(Object-Oriented Analysis,简称OOA)、面向对象设计(Object—Oriented Design,简称OOD)和面向对象程序语言(Object-Oriented Program Design,简称OOP)。),这两个实际代表了软件开发领域的不同模式。
  • 起源上:来自于程序结构理论》和《GOTO陈述有害论》的提出,证明了任何程序的逻辑结构都可以用顺序结构、选择结构和循环结构来表示,确立了结构化程序设计思想。
    • 结构化方法把对程序的分析、设计,延伸至对项目工程的分析、设计,结合程序设计语言的技术支持,得以产生和发展。
    • 20世纪80年代,随着应用系统的日趋复杂、庞大,结构化开发方法在工程应用中出现了一些问题。同期,面向对象程序设计思想经过20年的研究和发展逐渐成熟,一大批面向对象语言相继出现,面向对象方法自产生就广受青睐。90年代中期,互联网兴起,JAVA语言因跨平台特性得以蓬勃发展;21世纪初,不受限于时空的联合开发成为常态;今天,移动APP市场火爆,Andriod开发成为热点。面向对象方法已经成为软件开发方法的中坚力量。
  • 思想上:结构化方法承袭了结构化程序设计的思想,把待解决的问题看作一个系统,用系统科学的思想方法来分析和解决问题。结构化方法遵循抽象原则、分解原则和模块化原则;以数据和功能为中心;以模块为基本单位;以算法为程序核心;强调逐步求精和信息隐藏。面向对象方法的思想是模拟了客观世界的事物以及事物之间的联系。面向对象以类取代模块为基本单位;通过封装、继承和多态的机制,表征对象的数据和功能、联系和通信;通过对对象的管理和对象间的通讯完成信息处理与信息管理的计算和存储,实现软件功能。
    • 对于结构化方法,模块由函数实现,完成对输入数据的加工和计算,数据和功能是分离的;而面向对象把数据和功能封装在对象中,形成一个整体。两种方法在数据和功能上的不同处理是其思想上的本质差别。
  • 分析上:
    • 建立模型是为了更好地理解要模拟的现实世界,是软件开发方法的核心问题。在结构化方法中,使用SA构建系统的环境模型和逻辑模型,实现模型的主要工具有数据字典(DD)、ER图和数据流图(DFD)。数据字典是一个包含所有系统数据元素定义的仓库;ER图描述了数据之间的属性及联系;数据流图是描述信息流和数据从输入到输出变换,并展示系统和外部的接口、数据的输入和输出以及数据的存储的应用图形技术。SA的前提条件是需求分析,建模过程是迭代分解需求、不断细化应用的过程,即数据流图的分解从顶层图开始,按照每个加工对应一个子图的分解原则,逐层分解为0层图、1层图等。
    • 面向对象方法使用OOA定义类,对现实世界建模。OOA的主要任务是要在问题域上构建具有主题层、对象层、结构层、属性层和服务层的OOA模型,实现模型的主要工具有用例图(Use-Case)和类图(Class Diagram)。用例图从用户角度描述系统功能,并指出各功能的操作者,是对需求分析的整理;类图定义了类的组成(属性和服务)、类的结构和类间的关系,确定并划分系统中的类。经过OOA,系统的静态模型建立起来。相对于结构化方法使用DD、ER图和DFD分别描述数据和功能(尽管二者存在相互参考),面向对象方法中,无论是用例图还是类图,数据和功能的描述总是并行的。
  • 设计上:
    • 在结构化方法中,使用SD构建系统的行为和功能模型,实现模型的主要工具有模块结构图(SC)和程序流程图。模块结构图说明了系统的模块的划分、模块的功能、模块间的数据传递及调用关系。根据数据流图,我们能够映射出相应的软件的上层模块结构;结合数据流图,我们可以逐步分解上层模块,设计出中、下层模块;对于得到的全部模块,我们需要设计模块基本的内部结构和外部接口及对模块结构进行优化。进一步,则是针对每一个模块设计程序流程图,整理优化,归纳算法。SD依然是对项目系统的进一步分解求精的过程,把模型从逻辑级,细化到模块级,再细化到程序级。
    • 而OOD不只是对OOA的细化,更主要的,构建了系统的动态模型,实现模型的主要工具有交互图(Sequence Diagram)、状态图(State Diagram)、活动图(Activity Diagram)。和模块相比,对象最大的不同是具有“活性”,突出表现在对象具有状态和对象间能够通讯。交互图描述对象间的交互关系,显示对象之间的动态合作关系,强调对象之间消息发送的时间顺序;状态图描述对象的所有可能状态,以及事件发生时状态的转移条件;活动图描述为满足用例要求所进行的活动以及活动间的约束关系,用于识别并行活动,以提高系统效率。
    • 从设计方面,我们可以比较明显地看出结构化和面向对象的区别。结构化方法的核心是程序,从分析到设计,其实是从抽象到具体,从模糊到清晰地实现程序的过程;而面向对象方法的核心是功能,分析的是对象,设计的是行为,程序设计和系统设计相对分离
  • 程序设计上:
  • 以例子进行说明(银行存取款)
//结构化程序设计
int main () {
    int count;
    int money;
    int type;
    scanf (“%d %d %d”, &count, &money, &type);
    if (type)
        printf (“%d”, count – money);
    else
        printf (“%d”, count + money);
}
//面向对象程序设计
class Count {
    int count;
    Count (int count) {
        this.count = count;
    }
    int save (int money) {
        count += money;
    }
    int take (int money) {
        if(count >= money)
            count -= money;
    }
}

继续阅读