容器技术

java容器类的继承结构

断了今生、忘了曾经 提交于 2019-12-03 01:23:24
Java容器类库定义了两个不同概念的容器,Collection和Map Collection 一个独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入的顺序保存元素。Set不能有重复元素。Queue按照排队规则来确定对象产生的顺序。 (文中Jdk源码版本无特殊说明均为jdk1.8.0_101) public interface Collection<E> extends Iterable<E> { 可以看到,java定义了Collection接口和内部集合的基本操作方法,Collection默认可以进行对集合末端添加元素,删除指定元素等操作。List、Set、Queue接口都继承自Collection并定义了各自不同的方法。如果你想学习Java可以来这个群,首先是二二零,中间是一四二,最后是九零六,里面有大量的学习资料可以下载。 Map 一组成对的”键值对”对象,允许我们使用键来查找值。 public interface Map<K,V> { Map内部接口Entry<K,V>对应着Map的键值对。 具体介绍 迭代器 先介绍一下迭代器。迭代器本身也是一种设计模式,设计的初衷在于:容器的实现由很多种,而我们想对容器进行遍历操作的话,首先不应该关心容器实现的细节,其次遍历操作应该是轻量级的。迭代器统一了对容器的访问方式,同时创建它的代价很小。值得注意的是

七牛云宫静:基于容器和大数据平台的持续交付平台

匿名 (未验证) 提交于 2019-12-03 00:41:02
7 月 6 日上午,在 ArchSummit 2018 深圳站 | 全球架构师峰会上,七牛云工程效率部技术专家宫静分享了《基于容器和大数据平台的持续交付平台》为题的演讲。本文是对演讲内容的整理。? ? 本次分享的主要内容是基于 容器 和 大数据平台 去构建的持续交付系统,是七牛云工程效率部在持续交付、容器化方面去做的技术实践。将从以下两个方向展开:一个是容器化方向,一个是持续交付的平台。主要会结合在七牛云的实践来介绍这个持续集成、持续部署在容器化方向的探索和思考,以及未来方向的考虑。? 七牛云业务场景: 上图的数字其实是七牛云的业务场景的缩影,七牛云现在有六大产品线,围绕这六大核心业务,我们有 500 多个组件和服务,这个数字可能还在持续地变化,不断地上升,不断地发展。我们外部的业务需求是这样的,因为市场在快速变化,它对我们业务需求要求是有一个快速迭代的能力,快速发布的能力。工程效率部的目标是在保证质量的前提下来做到一个快速的验证和有效的发布的能力。而产品研发人员和工程效率这边是这样的一个人员比,在这样的一个人员比下,我们会遇到哪些问题呢? 以下是我们研发团队面临的一个真实的问题的总结。当一个团队中的开发人员面对的是怎么样一个开发场景,开发人员要面对的是多样化的编译运行环境,要保证从代码开发到编译到运行到调试自测这样一个完整的路径覆盖,当他完成这个路径过长的时候

浅谈容器、微服务和互联网架构

匿名 (未验证) 提交于 2019-12-03 00:39:02
随着云服务的兴起,企业应用正在从分层式架构逐步迁移到互联网架构。传统的企业应用架构通常是单一架构(Monolithic),即典型的MVC三层架构。以一个主流的J2EE企业应用而言,其按照模型(数据层)――控制器(服务层)――视图(访问层)进行构建,然后打包为一个war包,部署运行于J2EE应用服务器上,例如Tomcat、JBoss、WebLogic等。 然而,经过多年应用,Monolithic架构也逐渐老化,越来越不适应技术的发展。首先,随着加入的应用功能增多,产生了代码堆积现象,系统越来越庞大和复杂。尤其是引入敏捷开发后,产生了较多问题。例如应用持续集成方法时,自动加载、编译、加载、测试整个应用代码的时间过长,不能快速形成正反馈。其次,组件与组件之间的耦合性太强,所有应用都运行在服务器上的相同进程中。应用规模增大后,只有同时增加应用的副本,将多个副本部署到多个服务器上,无法实现弹性伸缩。最后,开发团队之间,工作交集复杂,协调耗散大。 从长期实践看,Monolithic架构天然的不具备健壮性,因为一旦某个组件出现问题,整个服务基本上就挂了。自身不具备分布式服务能力,通常需要依赖于负载均衡器、数据库HA等来实现服务的分布化和负载分担。相对而言,互联网架构优势在于分布式、去中心化,支持弹性伸缩。其核心是轻应用、微服务。微服务架构也是从Monolithic架构演进来的

Docker 入门 (一)

匿名 (未验证) 提交于 2019-12-03 00:39:02
Docker是一个轻量级的容器技术,类似于虚拟机技术(vmvare、virtualbox),但vmvare虚拟机技术是一个重量级的虚拟机。原因后面会解释。 Docker主要解决的是隔离性问题。Docker因此的优点是实现了虚拟机技术的资源隔离,它的性能远高于虚拟机技术。 Docker的运行原理是基于Linux的,所以Docker只能在Linux下运行。 在Docker引擎创建的虚拟空间(容器) 中可以部署各种程序项目,容器和容器之间完全隔离,不需要的容器可以直接删除。它被称为轻量级虚拟机,原因就是这些容器中运行的linux不是一个独立的完整的linux,这些容器共用了一个linux内核,由Docker软件提供。而vmware每一个虚拟空间都是运行一个独立的Linux系统,对主机硬件消耗特别大。 容器: 容器是从镜像中创建出来的虚拟实例。 容器用来运行程序,是读写层。因此项目部署在容器中。 创建容器的时候可以指定cpu数、网络环境等参数。 镜像: 镜像是用来创建容器的,镜像内部安装了你想要的程序。 镜像只能用来安装程序,是只读的。 两种创建镜像的方式: 通过dockerfile文件,在编写dockerfile文件是定义好想要安装的程序,然后dockerfile运行,创建出镜像。 在运行的容器中安装想要的程序,然后将这个容器转换成镜像。 先更新 yum软件管理器,然后在安装Docker

K8S了解一下

匿名 (未验证) 提交于 2019-12-03 00:32:02
序言 闭上眼睛,你就是全世界,全世界就是你,冥想。。。了解一下风的流动,感受一下风的温度。。。 心不静。。。所以需要抄法华经 ,当心不静的时候,抄抄各种技术的书籍也是一种不错的选择,会强行的将浮躁的心进行压制。 看别人的操作 每次踏入一个新的领域的时候,感觉就像是一个傻逼。。。当转身回到自己熟悉的领域的时候,又感觉像一个王者 。。。这就是你一直彩笔的原因??? 写dockerfile的时候 ,用户权限的问题,在运行java容器的时候,如果指定了用户运行容器,那么在进入容器的时候,是不能切换用户的,一些基本的命令sudo,su都没有,在进入的容器的时候,可以指定用户,而在书写dockerfile的时候,要注意合适的用户,并且在将war包打成image的时候,需要使用合适的权限,例如要进行chown的相应的用户,chmod a+xr赋予响应的权限;在进行配置文件的修改的时候,需要将配置文件指定对应的目录,在java程序中,日志文件的路径需要在dockerfile中声明进行创建,否则java程序不会创建日志目录,导致服务无法启动。 k8s一整套的解决方案 就是使用git来控制应用程序的版本,然后使用jekins来进行打包应用,使用k8s的模板直接运行服务或者将应用程序打入到镜像中,推送到镜像仓库,然后直接进行发布运行pod,service等。 python+ansible 来进行配置下发

Spring和SpringMVC父子容器关系

匿名 (未验证) 提交于 2019-12-03 00:32:02
  最近由于项目的包扫描出现了问题,在解决问题的过程中,偶然发现了Spring和SpringMVC是有父子容器关系的,而且正是因为这个才往往会出现包扫描的问题,我们在此来分析和理解Spring和SpringMVC的父子容器关系并且给出Spring和SpringMVC配置文件中包扫描的官方推荐方式。   在Spring整体框架的核心概念中,容器是核心思想,就是用来管理Bean的整个生命周期的,而在一个项目中,容器不一定只有一个,Spring中可以包括多个容器,而且容器有上下层关系,目前最常见的一种场景就是在一个项目中引入Spring和SpringMVC这两个框架,那么它其实就是两个容器,Spring是父容器,SpringMVC是其子容器,并且在Spring父容器中注册的Bean对于SpringMVC容器中是可见的,而在SpringMVC容器中注册的Bean对于Spring父容器中是不可见的,也就是子容器可以看见父容器中的注册的Bean,反之就不行。   我们可以使用统一的如下注解配置来对Bean进行批量注册,而不需要再给每个Bean单独使用xml的方式进行配置。 < context:component-scan base-package ="com.hafiz.www" />   从Spring提供的参考手册中我们得知该配置的功能是扫描配置的base-package包下的所有使用了

同步容器类和并发容器类

匿名 (未验证) 提交于 2019-12-03 00:27:02
1、同步容器类 包括Vector(实现了一个动态数组,和ArrayList相似,但两者是不同的)和Hashtable。 同步容器类的问题: 例如:Vector的getLast方法,和deleteLast方法,都会执行“先检查,后执行”操作,每个方法首先都获得数组的大小,然后通过结果来获取或删除最后一个元素。如果线程A调用getLast,线程B调用deleteLast,在线程A调用size和getLast之间,线程B删除了一个元素,则getLast会出现数组越界异常。同样,这种风险在对Vector中的元素进行迭代时仍然会出现。 解决方法:在客户端,将每个方法都进行加锁,使得每次只能有一个线程访问容器。 缺点:这样的话,同步容器类将所有对容器状态的访问都串行化,以实现它们的线程安全性,代价是严重降低并发性。 (1)Hashtable 链表+数组实现,初始容量11,扩容因子0.75。每一次扩容,为上一次容量的2倍+1. 源码: // 将“key-value”添加到Hashtable中 (2)Vector 数组实现,初始容量10。 Vector 当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组长度为原数组长度的2倍。与ArrayList不同的就是两方面,分别是是否线程安全和扩容机制。 2、并发容器类(针对多个线程并发访问设计的)

Spring容器是什么

匿名 (未验证) 提交于 2019-12-03 00:27:02
引言 工作4年多,做了3年的java,每个项目都用Spring,但对Spring一直都是知其然而不知其所以然。鄙人深知Spring是一个高深的框架,正好近期脱离加班的苦逼状态,遂决定从Spring的官方文档入手,结合Spring代码和实际项目,全面的学习Spring,并将学习内容记录在博客上,以便以后查阅并可以和众猿讨论分享。PS:文章中会有部分是官方原句翻译,例子也会有官方例子。 概述 Spring容器是什么? Spring容器是Spring的核心,一切Spring bean都存储在Spring容器内,并由其通过IoC技术管理。Spring容器也就是一个bean工厂(BeanFactory)。应用中bean的实例化,获取,销毁等都是由这个bean工厂管理的。 Spring容器究竟是什么。。。 org.springframework.context.ApplicationContext接口用于完成容器的配置,初始化,管理bean。一个Spring容器就是某个实现了ApplicationContext接口的类的实例。也就是说,从代码层面,Spring容器其实就是一个ApplicationContext。 在普通的JAVA工程中

Kolla 让 OpenStack 部署更贴心

匿名 (未验证) 提交于 2019-12-03 00:22:01
长久以来 OpenStack 部署难、 升级难的问题经常为人所诟病,便捷高效的部署、管理和运维云基础设置的 DevOps 方案是所有 OpenStack 用户(客户、云服务提供商、开发者)的共性刚需。由此,Kolla 应需而生。它基于社区的最佳实践,提出了可靠、可扩展的生产级别 OpenStack Service Containers 部署方式。简而言之,Kolla 就是充分应用容器特性,实现容器化部署 OpenStack 服务的 DevOps 工具。 Kolla 显著的特点是 「开箱即用」 和 「简易升级」 ,前者由编排工具(Ansible/Kubernetes)提供自动化支撑,后者则完全是 Container 的功劳。Kolla 追求为每一个 OpenStack Service 构建相应的 Container,将升级/回滚的粒度(隔离依赖关系集)降维到 Service 级别,实现升级/回滚的原子性。假若升级失败,则直接启动 Old Version Container 完成回滚。版本升级只需三步: Pull New Docker Image Stop Old Docker Container Start New Docker Container 除此之外,Kolla 还提供了定制化部署拓扑的能力,允许用户花费更小的学习和试错成本,逐渐摸索规划出适合自己的部署蓝图。 众所周知

系统学习Docker践行DevOps理念

匿名 (未验证) 提交于 2019-12-03 00:22:01
网盘地址: https://pan.baidu.com/s/1bulSbduzSPrKfOk3iCVxSA 密码: kf7y 备用地址(腾讯微云): https://share.weiyun.com/5G9KXvP 密码:kngy9y Docker代表的容器技术是近两年的大热技术,和人工智能、区块链等热点不同,容器技术的门槛并不高,每一个开发、测试、运维人员都能在日常工作中掌握和使用,是当今IT从业人员的必备技能之一。 本课程会带大家系统学习什么是容器,如何创建容器、管理容器;学习容器技术的各个细节(网络/存储/服务编排/监控),学习如何通过容器进行CI/CD持续集成,持续部署。学习Docker,让你成为更加优秀的IT工程师。 文章来源: 系统学习Docker践行DevOps理念