(1)课程调查
进入大三下学期的后半段,大学阶段的理论课程应该已经修得八九不离十了,在这个时间点迎来系统综合实践这门课,作为培养计划的一门新课程,我们非常希望了解你们对于课程的希望,请写下你对这门课的认识和你理想中的这门课程是怎么样的。
答:对于这门课的第一感觉是硬件方面的实验,类似组原这样。但看这第一次实践就想到了软件工程实践,往事历历在目。因为理论学习差不多快修完了,所以这一门课就是综合所学知识,实践操作一遍一个应用开发的所有流程。
(2)了解微服务
第一次作业我们将接触一种新型的软件架构——微服务(也许部分同学已经有所了解)。大家要做的是学习并了解该技术,微服务是什么,有什么特点,相较于传统的软件架构,它有什么优缺点,它是怎样部署的。
微服务是什么
维基百科中这样定义:微服务的概念最早是在 2014 年由 Martin Fowler 和 James Lewis 共同提出,他们定义了微服务是由单一应用程序构成的小服务,拥有自己的进程与轻量化处理,服务依业务功能设计,以全自动的方式部署,与其他服务使用 HTTP API 通讯。同时,服务会使用最小规模的集中管理 (例如 Docker)技术,服务可以用不同的编程语言与数据库等。
微服务是一个新兴的软件架构,就是把一个大型的单个应用程序和服务拆分为数十个的支持微服务。一个微服务的策略可以让工作变得更为简便,它可扩展单个组件而不是整个的应用程序堆栈,从而满足服务等级协议。
有什么特点
1、通过分解百巨大单体式应用为多个服务方法解决了复杂性问题,每个微服务相对较小
2、每个单体应用度不局限于固定的技术栈,开发者可以自由选择开发技术,提供API服务。
3、每个微服务独立的开发,部署
4、单一职责答功能,每个服务都很简单,只关注于一个业务功能
5、易于规模化开发版,多个开发团队可以并行开发,每个团队负责一项服务
6、改善故障隔离权。一个服务宕机不会影响其他的服务
有什么优点
1、每个服务独立存在,所以可以单独部署,不用每次发布某个来功能都经历一次全服务发布。
2、遵循单一功能原则,服务之间可以通过RESTFUL或者RPC调用,功能解藕
3、“细粒度” 的高可源扩展性,每个服务都可以单独扩展,单独负载均衡
4、去中心化,尽可能地实现 “自服务”
5、有利于简化单独的开发测试以及部署,对开发团队友好
有什么缺点
1、服务的内可用性和维护性高度依赖于服务治理,如果治容理得不好将会是灾难
2、某些服务可能造成性能瓶颈,某些服务的宕机可能导致很多服务受影响
3、服务配置繁琐
怎样部署
1、一台主机部署多服务实例
2、每个主机一个服务实例
3、每台容器一个服务实例
4、松耦合,可独立部署
(3)学习docker技术
相关概念
docker:Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
docker compose:定义和运行多容器Docker应用程序的工具。
Dockerfile:一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
docker machine:在虚拟主机上安装Docker的工具,并可以使用docker-machine命令来管理主机。
Swarm:Docker的集群管理工具。
k8s:开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等
Ubuntu下安装docker
更新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"
安装最新版本的 Docker Engine-Community
$ sudo apt-get install docker-ce
容器使用
如果我们本地没有 ubuntu 镜像,我们可以使用 docker pull 命令来载入 ubuntu 镜像:
$ docker pull ubuntu
启动容器:
$ docker run -it ubuntu /bin/bash
参数说明:
-i: 交互式操作。
-t: 终端。
/bin/bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 /bin/bash。
查看所有的容器命令如下:
$ docker ps -a
停止/启动一个容器
$ docker stop <容器 ID>
$ docker restart <容器 ID>
进入一个容器:
$ docker attach <容器 ID>
删除容器:
$ docker rm -f <容器 ID>
容器查询:
$ docker inspect <容器ID>
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· DeepSeek智能编程
· 精选4款基于.NET开源、功能强大的通讯调试工具
· [翻译] 为什么 Tracebit 用 C# 开发
· 腾讯ima接入deepseek-r1,借用别人脑子用用成真了~
· DeepSeek崛起:程序员“饭碗”被抢,还是职业进化新起点?