首页 文章 精选 留言 我的

精选列表

搜索[前端设计],共10000篇文章
优秀的个人博客,低调大师

PouchContainer CRI的设计与实现

1. CRI简介 在每个Kubernetes节点的最底层都有一个程序负责具体的容器创建删除工作,Kubernetes会对其接口进行调用,从而完成容器的编排调度。我们将这一层软件称之为容器运行时(Container Runtime),大名鼎鼎的Docker就是其中的代表。 当然,容器运行时并非只有Docker一种,包括CoreOS的rkt,hyper.sh的runV,Google的gvisor,以及本文的主角PouchContainer,都包含了完整的容器操作,能够用来创建特性各异的容器。不同的容器运行时有着各自独特的优点,能够满足不同用户的需求,因此Kubernetes支持多种容器运行时势在必行。 最初,Kubernetes原生内置了对Docker的调用接口,之后社区又在Kubernetes 1.3中集成了rkt的接口,使其成为了Doc

优秀的个人博客,低调大师

Spark SQL程序设计(1)

Spark SQL编写流程 1. SparkSession对象 封装了spark sql执行环境信息,是所有Spark SQL程序的唯一入口 sparkSession中包含 sparkContext和sqlContext两个对象,不用再自己创建sparkContext 2. 创建DataFrame或Dataset Spark SQL支持各种数据源 3. 在DataFrame或Dataset之上进行transformation和action Spark SQL提供了多种transformation和action函数 4. 返回结果 保存到HDFS中,或直接打印出来 val spark=SparkSession.build .master("local") .appName("appName") .getOrCreate() // 注意,后面所有程序片段总的spark变量均值SparkSession // 将RDD隐式转换为DataFrame import spark.implicits._ DataFrame与Dataset 1. DataFrame=Dataset[Row] row表示一行数据,例如Row=["1",23,44] RDD /DataFream/Dataset 之间可以相互转化 2. DataFream 内部数据无类型统一为row DataFream是一种特殊的Dataset 3. Dataset 内部数据有类型,需要用户自己设定 Spark SQL数据源 RDD->DataFrame:反射方式 1.定义case class ,作为RDD的schema 2. 直接通过RDD.toDF,将RDD转为DataFream import org.apache.spark.sql.SparkSession import org.apache.spark.sql.Row case class User(userID:Long,gennder:String, age: Int, occupation: String, zipcode: String) val userRdd=sc.textFile("//") val userRDD=usrRdd.map(_.split("::")).map(p=>User(p(0).ToLong,p(1).ToStringp(2).toInt, p(3), p(4))) val userDF=userRDD.toDF() userDF.count() json->DataFrame val userjson=spark.read.format("json").load("//user.json") //一行json数据要在一行 userjson.take(10) val userjson=spark.read.json("") userjson.take(10) text->DataSet val userDS=spark.read.textFile("").map(_.split(":")) RDD、DataFrame与Dataset的关系 val ds = df.as[Person] // DataFrame -> Dataset val df2 = ds.toDF() / Dataset -> DataFrame val rdd1 = ds.rdd // Dataset -> RDD val rdd2 = df.rdd // DataFrame -> RDD

优秀的个人博客,低调大师

设计模式之组合模式(Composite)

