Fork me on GitHub   

2020系统综合实践 第1次实践作业

(1)课程调查

学习这门课之前,我曾百度过相关信息,却没能得到一个准确的答案,于是我顾名思义,认为这是一门与操作系统和系统结构相关的课。但通过第一次实践认识到docker技术而且要求我们写博客以后,我才意识到这是一门软件方面的学科,是关于新技术的应用。

(2)了解微服务

微服务是什么?

微服务是一种新型软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。该架构的设计目标是为了肢解业务,使得服务能够独立运行。有了微服务,开发者可以更新应用程序的单个组件,而不会影响其他的部分。

微服务的特点

  • 按照业务来划分服务,单个服务代码量小,业务单一,易于维护。
  • 每个微服务都有自己独立的基本组件,例如数据库、缓存等,且运行在独立的进程中。
  • 微服务之间的通信是通过HTTP协议或者消息组件,且具有容错能力。
  • 微服务有一套服务治理的解决方案,服务之间不耦合,可以随时加入和剔除服务。
  • 单个微服务能够集群化部署,并且有负载均衡的能力
  • 整个微服务系统应该有一个完整的安全机制,包括用户验证、权限验证、资源保护等。
  • 整个微服务系统有链路追踪的能力。
  • 有一套完整的实时日志系统。

微服务的优点

  • 它们往往比传统的应用程序更有效地利用计算资源。这是因为它们通过扩展组件来处理功能瓶颈问题。这样一来,开发人员只需要为额外的组件部署计算资源,而不需要部署一个完整的应用程序的全新迭代。最终的结果是有更多的资源可以提供给其它任务。
  • 它们更快且更容易更新。当开发者对一个传统的单体应用程序进行变更时,他们必须做详细的QA测试,以确保变更不会影响其他特性或功能。但有了微服务,开发者可以更新应用程序的单个组件,而不会影响其他的部分。测试微服务应用程序仍然是必需的,但它更容易识别和隔离问题,从而加快开发速度并支持DevOps和持续应用程序开发。
  • 微服务架构有助于新兴的云服务,如事件驱动计算。类似AWS Lambda这样的功能让开发人员能够编写代码处于休眠状态,直到应用程序事件触发。事件处理时才需要使用计算资源,而企业只需要为每次事件,而不是固定数目的计算实例支付。
  • 每个服务足够内聚,足够小,代码容易理解、开发效率提高。
  • 服务之间可以独立部署,微服务架构让持续部署成为可能。
  • 每个服务可以各自进行负载均衡扩展和数据库扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上。
  • 容易扩大开发团队,可以针对每个服务(service)组件开发团队;提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪。
  • 系统不会被长期限制在某个技术栈上。

微服务的缺点

  • 开发人员要处理分布式系统的复杂性。
  • 开发人员要设计服务之间的通信机制,对于需要多个后端服务的user case,要在没有分布式事务的情况下实现代码非常困难。
  • 涉及多个服务直接的自动化测试也具备相当的挑战性。
  • 服务管理的复杂性,在生产环境中要管理多个不同的服务的实例,这意味着开发团队需要全局统筹(PS:现在docker的出现适合解决这个问题)。

微服务的部署

  • 单主机多服务实例模式
  • 单主机单服务实例模式
  • 单容器单服务实例模式
  • 独立部署

(3)学习docker技术

相关概念

  • 什么是Docker?
    Docker 使用 Google 公司推出的Go语言进行开发实现,基于 Linux 内核的cgroup,namespace,以及AUFS类的Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术。由于隔离的进程独立于宿主和其它的隔离的进程,因此也称其为容器。

  • Docker与VM的差别:

  • Docker镜像:
    Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。

  • Docker容器:
    容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root文件系统、自己的网络配置、自己的进程空间,甚至自己的用户 ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。也因为这种隔离的特性,很多人初学 Docker 时常常会混淆容器和虚拟机。

  • 仓库:
    通常,一个仓库会包含同一个软件不同版本的镜像,而标签就常用于对应该软件的各个版本。我们可以通过<仓库名>:<标签>的格式来指定具体是这个软件哪个版本的镜像。如果不给出标签,将以latest作为默认标签。

Docker安装后,检测安装是否成功:

容器:

  • 创建/打开容器
sudo docker run -it ubuntu /bin/bash

  • 退出容器
exit

  • 查看所有容器
sudo docker ps -a

  • 删除容器(最后的字符为要删除的容器的ID)
sudo docker rm -f bb79a624d332

  • 启动停止重启容器
sudo docker start 750105f3cbf2
sudo docker stop 750105f3cbf2
sudo docker restart 750105f3cbf2

  • 查询容器
sudo docker inspect 750105f3cbf2

(下面还有很多)

镜像:

  • 登录docker hub(需要先注册一个Docker账户)
sudo docker login --username=tiny031702115 registry.cn-hangzhou.aliyuncs.com

  • 列出所有镜像
sudo docker images

  • 删除镜像
sudo docker rmi 031702115/hello:1.0

  • 上传镜像到docker(先要创建一个仓库)
sudo docker tag ubuntu:latest registry.cn-hangzhou.aliyuncs.com/031702115/hello
sudo docker push registry.cn-hangzhou.aliyuncs.com/031702115/hello

在仓库中找到镜像:

(4)总结

  • 遇到的问题

①虚拟机无法连网
②遇到了Could not get lock错误
③镜像上传过慢

  • 解决方法

①重装虚拟机
②用rm -rf指令删除锁
③使用阿里云镜像服务

posted @ 2020-04-17 16:48  Tiny_God  阅读(231)  评论(0编辑  收藏  举报