容器技术

Dubbo 在 K8s 下的思考

本秂侑毒 提交于 2019-12-02 19:10:27
作者 | 曹胜利 Apache Dubbo PMC 导读 :Dubbo 作为高性能 Java RPC 框架的刻板印象早已深入人心,在 Cloud Native 的架构选型上,Spring Cloud 或许才是业界的优先选择。实际上,Dubbo 已经悄然地衍进为 Cloud Native 基础设施,不仅承袭过去 RPC 时代的荣耀,而且也完善了现有基础设施的缺失。自从容器和 K8s 登上舞台之后,给原有的 RPC 领域带来了很大的挑战,本文主要讲述 RPC 领域遇到的问题,以及 RPC 怎么去拥抱 K8s 的一些思考。 K8s 介绍 Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效, Kubernetes 提供了应用部署、规划、更新、维护的一种机制。Kubernetes 简称 K8s。 在 Kubernetes 中,最小的管理元素不是一个个独立的容器,而是 Pod 。Pod 的生命周期需要注意以下几点: 容器和应用可能随时被杀死; Pod Ip 和主机名可能变化 (除非使用 StatefulSet 进行定制); 写到本地的磁盘的文件可能消失,如果想不失效,需要用存储卷。 应用 & 容器 & Pod 的关系 应用部署在容器中,一般情况下一个应用只部署在一个容器中; 一个 Pod

Spring的IOC原理[通俗解释一下]

守給你的承諾、 提交于 2019-12-02 18:05:01
本文系转载,个人认为,这篇文章对IOC原理讲的比较清楚,通俗易懂,值得一看。 原文地址: http://blog.csdn.net/m13666368773/article/details/7802126 1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。 齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。 图2:对象之间复杂的依赖关系 耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间

Spring的IOC原理[通俗解释一下]

会有一股神秘感。 提交于 2019-12-02 18:04:35
1. IoC理论的背景 我们都知道,在采用面向对象方法设计的软件系统中,它的底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终实现系统的业务逻辑。 图1:软件系统中耦合的对象 如果我们打开机械式手表的后盖,就会看到与上面类似的情形,各个齿轮分别带动时针、分针和秒针顺时针旋转,从而在表盘上产生正确的时间。图1中描述的就是这样的一个齿轮组,它拥有多个独立的齿轮,这些齿轮相互啮合在一起,协同工作,共同完成某项任务。我们可以看到,在这样的齿轮组中,如果有一个齿轮出了问题,就可能会影响到整个齿轮组的正常运转。 齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。现在,伴随着工业级应用的规模越来越庞大,对象之间的依赖关系也越来越复杂,经常会出现对象之间的多重依赖性关系,因此,架构师和设计师对于系统的分析和设计,将面临更大的挑战。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。 图2:对象之间复杂的依赖关系 耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。 为了解决对象之间的耦合度过高的问题 ,软件专家Michael Mattson提出了IOC理论,用来实现对象之间的“解耦”

Dubbo 在 K8s 下的思考

☆樱花仙子☆ 提交于 2019-12-02 17:03:43
序言 Dubbo 在 2011 开源之后,一直是国内最受欢迎的 RPC 框架,之后 Spring Boot 和 Spring Cloud 的面世,助推了微服务的火热程度。计算机的世界变化很快,自从容器和 K8s 登上舞台之后,给原有的 RPC 领域带来了很大的挑战。这个文章主要讲述 RPC 领域遇到的问题,以及 RPC怎么去拥抱 K8s 怀抱的一些思考。 K8s介绍 Kubernetes 是一个开源的,用于管理云平台中多个主机上的容器化的应用, Kubernetes 的目标是让部署容器化的应用简单并且高效, Kubernetes 提供了应用部署,规划,更新,维护的一种机制。Kubernetes 简称 K8s。 在 Kubernetes 中,最小的管理元素不是一个个独立的容器,而是 Pod 。pod 的生命周期需要注意以下几点: 容器和应用可能随时被杀死 Pod Ip 和主机名可能变化 (除非使用 StatefulSet 进行定制) 写到本地的磁盘的文件可能消失,如果想不失效,需要用存储卷 应用,容器,Pod 的关系 应用部署在容器中,一般情况下一个应用只部署在一个容器中 一个 Pod 下可以包含一个或多个容器,一般情况下一个 Pod 只建议部署一个容器。下列场景除外: side car 一个容器的运行以来与本地另外一个容器。如一个容器下应用负责下载数据

