1、课程调查

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

我觉得这门课应该是通过搭建环境,熟悉系统,然后面向百度去实践 。

2、了解微服务

微服务是什么

微服务架构就是将单一程序开发成一个微服务,每个微服务运行在自己的进程中,并使用轻量级的机制通信,通常是HTTP RESTFUL
API。这些服务围绕业务能力来划分,并通过自动化部署机制来独立部署。这些服务可以使用不同的编程语言,不同数据库,以保证最低限度的集中式管理。微服务架构的系统是一个分布式的系统,按业务进行划分为独立的服务单元,解决单体系统的不足,同时也满足越来越复杂的业务需求。
总结起来微服务就是将一个单体架构的应用按业务划分为一个个的独立运行的程序即服务,它们之间通过HTTP协议进行通信(也可以采用消息队列来通信),可以采用不同的编程语言,使用不同的存储技术,自动化部署减少人为控制,降低出错概率。服务数量越多,管理起来越复杂,因此采用集中化管理。

有什么特点

相比较于单体应用架构和SOA架构,微服务架构的主要特点是组件化、松耦合、自治、去中心化,体现在以下几个方面:用 4个字描述就是小 独 轻 松
:体现每个微服务粒度要小,而每个服务是针对一个单一职责的业务能力的封装,专注做好一件事情。
:独立部署运行和扩展。每个服务能够独立被部署并运行在一个进程内。这种运行和部署方式能够赋予系统灵活的代码组织方式和发布节奏,使得快速交付和    应对变化成为可能。
:系统相比较复杂单体应用更为简洁轻量化,每个微服务因为独立部署,可以使用不同跨语言编写,这样使得微服务架构更为灵活.
:低耦合性,符合面向对象设计高内聚低耦合特性。不同模块间依赖低,相互关联小(因为每个微服务设计的初衷是每个服务专注一个模块开发)

相较于传统的软件架构,它有什么优缺点

优点:
    每个服务足够内聚,足够小,代码容易理解这样能够聚焦一个指定的业务功能或业务需求。
    开发简单,开发效率提高,一个服务可能就是专一的只干一件事情。
    微服务是松耦合的,是有功能意义的服务,无论是在开发阶段或部署阶段都是独立的。
    微服务能够被小团队单独开发。
    微服务能使用不同的语言开发。
    易于和第三方集成,微服务允许容易且灵活的方式集成自动部署,通过持续集成工具,如Jenkins、Hudson、bamboo。
    微服务易于被一个开发人员理解、修改和维护,这样小团队能够更关注自己的工作成果。无需通过合作才能体现价值。
    微服务允许你利用融合最新技术。
    微服务只是业务逻辑的代码,不会和HTML/CSS或其他界面组件混合。
    每个微服务都有自己的存储能力,可以有自己的数据库,也可以统一数据库。
缺点:
    开发人员要处理分布式系统的复杂性
    多服务运维难度,随着服务的增加,运维的压力也在增大
    系统部署依赖
    服务间通讯成本
    数据一致性
    系统集成测试
    性能监控

它是怎样部署的

基于主机(物理机或虚机)的多服务实例
基于主机(物理机或虚机)的服务实例
基于容器的服务实例
无服务器部署

3、学习docker技术

3.1相关概念

(1)docker

Docker是一个基于虚拟化服务的新型技术,是一个将运行时环境打包成容器进行传输的技术,实现“一次构建,处处运行”的理念。
Docker 的容器通过 Linux 的命名空间完成了与宿主机进程的网络隔离。Docker 为我们提供了四种不同的网络模式,Host、Container、None 和 Bridge 模式。Docker 默认的网络设置模式:网桥模式。

(2)容器

容器是镜像的一个实例,是一个小型的运行时环境,比如一般是小型的linux环境(基于linux内核的小型环境),用java代码比喻就是:容器是一个类的实例对象,比如Person小明= new Person0; Person就是一个模板, 也是要给镜像。

(3)镜像

镜像是保存在镜像仓库中的,pul镜像,相当于将镜像实例化成容器后部署在自己的环境中,用java来说就是一个类对象。

(4)仓库

仓库是用来保存多个注册仓库的,每个注册仓库中保存了不同的镜像image文件。

(5)docker compose

Docker Compose是Docker编排服务的最后一块Compose可以让用户在集群中部署分布式应用。简单的说,Docker Compose属于一个“应用层”的服务,用户可以定义哪个容器组运行哪个应用,它支持动态改变应用,并在需要时扩展。

(6)Dockerfile

Dockerfile是docker中镜像文件的的描述文件。

(7)docker machine

Docker Machine 是 Docker 官方提供的一个工具,它可以帮助在远程的机器上安装 Docker,或者在虚拟机 host 上直接安装虚拟机并在虚拟机中安装 Docker。

(8)Swarm

Swarm是Docker官方提供的一款集群管理工具,其主要作用是把若干台Docker主机抽象为一个整体,并且通过一个入口统一管理这些Docker主机上的各种Docker资源。Swarm和Kubernetes比较类似,但是更加轻,具有的功能也较kubernetes更少一些。

(9)k8s

k8s是一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈。

3.2环境配置

更新 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"

3.2.2安装Docker Engine-Community

更新 apt 包索引。

sudo apt-get update

安装最新版本的 Docker Engine-Community 和 containerd

sudo apt-get install docker-ce docker-ce-cli containerd.io

测试 Docker 是否安装成功

sudo docker run hello-world

3.3基本操作

容器的使用

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

sudo docher pull ubuntu

启动容器:输出Hello world

sudo docker run ubuntu:16.04 /bin/echo "Hello world"

容器查询:查看所有容器

sudo docker ps -a

容器信息查询:查看具体容器信息

sudo docker inspect 容器ID

容器更新信息:

docker container update --help

容器的停止
sudo docker stop <容器 ID>

容器的重启

sudo docker start <容器 ID>

删除容器

sudo dockeer rm -f <容器 ID>

3.4关于镜像的操作

列出本地镜像:

sudo docker images

各个选项说明:
    REPOSITORY:表示镜像的仓库源
    TAG:镜像的标签
    IMAGE ID:镜像ID
    CREATED:镜像创建时间
    SIZE:镜像大小

查找镜像

sudo docker search httpd

下载镜像

sudo docker pull httpd

3.5docker仓库的管理

登录仓库

sudo docker login

上传镜像

sudo docker tag ubuntu 文件位置 sudo docker push 文件位置