zoukankan      html  css  js  c++  java
  • 第1次实践作业

    课程调查

    进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。

    当初选这门课的时候,没有授课计划之类的东西,我就以为它是系统结构的实践课,在第一次上课的时候才知道这门课和微服务有关系,并不是系统结构的实践课。希望能好好学。



    了解微服务

    第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。

    微服务是什么

    微服务架构模式(Microservices Architecture Pattern)的目的是将大型的、复杂的、长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易得局部改良。 Micro这个词意味着每个服务都应该足够小,但是,这里的小不能用代码量来比较,而应该是从业务逻辑上比较——符合SRP原则的才叫微服务。


    微服务有什么特点

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


    微服务相较于传统的软件架构,它有什么优缺点,它是怎样部署的

    (1)优点

    1.每个服务足够内聚,足够小,代码容易理解、开发效率提高;
    2.服务之间可以独立部署,微服务架构让持续部署成为可能;
    3.每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;
    4.容易扩大开发团队,可以针对每个服务(service)组件开发团队;
    5.提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;
    6.系统不会被长期限制在某个技术栈上。


    (2)缺点

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


    (3)部署方法

    1.每台主机上部署多个服务实例
    2.每个主机一个服务实例
    3.无服务的部署



    学习docker技术

    docker作为微服务的一种十分典型的代表技术,我们要做的是:学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的,心中有概念即可;搭建你自己的docker环境,系统环境不限(主流的有Ubuntu/CentOS/Debian/Windows/MacOS等),完成docker的基本入门,包括但不限于:容器的创建、删除、更新和查询,创建并维护自己的镜像仓库,实现拉取和上传镜像等。
    docker仓库链接:docker hub
    参考资料:Docker DocumentationDocker教程 | 菜鸟教程


    docker的相关概念

    镜像

    Docker镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。


    容器

    镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。


    了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s

    Docker

    Docker是一个开源的应用容器引擎,基于Go语言,并遵从Apache2.0 协议开源,可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。


    Docker Compose

    是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。


    Dockerfile

    Dockerfile是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。


    Docker Machine

    是 Docker 官方提供的一个工具,它可以帮助我们在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。我们还可以通过 docker-machine 命令来管理这些虚拟机和 Docker。


    Swarm

    Docker Swarm 是 Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。


    k8s

    是一个跨主机集群的开源的容器调度平台,它可以自动化应用容器的部署、扩展和操作 , 提供以容器为中心的基础架构。


    搭建你自己的docker环境

    卸载旧版本
    Docker 的旧版本被称为 dockerdocker.iodocker-engine 。如果已安装,请卸载它们:
    $ sudo apt-get remove docker docker-engine docker.io containerd runc


    更新 apt 包索引。
    $ sudo apt-get update


    安装 apt 依赖包,用于通过HTTPS来获取仓库

    $ sudo apt-get install 
        apt-transport-https 
        ca-certificates 
        curl 
        gnupg-agent 
        software-properties-common
    


    添加 Docker 的官方 GPG 密钥
    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -


    使用以下指令设置稳定版仓库

    $ sudo add-apt-repository 
       "deb [arch=amd64] https://download.docker.com/linux/ubuntu 
       $(lsb_release -cs) 
       stable"
    


    更新apt程序包索引
    sudo apt-get update


    安装最新版本的 Docker Engine-Community 和 containerd
    $ sudo apt-get install docker-ce docker-ce-cli containerd.io


    通过运行 hello-world 映像来验证是否正确安装了Docker Engine-Community
    $ sudo docker run hello-world


    配置阿里云镜像加速器

    sudo mkdir -p /etc/docker
    sudo tee /etc/docker/daemon.json <<-'EOF'
    {
      "registry-mirrors": ["https://v54081p6.mirror.aliyuncs.com"]
    }
    EOF
    sudo systemctl daemon-reload
    sudo systemctl restart docker
    


    容器的创建、删除、更新和查询

    获取镜像
    如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
    $ sudo docker pull ubuntu


    启动容器
    以下命令使用 ubuntu 镜像启动一个容器,参数为以命令行模式进入该容器:
    参数说明:
    -i: 交互式操作
    -t: 终端
    ubuntu: ubuntu 镜像
    /bin/bash:放在镜像名后的是命令,这里我们希望有个交互式Shell,因此用的是/bin/bash
    要退出终端,直接输入exit
    $ sudo docker run -it ubuntu /bin/bash


    查询所有的容器
    $ sudo docker ps -a


    使用 docker start 启动一个已停止的容器:
    $ sudo docker start 55abd3579692
    停止容器
    $ sudo docker stop 55abd3579692


    更新容器
    $ sudo docker container update --help


    删除容器
    $ sudo docker rm -f 55abd3579692


    创建并维护自己的镜像仓库

    登录和退出docker hub
    登录需要输入用户名和密码,登录成功后就可以从docker hub上拉取自己账号下的全部镜像。```

    $ sudo docker login
    $ sudo docker logout
    


    创建仓库


    拉取和上传镜像



  • 相关阅读:
    RecyclerView用法
    POJ 3233 Matrix Power Series 【经典矩阵快速幂+二分】
    Educational Codeforces Round 53 (Rated for Div. 2) C. Vasya and Robot 【二分 + 尺取】
    ACM-ICPC 2017 Asia Xi'an J LOL 【暴力 && 排列组合】
    2016 ACM/ICPC亚洲区大连站 F
    2016 ACM/ICPC亚洲区大连站-重现赛 解题报告
    ACM-ICPC 2017 Asia HongKong 解题报告
    Codeforces Round #515 (Div. 3) B. Heaters【 贪心 区间合并细节 】
    POJ 1984 Navigation Nightmare 【经典带权并查集】
    树的直径的求法即相关证明【树形DP || DFS】
  • 原文地址:https://www.cnblogs.com/linguoqin/p/12679584.html
Copyright © 2011-2022 走看看