再不努力提高效率,小姐姐都被人追走了:K8S一键部署了解一下?

▼魔方 西西 提交于 2019-12-02 16:52:51
随着互联网时代的不断发展,开发者可能会面临这样的困境:为了解决问题、提升开发效率而竭力研发出来的“创新”,似乎削弱了他们在公司的重要程度,甚至取代了他们原先的地位。比如,在云原生时代,部分企业更愿意选择 K8s 来解决运维、弹性的问题,而不是组建一支需要耗费大量雇佣资金、管理资金的研发团队。 对于 K8s,它的价值在于不仅能帮助公司降低运维成本,同时还可以带来弹性、敏捷、可移植能力,但是对于开发者而言,我们的价值不应该仅仅停留在能与 K8s 解决同样的问题,而是从困境跳脱出来,思考如何更灵活、更高效地运用 K8s 这些 “能为你所用” 的东西,来提升自己的综合技能。 涉及开发的技术人员,永远绕不开的就是将应用部署到相应服务器上,今天给大家讲解,对于容器服务 K8s,怎么实现真正“一键部署“,提高开发部署效率,在 K8s 的运用上做到快人一步。以下是本文提纲: 什么是容器服务 K8s 如何实现”一键部署“到容器服务 K8s 如何实现”一键部署“到 host,开发部署提速 8 倍 一、 什么是容器服务 K8s 容器服务 K8s 是基于原生 K8s 进行适配和增强,简化集群的搭建和扩容等工作,提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理,整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。其中的核心功能为: 集群管理

Java Web 学习(1) —— Servlet

北城以北 提交于 2019-12-02 16:46:58
Java Web 学习(1) —— Servlet 一、 什么是 Servlet Java Servlet 技术是Java体系中用于开发 Web 应用的底层技术。 Servlet 是运行在 Servlet 容器(如 Tomcat)中的Java程序,而 Servlet 容器或 Servlet 引擎相当于一个 Web 服务器,但是可以产生动态内容,而不仅是静态资源。一个 Servlet 是一个 Java 程序,一个 Servlet 应用包含了一个或多个 Servlet,一个 JSP 页面会被翻译并编译成一个 Servlet。 Servlet 应用运行在一个 Servlet 容器中,它无法独立运行。Servlet 容器将来自用户的请求传递给 Servlet 应用,并将 Servlet 应用的响应返回给用户。 二、 Servlet API Servlet API 有以下4个Java包: javax.servlet:包含定义 Servlet 和 Servlet 容器之间契约的类和接口。主要包含:Servlet 接口,ServletRequest 接口,ServletResponse 接口,ServletContext 接口,ServletConfig 接口,RequestDispatcher 接口,Filter 接口,GenericServlet 类等。 javax.servlet.http

揭秘谷歌每周20亿+容器背后的管理技术

拥有回忆 提交于 2019-12-02 16:39:19
这次我想跟大家分享一下谷歌使用容器集群技术的案例实践,由于我个人在集群管理团队从事了3年的研发,这里带来的是我个人的经验和观点。 首先大家应该都听说过容器是什么,而Docker则是基于容器技术的现阶段最流行的一种容器产品、工具和生态。对于不了解Docker或者容器的人,一个简单的比喻(但不是最贴切)就是容器就是一个更轻量级的“虚拟化”和“应用隔离”工具。具体有多轻量呢?一个服务器可能可以运行10个虚拟机,但是一个服务器上可以运行上百个容器,不同容器里运行用户的应用,并在一定程度上实现了相互之间的隔离。此外,容器可以在秒级启动,相比于启动一个完整的虚拟机也有巨大的优势。除了效能上的提升,容器还是一种应用的打包格式,可以将应用和它运行时的依赖封装在一起,实现一次封装、处处运行的功能。 谷歌从2000年初开始使用容器,但是它所使用的是自研的一种叫做lmctfy的容器格式,其实是Let Me Contain That For You几个单词首字母的缩写。谷歌最早使用容器的初衷之一是节省物理资源,通过用容器取代虚拟化层(hypervisor和每个虚拟机所占用的物理资源)来极大地节省计算成本。谷歌在2013年对lmctfy其进行了开源 https://github.com/google/lmctfy ,但由于流行程度不如Docker,后面就没有再继续推广。同时