1.引言 在学习JUnit的时候,看到一段话“JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象;当调用TestSuite对象的run()方法是,会遍历自己容纳的对象,逐个调用它们的run()方法”。就来学习什么是组合模式。 2.应用实例 在实现跟商品有关的应用系统的时候,一个很常见的功能就是商品类别树的管理,比如有以下的商品类别树: —————————————————————————————————— -服装 -男装 -衬衣 -夹克 -女装 -裙子 -套装 —————————————————————————————————— 通过上面的商品类别树我们可以发现商品类别树有两种类型的节点,分别是叶子节点(衬衣,夹克)和组合节点(服装,男装,女装)。组合节点中可以包含其他的组合节点或者叶子节点,而叶子节点不能。 给出一个简单的管理商品类别树的实例代码。 2.1不使用组合模式的解决方案 组合节点Composite View Code 叶子节点 View Code 客户端Client View Code 运行结果就是应用实例中显示的商品树形结构。 上述解决方案存在的问题: 虽然实现了要求的功能,但是有一个明显的问题:那就是必须区分组合对象和叶子对象,并进行区别对待,比如在Composite(addComposite方法和addLeaf方法)和Client(定义Composite对象和定义Leaf对象)里面,都需要去区别对待这两种对象。区别对待组合对象与叶子对象不但让程序更加复杂,还对功能的扩展带了了不便。用户不希望区别对待这两类对象。 2.2使用组合模式的解决方案 组合模式通过引入一个抽象的组件对象,作为组合对象和叶子对象的父对象,这样就把组合对象和叶子对象统一起来了,用户使用的时候,始终是在操作组件对象,而不再去区分是在操作组合对象还是叶子对象。 组合模式的关键就在于这个抽象类,这个抽象类既可以代表叶子对象,也可以代表组合对象,这样用户在操作的时候,对叶子对象和组合对象的使用就具有了一致性。 组件对象Component View Code 组合对象Composite View Code 叶子对象Leaf View Code 客户端 View Code 程序架构如下图所示。这样的架构实现了用户的透明访问。 3.透明性与安全性的权衡考虑 如上图所示,在Component组件中定义了操作组合节点的方法addChild,removeChild等,这些方法被Leaf继承,因此Leaf也能够调用,但是叶子节点是不能进行增加子节点和删除子节点的。这样就存在安全性的问题。 基于安全性考虑的组合模式的解决方案 组件节点Component View Code 组合节点Composite和叶子节点Leaf没有改变 客户端发生改变,需要区分组合节点和叶子节点,这个跟第一个代码实例中类似。 View Code 上述实例的结构如下图所示: 透明性组合模式与安全性组合模式的选择: 对于组合模式,在安全性和透明性上,会更加看重透明性,毕竟组合模式的功能就是让客户端对叶子对象和组合对象的使用具有一致性。 4.父组件引用 在上面的示例中,都是在父组件对象中,保存有子组件的引用,也就是说都是从父到子的引用,本节讨论一下子组件对象到父组件对象的引用,在实际开发过程中也非常有用,比如可以实现如下功能: 删除某个商品的类别, 如果是子对象,那么直接删除,如果是组合对象,那么将组合对象下的所有子对象的层级提高一层。 调整商品类别。 要实现上述功能, 一个较为简单的方案就是在保持从父组件到子组件引用的基础上,再增加保持从子组件到父组件的引用,这样在删除一个组件对象或者是调整一个组件对象的时候,可以通过调整父组件的引用来实现,可以大大简化实现。 实例说明如下: 组件对象Component View Code 组合对象Composite View Code 叶子节点没有变化,客户端有所改变 View Code 程序运行结果: —————————————————————————— -服装 -男装 -衬衣 -夹克 -女装 -裙子 -套装 --------------------------------- -服装 -女装 -裙子 -套装 -衬衣 -夹克 —————————————————————— 程序架构结构图如下图所示: 5组合模式的优缺点及适用环境 优点: 定义了包含基本对象和组合对象的层次结构 统一了组合对象和叶子对象 简化了客户端调用 更容易扩展 缺点: 很难闲置组合中的组件类型 适用环境 如果你想表示对象的部分-整体层次结构,可以选用组合模式,把整体和部分的操作统一起来,是的层次结构实现更简单,从外部来使用这个层次结构也更加容易。 如果你希望统一得使用组合结构中的所有对象,可以选用组合模式,这正是组合模式提供的主要功能。 本文转自xwdreamer博客园博客,原文链接:http://www.cnblogs.com/xwdreamer/archive/2012/03/29/2424034.html,如需转载请自行联系原作者

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

用户登录
用户注册