关注留言点赞,带你了解最流行的软件开发知识与最新科技行业趋势。
我的粉丝们,祝愿你:兔年大吉大利,兔年顺顺利利,兔年快快乐乐,兔气十足十足,兔年富富满堂,兔年财源广进,兔年步步高升,兔年梦想成真!
文章比较了软件工程师、DevOps 工程师、站点可靠性工程师和云工程师的角色之间的区别。
过去十年软件工程的发展导致了众多工作角色的出现。那么,软件工程师、DevOps 工程师、站点可靠性工程师和云工程师彼此之间有何不同?在本文中,我们深入比较这些角色及其功能之间的区别。
图片来源
介绍
随着 IT 领域多年来的发展,出现了不同的工作角色,导致人们对站点可靠性工程师、软件工程师、云工程师和 DevOps 工程师之间的区别感到困惑。对于某些人来说,它们看起来都相似,但实际上它们有些不同。所有这些术语背后的主要思想是弥合开发和运营团队之间的差距。尽管这些角色是相关的,但使它们不同的是角色的范围。
什么是软件工程?
软件工程师的传统角色是将工程原理应用于软件开发。这包括使用编程语言创建、分析和修改现有软件以及设计和测试用户应用程序。从事软件工程师工作的人通常拥有科学或软件工程学士学位,并且具有计算机系统和语言(如 Python、C、Go、JavaScript 等)方面的经验。这就是软件工程师典型的一天:
- 分析用户需求。
- 根据用户需求进行编码。
- 执行维护任务并将应用程序与现有系统集成。
- 在实施新技术之前对新技术进行概念验证 (POC)。
- 执行和制定项目计划。
因此,在较高层次上,软件工程师的角色是构建应用程序、开发代码并制定流程来为客户创建解决方案。
现在您了解什么是软件工程师以及他们的角色是什么。在下一节中,让我们尝试了解软件工程师与 DevOps 工程师之间的区别。
软件工程师与 DevOps
过去,软件工程师和运营部门有很多争论。软件工程师将他们的代码传递给系统管理员,系统管理员有责任保持该代码在生产环境中运行。软件工程师对操作实践知之甚少,系统管理员对代码库知之甚少。软件工程师关心的是运输代码,而系统管理员关心的是可靠性。一方面,软件工程师希望加快步伐以更快地推出他们的功能。另一方面,系统管理员希望放慢速度以保持可靠性。这种错位常常导致组织内部紧张。
DevOps 应运而生,这是一套实践和文化,旨在打破软件工程师、系统管理员和组织其他部门之间的这些障碍。DevOps 由 Dev 和 Ops 两个词组成,即 development 和 operations,是让单个团队管理整个应用程序开发生命周期的实践,即开发、测试、部署、监控和运营。他们通过使用持续集成和持续部署 (CI/CD) 频繁发布小的更改来实现这一目标。
DevOps 分为五个主要领域:
- 减少组织孤岛:通过打破团队间的障碍,我们可以提高协作和吞吐量。
- 接受失败为常态:计算机本质上是不可靠的,所以我们不能期待完美,当我们将人类引入系统时,我们可以期待更多的不完美。
- 实施渐进式更改:不仅小的增量更改更容易审查,而且如果渐进式更改在生产中引入错误,它可以让我们减少平均恢复时间并使回滚变得简单。
- 利用工具和自动化:通过尽可能自动化来减少手动工作。
- 衡量一切:衡量是成功的关键衡量标准,如果没有办法衡量我们的前四个支柱是否成功,我们就无法知道它们是否成功。
DevOps 与 SRE
如果我们将 DevOps 视为一种哲学,那么站点可靠性工程 (SRE) 就是实现该哲学的一种规范方法。因此,如果 DevOps 是编程语言中的接口,那么 SRE 就是实现 DevOps 的具体类。在 DevOps 中,当我们谈论消除组织孤岛时,SRE 与开发人员共享生产所有权。SRE 使用与 DevOps 相同的工具来确保每个人都具有相同的视图和准确的生产方法。SRE 在接受事件和失败时有一个无可指责的事后分析,这确保了生产中发生的失败不必以同样的方式发生不止一次。SRE 通过编码允许多少系统超出规范的错误预算概念来正常接受故障。SRE 在渐变方面遵循金丝雀发布的理念,在它被转移到所有用户之前,版本只改变了一小部分。在工具和自动化方面,主要思想是尽可能消除手工工作。为了衡量一切,SRE 衡量系统的健康和可靠性。
作为 SRE,您必须具有强大的编码背景,但您应该具备 Linux、内核、网络和计算机科学方面的基础知识。
总而言之,SRE 和 DevOps 不是两种相互竞争的方法,而是旨在打破组织障碍以交付更好更快的软件的亲密朋友。他们都打算保持应用程序正常运行,以免用户受到影响。一方面,SRE 更适用于生产环境(因为它是软件工程和系统管理员的结合)。相比之下,DevOps 更适用于非生产环境(有时在生产环境中)。他们的主要任务是保持环境正常运行并尽可能自动化。
DevOps 或 SRE 需要哪些技能?
这些是公司在招聘 DevOps 或 SRE 时正在寻找的一些技术技能。
- 操作系统基础:这主要包括 Linux,因为大多数服务器市场都由 Linux 主导(只有少数公司在生产环境中使用 Windows 作为服务器)。
- 编程技能:这是您想要尽可能自动化的必备技能之一,而实现这一目标的唯一方法是使用编程语言。大多数工程师使用 Python 或 Shell 进行自动化,但在速度是关键的情况下,GO 语言是最终选择。
- 网络知识:由于大多数公司都迁移到云端,而且大部分繁重的工作都是由云提供商完成的,因此您应该具备基本的网络知识。
- 云知识:如前所述,随着大多数公司迁移到云,您应该熟悉至少一种云提供商,如 AWS、GCP 或 Azure。
- 标准工具:这是特定于工作的,但根据当前的行业趋势,您应该熟悉所有现代 DevOps 工具,如 GIT、Jenkins、Docker、Kubernetes、Terraform 等等。如前所述,这是特定于工作的,取决于当前的项目要求和范围。
因此,在现代背景下,SRE/DevOps 工程师是一名专注于基础设施和运营的软件工程师。他们负责运营任务并使其自动化,而在过去,这些任务通常由运营团队负责,通常是手动完成。
云端工程师
SRE 和 DevOps 是标准实践,而云工程师的角色是特定于云的,例如 AWS、谷歌云、Azure 等。云工程师的角色是交付和优化在云中运行的 IT 服务和工作负载。在您的组织中使用云的优势是:
- 成本:随着公共云提供商数量的增加和激烈的竞争,组织从中受益,因为所有云提供商都试图削减其产品价格以进行竞争。
- 维护:此外,使用云的公司无需担心维护昂贵的现场网络或系统架构。相反,他们可以与云服务提供商合作以获得对所有服务器和网络需求的支持。
- 可扩展性:使用云还有其他优势,比如获得无限的存储和处理能力;但显然,它会产生成本。
云工程师角色可以特定于架构(设计云解决方案)、管理(确保系统始终启动并运行)或开发(编码以自动化云资源)。云工程师的一些职责如下:
- 将本地应用程序迁移到云端
- 配置资源和组件,如安全、数据库、服务器等。
- 在云中部署应用程序。
- 监控云中的应用程序。
云工程师的类型
云工程师主要分为三种类型:
- 解决方案架构师:解决方案架构师的角色负责将组织应用程序迁移到云端。他们负责云应用程序的设计和部署以及成本优化。
- 云开发人员:云开发人员负责在云中开发云原生。他们负责在云中开发、部署和调试应用程序。
- SysOps 工程师:SysOps 工程师的角色类似于系统管理员,他们负责在云端部署和维护应用程序。
云工程师需要在理想情况下结合 SRE/DevOps/软件工程师,但专注于云服务。但在现实中,云领域仍然存在技能短缺。云工程师专注于一个领域,他们要么是优秀的开发人员,要么非常了解云服务。由于这种障碍和技能短缺,一些公司拒绝迁移到云端,仍然有工作负载在本地数据中心运行。填补这一空白的唯一方法是公司对员工进行全方位的培训。云工程师需要掌握编程技能,反之亦然。
总结
无论您在组织中采取何种做法,主要思想都是打破孤岛,增加协作和透明度。您遵循的任何实践都需要找到一种创新的方法来开发更好、更可靠的软件。随着 IT 领域的进步,这些实践将继续发展,新的角色将诞生。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.