Docker基础入门 (一)—— 简介

☆樱花仙子☆ 提交于 2019-12-02 16:35:22
Docker —— 简介 1. Doker是个什么玩意 说Docker是什么之前,先来看一看Docker为什么会出现。我们知道,在学习过程中我们需要频繁地安装配置一些软件,不管是在Windows下还是在Linux,这些东西的配置过程都是非常费时费力的,稍有不慎就得删了重来,换一台机器,还得重来一次,更讨厌的是经常出现一些环境的兼容性问题(比如一些软件只兼容win10)。那么有没有这样一种解决方式:==软件带环境安装,省去麻烦的安装配置过程,并且完全不用考虑环境兼容问题,因为自带环境嘛。也就是说,安装的时候,把原始环境一模一样地复制过来==(上面说了,有一些软件不兼容win10,那我就在win7上装好,将软件和系统揉成一坨,拿到win10上使用)。 粗暴的总结成一句话:Docker就是这么个玩意儿——应用程序+运行环境所构成的容器 。 2. Docker的践行理念 通过上文,我们大致知道了这是个什么东西,接下来我们看看Docker的设计理念。 Docker是基于Go语言实现的云开源项目。 Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。 Linux

关于容器技术

不羁的心 提交于 2019-12-02 16:12:53
容器技术主要包括Namespace和Cgroup这两个内核特性 Namespace又称为命名空间(也可翻译为名字空间),它主要做访问隔离,其原理是针对一类资源进行抽象,并将其封装在一起提供一个容器使用,对于这类资源,因为每个容器都有自己的抽象,而它们彼此之间是不可见的,所以就可以做到访问隔离。 Cgroup是contrl group简称,又称为控制组,它主是要做资源控制,其原理是将一组进程放在一个控制组里,通过给这个控制组分配指定的可用资源,达到控制这一组进程可用资源的目的。 容器组成 容器=cgroup+namespace+rootfs+容器引擎(用户太工具) Cgroup:资源控制 Namesapce:访问隔离 rootfs:文件系统隔离 容器引擎:生命令周期控制 Cgroup介绍 Cgroup中实现的子系统及其作用如下 devices:设备权限控制 cpuset:分配指定的CPU和内存节点 cpu:控制CPU占用率 cpuacct:统计CPU使用情况 memory:限制内存的使用上限 freezer:冻结(暂停)Cgroup中的进程 net_cls:配合tc(traffic controller)限制网络带宽 net_prio:设置进程的网络流量优先级 huge_tlb:限HugeTLB的使用 perf_event:允许Perf工具基于Cgroup分组做性能监测

docker简介

╄→гoц情女王★ 提交于 2019-12-02 16:00:58
一 什么是虚拟化    在计算机中,虚拟化(Virtualization)是一种资源管理技术,是计算机的各种实体资源,如服务器,网络,内存及存储等,予以抽象,转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部分是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储 在世纪的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老旧的硬件产能过低的重组崇勇,透明化底层物理硬件,从而最大化的利用物理硬件,对资源充分利用 虚拟化技术种类很多,例如:软件虚拟化,硬件虚拟化,内存虚拟化,网络虚拟化,桌面虚拟化,服务虚拟化,虚拟机等 二 什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。 容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。 Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),社区版免费,企业版收费。 三