(1)课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
认识:上理论课时感觉是比较偏硬件的课,但是第一天看见博客园的二维码时想到了软工,打开教程看见Linux,内心百感交集
理想:因为和上课之前的想法偏差好大,所以没有什么特别的理想。(偷偷许愿希望过程顺利一点)
(2)了解微服务
第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
-
微服务是什么:
微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议 -
有什么特点:
针对特定服务发布,影响小,风险小,成本低
频繁发布版本,快速交付需求
低成本扩容,弹性伸缩,适应云环境
相较于传统的软件架构,它有什么优缺点:- 优点:
提升开发交流,每个服务足够内聚,足够小,代码容易理解;
服务独立测试、部署、升级、发布;
按需定制的DFX,资源利用率,每个服务可以各自进行x扩展和z扩展,而且,每个服务可以根据自己的需要部署到合适的硬件服务器上;
每个服务按需要选择HA的模式,选择接受服务的实例个数;
容易扩大开发团队,可以针对每个服务(service)组件开发团队;
提高容错性(fault isolation),一个服务的内存泄露并不会让整个系统瘫痪;新技术的应用,系统不会被长期限制在某个技术栈上; - 缺点:
没有银弹,微服务提高了系统的复杂度;
开发人员要处理分布式系统的复杂性;
服务之间的分布式通信问题;服务的注册与发现问题;
服务之间的分布式事务问题;数据隔离再来的报表处理问题;
服务之间的分布式一致性问题;
服务管理的复杂性,服务的编排;
不同服务实例的管理。
- 优点:
-
它是怎样部署的:
CI/CD和自动化(分布式系统几乎不可能通过人工手动发布)
虚拟化技术(要保证微服务运行环境隔离,目前行业主流的是使用 Docker 容器)
日志聚合,全链路监控(高度可观察和分析诊断问题)
(3)学习docker技术
docker作为微服务的一种十分典型的代表技术,我们要做的是:
学习了解docker的相关概念(容器、镜像等),了解docker、docker compose、Dockerfile、docker machine、Swarm、k8s是什么,是做什么用的,心中有概念即可;
搭建你自己的docker环境,系统环境不限(主流的有Ubuntu/CentOS/Debian/Windows/MacOS等),完成docker的基本入门,包括但不限于:
安装过程太痛了,重装了次虚拟机。不过重装后的安装特别顺利。
容器的创建与退出:
docker run :创建一个新的容器并运行一个命令(或docker create :创建一个新的容器但不启动它)
查询所有容器:
docker ps : 列出容器(-a :显示所有的容器,包括未运行的。)
查询单个容器:
docker inspect : 获取容器/镜像的元数据。
停止容器:
docker stop :停止一个运行中的容器
重启容器:
docker restart :重启容器(docker start :启动一个或多个已经被停止的容器)
删除容器:
docker rm :删除一个或多个容器。
搜索镜像:
docker search : 从Docker Hub查找镜像
拉取镜像:
docker pull : 从镜像仓库中拉取或者更新指定镜像(要记得换阿里源,不然时间白白浪费)
删除镜像:
docker rmi : 删除本地一个或多少镜像。
查询镜像:
docker images:列出本地实例。
上传镜像:
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/wawoo/test:[镜像版本号]
docker push registry.cn-hangzhou.aliyuncs.com/wawoo/test:[镜像版本号]