第1次实践作业

一、课程调查

  又是久违的实践课,说实话我还是挺喜欢实践课的,虽然开课在周末挺让人头疼的。据说这门课是新开的课,所以我对这门课内容其实不太熟悉。但是还是希望能够学到一些新的东西,所以我对这门课还是挺向往的。因为是在博客所以也能够很好地在班级里互相学习,我觉得这样是能够更好地进步的一种学习方式。


二、了解微服务

1.微服务是什么:

  所谓的微服务是SOA架构下的最终产物,是一个新兴的软件架构,该架构的设计目标是为了肢解业务,即把一个大型的单个应用程序和服务拆分为数十个的支持微服务,使得服务能够独立运行。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。微服务设计原则:1、各司其职 2、服务高可用和可扩展性。

2.特点:

①每个微服务可独立运行在自己的进程里;
②一系列独立运行的微服务共同构建起了整个系统;
③每个服务为独立的业务开发,一个微服务一般完成某个特定的功能,比如:订单管理,用户管理等;
④微服务之间通过一些轻量级的通信机制进行通信,例如通过REST API或者RPC的方式进行调用。

3.相较于传统的软件架构的优缺点:

架构的演变过程:
单体架构——>垂直架构——>soa面向服务架构——>微服务架构

  • 单体架构:

特点:
①所有功能集中在一个项目中;
②所有功能都要达成war包部署到服务器;
③通过集群(session共享集群)来提高服务器的性能。
优点:
项目架构简单,前期开发的成本低,周期短,小型企业首先
缺点:
全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护

  • 垂直架构

特点:
①以单体架构为单位进行系统的划分,划分成一个个系统;
②项目与项目之间存在数据冗余,耦合度高;
③项目是以接口调用为主,存在数据同步问题。
优点:
①项目架构简单,前期开发的成本低,周期短,小型企业首先;
②垂直架构进行mvc分层设计,针对分层做相应的处理做到集群(10~1000);
③不同的项目采用不同的技术实现。
缺点:
①全部的功能都集中在一个项目中完成,对于大型项目来说,开发难度高,不容易开发及扩展和维护;
②集群扩展有瓶颈集群(10~1000)针对分层做了优化。

  • SOA服务架构

特点:
①基于soa服务思想进行功能的抽取(重复代码问题解决),以服务为中心来管理项目;
②各个系统之间要进行调用,所以出现ESB来管理项目(可以使用各种技术实现:webservice,rpc等);
③ESB是作为系统与系统之间桥梁,很难进行统一管理。
优点:
①重复代码进行了抽取,提高了开发效率,提高了系统的可维护性;
②可以针对某个系统进行扩展,做集群更容易;
③采用ESB来管理服务组件,有利于降低企业开发项目难度。
缺点:
①系统与服务的界限模糊的,不利于设计;
②ESB是作为系统与系统之间桥梁,没有统一标准,种类很多,不利于维护;
③抽取项目的粒度大,系统与服务之间解耦问题。

  • 微服务架构
     

优点:
①微服务拆分更细,有利于资源的重复利用,提高开发效率;
②可以更加精准针对某个服务做方案;
③微服务去中心化,使用restful轻量级通信协议比使用ESB企业服务总线更容易维护;
④适应市场更容易,产品迭代周期更短。
缺点:
①微服务量多,服务治理成本高,不利于系统维护;
②分布式系统架构且是微服务架构,技术成本高(容错,分布式事务等),对团队高挑战。

4.部署:

①每台主机上部署多个服务实例
②每个主机一个服务实例
③每台容器一个服务实例
④松耦合,可独立部署


三、学习docker技术

1.学习了解docker的相关概念

  • Docker:一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
    Docker 包括三个基本概念:
    镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。
    容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。
    仓库(Repository):仓库可看着一个代码控制中心,用来保存镜像。
  • Docker Compose:用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
  • Dockerfile:一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
  • Docker Machine:一个简化Docker安装的命令行工具,通过一个简单的命令行即可在相应的平台上安装Docker,比如VirtualBox、 Digital Ocean、Microsoft Azure。
  • Swarm:Docker 的集群管理工具。它将 Docker 主机池转变为单个虚拟 Docker 主机。 Docker Swarm 提供了标准的 Docker API,所有任何已经与 Docker 守护程序通信的工具都可以使用 Swarm 轻松地扩展到多个主机。
  • k8s:一个编排容器的工具,其实也是管理应用的全生命周期的一个工具,从创建应用,应用的部署,应用提供服务,扩容缩容应用,应用更新,都非常的方便,而且可以做到故障自愈,例如一个服务器挂了,可以自动将这个服务器上的服务调度到另外一个主机上进行运行,无需进行人工干涉。

2.搭建docker环境

1.Docker 安装

我是基于ubantu16.04系统进行安装的。
测试是否安装成功

sudo docker run hello-world


谢天谢地,一次安装成功!!

2.Docker 容器使用
2.1获取镜像
sudo docker pull ubuntu

2.2启动容器
2.2.1 运行命令查看当前系统的版本信息

2.2.2 创建文件夹test
mkdir test
cd test

2.3 对容器的开启状态进行修改查看

查看所有的容器命令如下:

sudo docker ps -a


使用 docker start 启动一个已停止的容器:

sudo docker start <容器 ID>

再次使用查看指令可知容器被启动:

2.4 后台运行

创建后台运行容器:

sudo docker run -d ubuntu:15.10 /bin/sh -c "while true; do echo ablack; sleep 1; done"


先查看当前容器状态

sudo docker ps -a


查看容器内的标准输出:

sudo docker logs d4b8ea78ef15

2.5 停止和重启容器

停止当前选中的容器

sudo docker stop d4b8ea78ef15


重新启动该容器并查看当前状态

sudo docker restart d4b8ea78ef15
sudo docker ps -a

2.6 进入容器

有两种指令可以进入容器

2.6.1 attach 命令
sudo docker attach <容器 ID>

2.6.1 exec 命令
sudo docker exec -it <容器 ID> /bin/bash

2.7 更新容器

查看可选操作

docker container update --help


选择memory-swap byte

sudo docker container update --memory-swap 1500M 110c76e37f54

出现错误

sudo docker stop 110c76e37f54

停止容器后再次尝试才成功

2.8 删除容器
sudo docker rm -f <容器 ID>

查看可知容器已被删除:

3.Docker 镜像部分

3.1查看本地主机上的镜像
sudo docker images


可以docker hub上找我们需要的镜像

sudo docker search httpd

3.2获取并删除镜像

获取镜像

sudo docker pull httpd


删除镜像(应先删除hello-world,不然会出错)

sudo docker rmi hello-world
sudo docker rm -f f990b0e4bb8b

3.3登录自己的docker账号并拖取镜像

登录并拖取镜像(之前看其他人博客说这一步非常慢,我这里建议可以开个VPN,秒拖取成功

sudo docker login
sudo docker tag ubuntu titin24/ubuntu
sudo docker push titin24/ubuntu


可以查看到自己的仓库里的镜像是否存在

3.4从docker仓库中获取镜像
sudo docker pull titin24/ubuntu

posted @ 2020-04-14 13:16  一天能饿好多次  阅读(196)  评论(0编辑  收藏  举报