第1次实践作业
1.课程调查
- 作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的?
-
- 看到这门课的名字时,我以为会是一门偏向于硬件的课,经第一节课老师介绍之后,才知道这是一门软件课程,利用工具自己搭建环境来跑程序,希望通过这门课能对计算机系统综合应用更加熟练。
2.了解微服务
-
微服务是什么
-
- 微服务是将程序划分为各个独立部分使其可以运行在自己的进程里的架构,一系列独立运行的微服务共同构建起了整个系统;每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如订单管理,用户管理等;微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方式进行调用
-
微服务的特点
-
- 按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
-
- 每个微服务都有自己独立的基本组件,例如数据库、缓存等,且运行在独立的进程中。
-
- 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
-
- 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
-
- 单个微服务能够集群化部署,并且有负载均衡的能力
-
- 整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
-
- 整个微服务系统有链路追踪的能力。
-
- 有一套完整的实时日志系统。
-
相较于传统的软件架构的优缺点
-
- 优点
-
- 每个服务足够内聚,足够小,代码容易理解、开发效率提高;服务之间可以独立部署,微服务架构让持续部署成为可能;每个服务可以各自进行负载均衡扩展和数据库扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;容易扩大开发团队,可以针对每个服务(service)组件开发团队;提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;系统不会被长期限制在某个技术栈上。
-
- 缺点
-
- 开发人员要处理分布式系统的复杂性;开发人员要设计服务之间的通信机制,对于需要多个后端服务的user case,要在没有分布式事务的情况下实现代码非常困难;涉及多个服务直接的自动化测试也具备相当的挑战性;服务管理的复杂性,在生产环境中要管理多个不同的服务的实例,这意味着开发团队需要全局统筹(PS:现在docker的出现适合解决这个问题);应用微服务架构的时机如何把握?对于业务还没有理清楚、业务数据和处理能力还没有开始爆发式增长之前的创业公司,不需要考虑微服务架构模式,这时候最重要的是快速开发、快速部署、快速试错。
-
微服务是怎样部署的
-
- 单主机多服务实例模式
-
- 使用这种模式,需要提供若干台物理或者虚拟机,每台机器上运行多个服务实例。很多情况下,这是传统的应用部署方法。每个服务实例运行一个或者多个主机的well-known端口,主机可以看做宠物。主要优点在于资源利用有效性,如果进程组运行多个服务实例效率会更高。主要缺点是服务实例间很少或者没有隔离,因此有可能造成某个糟糕的服务实例占用了主机的所有内存或者CPU。
-
- 单主机单服务实例模式
-
- 当使用这种模式,每个主机上服务实例都是各自独立的。有两种不同实现模式:单虚拟机单实例和单容器单实例。
-
- (1)单虚拟机单实例:一般将服务打包成虚拟机映像(image),例如一个Amazon EC2 AMI。每个服务实例是一个使用此映像启动的VM(例如,EC2实例)。 单虚拟机服务实例模式有许多优势,主要的VM优势在于每个服务实例都是完全独立运行的,都有各自独立的CPU和内存而不会被其它服务占用。其中一个缺点是资源利用效率不高,每个服务实例战友整个虚机的资源,包括操作系统;另外一个缺点在于部署服务新版本比较慢。虚机镜像因为大小原因创建起来比较慢,同样原因,虚机初始化也比较慢,操作系统启动也需要时间。
-
- (2)单容器单实例:当使用这种模式时,每个服务实例都运行在各自容器中。容器是运行在操作系统层面的虚拟化机制。一个容器包含若干运行在沙箱中的进程。从进程角度来看,他们有各自的命名空间和根文件系统;可以限制容器的内存和CPU资源。某些容器还具有I/O限制,这类容器技术包括Docker和Solaris Zones。单容器的优点跟虚机很相似,服务实例之间完全独立,可以很容易监控每个容器消耗的资源,容器是一个轻量级技术,容器映像创建起来很快,这一点优于虚拟机。使用容器也有一些缺点。尽管容器架构发展迅速,但是还是不如虚机架构成熟。而且由于容器之间共享host OS内核因此并不像虚机那么安全。
-
- Serverless 部署
-
- AWS Lambda是serverless部署技术的例子,支持Java,Node.js和Python服务。AWS Lambda是一种很方便部署微服务的方式。基于请求计费方式意味着用户只需要承担处理自己业务那部分的负载。另外,因为不需要了解基础架构,用户只需要开发自己的应用。理论上AWS Lambda会为每个请求生成一个独立的实例,必须用某种支持的语言完成,服务必须启动很快,否则,会因为超时被停止。
3.学习docker技术
了解docker的相关概念
- 容器:
-
- 容器,从认识上来说,就是类创建的实例,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
- 镜像:
-
- 镜像,从认识上简单的来说,就是面向对象中的类,相当于一个模板。从本质上来说,镜像相当于一个文件系统。Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
- 仓库:
-
- 仓库,从认识上来说,就好像软件包上传下载站,有各种软件的不同版本被上传供用户下载。镜像构建完成后,可以很容易的在当前宿主机上运行,但是,如果需要在其它服务器上使用这个镜像,我们就需要一个集中的存储、分发镜像的服务,Docker Registry 就是这样的服务。
- 数据卷:
-
- 永久保存数据的磁盘空间。Docker允许用户定义哪一部分是应用程序,哪一步分是数据,并且把他们分隔开。这就保证了在Docker中容器的生命周期是短暂的,而数据的存储是永恒的。数据卷存储在运行Docker的宿主机上,对每个容器来说是特有的。我们可以启动同一个镜像来产生多个容器,并且分别给他们分配一个数据卷。数据卷也可用于在不同的容器间共享数据。
- 联通:
-
- 容器启动后会分配有一个私有IP,其它容器可以通过这个IP地址与这个容器通讯。假如有个正在运行的数据库容器 (dbapp),那么我们可以在网络服务器容器(webserver)中通过指定端口连接dbapp与数据库容器通讯。
了解是什么,是做什么用的,心中有概念即可;
- Docker:
-
- Docker是一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
首先,Docker 容器的启动可以在秒级实现,这相比传统的虚拟机方式要快得多。其次,Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销尽量小。传统虚拟机方式运行 10 个不同的应用就要起10个虚拟机,而Docker只需要启动10个隔离的应用即可。
- Docker是一种新兴的虚拟化方式,Docker 跟传统的虚拟化方式相比具有众多的优势。
- docker compose:
-
- docker-compose是编排容器的,通过文本的方式,把要处理的容器按照顺序执行,如果是多容器也就是通过一条命令就搞定了。例如,你有一个php镜像,一个mysql镜像,一个nginx镜像。如果没有docker-compose,那么每次启动的时候,你需要修改各个容器的启动参数,环境变量,容器命名,指定不同容器的链接参数等等一系列的操作,相当繁琐。用了docker-composer之后,它可以轻松的将多个容器作为 service 来运行,并且提供了 scale (服务扩容) 的功能。
- Dockerfile:
-
- Dockerfile是一个包含用于组合映像的命令的文本文档。可以使用在命令行中调用任何命令。 Docker通过读取Dockerfile中的指令自动生成映像。docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile。即创建一个镜像,它包含安装运行所需的环境、程序代码等。这个创建过程就是使用 dockerfile 来完成的。
- docker machine:
-
- Docker Machine是一个工具来使得你能够安装Docker Engine在虚拟主机上,并且通过 docker-machine 命令进行管理。你能够使用Machine在你的本地Mac或者Windows,在数据中心,在云平台创建你的Docker主机。使用 docker-machine命令,你能够启动,检测,停止和重启被管理的主机,升级Docker客户端和进程,也可以配置Docker客户端与主机通信。
- Swarm:
-
- Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。
- k8s:
-
- k8s是一个docker集群的管理工具,是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈。
docker的基本入门
-
测试docker
-
容器的创建
-
删除
-
更新
-
查询
-
创建并维护自己的镜像仓库
-
实现拉取
-
上传镜像